package main import ( "embed" "os" "go.wit.com/lib/config" "go.wit.com/lib/debian" "go.wit.com/lib/gui/prep" "go.wit.com/lib/protobuf/zoopb" "go.wit.com/log" ) // sent via -ldflags var VERSION string var BUILDTIME string // used for shell auto completion var ARGNAME string = "mirrors" // todo: get this from $0 ? //go:embed resources/* var resources embed.FS func main() { me = new(mainType) me.sh = prep.Bash3(&argv) // add support for bash autocomplete with go-arg me.mirrorsDir = "/home/mirrors/wit" // read in protobuf file me.pb = zoopb.NewPackages() me.pb.Filename = "/home/mirrors/mirrors.wit.com.pb" if err := config.Load(me.pb); err != nil { if argv.Force { config.Save(me.pb) } else { me.sh.BadExit("no config found. use --force to create one", err) } } var s string var err error if argv.Incoming != nil { if s, err = doIncoming(); err != nil { } } if argv.Walk != nil { if s, err = doWalk(); err != nil { } } if argv.List != nil { footer := me.pb.PrintTable() log.Info("found so far:", footer) } if argv.Update != nil { if err = doDistro(); err != nil { me.sh.BadExit("boo", err) } me.sh.GoodExit("") } log.Printf("You have %d packages in %s\n", me.pb.Len(), me.mirrorsDir) if err != nil { me.sh.BadExit(s, err) } me.sh.GoodExit(s) } func doIncoming() (string, error) { return "", nil } func doWalk() (string, error) { os.Chdir(me.mirrorsDir) // 2. Scan pool directory for .deb files and gather info log.Printf("Scanning for .deb files in %s\n", poolDir) debInfos, err := scanDebs(poolDir, 35) if err != nil { log.Printf("Failed to scan .deb files: %v\n", err) me.sh.BadExit("scan pool scan dir", err) } for _, deb := range debInfos { newdeb := new(zoopb.Package) newdeb.Filename = deb.Filename newdeb.MD5SUM = deb.MD5Sum newdeb.SHA1 = deb.SHA1Sum newdeb.SHA256 = deb.SHA256Sum // log.Info("len(CONTROLDATA)", len(deb.ControlData)) // log.Sprintf("VAR='%s' VAL='%s'\n", varname, varvalue) // log.Info("%v", deb.ControlData) for varname, varvalue := range deb.ControlData { switch varname { case "Package": newdeb.Package = varvalue case "Version": newdeb.Version = varvalue case "Git-Tag-Date": log.Info("CONVERT THIS TO TIME", varvalue) case "Depends": newdeb.Depends = varvalue case "Build-Depends": newdeb.BuildDepends = varvalue case "Architecture": newdeb.Architecture = varvalue case "Packager": newdeb.Packager = varvalue case "Package-Build-Date": varvalue = "PackageBuildDate" case "URL": newdeb.URL = varvalue default: if ok, err := debian.SetString(newdeb, varname, varvalue); ok { continue } else if err != nil { log.Printf("%v VAR='%s' VAL='%s'\n", err, varname, varvalue) } // todo: add to protomap } } me.pb.AppendByFilename(newdeb) // arch := deb.ControlData["Architecture"] } footer := me.pb.PrintTable() log.Info("found so far:", footer) config.Save(me.pb) log.Info("len", me.pb.Len()) return "/home/mirrors/wit/ has been scanned for ne files", nil }