Skip to content

Commit 09c6a8e

Browse files
committed
Merge branch 'jn/rebase-rename-am' into maint
* jn/rebase-rename-am: rebase: protect against diff.renames configuration t3400 (rebase): whitespace cleanup Teach "apply --index-info" to handle rename patches t4150 (am): futureproof against failing tests t4150 (am): style fix
2 parents 1e62788 + 840b3ca commit 09c6a8e

File tree

5 files changed

+345
-202
lines changed

5 files changed

+345
-202
lines changed

builtin/apply.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2979,8 +2979,7 @@ static void build_fake_ancestor(struct patch *list, const char *filename)
29792979
else if (get_sha1(patch->old_sha1_prefix, sha1))
29802980
/* git diff has no index line for mode/type changes */
29812981
if (!patch->lines_added && !patch->lines_deleted) {
2982-
if (get_current_sha1(patch->new_name, sha1) ||
2983-
get_current_sha1(patch->old_name, sha1))
2982+
if (get_current_sha1(patch->old_name, sha1))
29842983
die("mode change for %s, which is not "
29852984
"in current HEAD", name);
29862985
sha1_ptr = sha1;

git-rebase.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ fi
544544
if test -z "$do_merge"
545545
then
546546
git format-patch -k --stdout --full-index --ignore-if-in-upstream \
547-
$root_flag "$revisions" |
547+
--no-renames $root_flag "$revisions" |
548548
git am $git_am_opt --rebasing --resolvemsg="$RESOLVEMSG" &&
549549
move_to_original_branch
550550
ret=$?

t/t3400-rebase.sh

Lines changed: 114 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -14,140 +14,164 @@ GIT_AUTHOR_NAME=author@name
1414
GIT_AUTHOR_EMAIL=bogus@email@address
1515
export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
1616

17-
test_expect_success \
18-
'prepare repository with topic branches' \
19-
'git config core.logAllRefUpdates true &&
20-
echo First > A &&
21-
git update-index --add A &&
22-
git commit -m "Add A." &&
23-
git checkout -b my-topic-branch &&
24-
echo Second > B &&
25-
git update-index --add B &&
26-
git commit -m "Add B." &&
27-
git checkout -f master &&
28-
echo Third >> A &&
29-
git update-index A &&
30-
git commit -m "Modify A." &&
31-
git checkout -b side my-topic-branch &&
32-
echo Side >> C &&
33-
git add C &&
34-
git commit -m "Add C" &&
35-
git checkout -b nonlinear my-topic-branch &&
36-
echo Edit >> B &&
37-
git add B &&
38-
git commit -m "Modify B" &&
39-
git merge side &&
40-
git checkout -b upstream-merged-nonlinear &&
41-
git merge master &&
42-
git checkout -f my-topic-branch &&
43-
git tag topic
17+
test_expect_success 'prepare repository with topic branches' '
18+
git config core.logAllRefUpdates true &&
19+
echo First >A &&
20+
git update-index --add A &&
21+
git commit -m "Add A." &&
22+
git checkout -b force-3way &&
23+
echo Dummy >Y &&
24+
git update-index --add Y &&
25+
git commit -m "Add Y." &&
26+
git checkout -b filemove &&
27+
git reset --soft master &&
28+
mkdir D &&
29+
git mv A D/A &&
30+
git commit -m "Move A." &&
31+
git checkout -b my-topic-branch master &&
32+
echo Second >B &&
33+
git update-index --add B &&
34+
git commit -m "Add B." &&
35+
git checkout -f master &&
36+
echo Third >>A &&
37+
git update-index A &&
38+
git commit -m "Modify A." &&
39+
git checkout -b side my-topic-branch &&
40+
echo Side >>C &&
41+
git add C &&
42+
git commit -m "Add C" &&
43+
git checkout -b nonlinear my-topic-branch &&
44+
echo Edit >>B &&
45+
git add B &&
46+
git commit -m "Modify B" &&
47+
git merge side &&
48+
git checkout -b upstream-merged-nonlinear &&
49+
git merge master &&
50+
git checkout -f my-topic-branch &&
51+
git tag topic
4452
'
4553

4654
test_expect_success 'rebase on dirty worktree' '
47-
echo dirty >> A &&
48-
test_must_fail git rebase master'
55+
echo dirty >>A &&
56+
test_must_fail git rebase master
57+
'
4958

5059
test_expect_success 'rebase on dirty cache' '
51-
git add A &&
52-
test_must_fail git rebase master'
60+
git add A &&
61+
test_must_fail git rebase master
62+
'
5363

5464
test_expect_success 'rebase against master' '
55-
git reset --hard HEAD &&
56-
git rebase master'
65+
git reset --hard HEAD &&
66+
git rebase master
67+
'
5768

5869
test_expect_success 'rebase against master twice' '
59-
git rebase master >out &&
60-
grep "Current branch my-topic-branch is up to date" out
70+
git rebase master >out &&
71+
grep "Current branch my-topic-branch is up to date" out
6172
'
6273

6374
test_expect_success 'rebase against master twice with --force' '
64-
git rebase --force-rebase master >out &&
65-
grep "Current branch my-topic-branch is up to date, rebase forced" out
75+
git rebase --force-rebase master >out &&
76+
grep "Current branch my-topic-branch is up to date, rebase forced" out
6677
'
6778

6879
test_expect_success 'rebase against master twice from another branch' '
69-
git checkout my-topic-branch^ &&
70-
git rebase master my-topic-branch >out &&
71-
grep "Current branch my-topic-branch is up to date" out
80+
git checkout my-topic-branch^ &&
81+
git rebase master my-topic-branch >out &&
82+
grep "Current branch my-topic-branch is up to date" out
7283
'
7384

7485
test_expect_success 'rebase fast-forward to master' '
75-
git checkout my-topic-branch^ &&
76-
git rebase my-topic-branch >out &&
77-
grep "Fast-forwarded HEAD to my-topic-branch" out
86+
git checkout my-topic-branch^ &&
87+
git rebase my-topic-branch >out &&
88+
grep "Fast-forwarded HEAD to my-topic-branch" out
7889
'
7990

80-
test_expect_success \
81-
'the rebase operation should not have destroyed author information' \
82-
'! (git log | grep "Author:" | grep "<>")'
91+
test_expect_success 'the rebase operation should not have destroyed author information' '
92+
! (git log | grep "Author:" | grep "<>")
93+
'
8394

84-
test_expect_success \
85-
'the rebase operation should not have destroyed author information (2)' \
86-
"git log -1 | grep 'Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>'"
95+
test_expect_success 'the rebase operation should not have destroyed author information (2)' "
96+
git log -1 |
97+
grep 'Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>'
98+
"
8799

88100
test_expect_success 'HEAD was detached during rebase' '
89-
test $(git rev-parse HEAD@{1}) != $(git rev-parse my-topic-branch@{1})
101+
test $(git rev-parse HEAD@{1}) != $(git rev-parse my-topic-branch@{1})
90102
'
91103

92104
test_expect_success 'rebase after merge master' '
93-
git reset --hard topic &&
94-
git merge master &&
95-
git rebase master &&
96-
! (git show | grep "^Merge:")
105+
git reset --hard topic &&
106+
git merge master &&
107+
git rebase master &&
108+
! (git show | grep "^Merge:")
97109
'
98110

99111
test_expect_success 'rebase of history with merges is linearized' '
100-
git checkout nonlinear &&
101-
test 4 = $(git rev-list master.. | wc -l) &&
102-
git rebase master &&
103-
test 3 = $(git rev-list master.. | wc -l)
112+
git checkout nonlinear &&
113+
test 4 = $(git rev-list master.. | wc -l) &&
114+
git rebase master &&
115+
test 3 = $(git rev-list master.. | wc -l)
104116
'
105117

106-
test_expect_success \
107-
'rebase of history with merges after upstream merge is linearized' '
108-
git checkout upstream-merged-nonlinear &&
109-
test 5 = $(git rev-list master.. | wc -l) &&
110-
git rebase master &&
111-
test 3 = $(git rev-list master.. | wc -l)
118+
test_expect_success 'rebase of history with merges after upstream merge is linearized' '
119+
git checkout upstream-merged-nonlinear &&
120+
test 5 = $(git rev-list master.. | wc -l) &&
121+
git rebase master &&
122+
test 3 = $(git rev-list master.. | wc -l)
112123
'
113124

114125
test_expect_success 'rebase a single mode change' '
115-
git checkout master &&
116-
echo 1 > X &&
117-
git add X &&
118-
test_tick &&
119-
git commit -m prepare &&
120-
git checkout -b modechange HEAD^ &&
121-
echo 1 > X &&
122-
git add X &&
123-
test_chmod +x A &&
124-
test_tick &&
125-
git commit -m modechange &&
126-
GIT_TRACE=1 git rebase master
126+
git checkout master &&
127+
echo 1 >X &&
128+
git add X &&
129+
test_tick &&
130+
git commit -m prepare &&
131+
git checkout -b modechange HEAD^ &&
132+
echo 1 >X &&
133+
git add X &&
134+
test_chmod +x A &&
135+
test_tick &&
136+
git commit -m modechange &&
137+
GIT_TRACE=1 git rebase master
138+
'
139+
140+
test_expect_success 'rebase is not broken by diff.renames' '
141+
git config diff.renames copies &&
142+
test_when_finished "git config --unset diff.renames" &&
143+
git checkout filemove &&
144+
GIT_TRACE=1 git rebase force-3way
145+
'
146+
147+
test_expect_success 'setup: recover' '
148+
test_might_fail git rebase --abort &&
149+
git reset --hard &&
150+
git checkout modechange
127151
'
128152

129153
test_expect_success 'Show verbose error when HEAD could not be detached' '
130-
: > B &&
131-
test_must_fail git rebase topic 2> output.err > output.out &&
132-
grep "Untracked working tree file .B. would be overwritten" output.err
154+
>B &&
155+
test_must_fail git rebase topic 2>output.err >output.out &&
156+
grep "Untracked working tree file .B. would be overwritten" output.err
133157
'
134158
rm -f B
135159

136160
test_expect_success 'dump usage when upstream arg is missing' '
137-
git checkout -b usage topic &&
138-
test_must_fail git rebase 2>error1 &&
139-
grep "[Uu]sage" error1 &&
140-
test_must_fail git rebase --abort 2>error2 &&
141-
grep "No rebase in progress" error2 &&
142-
test_must_fail git rebase --onto master 2>error3 &&
143-
grep "[Uu]sage" error3 &&
144-
! grep "can.t shift" error3
161+
git checkout -b usage topic &&
162+
test_must_fail git rebase 2>error1 &&
163+
grep "[Uu]sage" error1 &&
164+
test_must_fail git rebase --abort 2>error2 &&
165+
grep "No rebase in progress" error2 &&
166+
test_must_fail git rebase --onto master 2>error3 &&
167+
grep "[Uu]sage" error3 &&
168+
! grep "can.t shift" error3
145169
'
146170

147171
test_expect_success 'rebase -q is quiet' '
148-
git checkout -b quiet topic &&
149-
git rebase -q master > output.out 2>&1 &&
150-
test ! -s output.out
172+
git checkout -b quiet topic &&
173+
git rebase -q master >output.out 2>&1 &&
174+
test ! -s output.out
151175
'
152176

153177
test_expect_success 'Rebase a commit that sprinkles CRs in' '

0 commit comments

Comments
 (0)