summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-09-17 01:08:30 -0500
committerJeff Carr <[email protected]>2025-09-17 01:08:30 -0500
commitce0fd10064440ebce0fe4941bb15cf4beb14540a (patch)
tree738c8d52819fb7158762480a68962efd0312e6cd
parentae2cbf1886cb6bd71647c7d6ce1ed55f016c5618 (diff)
common argv handling
-rw-r--r--argv.go12
-rw-r--r--doCommit.go7
-rw-r--r--doMerge.go28
-rw-r--r--doTag.go16
-rw-r--r--exit.go2
-rw-r--r--main.go48
6 files changed, 76 insertions, 37 deletions
diff --git a/argv.go b/argv.go
index 6f34737..ac5419c 100644
--- a/argv.go
+++ b/argv.go
@@ -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()))
diff --git a/doMerge.go b/doMerge.go
index 4ec018c..7831f52 100644
--- a/doMerge.go
+++ b/doMerge.go
@@ -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)
diff --git a/doTag.go b/doTag.go
index 8d0692a..161a581 100644
--- a/doTag.go
+++ b/doTag.go
@@ -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")
diff --git a/exit.go b/exit.go
index 1155858..d317d3b 100644
--- a/exit.go
+++ b/exit.go
@@ -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)
}
diff --git a/main.go b/main.go
index 222ef20..180cfb5 100644
--- a/main.go
+++ b/main.go
@@ -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 {