Remove uncontested renamed files during merge.
Prior to 65ac6e9c3f
we deleted a file
from the working directory during a merge if the file existed before
the merge started but was renamed by the branch being merged in.
This broke in 65ac6e as git-merge-recursive did not actually update
the working directory on an uncontested rename.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
1349f87713
commit
8371234eca
@ -889,7 +889,7 @@ static int process_renames(struct path_list *a_renames,
|
||||
struct diff_filespec src_other, dst_other;
|
||||
int try_merge, stage = a_renames == renames1 ? 3: 2;
|
||||
|
||||
remove_file(1, ren1_src, 1);
|
||||
remove_file(1, ren1_src, index_only);
|
||||
|
||||
hashcpy(src_other.sha1, ren1->src_entry->stages[stage].sha);
|
||||
src_other.mode = ren1->src_entry->stages[stage].mode;
|
||||
|
97
t/t6023-merge-rename-nocruft.sh
Executable file
97
t/t6023-merge-rename-nocruft.sh
Executable file
@ -0,0 +1,97 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='Merge-recursive merging renames'
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success setup \
|
||||
'
|
||||
cat >A <<\EOF &&
|
||||
a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
||||
c cccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
d dddddddddddddddddddddddddddddddddddddddddddddddd
|
||||
e eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
|
||||
f ffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
g gggggggggggggggggggggggggggggggggggggggggggggggg
|
||||
h hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
|
||||
i iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
|
||||
j jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
|
||||
k kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
|
||||
l llllllllllllllllllllllllllllllllllllllllllllllll
|
||||
m mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
|
||||
n nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
|
||||
o oooooooooooooooooooooooooooooooooooooooooooooooo
|
||||
EOF
|
||||
|
||||
cat >M <<\EOF &&
|
||||
A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
B BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
||||
C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
|
||||
D DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
|
||||
E EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
|
||||
F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
G GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
|
||||
H HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
|
||||
I IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
|
||||
J JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
|
||||
K KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
|
||||
L LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
M MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
N NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
|
||||
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
|
||||
EOF
|
||||
|
||||
git add A M &&
|
||||
git commit -m "initial has A and M" &&
|
||||
git branch white &&
|
||||
git branch red &&
|
||||
|
||||
git checkout white &&
|
||||
sed -e "/^g /s/.*/g : white changes a line/" <A >B &&
|
||||
sed -e "/^G /s/.*/G : colored branch changes a line/" <M >N &&
|
||||
rm -f A M &&
|
||||
git update-index --add --remove A B M N &&
|
||||
git commit -m "white renames A->B, M->N" &&
|
||||
|
||||
git checkout red &&
|
||||
echo created by red >R &&
|
||||
git update-index --add R &&
|
||||
git commit -m "red creates R" &&
|
||||
|
||||
git checkout master'
|
||||
|
||||
# This test broke in 65ac6e9c3f47807cb603af07a6a9e1a43bc119ae
|
||||
test_expect_success 'merge white into red (A->B,M->N)' \
|
||||
'
|
||||
git checkout -b red-white red &&
|
||||
git merge white &&
|
||||
git write-tree >/dev/null || {
|
||||
echo "BAD: merge did not complete"
|
||||
return 1
|
||||
}
|
||||
|
||||
test -f B || {
|
||||
echo "BAD: B does not exist in working directory"
|
||||
return 1
|
||||
}
|
||||
test -f N || {
|
||||
echo "BAD: N does not exist in working directory"
|
||||
return 1
|
||||
}
|
||||
test -f R || {
|
||||
echo "BAD: R does not exist in working directory"
|
||||
return 1
|
||||
}
|
||||
|
||||
test -f A && {
|
||||
echo "BAD: A still exists in working directory"
|
||||
return 1
|
||||
}
|
||||
test -f M && {
|
||||
echo "BAD: M still exists in working directory"
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
'
|
||||
|
||||
test_done
|
Loading…
Reference in New Issue
Block a user