Browse Source
When we consider if a path has been totally rewritten, we did not touch changes from symlinks to files or vice versa. But a change that modifies even the type of a blob surely should count as a complete rewrite. While we are at it, modernise diffcore-break to be aware of gitlinks (we do not want to touch them). Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
Junio C Hamano
17 years ago
5 changed files with 104 additions and 14 deletions
@ -0,0 +1,86 @@
@@ -0,0 +1,86 @@
|
||||
#!/bin/sh |
||||
|
||||
test_description='typechange rename detection' |
||||
|
||||
. ./test-lib.sh |
||||
|
||||
test_expect_success setup ' |
||||
|
||||
rm -f foo bar && |
||||
cat ../../COPYING >foo && |
||||
ln -s linklink bar && |
||||
git add foo bar && |
||||
git commit -a -m Initial && |
||||
git tag one && |
||||
|
||||
rm -f foo bar && |
||||
cat ../../COPYING >bar && |
||||
ln -s linklink foo && |
||||
git add foo bar && |
||||
git commit -a -m Second && |
||||
git tag two && |
||||
|
||||
rm -f foo bar && |
||||
cat ../../COPYING >foo && |
||||
git add foo && |
||||
git commit -a -m Third && |
||||
git tag three && |
||||
|
||||
mv foo bar && |
||||
ln -s linklink foo && |
||||
git add foo bar && |
||||
git commit -a -m Fourth && |
||||
git tag four && |
||||
|
||||
# This is purely for sanity check |
||||
|
||||
rm -f foo bar && |
||||
cat ../../COPYING >foo && |
||||
cat ../../Makefile >bar && |
||||
git add foo bar && |
||||
git commit -a -m Fifth && |
||||
git tag five && |
||||
|
||||
rm -f foo bar && |
||||
cat ../../Makefile >foo && |
||||
cat ../../COPYING >bar && |
||||
git add foo bar && |
||||
git commit -a -m Sixth && |
||||
git tag six |
||||
|
||||
' |
||||
|
||||
test_expect_success 'cross renames to be detected for regular files' ' |
||||
|
||||
git diff-tree five six -r --name-status -B -M | sort >actual && |
||||
{ |
||||
echo "R100 foo bar" |
||||
echo "R100 bar foo" |
||||
} | sort >expect && |
||||
diff -u expect actual |
||||
|
||||
' |
||||
|
||||
test_expect_success 'cross renames to be detected for typechange' ' |
||||
|
||||
git diff-tree one two -r --name-status -B -M | sort >actual && |
||||
{ |
||||
echo "R100 foo bar" |
||||
echo "R100 bar foo" |
||||
} | sort >expect && |
||||
diff -u expect actual |
||||
|
||||
' |
||||
|
||||
test_expect_success 'moves and renames' ' |
||||
|
||||
git diff-tree three four -r --name-status -B -M | sort >actual && |
||||
{ |
||||
echo "R100 foo bar" |
||||
echo "T100 foo" |
||||
} | sort >expect && |
||||
diff -u expect actual |
||||
|
||||
' |
||||
|
||||
test_done |
Loading…
Reference in new issue