From 7cade75da86c346cd39ee37e85c066347cdaf274 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sun, 15 Dec 2024 08:31:42 -0600 Subject: all sorts of updates. it didn't work before! --- main.go | 207 ++++++++++++++-------------------------------------------------- 1 file changed, 44 insertions(+), 163 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 0f0ee1a..2bc6ad2 100644 --- a/main.go +++ b/main.go @@ -1,9 +1,7 @@ package main import ( - "errors" "os" - "path/filepath" "go.wit.com/dev/alexflint/arg" "go.wit.com/lib/gui/shell" @@ -18,7 +16,8 @@ var BUILDTIME string var pp *arg.Parser var forge *forgepb.Forge -var argvRepo *gitpb.Repo + +var workingRepo *gitpb.Repo func main() { log.Info("go-clone version", VERSION, "built on", BUILDTIME) @@ -34,73 +33,51 @@ func main() { os.Exit(0) } - // load the ~/.config/forge/ config - // this lets you configure repos you have read/write access too + // this package helps scan git repos forge = forgepb.Init() - argvRepo = forge.Repos.FindByGoPath(argv.Repo) - if argvRepo == nil { - log.Info("yep, need to clone", argv.Repo) - } else { - log.Info("already have", argv.Repo) - if argv.Recursive { - clone() - recursiveClone() - } - autoWork() - build() - okExit(argv.Repo) - } - - // gui is in testing - // myGui := gui.New() - // myGui.Default() - - // run 'git pull' if argv --git-pull - if argv.Pull { - gitPull() - okExit("git pull") - } - - // remake all the go.sum & go.mod in every repo - // todo: make go.sum and go.mod git commit metadata - if argv.RedoGoMod { - // redoGoModAll() + var err error + // attempt to clone, returns *gitpb.Repo + workingRepo, err = clone(argv.Repo) + if err != nil { + badExit(err) } - - // this works sometimes if argv.Recursive { - clone() - recursiveClone() - autoWork() - build() - okExit("--recursive") + log.Info("STARTING RECURSIVE CLONE", workingRepo.GoPath) + if err := recursiveClone(workingRepo); err != nil { + badExit(err) + } } - - clone() autoWork() - if argv.Install { - if err := forge.Install(argvRepo, nil); err == nil { - okExit("install worked") - } else { + if argv.Build { + if err := build(); err != nil { badExit(err) } } - if argv.Build { - if err := forge.Build(argvRepo, nil); err == nil { - okExit("build worked") - argvRepo.RunEcho([]string{"ls", "-l"}) - } else { - argvRepo.RunEcho([]string{"ls", "-l"}) + if argv.Install { + // can only install binary or plugin go packages + if workingRepo.RepoType() == "binary" || workingRepo.RepoType() == "plugin" { + log.Info("install will probably fail", workingRepo.GoPath, "is", workingRepo.RepoType()) + } + if err := forge.Install(workingRepo, nil); err != nil { + log.Warn("INSTALL FAILED", workingRepo.GoPath, err) badExit(err) } } - okExit("skipping build of " + argv.Repo) + + if argv.Pull { + // run 'git pull' if argv --git-pull + gitPull() + } + okExit("") } func okExit(thing string) { - log.Info(thing, "ok") - log.Info("Finished clone on", argvRepo.GetGoPath(), "ok") + if thing != "" { + log.Info(thing, "ok") + } + log.Info("Finished clone on", workingRepo.GetGoPath(), "ok") + forge.ConfigSave() os.Exit(0) } @@ -110,56 +87,9 @@ func badExit(err error) { os.Exit(-1) } -func clone() { - // if the user defined a repo, attempt to download it now - if argv.Repo != "" { - os.Setenv("REPO_AUTO_CLONE", "true") - // pb, _ := forge.NewGoPath(argv.Repo) - check := forge.Repos.FindByGoPath(argv.Repo) - if check != nil { - return - } - pb, err := forge.Clone(argv.Repo) - if err != nil { - log.Info("clone() could not download err:", err) - badExit(err) - } - - if err := pb.ValidGoSum(); err != nil { - // update go.sum and go.mod - if err := pb.RunStrict([]string{"go-mod-clean"}); err != nil { - log.Info("") - log.Info("Do you have go-mod-clean? Otherwise:") - log.Info(" go install go.wit.com/apps/go-mod-clean@latest") - log.Info("") - badExit(err) - } - } - if err := pb.ValidGoSum(); err != nil { - log.Info("could not generate valid go.sum file") - badExit(err) - } - - // double check it actually downloaded - fullgitdir := filepath.Join(forge.GetGoSrc(), argv.Repo, ".git") - if !shell.IsDir(fullgitdir) { - log.Info("repo cloned failed", filepath.Join(forge.GetGoSrc(), argv.Repo)) - badExit(errors.New(fullgitdir + " was not created")) - } - build() - // exit unless other --argv options are set - if !(argv.Recursive || argv.Pull || argv.RedoGoMod) { - log.Info("repo cloned worked to", filepath.Join(forge.GetGoSrc(), argv.Repo)) - okExit(argv.Repo) - } - log.Info("onward and upward") - } -} - func gitPull() { log.Info("Total repositories:", forge.Repos.Len()) log.Info("Going to run git pull in each one. TODO: use rill here") - log.Sleep(1) pull := []string{"git", "pull"} var trycount, errcount int @@ -181,75 +111,26 @@ func gitPull() { log.Info("Total repositories:", forge.Repos.Len(), "Total attempted:", trycount, "Errors:", errcount) } -// really only does go.sum things -// so not 'really' recursive -// but that is because go.sum is supposed -// to have everything required in it -func recursiveClone() { - var good int - var bad int - // this works sometimes - if argv.Recursive { - check := forge.Repos.FindByGoPath(argv.Repo) - - log.Info("download deps for:", check.GoPath) - deps := check.GoDeps.SortByGoPath() - for deps.Scan() { - depRepo := deps.Next() - log.Info("download:", depRepo.GoPath) - _, err := forge.Clone(depRepo.GoPath) - if err != nil { - log.Info("recursiveClone() could not download", depRepo.GoPath) - log.Info("err:", err) - bad += 1 - } else { - log.Info("downloaded", depRepo.GoPath) - good += 1 - } - } - } - log.Info("got", good, "repos", "failed on", bad, "repos") -} - func build() error { - forge.RillRedoGoMod() - repos := forge.Repos.SortByGoPath() - for repos.Scan() { - repo := repos.Next() - log.Info("go.work repo (hopefully):", repo.GoPath, repo.FullPath, repo.RepoType()) - } - if argv.Install { - if err := forge.Install(argvRepo, nil); err == nil { - okExit("install worked") - } else { - badExit(err) - } - } - if argv.Build { - err := forge.Build(argvRepo, nil) - pwd, _ := os.Getwd() - if err == nil { - log.Info("this totally worked", pwd) - shell.RunEcho([]string{"ls", "-l"}) - log.Info("ran ls") - } else { - log.Info("this totally did not work", pwd) - shell.RunEcho([]string{"ls", "-l"}) - log.Info("ran ls") - } - return err - + err := forge.Build(workingRepo, nil) + pwd, _ := os.Getwd() + if err == nil { + log.Info("this totally worked", pwd) + shell.RunEcho([]string{"ls", "-l"}) + log.Info("ran ls") + } else { + log.Info("this totally did not work", pwd) + shell.RunEcho([]string{"ls", "-l"}) + log.Info("ran ls") + badExit(err) } - log.Info("skipping build") - return nil + return err } func autoWork() { // remake the go.work file if argv.AutoWork { log.Info("About to re-create", forge.GetGoSrc()+"/go.work") - log.Info("Sleep 3. original go.work saved as go.work.last (hit ctrl-c to cancel)") - log.Sleep(3) shell.PathRun(forge.GetGoSrc(), []string{"mv", "go.work", "go.work.last"}) forge.MakeGoWork() shell.PathRun(forge.GetGoSrc(), []string{"go", "work", "use"}) -- cgit v1.2.3