Skip to content

Commit 1e461c4

Browse files
peffgitster
authored andcommitted
rebase-interactive: drop early check for valid ident
Since the very inception of interactive-rebase in 1b1dce4 (Teach rebase an interactive mode, 2007-06-25), there has been a preemptive check, before looking at any commits, to see whether the user has a valid name/email combination. This is convenient, because it means that we abort the operation before even beginning (rather than just complaining that we are unable to pick a particular commit). However, it does the wrong thing when the rebase does not actually need to generate any new commits (e.g., a fast-forward with no commits to pick, or one where the base stays the same, and we just pick the same commits without rewriting anything). In this case it may complain about the lack of ident, even though one would not be needed to complete the operation. This may seem like mere nit-picking, but because interactive rebase underlies the "preserve-merges" rebase, somebody who has set "pull.rebase" to "preserve" cannot make even a fast-forward pull without a valid ident, as we bail before even realizing the fast-forward nature. This commit drops the extra ident check entirely. This means we rely on individual commands that generate commit objects to complain. So we will continue to notice and prevent cases that actually do create commits, but with one important difference: we fail while actually executing the "pick" operations, and leave the rebase in a conflicted, half-done state. In some ways this is less convenient, but in some ways it is more so; the user can then manually commit or even "git rebase --continue" after setting up their ident (or providing it as a one-off on the command line). Reported-by: Dakota Hawkins <[email protected]> Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent f8f7adc commit 1e461c4

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed

git-rebase--interactive.sh

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,9 +1180,6 @@ To continue rebase after editing, run:
11801180
;;
11811181
esac
11821182

1183-
git var GIT_COMMITTER_IDENT >/dev/null ||
1184-
die "$(gettext "You need to set your committer info first")"
1185-
11861183
comment_for_reflog start
11871184

11881185
if test ! -z "$switch_to"

t/t7517-per-repo-email.sh

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,51 @@ test_expect_success 'succeeds cloning if global email is not set' '
3636
git clone . clone
3737
'
3838

39+
test_expect_success 'set up rebase scenarios' '
40+
# temporarily enable an actual ident for this setup
41+
test_config user.email [email protected] &&
42+
test_commit new &&
43+
git branch side-without-commit HEAD^ &&
44+
git checkout -b side-with-commit HEAD^ &&
45+
test_commit side
46+
'
47+
48+
test_expect_success 'fast-forward rebase does not care about ident' '
49+
git checkout -B tmp side-without-commit &&
50+
git rebase master
51+
'
52+
53+
test_expect_success 'non-fast-forward rebase refuses to write commits' '
54+
test_when_finished "git rebase --abort || true" &&
55+
git checkout -B tmp side-with-commit &&
56+
test_must_fail git rebase master
57+
'
58+
59+
test_expect_success 'fast-forward rebase does not care about ident (interactive)' '
60+
git checkout -B tmp side-without-commit &&
61+
git rebase -i master
62+
'
63+
64+
test_expect_success 'non-fast-forward rebase refuses to write commits (interactive)' '
65+
test_when_finished "git rebase --abort || true" &&
66+
git checkout -B tmp side-with-commit &&
67+
test_must_fail git rebase -i master
68+
'
69+
70+
test_expect_success 'noop interactive rebase does not care about ident' '
71+
git checkout -B tmp side-with-commit &&
72+
git rebase -i HEAD^
73+
'
74+
75+
test_expect_success 'fast-forward rebase does not care about ident (preserve)' '
76+
git checkout -B tmp side-without-commit &&
77+
git rebase -p master
78+
'
79+
80+
test_expect_success 'non-fast-forward rebase refuses to write commits (preserve)' '
81+
test_when_finished "git rebase --abort || true" &&
82+
git checkout -B tmp side-with-commit &&
83+
test_must_fail git rebase -p master
84+
'
85+
3986
test_done

0 commit comments

Comments
 (0)