refactor(work): add diverged branch handling and remove debug logging

Add pull-and-retry logic for diverged branches in dev_work command,
matching the behaviour already present in dev_push. Also removes the
debug logging added during non-fast-forward detection development.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Snider 2026-01-30 08:01:52 +00:00
parent 82cc620f9d
commit a4f6e9c224
2 changed files with 32 additions and 4 deletions

View file

@ -141,9 +141,7 @@ func runPush(registryPath string, force bool) error {
succeeded++ succeeded++
} else { } else {
// Check if this is a non-fast-forward error (diverged branch) // Check if this is a non-fast-forward error (diverged branch)
isNFF := git.IsNonFastForward(r.Error) if git.IsNonFastForward(r.Error) {
fmt.Fprintf(os.Stderr, "[DEBUG] IsNonFastForward=%v, err=%q\n", isNFF, r.Error)
if isNFF {
fmt.Printf(" %s %s: %s\n", warningStyle.Render("!"), r.Name, i18n.T("cmd.dev.push.diverged")) fmt.Printf(" %s %s: %s\n", warningStyle.Render("!"), r.Name, i18n.T("cmd.dev.push.diverged"))
divergedRepos = append(divergedRepos, r) divergedRepos = append(divergedRepos, r)
} else { } else {

View file

@ -186,11 +186,41 @@ func runWork(registryPath string, statusOnly, autoCommit bool) error {
results := git.PushMultiple(ctx, pushPaths, names) results := git.PushMultiple(ctx, pushPaths, names)
var divergedRepos []git.PushResult
for _, r := range results { for _, r := range results {
if r.Success { if r.Success {
fmt.Printf(" %s %s\n", successStyle.Render("v"), r.Name) fmt.Printf(" %s %s\n", successStyle.Render("v"), r.Name)
} else { } else {
fmt.Printf(" %s %s: %s\n", errorStyle.Render("x"), r.Name, r.Error) // Check if this is a non-fast-forward error (diverged branch)
if git.IsNonFastForward(r.Error) {
fmt.Printf(" %s %s: %s\n", warningStyle.Render("!"), r.Name, i18n.T("cmd.dev.push.diverged"))
divergedRepos = append(divergedRepos, r)
} else {
fmt.Printf(" %s %s: %s\n", errorStyle.Render("x"), r.Name, r.Error)
}
}
}
// Handle diverged repos - offer to pull and retry
if len(divergedRepos) > 0 {
fmt.Println()
fmt.Printf("%s\n", i18n.T("cmd.dev.push.diverged_help"))
if shared.Confirm(i18n.T("cmd.dev.push.pull_and_retry")) {
fmt.Println()
for _, r := range divergedRepos {
fmt.Printf(" %s %s...\n", dimStyle.Render("↓"), r.Name)
if err := git.Pull(ctx, r.Path); err != nil {
fmt.Printf(" %s %s: %s\n", errorStyle.Render("x"), r.Name, err)
continue
}
fmt.Printf(" %s %s...\n", dimStyle.Render("↑"), r.Name)
if err := git.Push(ctx, r.Path); err != nil {
fmt.Printf(" %s %s: %s\n", errorStyle.Render("x"), r.Name, err)
continue
}
fmt.Printf(" %s %s\n", successStyle.Render("v"), r.Name)
}
} }
} }