package main import ( "fmt" "os" "go.wit.com/lib/protobuf/gitpb" "go.wit.com/log" ) // ah yes, COBOL. what a throwback. for those that know // then you know exactly what is in this file. For those that don't, here it is: // All this does is output human readable text formatted to be viewable on // a console with a fixed with font. AKA: a typerwriter. Which is exactly // what COBOL did in the 1970's (60s? notsure) And the 80s. // So, you want to dump out stuff on the console. Let's see. Something like /* forge --favorites go.wit.com/apps/myapp v0.2.0 (installed) go.wit.com/lib/somethingfun v0.0.7 (not downloaded) */ // anyway, you get the idea. This is also called COBOL because it does on // thing and truncates every line output to the columns you see with stty -a // my monitor is huge, so it's not going to work at 80x24. 160x48 is better // actually, I'd predict some of these will probably end up 240 wide // long live good eyesight and 4K monitors! func doCobol() { log.DaemonMode(true) log.Info(standardStart5("gopath", "cur name", "master", "user", "repo type")) repos := me.found.SortByGoPath() for repos.Scan() { repo := repos.Next() verifyPrint(repo) } } func standardStart5(arg1, arg2, arg3, arg4, arg5 string) string { len1 := 40 len2 := 12 len3 := 12 len4 := 16 len5 := 8 var s string if len(arg1) > len1 { arg1 = arg1[:len1] } s = "%-" + fmt.Sprintf("%d", len1) + "s " if len(arg2) > len2 { arg2 = arg2[:len2] } s += "%-" + fmt.Sprintf("%d", len2) + "s " if len(arg3) > len3 { arg3 = arg3[:len3] } s += "%-" + fmt.Sprintf("%d", len3) + "s " if len(arg4) > len4 { arg4 = arg4[:len4] } s += "%-" + fmt.Sprintf("%d", len4) + "s " if len(arg5) > len5 { arg5 = arg5[:len5] } s += "%-" + fmt.Sprintf("%d", len5) + "s" return fmt.Sprintf(s, arg1, arg2, arg3, arg4, arg5) } func verifyPrint(repo *gitpb.Repo) { var end string if repo.CheckDirty() { end += "(dirty) " } s := make(map[string]string) if !verify(repo, s) { log.Info("going to delete", repo.GoPath) if argv.Fix { me.forge.Repos.DeleteByGoPath(repo.GetGoPath()) me.forge.Repos.ConfigSave() } else { log.Info("need argv --real to delete", repo.GoPath) os.Exit(0) } } if me.forge.Config.IsReadOnly(repo.GoPath) { if repo.ReadOnly { } else { log.Info("readonly flag on repo is wrong", repo.GoPath) } } var mhort string = s["mver"] var uhort string = s["uver"] var cname string = s["cname"] // start := fmt.Sprintf("%-40s %-12s %-12s %-12s %-8s", s["gopath"], cname, mhort, uhort, s["rtype"]) start := standardStart5(s["gopath"], cname, mhort, uhort, s["rtype"]) if me.forge.Config.IsReadOnly(repo.GoPath) { end += "(readonly) " } log.Info(start, end) } func verify(repo *gitpb.Repo, s map[string]string) bool { if !repo.IsValid() { // return false } s["gopath"] = repo.GetGoPath() s["rtype"] = repo.RepoType() s["mname"] = repo.GetMasterBranchName() if s["mname"] == "" { log.Info("verify() no master branch name", repo.GoPath) s["mver"] = repo.GetMasterVersion() return false } // only verify the master branch name with read-only repos if me.forge.Config.IsReadOnly(repo.GoPath) { s["mver"] = repo.GetMasterVersion() return true } s["dname"] = repo.GetDevelBranchName() if s["dname"] == "" { log.Info("verify() no devel branch name", repo.GoPath) return false } s["uname"] = repo.GetUserBranchName() if s["uname"] == "" { log.Info("verify() no user branch name", repo.GoPath) return false } s["cname"] = repo.GetCurrentBranchName() s["mver"] = repo.GetMasterVersion() if s["mver"] == "" { log.Info("verify() no master branch name", repo.GoPath, repo.GetMasterBranchName()) return false } s["dver"] = repo.GetDevelVersion() if s["dver"] == "" { log.Info("verify() no devel branch name", repo.GoPath, repo.GetDevelBranchName()) return false } s["uver"] = repo.GetUserVersion() if s["uver"] == "" { log.Info("verify() no user branch name", repo.GoPath, repo.GetUserBranchName()) return false } s["cver"] = repo.GetCurrentBranchVersion() s["url"] = repo.URL return true }