Skip to content

Commit

Permalink
Merge branch 'rj/status-bisect-while-rebase'
Browse files Browse the repository at this point in the history
"git status" is taught to show both the branch being bisected and
being rebased when both are in effect at the same time.

* rj/status-bisect-while-rebase:
  status: fix branch shown when not only bisecting
  • Loading branch information
gitster committed Jan 2, 2024
2 parents 59a29e1 + 990adcc commit cce4778
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 8 deletions.
4 changes: 2 additions & 2 deletions branch.c
Original file line number Diff line number Diff line change
Expand Up @@ -420,9 +420,9 @@ static void prepare_checked_out_branches(void)
wt_status_state_free_buffers(&state);

if (wt_status_check_bisect(wt, &state) &&
state.branch) {
state.bisecting_from) {
struct strbuf ref = STRBUF_INIT;
strbuf_addf(&ref, "refs/heads/%s", state.branch);
strbuf_addf(&ref, "refs/heads/%s", state.bisecting_from);
old = strmap_put(&current_checked_out_branches,
ref.buf,
xstrdup(wt->path));
Expand Down
2 changes: 1 addition & 1 deletion ref-filter.c
Original file line number Diff line number Diff line change
Expand Up @@ -2212,7 +2212,7 @@ char *get_head_description(void)
state.detached_from);
} else if (state.bisect_in_progress)
strbuf_addf(&desc, _("(no branch, bisect started on %s)"),
state.branch);
state.bisecting_from);
else if (state.detached_from) {
if (state.detached_at)
strbuf_addf(&desc, _("(HEAD detached at %s)"),
Expand Down
28 changes: 28 additions & 0 deletions t/t7512-status-help.sh
Original file line number Diff line number Diff line change
Expand Up @@ -692,6 +692,34 @@ EOF
'


test_expect_success 'status when bisecting while rebasing' '
git reset --hard main &&
test_when_finished "git rebase --abort" &&
ONTO=$(git rev-parse --short HEAD^) &&
FAKE_LINES="break" git rebase -i HEAD^ &&
test_when_finished "git checkout -" &&
git checkout -b bisect_while_rebasing &&
test_when_finished "git bisect reset" &&
git bisect start &&
cat >expected <<EOF &&
On branch bisect_while_rebasing
Last command done (1 command done):
break
No commands remaining.
You are currently editing a commit while rebasing branch '\''bisect'\'' on '\''$ONTO'\''.
(use "git commit --amend" to amend the current commit)
(use "git rebase --continue" once you are satisfied with your changes)
You are currently bisecting, started from branch '\''bisect_while_rebasing'\''.
(use "git bisect reset" to get back to the original branch)
nothing to commit (use -u to show untracked files)
EOF
git status --untracked-files=no >actual &&
test_cmp expected actual
'


test_expect_success 'status when rebase --apply conflicts with statushints disabled' '
git reset --hard main &&
git checkout -b statushints_disabled &&
Expand Down
4 changes: 2 additions & 2 deletions worktree.c
Original file line number Diff line number Diff line change
Expand Up @@ -395,9 +395,9 @@ int is_worktree_being_bisected(const struct worktree *wt,

memset(&state, 0, sizeof(state));
found_bisect = wt_status_check_bisect(wt, &state) &&
state.branch &&
state.bisecting_from &&
skip_prefix(target, "refs/heads/", &target) &&
!strcmp(state.branch, target);
!strcmp(state.bisecting_from, target);
wt_status_state_free_buffers(&state);
return found_bisect;
}
Expand Down
7 changes: 4 additions & 3 deletions wt-status.c
Original file line number Diff line number Diff line change
Expand Up @@ -861,6 +861,7 @@ void wt_status_state_free_buffers(struct wt_status_state *state)
FREE_AND_NULL(state->branch);
FREE_AND_NULL(state->onto);
FREE_AND_NULL(state->detached_from);
FREE_AND_NULL(state->bisecting_from);
}

static void wt_longstatus_print_unmerged(struct wt_status *s)
Expand Down Expand Up @@ -1569,10 +1570,10 @@ static void show_revert_in_progress(struct wt_status *s,
static void show_bisect_in_progress(struct wt_status *s,
const char *color)
{
if (s->state.branch)
if (s->state.bisecting_from)
status_printf_ln(s, color,
_("You are currently bisecting, started from branch '%s'."),
s->state.branch);
s->state.bisecting_from);
else
status_printf_ln(s, color,
_("You are currently bisecting."));
Expand Down Expand Up @@ -1733,7 +1734,7 @@ int wt_status_check_bisect(const struct worktree *wt,

if (!stat(worktree_git_path(wt, "BISECT_LOG"), &st)) {
state->bisect_in_progress = 1;
state->branch = get_branch(wt, "BISECT_START");
state->bisecting_from = get_branch(wt, "BISECT_START");
return 1;
}
return 0;
Expand Down
1 change: 1 addition & 0 deletions wt-status.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ struct wt_status_state {
char *branch;
char *onto;
char *detached_from;
char *bisecting_from;
struct object_id detached_oid;
struct object_id revert_head_oid;
struct object_id cherry_pick_head_oid;
Expand Down

0 comments on commit cce4778

Please sign in to comment.