
"git blame MAKEFILE" run in a history that has "Makefile" but not
MAKEFILE can get confused on a case insensitive filesystem, because
the check we run to see if there is a corresponding file in the
working tree with lstat("MAKEFILE") succeeds. In addition to that
check, we have to make sure that the given path also exists in the
commit we start digging history from (i.e. "HEAD").
Note that this reveals the breakage in a test added in cd8ae20
(git-blame shouldn't crash if run in an unmerged tree, 2007-10-18),
which expects the entire merge-in-progress path to be blamed to the
working tree when it did not exist in our tree. As it is clear in
the log message of that commit, the old breakage was that it was
causing an internal error and the fix was about avoiding it.
Just check that the command does not die an uncontrolled death. For
this particular case, the blame should fail, as the history for the
file in that contents has not been committed yet at the point in the
test.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
74 lines
1.5 KiB
Bash
Executable File
74 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Based on a test case submitted by Björn Steinbrink.
|
|
|
|
test_description='git blame on conflicted files'
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success 'setup first case' '
|
|
# Create the old file
|
|
echo "Old line" > file1 &&
|
|
git add file1 &&
|
|
git commit --author "Old Line <ol@localhost>" -m file1.a &&
|
|
|
|
# Branch
|
|
git checkout -b foo &&
|
|
|
|
# Do an ugly move and change
|
|
git rm file1 &&
|
|
echo "New line ..." > file2 &&
|
|
echo "... and more" >> file2 &&
|
|
git add file2 &&
|
|
git commit --author "U Gly <ug@localhost>" -m ugly &&
|
|
|
|
# Back to master and change something
|
|
git checkout master &&
|
|
echo "
|
|
|
|
bla" >> file1 &&
|
|
git commit --author "Old Line <ol@localhost>" -a -m file1.b &&
|
|
|
|
# Back to foo and merge master
|
|
git checkout foo &&
|
|
if git merge master; then
|
|
echo needed conflict here
|
|
exit 1
|
|
else
|
|
echo merge failed - resolving automatically
|
|
fi &&
|
|
echo "New line ...
|
|
... and more
|
|
|
|
bla
|
|
Even more" > file2 &&
|
|
git rm file1 &&
|
|
git commit --author "M Result <mr@localhost>" -a -m merged &&
|
|
|
|
# Back to master and change file1 again
|
|
git checkout master &&
|
|
sed s/bla/foo/ <file1 >X &&
|
|
rm file1 &&
|
|
mv X file1 &&
|
|
git commit --author "No Bla <nb@localhost>" -a -m replace &&
|
|
|
|
# Try to merge into foo again
|
|
git checkout foo &&
|
|
if git merge master; then
|
|
echo needed conflict here
|
|
exit 1
|
|
else
|
|
echo merge failed - test is setup
|
|
fi
|
|
'
|
|
|
|
test_expect_success \
|
|
'blame runs on unconflicted file while other file has conflicts' '
|
|
git blame file2
|
|
'
|
|
|
|
test_expect_success 'blame does not crash with conflicted file in stages 1,3' '
|
|
test_must_fail git blame file1
|
|
'
|
|
|
|
test_done
|