Show a merge's push to the remote while it runs

This commit is contained in:
Ian Gulliver
2026-10-21 19:42:28 -07:00
parent f57741f33d
commit 447e07861e
6 changed files with 374 additions and 364 deletions
+17 -15
View File
@@ -514,29 +514,30 @@ func (s *Store) ClearFinalizing(ctx context.Context, id string) error {
})
}
func (s *Store) SetFinalizingCommit(ctx context.Context, id, commit, notes string) error {
return s.setFinalizing(ctx, id, commit, notes, false)
func (s *Store) SetFinalizingCommit(ctx context.Context, id, commit, notes, pushed string) error {
return s.setFinalizing(ctx, id, commit, notes, pushed, false)
}
func (s *Store) SetFinalizingUnchanged(ctx context.Context, id string) error {
return s.setFinalizing(ctx, id, "", "", true)
return s.setFinalizing(ctx, id, "", "", "", true)
}
func (s *Store) setFinalizing(ctx context.Context, id, commit, notes string, unchanged bool) error {
func (s *Store) setFinalizing(ctx context.Context, id, commit, notes, pushed string, unchanged bool) error {
return s.write(ctx, func(tx *sql.Tx, emit emitFunc) error {
res, err := tx.ExecContext(ctx, `UPDATE tasks SET finalizing_commit = ?, finalizing_notes = ?, finalizing_unchanged = ? WHERE id = ? AND status = ? AND finalizing != ''`,
commit, notes, unchanged, id, string(api.TaskStatusActive))
if err != nil {
return err
}
n, err := res.RowsAffected()
if err != nil {
return err
}
if n == 0 {
projectID := ""
err := tx.QueryRowContext(ctx, `UPDATE tasks SET finalizing_commit = ?, finalizing_notes = ?, finalizing_unchanged = ? WHERE id = ? AND status = ? AND finalizing != '' RETURNING project_id`,
commit, notes, unchanged, id, string(api.TaskStatusActive)).Scan(&projectID)
if errors.Is(err, sql.ErrNoRows) {
return ErrNotFound
}
return nil
if err != nil || commit == "" {
return err
}
err = emit(api.Event{Kind: "task.pushing", ProjectId: &projectID, TaskId: &id, Actor: "byre", Payload: map[string]any{"id": id, "commit": commit, "pushed": pushed}})
if err != nil {
return err
}
return settleTaskState(ctx, tx, emit, id, "byre")
})
}
@@ -1611,6 +1612,7 @@ const taskStateExpr = `CASE
END
WHEN tasks.discard_state != '' THEN 'discarding'
WHEN EXISTS (SELECT 1 FROM inbox_items i WHERE i.task_id = tasks.id AND i.state = 'open') THEN 'asking'
WHEN tasks.finalizing != '' AND tasks.finalizing_commit != '' THEN 'pushing'
WHEN tasks.merging_by != '' OR tasks.finalizing != '' OR tasks.parent_merge_by != '' THEN 'merging'
WHEN tasks.merge_queued_by != '' THEN 'merge_held'
WHEN tasks.merge_after_review_by != '' THEN 'merge_after_review'