Skip to content

Commit bc61dba

Browse files
committed
Merge branch 'jz/apply-3-corner-cases'
"git apply --3way" bypasses the attempt to do a three-way application in more cases to address the regression caused by the recent change to use direct application as a fallback. * jz/apply-3-corner-cases: git-apply: skip threeway in add / rename cases
2 parents 78e696c + 34d6070 commit bc61dba

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

apply.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3582,7 +3582,9 @@ static int try_threeway(struct apply_state *state,
35823582

35833583
/* No point falling back to 3-way merge in these cases */
35843584
if (patch->is_delete ||
3585-
S_ISGITLINK(patch->old_mode) || S_ISGITLINK(patch->new_mode))
3585+
S_ISGITLINK(patch->old_mode) || S_ISGITLINK(patch->new_mode) ||
3586+
(patch->is_new && !patch->direct_to_threeway) ||
3587+
(patch->is_rename && !patch->lines_added && !patch->lines_deleted))
35863588
return -1;
35873589

35883590
/* Preimage the patch was prepared for */

t/t4108-apply-threeway.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,4 +275,22 @@ test_expect_success 'apply full-index patch with 3way' '
275275
git apply --3way --index bin.diff
276276
'
277277

278+
test_expect_success 'apply delete then new patch with 3way' '
279+
git reset --hard main &&
280+
test_write_lines 2 > delnew &&
281+
git add delnew &&
282+
git diff --cached >> new.patch &&
283+
git reset --hard &&
284+
test_write_lines 1 > delnew &&
285+
git add delnew &&
286+
git commit -m "delnew" &&
287+
rm delnew &&
288+
git diff >> delete-then-new.patch &&
289+
cat new.patch >> delete-then-new.patch &&
290+
291+
git checkout -- . &&
292+
# Apply must succeed.
293+
git apply --3way delete-then-new.patch
294+
'
295+
278296
test_done

0 commit comments

Comments
 (0)