Skip to content

Commit f7fbc98

Browse files
Pete Wyckoffgitster
authored andcommitted
git p4: test clean-up after failed submit, fix added files
Test a variety of cases where a patch failed to apply to p4 and had to be cleaned up. If the patch failed to apply cleanly, do not try to remove to-be-added files, as they have not really been added yet. Signed-off-by: Pete Wyckoff <[email protected]> Acked-by: Luke Diamand <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 5a41c16 commit f7fbc98

File tree

2 files changed

+132
-2
lines changed

2 files changed

+132
-2
lines changed

git-p4.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,8 +1200,6 @@ def applyCommit(self, id):
12001200
if not patch_succeeded:
12011201
for f in editedFiles:
12021202
p4_revert(f)
1203-
for f in filesToAdd:
1204-
os.remove(f)
12051203
return False
12061204

12071205
system(applyPatchCmd)

t/t9815-git-p4-submit-fail.sh

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,138 @@ test_expect_success 'conflict on first of two commits, quit' '
108108
)
109109
'
110110

111+
#
112+
# Cleanup after submit fail, all cases. Some modifications happen
113+
# before trying to apply the patch. Make sure these are unwound
114+
# properly. Put each one in a diff along with something that will
115+
# obviously conflict. Make sure it is back to normal after.
116+
#
117+
118+
test_expect_success 'cleanup edit p4 populate' '
119+
(
120+
cd "$cli" &&
121+
echo text file >text &&
122+
p4 add text &&
123+
echo text+x file >text+x &&
124+
chmod 755 text+x &&
125+
p4 add text+x &&
126+
p4 submit -d "populate p4"
127+
)
128+
'
129+
130+
setup_conflict() {
131+
# clone before modifying file1 to force it to conflict
132+
test_when_finished cleanup_git &&
133+
git p4 clone --dest="$git" //depot &&
134+
# ticks outside subshells
135+
test_tick &&
136+
(
137+
cd "$cli" &&
138+
p4 open file1 &&
139+
echo $test_tick >>file1 &&
140+
p4 submit -d "$test_tick in file1"
141+
) &&
142+
test_tick &&
143+
(
144+
cd "$git" &&
145+
git config git-p4.skipSubmitEdit true &&
146+
# easy conflict
147+
echo $test_tick >>file1 &&
148+
git add file1
149+
# caller will add more and submit
150+
)
151+
}
152+
153+
test_expect_success 'cleanup edit after submit fail' '
154+
setup_conflict &&
155+
(
156+
cd "$git" &&
157+
echo another line >>text &&
158+
git add text &&
159+
git commit -m "conflict" &&
160+
test_expect_code 1 git p4 submit
161+
) &&
162+
(
163+
cd "$cli" &&
164+
# make sure it is not open
165+
! p4 fstat -T action text
166+
)
167+
'
168+
169+
test_expect_success 'cleanup add after submit fail' '
170+
setup_conflict &&
171+
(
172+
cd "$git" &&
173+
echo new file >textnew &&
174+
git add textnew &&
175+
git commit -m "conflict" &&
176+
test_expect_code 1 git p4 submit
177+
) &&
178+
(
179+
cd "$cli" &&
180+
# make sure it is not there
181+
# and that p4 thinks it is not added
182+
# P4 returns 0 both for "not there but added" and
183+
# "not there", so grep.
184+
test_path_is_missing textnew &&
185+
p4 fstat -T action textnew 2>&1 | grep "no such file"
186+
)
187+
'
188+
189+
test_expect_success 'cleanup delete after submit fail' '
190+
setup_conflict &&
191+
(
192+
cd "$git" &&
193+
git rm text+x &&
194+
git commit -m "conflict" &&
195+
test_expect_code 1 git p4 submit
196+
) &&
197+
(
198+
cd "$cli" &&
199+
# make sure it is there
200+
test_path_is_file text+x &&
201+
! p4 fstat -T action text+x
202+
)
203+
'
204+
205+
test_expect_success 'cleanup copy after submit fail' '
206+
setup_conflict &&
207+
(
208+
cd "$git" &&
209+
cp text text2 &&
210+
git add text2 &&
211+
git commit -m "conflict" &&
212+
git config git-p4.detectCopies true &&
213+
git config git-p4.detectCopiesHarder true &&
214+
# make sure setup is okay
215+
git diff-tree -r -C --find-copies-harder HEAD | grep text2 | grep C100 &&
216+
test_expect_code 1 git p4 submit
217+
) &&
218+
(
219+
cd "$cli" &&
220+
test_path_is_missing text2 &&
221+
p4 fstat -T action text2 2>&1 | grep "no such file"
222+
)
223+
'
224+
225+
test_expect_success 'cleanup rename after submit fail' '
226+
setup_conflict &&
227+
(
228+
cd "$git" &&
229+
git mv text text2 &&
230+
git commit -m "conflict" &&
231+
git config git-p4.detectRenames true &&
232+
# make sure setup is okay
233+
git diff-tree -r -M HEAD | grep text2 | grep R100 &&
234+
test_expect_code 1 git p4 submit
235+
) &&
236+
(
237+
cd "$cli" &&
238+
test_path_is_missing text2 &&
239+
p4 fstat -T action text2 2>&1 | grep "no such file"
240+
)
241+
'
242+
111243
test_expect_success 'kill p4d' '
112244
kill_p4d
113245
'

0 commit comments

Comments
 (0)