diff --git a/cmd/roborev/main.go b/cmd/roborev/main.go index f9144cce9..161dfd96e 100644 --- a/cmd/roborev/main.go +++ b/cmd/roborev/main.go @@ -262,6 +262,13 @@ func initCmd() *cobra.Command { hookPath := filepath.Join(hooksDir, "post-commit") hookContent := `#!/bin/sh # RoboRev post-commit hook - auto-reviews every commit + +# Skip during rebase to avoid reviewing every replayed commit +git_dir=$(git rev-parse --git-dir 2>/dev/null) +if [ -d "$git_dir/rebase-merge" ] || [ -d "$git_dir/rebase-apply" ]; then + exit 0 +fi + roborev enqueue --sha HEAD 2>/dev/null & ` // Ensure hooks directory exists @@ -726,6 +733,13 @@ func installHookCmd() *cobra.Command { hookContent := `#!/bin/sh # RoboRev post-commit hook - auto-reviews every commit + +# Skip during rebase to avoid reviewing every replayed commit +git_dir=$(git rev-parse --git-dir 2>/dev/null) +if [ -d "$git_dir/rebase-merge" ] || [ -d "$git_dir/rebase-apply" ]; then + exit 0 +fi + roborev enqueue --sha HEAD 2>/dev/null & ` diff --git a/cmd/roborev/tui.go b/cmd/roborev/tui.go index fd6d80a5a..9bde9aff9 100644 --- a/cmd/roborev/tui.go +++ b/cmd/roborev/tui.go @@ -722,9 +722,18 @@ func (m tuiModel) renderQueueView() string { if len(m.jobs) == 0 { b.WriteString("No jobs in queue\n") } else { + // Calculate ID column width based on max ID + idWidth := 2 // minimum width + for _, job := range m.jobs { + w := len(fmt.Sprintf("%d", job.ID)) + if w > idWidth { + idWidth = w + } + } + // Header (with 2-char prefix to align with row selector) - header := fmt.Sprintf(" %-4s %-17s %-15s %-8s %-10s %-12s %-8s %s", - "ID", "Ref", "Repo", "Agent", "Status", "Queued", "Elapsed", "Addr'd") + header := fmt.Sprintf(" %-*s %-17s %-15s %-8s %-10s %-12s %-8s %s", + idWidth, "ID", "Ref", "Repo", "Agent", "Status", "Queued", "Elapsed", "Addr'd") b.WriteString(tuiStatusStyle.Render(header)) b.WriteString("\n") b.WriteString(" " + strings.Repeat("-", min(m.width-4, 80))) @@ -759,7 +768,7 @@ func (m tuiModel) renderQueueView() string { for i := start; i < end; i++ { job := m.jobs[i] selected := i == m.selectedIdx - line := m.renderJobLine(job, selected) + line := m.renderJobLine(job, selected, idWidth) if selected { line = tuiSelectedStyle.Render("> " + line) } else { @@ -785,7 +794,7 @@ func (m tuiModel) renderQueueView() string { return b.String() } -func (m tuiModel) renderJobLine(job storage.ReviewJob, selected bool) string { +func (m tuiModel) renderJobLine(job storage.ReviewJob, selected bool, idWidth int) string { ref := shortRef(job.GitRef) repo := job.RepoName @@ -854,8 +863,8 @@ func (m tuiModel) renderJobLine(job storage.ReviewJob, selected bool) string { } } - return fmt.Sprintf("%-4d %-17s %-15s %-8s %s %-12s %-8s %s", - job.ID, ref, repo, agent, styledStatus, enqueued, elapsed, addr) + return fmt.Sprintf("%-*d %-17s %-15s %-8s %s %-12s %-8s %s", + idWidth, job.ID, ref, repo, agent, styledStatus, enqueued, elapsed, addr) } // wrapText wraps text to the specified width, preserving existing line breaks