diff --git a/README.md b/README.md index d3869a0..94df70e 100644 --- a/README.md +++ b/README.md @@ -45,4 +45,5 @@ uv run pre-commit install - `flow rebase` — rebase the current branch onto the latest default branch - `flow push` — force-push the current branch (refused on the default branch) - `flow clean` — delete local branches whose PRs have been merged +- `flow prune` — prune remote-tracking branches that no longer exist on `origin` - `flow dirty` — show the stash list and all local branches diff --git a/main.go b/main.go index 4a044f1..3451548 100644 --- a/main.go +++ b/main.go @@ -30,7 +30,7 @@ func run(name string, args ...string) { func main() { if len(os.Args) < 2 { fmt.Fprintf(os.Stderr, "usage: flow [args]\n") - fmt.Fprintf(os.Stderr, "commands: branch, create, view, update, amend, merge, clean, rebase, push, dirty\n") + fmt.Fprintf(os.Stderr, "commands: branch, create, view, update, amend, merge, clean, rebase, push, prune, dirty\n") os.Exit(2) } @@ -45,6 +45,8 @@ func main() { cmdUpdate(os.Args[2:]) case "amend": cmdAmend(os.Args[2:]) + case "prune": + cmdPrune(os.Args[2:]) case "merge": cmdMerge(os.Args[2:]) case "clean": @@ -57,7 +59,7 @@ func main() { cmdDirty(os.Args[2:]) default: fmt.Fprintf(os.Stderr, "flow: unknown command %q\n", os.Args[1]) - fmt.Fprintf(os.Stderr, "commands: branch, create, view, update, amend, merge, clean, rebase, push, dirty\n") + fmt.Fprintf(os.Stderr, "commands: branch, create, view, update, amend, merge, clean, rebase, push, prune, dirty\n") os.Exit(2) } } @@ -289,6 +291,15 @@ func cmdPush(args []string) { run("git", "push", "--force") } +func cmdPrune(args []string) { + if len(args) > 0 { + fmt.Fprintf(os.Stderr, "usage: flow prune\n") + os.Exit(2) + } + + run("git", "remote", "prune", "origin") +} + func cmdDirty(args []string) { if len(args) > 0 { fmt.Fprintf(os.Stderr, "usage: flow dirty\n")