Automatically push every accepted Hop transition

Hop-State: A_06FN6FF8HFSFD9ANGK6BY4G
Hop-Proposal: R_06FN6FDTK9G17RXFFT82ZYR
Hop-Task: T_06FN6CFVXVVAP1KZAJ2X62R
Hop-Attempt: AT_06FN6CFVXTRZ8ZDG28QR5Z0
This commit is contained in:
Hop
2026-07-11 15:13:13 -07:00
parent 9a3a6d152b
commit 7139b9e1a7
18 changed files with 360 additions and 13 deletions
+24
View File
@@ -25,6 +25,7 @@ Usage:
hop land STATE [-- COMMAND [ARG...]]
hop refresh PROPOSAL
hop sync
hop push
hop status
hop graph
hop state STATE
@@ -264,6 +265,7 @@ func RunCLIWithInput(args []string, stdin io.Reader, stdout, stderr io.Writer) i
}
if !jsonOutput {
fmt.Fprintf(stdout, "Accepted internally as %s · tree %s · visible root unchanged\n", result.State.ID, shortHash(result.State.SourceTree))
printRemotePush(stdout, result.RemotePush)
if result.Check == nil {
fmt.Fprintln(stdout, "No final-state validation command was supplied.")
}
@@ -308,6 +310,7 @@ func RunCLIWithInput(args []string, stdin io.Reader, stdout, stderr io.Writer) i
if !jsonOutput {
fmt.Fprintf(stdout, "Landed as %s · tree %s\n", result.State.ID, shortHash(result.State.SourceTree))
fmt.Fprintf(stdout, "Synchronized visible root: %s\n", result.MaterializedRoot)
printRemotePush(stdout, result.RemotePush)
if result.Check == nil {
fmt.Fprintln(stdout, "No final-state validation command was supplied.")
}
@@ -348,6 +351,20 @@ func RunCLIWithInput(args []string, stdin io.Reader, stdout, stderr io.Writer) i
}
}
case "push":
if len(commandArgs) != 0 {
fmt.Fprintln(stderr, "usage: hop push")
return 2
}
result, err := service.Push(ctx)
value = result
if err != nil {
return printCLIError(err, jsonOutput, stdout, stderr)
}
if !jsonOutput {
printRemotePush(stdout, &result)
}
case "status":
status, err := service.Status(ctx)
if err != nil {
@@ -620,6 +637,13 @@ func printRefreshSummary(w io.Writer, result RefreshResult) {
fmt.Fprintf(w, "Continue automatically with: hop check %s -- <test-command>, then propose and land again.\n", result.Prompt.ID)
}
func printRemotePush(w io.Writer, result *RemotePushResult) {
if result == nil {
return
}
fmt.Fprintf(w, "Pushed accepted commit to %s/%s\n", result.Remote, strings.TrimPrefix(result.Ref, "refs/heads/"))
}
func removeFlag(args []string, wanted string) (bool, []string) {
found := false
filtered := make([]string, 0, len(args))