@@ -14,140 +14,164 @@ GIT_AUTHOR_NAME=author@name
14
14
GIT_AUTHOR_EMAIL=bogus@email@address
15
15
export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
16
16
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
44
52
'
45
53
46
54
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
+ '
49
58
50
59
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
+ '
53
63
54
64
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
+ '
57
68
58
69
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
61
72
'
62
73
63
74
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
66
77
'
67
78
68
79
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
72
83
'
73
84
74
85
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
78
89
'
79
90
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
+ '
83
94
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
+ "
87
99
88
100
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})
90
102
'
91
103
92
104
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:")
97
109
'
98
110
99
111
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)
104
116
'
105
117
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)
112
123
'
113
124
114
125
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
127
151
'
128
152
129
153
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
133
157
'
134
158
rm -f B
135
159
136
160
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
145
169
'
146
170
147
171
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
151
175
'
152
176
153
177
test_expect_success ' Rebase a commit that sprinkles CRs in' '
0 commit comments