mirror of
https://github.com/git/git
synced 2024-08-25 10:45:59 +00:00
![Jeff King](/assets/img/avatar_default.png)
If we have both a tag and a branch named "foo", then calling "git merge foo" will warn about the ambiguous ref, but merge the tag. When generating the commit message, though, we simply checked whether "refs/heads/foo" existed, and if it did, assumed it was a branch. This led to the statement "Merge branch 'foo'" in the commit message, which is quite wrong. Instead, we should use dwim_ref to find the actual ref used, and describe it appropriately. In addition to the test in t7608, we must also tweak the expected output of t4202, which was accidentally triggering this bug. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
371 lines
6.5 KiB
Bash
Executable file
371 lines
6.5 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='git log'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success setup '
|
|
|
|
echo one >one &&
|
|
git add one &&
|
|
test_tick &&
|
|
git commit -m initial &&
|
|
|
|
echo ichi >one &&
|
|
git add one &&
|
|
test_tick &&
|
|
git commit -m second &&
|
|
|
|
git mv one ichi &&
|
|
test_tick &&
|
|
git commit -m third &&
|
|
|
|
cp ichi ein &&
|
|
git add ein &&
|
|
test_tick &&
|
|
git commit -m fourth &&
|
|
|
|
mkdir a &&
|
|
echo ni >a/two &&
|
|
git add a/two &&
|
|
test_tick &&
|
|
git commit -m fifth &&
|
|
|
|
git rm a/two &&
|
|
test_tick &&
|
|
git commit -m sixth
|
|
|
|
'
|
|
|
|
printf "sixth\nfifth\nfourth\nthird\nsecond\ninitial" > expect
|
|
test_expect_success 'pretty' '
|
|
|
|
git log --pretty="format:%s" > actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
printf "sixth\nfifth\nfourth\nthird\nsecond\ninitial\n" > expect
|
|
test_expect_success 'pretty (tformat)' '
|
|
|
|
git log --pretty="tformat:%s" > actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'pretty (shortcut)' '
|
|
|
|
git log --pretty="%s" > actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'format' '
|
|
|
|
git log --format="%s" > actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
cat > expect << EOF
|
|
804a787 sixth
|
|
394ef78 fifth
|
|
5d31159 fourth
|
|
2fbe8c0 third
|
|
f7dab8e second
|
|
3a2fdcb initial
|
|
EOF
|
|
test_expect_success 'oneline' '
|
|
|
|
git log --oneline > actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'diff-filter=A' '
|
|
|
|
actual=$(git log --pretty="format:%s" --diff-filter=A HEAD) &&
|
|
expect=$(echo fifth ; echo fourth ; echo third ; echo initial) &&
|
|
test "$actual" = "$expect" || {
|
|
echo Oops
|
|
echo "Actual: $actual"
|
|
false
|
|
}
|
|
|
|
'
|
|
|
|
test_expect_success 'diff-filter=M' '
|
|
|
|
actual=$(git log --pretty="format:%s" --diff-filter=M HEAD) &&
|
|
expect=$(echo second) &&
|
|
test "$actual" = "$expect" || {
|
|
echo Oops
|
|
echo "Actual: $actual"
|
|
false
|
|
}
|
|
|
|
'
|
|
|
|
test_expect_success 'diff-filter=D' '
|
|
|
|
actual=$(git log --pretty="format:%s" --diff-filter=D HEAD) &&
|
|
expect=$(echo sixth ; echo third) &&
|
|
test "$actual" = "$expect" || {
|
|
echo Oops
|
|
echo "Actual: $actual"
|
|
false
|
|
}
|
|
|
|
'
|
|
|
|
test_expect_success 'diff-filter=R' '
|
|
|
|
actual=$(git log -M --pretty="format:%s" --diff-filter=R HEAD) &&
|
|
expect=$(echo third) &&
|
|
test "$actual" = "$expect" || {
|
|
echo Oops
|
|
echo "Actual: $actual"
|
|
false
|
|
}
|
|
|
|
'
|
|
|
|
test_expect_success 'diff-filter=C' '
|
|
|
|
actual=$(git log -C -C --pretty="format:%s" --diff-filter=C HEAD) &&
|
|
expect=$(echo fourth) &&
|
|
test "$actual" = "$expect" || {
|
|
echo Oops
|
|
echo "Actual: $actual"
|
|
false
|
|
}
|
|
|
|
'
|
|
|
|
test_expect_success 'git log --follow' '
|
|
|
|
actual=$(git log --follow --pretty="format:%s" ichi) &&
|
|
expect=$(echo third ; echo second ; echo initial) &&
|
|
test "$actual" = "$expect" || {
|
|
echo Oops
|
|
echo "Actual: $actual"
|
|
false
|
|
}
|
|
|
|
'
|
|
|
|
cat > expect << EOF
|
|
804a787 sixth
|
|
394ef78 fifth
|
|
5d31159 fourth
|
|
EOF
|
|
test_expect_success 'git log --no-walk <commits> sorts by commit time' '
|
|
git log --no-walk --oneline 5d31159 804a787 394ef78 > actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
cat > expect << EOF
|
|
5d31159 fourth
|
|
804a787 sixth
|
|
394ef78 fifth
|
|
EOF
|
|
test_expect_success 'git show <commits> leaves list of commits as given' '
|
|
git show --oneline -s 5d31159 804a787 394ef78 > actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'setup case sensitivity tests' '
|
|
echo case >one &&
|
|
test_tick &&
|
|
git add one
|
|
git commit -a -m Second
|
|
'
|
|
|
|
test_expect_success 'log --grep' '
|
|
echo second >expect &&
|
|
git log -1 --pretty="tformat:%s" --grep=sec >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'log -i --grep' '
|
|
echo Second >expect &&
|
|
git log -1 --pretty="tformat:%s" -i --grep=sec >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'log --grep -i' '
|
|
echo Second >expect &&
|
|
git log -1 --pretty="tformat:%s" --grep=sec -i >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
cat > expect <<EOF
|
|
* Second
|
|
* sixth
|
|
* fifth
|
|
* fourth
|
|
* third
|
|
* second
|
|
* initial
|
|
EOF
|
|
|
|
test_expect_success 'simple log --graph' '
|
|
git log --graph --pretty=tformat:%s >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'set up merge history' '
|
|
git checkout -b side HEAD~4 &&
|
|
test_commit side-1 1 1 &&
|
|
test_commit side-2 2 2 &&
|
|
git checkout master &&
|
|
git merge side
|
|
'
|
|
|
|
cat > expect <<\EOF
|
|
* Merge branch 'side'
|
|
|\
|
|
| * side-2
|
|
| * side-1
|
|
* | Second
|
|
* | sixth
|
|
* | fifth
|
|
* | fourth
|
|
|/
|
|
* third
|
|
* second
|
|
* initial
|
|
EOF
|
|
|
|
test_expect_success 'log --graph with merge' '
|
|
git log --graph --date-order --pretty=tformat:%s |
|
|
sed "s/ *$//" >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
cat > expect <<\EOF
|
|
* commit master
|
|
|\ Merge: A B
|
|
| | Author: A U Thor <author@example.com>
|
|
| |
|
|
| | Merge branch 'side'
|
|
| |
|
|
| * commit side
|
|
| | Author: A U Thor <author@example.com>
|
|
| |
|
|
| | side-2
|
|
| |
|
|
| * commit tags/side-1
|
|
| | Author: A U Thor <author@example.com>
|
|
| |
|
|
| | side-1
|
|
| |
|
|
* | commit master~1
|
|
| | Author: A U Thor <author@example.com>
|
|
| |
|
|
| | Second
|
|
| |
|
|
* | commit master~2
|
|
| | Author: A U Thor <author@example.com>
|
|
| |
|
|
| | sixth
|
|
| |
|
|
* | commit master~3
|
|
| | Author: A U Thor <author@example.com>
|
|
| |
|
|
| | fifth
|
|
| |
|
|
* | commit master~4
|
|
|/ Author: A U Thor <author@example.com>
|
|
|
|
|
| fourth
|
|
|
|
|
* commit tags/side-1~1
|
|
| Author: A U Thor <author@example.com>
|
|
|
|
|
| third
|
|
|
|
|
* commit tags/side-1~2
|
|
| Author: A U Thor <author@example.com>
|
|
|
|
|
| second
|
|
|
|
|
* commit tags/side-1~3
|
|
Author: A U Thor <author@example.com>
|
|
|
|
initial
|
|
EOF
|
|
|
|
test_expect_success 'log --graph with full output' '
|
|
git log --graph --date-order --pretty=short |
|
|
git name-rev --name-only --stdin |
|
|
sed "s/Merge:.*/Merge: A B/;s/ *$//" >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'set up more tangled history' '
|
|
git checkout -b tangle HEAD~6 &&
|
|
test_commit tangle-a tangle-a a &&
|
|
git merge master~3 &&
|
|
git merge side~1 &&
|
|
git checkout master &&
|
|
git merge tangle &&
|
|
git checkout -b reach &&
|
|
test_commit reach &&
|
|
git checkout master &&
|
|
git checkout -b octopus-a &&
|
|
test_commit octopus-a &&
|
|
git checkout master &&
|
|
git checkout -b octopus-b &&
|
|
test_commit octopus-b &&
|
|
git checkout master &&
|
|
test_commit seventh &&
|
|
git merge octopus-a octopus-b
|
|
git merge reach
|
|
'
|
|
|
|
cat > expect <<\EOF
|
|
* Merge commit 'reach'
|
|
|\
|
|
| \
|
|
| \
|
|
*-. \ Merge commit 'octopus-a'; commit 'octopus-b'
|
|
|\ \ \
|
|
* | | | seventh
|
|
| | * | octopus-b
|
|
| |/ /
|
|
|/| |
|
|
| * | octopus-a
|
|
|/ /
|
|
| * reach
|
|
|/
|
|
* Merge branch 'tangle'
|
|
|\
|
|
| * Merge branch 'side' (early part) into tangle
|
|
| |\
|
|
| * \ Merge branch 'master' (early part) into tangle
|
|
| |\ \
|
|
| * | | tangle-a
|
|
* | | | Merge branch 'side'
|
|
|\ \ \ \
|
|
| * | | | side-2
|
|
| | |_|/
|
|
| |/| |
|
|
| * | | side-1
|
|
* | | | Second
|
|
* | | | sixth
|
|
| |_|/
|
|
|/| |
|
|
* | | fifth
|
|
* | | fourth
|
|
|/ /
|
|
* | third
|
|
|/
|
|
* second
|
|
* initial
|
|
EOF
|
|
|
|
test_expect_success 'log --graph with merge' '
|
|
git log --graph --date-order --pretty=tformat:%s |
|
|
sed "s/ *$//" >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_done
|
|
|