From 807049f6c7b319caa60a20f53221bcb81b1168d9 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Mon, 7 Jul 2025 23:07:12 -0500 Subject: [PATCH] add 'forge merge master' --- doFind.go | 10 +++++++++- doGui.go | 1 + doPull.go | 30 ++++++++++++++++++++++++++++++ main.go | 7 +++++++ 4 files changed, 47 insertions(+), 1 deletion(-) diff --git a/doFind.go b/doFind.go index a6d4720..8c4acea 100644 --- a/doFind.go +++ b/doFind.go @@ -167,10 +167,18 @@ func findReposWithPatches() *gitpb.Repos { continue } - // this is an old test to see if the current 'last tag' is accurate and should be removed + // ignore read-only repos for checks below here if me.forge.Config.IsReadOnly(repo.GetGoPath()) { continue } + + // show anything that differs between 'devel' & 'master' branches + if repo.GetDevelVersion() != repo.GetMasterVersion() { + found.AppendByGoPath(repo) + continue + } + + // this is an old test to see if the current 'last tag' is accurate and should be removed if repo.GetLastTag() != repo.GetMasterVersion() { found.AppendByGoPath(repo) repo.FindLastTag() diff --git a/doGui.go b/doGui.go index fc92115..380506c 100644 --- a/doGui.go +++ b/doGui.go @@ -273,6 +273,7 @@ func findMergeToDevel() *gitpb.Repos { log.Printf("devel branch check. %d total repos. (%d ok) (%d not on devel branch) (%s)\n", total, count, nope, shell.FormatDuration(time.Since(now))) return found } + func findMergeToMaster() *gitpb.Repos { found := new(gitpb.Repos) diff --git a/doPull.go b/doPull.go index 6e341b2..fe581cb 100644 --- a/doPull.go +++ b/doPull.go @@ -168,3 +168,33 @@ func doMergeDevel() (*gitpb.Repos, error) { } return done, err } + +func doMergeMaster() (*gitpb.Repos, error) { + var err error + done := gitpb.NewRepos() + found := findMergeToMaster() + for repo := range found.IterAll() { + if repo.CheckDirty() { + log.Info("repo is dirty", repo.GetGoPath()) + continue + } + + log.Info("Starting merge on", repo.GetGoPath()) + if repo.CheckoutMaster() { + log.Info("checkout devel failed", repo.GetGoPath()) + err = fmt.Errorf("checkout devel failed") + break + } + + if _, err := repo.MergeToMaster(); err != nil { + log.Info("merge from user failed", repo.GetGoPath(), err) + err = fmt.Errorf("merge from user failed") + // log.Info(strings.Join(r.Stdout, "\n")) + // log.Info(strings.Join(r.Stderr, "\n")) + break + } + + done.Append(repo) + } + return done, err +} diff --git a/main.go b/main.go index daa545d..22ec51a 100644 --- a/main.go +++ b/main.go @@ -146,6 +146,13 @@ func main() { } okExit("devel merge ok") } + + if argv.Merge.Master != nil { + if _, err := doMergeMaster(); err != nil { + badExit(err) + } + okExit("master merge ok") + } badExit(fmt.Errorf("merge what?")) }