diff options
| author | Jeff Carr <[email protected]> | 2025-09-17 01:08:30 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-09-17 01:08:30 -0500 |
| commit | ce0fd10064440ebce0fe4941bb15cf4beb14540a (patch) | |
| tree | 738c8d52819fb7158762480a68962efd0312e6cd | |
| parent | ae2cbf1886cb6bd71647c7d6ce1ed55f016c5618 (diff) | |
common argv handling
| -rw-r--r-- | argv.go | 12 | ||||
| -rw-r--r-- | doCommit.go | 7 | ||||
| -rw-r--r-- | doMerge.go | 28 | ||||
| -rw-r--r-- | doTag.go | 16 | ||||
| -rw-r--r-- | exit.go | 2 | ||||
| -rw-r--r-- | main.go | 48 |
6 files changed, 76 insertions, 37 deletions
@@ -6,6 +6,7 @@ package main import ( "fmt" "os" + "strings" ) /* @@ -151,7 +152,12 @@ forge -- a tool to manage lots of git repos. forge includes a GUI and TUI. // handles shell autocomplete // -func DoAutoComplete(argv []string) { +func DoAutoComplete(arg0 string, arg1 string, argv []string) { + if strings.HasPrefix(argv[0], "-") { + fmt.Fprintf(os.Stderr, "stuff --gui --all '%s' '%s' %v\n", arg0, arg1, argv) + fmt.Println("--all --gui") + return + } switch argv[0] { case "checkout": fmt.Println("devel master user") @@ -214,6 +220,6 @@ func ifBlank(arg string) bool { return false } -func (a args) DoAutoComplete(argv []string) { - DoAutoComplete(argv) +func (a args) DoAutoComplete(arg0 string, arg1 string, argv []string) { + DoAutoComplete(arg0, arg1, argv) } diff --git a/doCommit.go b/doCommit.go index d462e4e..55d2af8 100644 --- a/doCommit.go +++ b/doCommit.go @@ -31,12 +31,7 @@ func doCommit() error { okExit("") } - pwd, _ := os.Getwd() - repo := me.forge.Repos.FindByFullPath(pwd) - if repo == nil { - log.Info("todo: forge doesn't know how to work here yet") - okExit("") - } + repo := findCurrentPwdRepoOrDie() if !repo.CheckDirty() { okExit(log.Sprintf("this repo %s is not dirty.\n\n--all # commit all changes in all repos", repo.GetFullPath())) @@ -32,7 +32,7 @@ func doMergeDevel() (*gitpb.Repos, error) { found := findMergeToDevel() for repo := range found.IterAll() { if repo.CheckDirty() { - log.Info("repo is dirty", repo.GetGoPath()) + log.Info("repo is dirty", repo.GetFullPath()) continue } log.Infof("%s starting git merge\n", repo.FullPath) @@ -59,6 +59,32 @@ func doMergeDevel() (*gitpb.Repos, error) { return done, err } +func repoMergeToDevel(repo *gitpb.Repo) error { + if repo.CheckDirty() { + return log.Errorf("can not merge. repo is dirty") + } + log.Infof("%s starting git merge\n", repo.FullPath) + if repo.CheckoutDevel() { + log.Info("checkout devel failed", repo.GetGoPath()) + err := log.Errorf("checkout devel failed") + badExit(err) + } + // hash differences when merging user into devel branch + out := repo.GetBranchDifferences(repo.GetDevelBranchName(), repo.GetUserBranchName()) + for i, hash := range out { + log.Info("MERGE HASH FROM USER TO DEVEL", i, hash) + } + if _, err := repo.MergeToDevel(); err != nil { + log.Info("merge from user failed", repo.GetGoPath(), err) + // err := log.Errorf("merge from user failed") + // log.Info(strings.Join(r.Stdout, "\n")) + // log.Info(strings.Join(r.Stderr, "\n")) + badExit(err) + } + config.SetChanged("repos", true) + return nil +} + func doMergeMaster() (*gitpb.Repos, error) { var err error setForgeMode(forgepb.ForgeMode_MASTER) @@ -24,14 +24,20 @@ func FindRepoByFullPath(wd string) *gitpb.Repo { return nil } +func findCurrentPwdRepoOrDie() *gitpb.Repo { + wd, err := os.Getwd() + repo := FindRepoByFullPath(wd) + if repo == nil { + log.Info("Could not find repo:", wd) + badExit(err) + } + return repo +} + func doTag() error { wd, _ := os.Getwd() if argv.Tag.List != nil { - repo := FindRepoByFullPath(wd) - if repo == nil { - log.Info("Could not find repo:", wd) - return nil - } + repo := findCurrentPwdRepoOrDie() tagTablePB := makeTagTablePB(repo.Tags) // tbox := win.Bottom.Box().SetProgName("TBOX") @@ -28,6 +28,6 @@ func badExit(err error) { } func badRepoExit(repo *gitpb.Repo, err error) { - log.Printf("forge failed on %s with %v\n", repo.GetNamespace(), err) + log.Printf("%s FAILED: %v\n", repo.GetNamespace(), err) os.Exit(-1) } @@ -7,7 +7,6 @@ package main import ( "embed" - "fmt" "strings" "time" @@ -45,8 +44,8 @@ func getVersion(repo *gitpb.Repo, name string) string { func main() { me = new(mainType) - prep.Bash(ARGNAME, argv.DoAutoComplete) // this line should be: prep.Bash(argv) - me.myGui = prep.Gui() // prepares the GUI package for go-args + prep.Bash2(ARGNAME, argv.DoAutoComplete) // this line should be: prep.Bash(argv) + me.myGui = prep.Gui() // prepares the GUI package for go-args me.pp = arg.MustParse(&argv) me.forge = forgepb.Init() @@ -158,28 +157,35 @@ func main() { } if argv.Merge != nil { - if argv.Merge.Devel != nil { - start := time.Now() - repos, err := doMergeDevel() - dur := time.Since(start) - if err != nil { - badExit(err) + if argv.All == true { + + if argv.Merge.Devel != nil { + start := time.Now() + repos, err := doMergeDevel() + dur := time.Since(start) + if err != nil { + badExit(err) + } + log.Printf("Merged %d devel branches in %s\n", repos.Len(), shell.FormatDuration(dur)) + okExit("") } - log.Printf("Merged %d devel branches in %s\n", repos.Len(), shell.FormatDuration(dur)) - okExit("") - } - if argv.Merge.Master != nil { - start := time.Now() - repos, err := doMergeMaster() - dur := time.Since(start) - if err != nil { - badExit(err) + if argv.Merge.Master != nil { + start := time.Now() + repos, err := doMergeMaster() + dur := time.Since(start) + if err != nil { + badExit(err) + } + log.Printf("Merged %d master branches in %s\n", repos.Len(), shell.FormatDuration(dur)) + okExit("") } - log.Printf("Merged %d master branches in %s\n", repos.Len(), shell.FormatDuration(dur)) - okExit("") } - badExit(fmt.Errorf("You must choose which branch to merge to (devel or master)")) + repo := findCurrentPwdRepoOrDie() + if err := repoMergeToDevel(repo); err != nil { + badRepoExit(repo, err) + } + okExit("") } if argv.Pull != nil { |
