common argv handling

This commit is contained in:
Jeff Carr 2025-09-17 01:08:30 -05:00
parent ae2cbf1886
commit ce0fd10064
6 changed files with 77 additions and 38 deletions

12
argv.go
View File

@ -6,6 +6,7 @@ package main
import ( import (
"fmt" "fmt"
"os" "os"
"strings"
) )
/* /*
@ -151,7 +152,12 @@ forge -- a tool to manage lots of git repos. forge includes a GUI and TUI.
// handles shell autocomplete // 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] { switch argv[0] {
case "checkout": case "checkout":
fmt.Println("devel master user") fmt.Println("devel master user")
@ -214,6 +220,6 @@ func ifBlank(arg string) bool {
return false return false
} }
func (a args) DoAutoComplete(argv []string) { func (a args) DoAutoComplete(arg0 string, arg1 string, argv []string) {
DoAutoComplete(argv) DoAutoComplete(arg0, arg1, argv)
} }

View File

@ -31,12 +31,7 @@ func doCommit() error {
okExit("") okExit("")
} }
pwd, _ := os.Getwd() repo := findCurrentPwdRepoOrDie()
repo := me.forge.Repos.FindByFullPath(pwd)
if repo == nil {
log.Info("todo: forge doesn't know how to work here yet")
okExit("")
}
if !repo.CheckDirty() { if !repo.CheckDirty() {
okExit(log.Sprintf("this repo %s is not dirty.\n\n--all # commit all changes in all repos", repo.GetFullPath())) okExit(log.Sprintf("this repo %s is not dirty.\n\n--all # commit all changes in all repos", repo.GetFullPath()))

View File

@ -32,7 +32,7 @@ func doMergeDevel() (*gitpb.Repos, error) {
found := findMergeToDevel() found := findMergeToDevel()
for repo := range found.IterAll() { for repo := range found.IterAll() {
if repo.CheckDirty() { if repo.CheckDirty() {
log.Info("repo is dirty", repo.GetGoPath()) log.Info("repo is dirty", repo.GetFullPath())
continue continue
} }
log.Infof("%s starting git merge\n", repo.FullPath) log.Infof("%s starting git merge\n", repo.FullPath)
@ -59,6 +59,32 @@ func doMergeDevel() (*gitpb.Repos, error) {
return done, err 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) { func doMergeMaster() (*gitpb.Repos, error) {
var err error var err error
setForgeMode(forgepb.ForgeMode_MASTER) setForgeMode(forgepb.ForgeMode_MASTER)

View File

@ -24,14 +24,20 @@ func FindRepoByFullPath(wd string) *gitpb.Repo {
return nil return nil
} }
func doTag() error { func findCurrentPwdRepoOrDie() *gitpb.Repo {
wd, _ := os.Getwd() wd, err := os.Getwd()
if argv.Tag.List != nil {
repo := FindRepoByFullPath(wd) repo := FindRepoByFullPath(wd)
if repo == nil { if repo == nil {
log.Info("Could not find repo:", wd) log.Info("Could not find repo:", wd)
return nil badExit(err)
} }
return repo
}
func doTag() error {
wd, _ := os.Getwd()
if argv.Tag.List != nil {
repo := findCurrentPwdRepoOrDie()
tagTablePB := makeTagTablePB(repo.Tags) tagTablePB := makeTagTablePB(repo.Tags)
// tbox := win.Bottom.Box().SetProgName("TBOX") // tbox := win.Bottom.Box().SetProgName("TBOX")

View File

@ -28,6 +28,6 @@ func badExit(err error) {
} }
func badRepoExit(repo *gitpb.Repo, 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) os.Exit(-1)
} }

12
main.go
View File

@ -7,7 +7,6 @@ package main
import ( import (
"embed" "embed"
"fmt"
"strings" "strings"
"time" "time"
@ -45,7 +44,7 @@ func getVersion(repo *gitpb.Repo, name string) string {
func main() { func main() {
me = new(mainType) me = new(mainType)
prep.Bash(ARGNAME, argv.DoAutoComplete) // this line should be: prep.Bash(argv) prep.Bash2(ARGNAME, argv.DoAutoComplete) // this line should be: prep.Bash(argv)
me.myGui = prep.Gui() // prepares the GUI package for go-args me.myGui = prep.Gui() // prepares the GUI package for go-args
me.pp = arg.MustParse(&argv) me.pp = arg.MustParse(&argv)
@ -158,6 +157,8 @@ func main() {
} }
if argv.Merge != nil { if argv.Merge != nil {
if argv.All == true {
if argv.Merge.Devel != nil { if argv.Merge.Devel != nil {
start := time.Now() start := time.Now()
repos, err := doMergeDevel() repos, err := doMergeDevel()
@ -179,7 +180,12 @@ func main() {
log.Printf("Merged %d master branches in %s\n", repos.Len(), shell.FormatDuration(dur)) log.Printf("Merged %d master branches in %s\n", repos.Len(), shell.FormatDuration(dur))
okExit("") 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 { if argv.Pull != nil {