2007-12-25 19:06:47 +08:00
|
|
|
#!/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 &&
|
|
|
|
|
2009-01-23 00:37:24 +08:00
|
|
|
git mv one ichi &&
|
2007-12-25 19:06:47 +08:00
|
|
|
test_tick &&
|
|
|
|
git commit -m third &&
|
|
|
|
|
2009-01-23 00:37:24 +08:00
|
|
|
cp ichi ein &&
|
|
|
|
git add ein &&
|
2007-12-25 19:06:47 +08:00
|
|
|
test_tick &&
|
|
|
|
git commit -m fourth &&
|
|
|
|
|
2009-01-23 00:37:24 +08:00
|
|
|
mkdir a &&
|
|
|
|
echo ni >a/two &&
|
|
|
|
git add a/two &&
|
|
|
|
test_tick &&
|
|
|
|
git commit -m fifth &&
|
|
|
|
|
|
|
|
git rm a/two &&
|
2007-12-25 19:06:47 +08:00
|
|
|
test_tick &&
|
2009-01-23 00:37:24 +08:00
|
|
|
git commit -m sixth
|
2007-12-25 19:06:47 +08:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2009-02-25 05:06:37 +08:00
|
|
|
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
|
|
|
|
'
|
|
|
|
|
2009-11-23 00:15:29 +08:00
|
|
|
cat > expect << EOF
|
|
|
|
This is
|
|
|
|
the sixth
|
|
|
|
commit.
|
|
|
|
This is
|
|
|
|
the fifth
|
|
|
|
commit.
|
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_success 'format %w(12,1,2)' '
|
|
|
|
|
|
|
|
git log -2 --format="%w(12,1,2)This is the %s commit." > actual &&
|
|
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'format %w(,1,2)' '
|
|
|
|
|
|
|
|
git log -2 --format="%w(,1,2)This is%nthe %s%ncommit." > actual &&
|
|
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
|
2009-02-25 05:06:37 +08:00
|
|
|
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
|
|
|
|
'
|
|
|
|
|
2007-12-25 19:06:47 +08:00
|
|
|
test_expect_success 'diff-filter=A' '
|
|
|
|
|
2010-08-05 16:22:52 +08:00
|
|
|
git log --pretty="format:%s" --diff-filter=A HEAD > actual &&
|
|
|
|
git log --pretty="format:%s" --diff-filter A HEAD > actual-separate &&
|
|
|
|
printf "fifth\nfourth\nthird\ninitial" > expect &&
|
|
|
|
test_cmp expect actual &&
|
|
|
|
test_cmp expect actual-separate
|
2007-12-25 19:06:47 +08:00
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
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) &&
|
2009-01-23 00:37:24 +08:00
|
|
|
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) &&
|
2007-12-25 19:06:47 +08:00
|
|
|
test "$actual" = "$expect" || {
|
|
|
|
echo Oops
|
|
|
|
echo "Actual: $actual"
|
|
|
|
false
|
|
|
|
}
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2009-07-17 22:28:06 +08:00
|
|
|
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
|
|
|
|
'
|
|
|
|
|
2008-08-25 14:15:05 +08:00
|
|
|
test_expect_success 'setup case sensitivity tests' '
|
|
|
|
echo case >one &&
|
|
|
|
test_tick &&
|
2009-01-23 00:37:24 +08:00
|
|
|
git add one
|
2008-08-25 14:15:05 +08:00
|
|
|
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
|
|
|
|
'
|
2007-12-25 19:06:47 +08:00
|
|
|
|
2010-08-05 16:22:55 +08:00
|
|
|
test_expect_success 'log --grep option parsing' '
|
|
|
|
echo second >expect &&
|
|
|
|
git log -1 --pretty="tformat:%s" --grep sec >actual &&
|
|
|
|
test_cmp expect actual &&
|
|
|
|
test_must_fail git log -1 --pretty="tformat:%s" --grep
|
|
|
|
'
|
|
|
|
|
2008-08-25 14:15:05 +08:00
|
|
|
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
|
|
|
|
'
|
2007-12-25 19:06:47 +08:00
|
|
|
|
2009-02-19 19:13:38 +08:00
|
|
|
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 |
|
2010-01-27 07:08:31 +08:00
|
|
|
sed "s/ *\$//" >actual &&
|
2009-02-19 19:13:38 +08:00
|
|
|
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 |
|
2010-01-27 07:08:31 +08:00
|
|
|
sed "s/Merge:.*/Merge: A B/;s/ *\$//" >actual &&
|
2009-02-19 19:13:38 +08:00
|
|
|
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 &&
|
2009-04-23 05:27:15 +08:00
|
|
|
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
|
2009-02-19 19:13:38 +08:00
|
|
|
'
|
|
|
|
|
|
|
|
cat > expect <<\EOF
|
merge: fix incorrect merge message for ambiguous tag/branch
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>
2009-08-09 18:02:24 +08:00
|
|
|
* Merge commit 'reach'
|
2009-04-23 05:27:15 +08:00
|
|
|
|\
|
|
|
|
| \
|
|
|
|
| \
|
merge: fix incorrect merge message for ambiguous tag/branch
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>
2009-08-09 18:02:24 +08:00
|
|
|
*-. \ Merge commit 'octopus-a'; commit 'octopus-b'
|
2009-04-23 05:27:15 +08:00
|
|
|
|\ \ \
|
|
|
|
* | | | seventh
|
|
|
|
| | * | octopus-b
|
|
|
|
| |/ /
|
|
|
|
|/| |
|
|
|
|
| * | octopus-a
|
|
|
|
|/ /
|
|
|
|
| * reach
|
|
|
|
|/
|
2009-02-19 19:13:38 +08:00
|
|
|
* Merge branch 'tangle'
|
|
|
|
|\
|
|
|
|
| * Merge branch 'side' (early part) into tangle
|
|
|
|
| |\
|
|
|
|
| * \ Merge branch 'master' (early part) into tangle
|
|
|
|
| |\ \
|
|
|
|
| * | | tangle-a
|
|
|
|
* | | | Merge branch 'side'
|
|
|
|
|\ \ \ \
|
|
|
|
| * | | | side-2
|
2009-04-21 20:47:01 +08:00
|
|
|
| | |_|/
|
2009-02-19 19:13:38 +08:00
|
|
|
| |/| |
|
|
|
|
| * | | side-1
|
|
|
|
* | | | Second
|
|
|
|
* | | | sixth
|
2009-04-21 20:47:01 +08:00
|
|
|
| |_|/
|
2009-02-19 19:13:38 +08:00
|
|
|
|/| |
|
|
|
|
* | | fifth
|
|
|
|
* | | fourth
|
|
|
|
|/ /
|
|
|
|
* | third
|
|
|
|
|/
|
|
|
|
* second
|
|
|
|
* initial
|
|
|
|
EOF
|
|
|
|
|
2009-04-27 03:29:13 +08:00
|
|
|
test_expect_success 'log --graph with merge' '
|
2009-02-19 19:13:38 +08:00
|
|
|
git log --graph --date-order --pretty=tformat:%s |
|
2010-01-27 07:08:31 +08:00
|
|
|
sed "s/ *\$//" >actual &&
|
2009-02-19 19:13:38 +08:00
|
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
|
2010-02-18 02:20:49 +08:00
|
|
|
test_expect_success 'log.decorate configuration' '
|
|
|
|
git config --unset-all log.decorate || :
|
|
|
|
|
2010-04-09 01:17:17 +08:00
|
|
|
git log --oneline >expect.none &&
|
|
|
|
git log --oneline --decorate >expect.short &&
|
|
|
|
git log --oneline --decorate=full >expect.full &&
|
2010-02-18 02:20:49 +08:00
|
|
|
|
|
|
|
echo "[log] decorate" >>.git/config &&
|
2010-04-07 05:48:55 +08:00
|
|
|
git log --oneline >actual &&
|
2010-04-09 01:17:17 +08:00
|
|
|
test_cmp expect.short actual &&
|
2010-02-18 02:20:49 +08:00
|
|
|
|
|
|
|
git config --unset-all log.decorate &&
|
|
|
|
git config log.decorate true &&
|
2010-04-09 01:17:17 +08:00
|
|
|
git log --oneline >actual &&
|
2010-02-18 02:20:49 +08:00
|
|
|
test_cmp expect.short actual &&
|
2010-04-09 01:17:17 +08:00
|
|
|
git log --oneline --decorate=full >actual &&
|
2010-02-18 02:20:49 +08:00
|
|
|
test_cmp expect.full actual &&
|
2010-04-09 01:17:17 +08:00
|
|
|
git log --oneline --decorate=no >actual &&
|
2010-02-18 02:20:49 +08:00
|
|
|
test_cmp expect.none actual &&
|
|
|
|
|
|
|
|
git config --unset-all log.decorate &&
|
|
|
|
git config log.decorate no &&
|
2010-04-09 01:17:17 +08:00
|
|
|
git log --oneline >actual &&
|
2010-02-18 02:20:49 +08:00
|
|
|
test_cmp expect.none actual &&
|
2010-04-09 01:17:17 +08:00
|
|
|
git log --oneline --decorate >actual &&
|
2010-02-18 02:20:49 +08:00
|
|
|
test_cmp expect.short actual &&
|
2010-04-09 01:17:17 +08:00
|
|
|
git log --oneline --decorate=full >actual &&
|
2010-02-18 02:20:49 +08:00
|
|
|
test_cmp expect.full actual &&
|
|
|
|
|
2010-11-18 01:00:45 +08:00
|
|
|
git config --unset-all log.decorate &&
|
|
|
|
git config log.decorate 1 &&
|
|
|
|
git log --oneline >actual &&
|
|
|
|
test_cmp expect.short actual &&
|
|
|
|
git log --oneline --decorate=full >actual &&
|
|
|
|
test_cmp expect.full actual &&
|
|
|
|
git log --oneline --decorate=no >actual &&
|
|
|
|
test_cmp expect.none actual &&
|
|
|
|
|
2010-02-18 02:20:49 +08:00
|
|
|
git config --unset-all log.decorate &&
|
|
|
|
git config log.decorate short &&
|
2010-04-09 01:17:17 +08:00
|
|
|
git log --oneline >actual &&
|
2010-02-18 02:20:49 +08:00
|
|
|
test_cmp expect.short actual &&
|
2010-04-09 01:17:17 +08:00
|
|
|
git log --oneline --no-decorate >actual &&
|
2010-02-18 02:20:49 +08:00
|
|
|
test_cmp expect.none actual &&
|
2010-04-09 01:17:17 +08:00
|
|
|
git log --oneline --decorate=full >actual &&
|
2010-02-18 02:20:49 +08:00
|
|
|
test_cmp expect.full actual &&
|
|
|
|
|
|
|
|
git config --unset-all log.decorate &&
|
|
|
|
git config log.decorate full &&
|
2010-04-09 01:17:17 +08:00
|
|
|
git log --oneline >actual &&
|
2010-02-18 02:20:49 +08:00
|
|
|
test_cmp expect.full actual &&
|
2010-04-09 01:17:17 +08:00
|
|
|
git log --oneline --no-decorate >actual &&
|
2010-02-18 02:20:49 +08:00
|
|
|
test_cmp expect.none actual &&
|
2010-04-09 01:17:17 +08:00
|
|
|
git log --oneline --decorate >actual &&
|
2010-02-18 02:20:49 +08:00
|
|
|
test_cmp expect.short actual
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-08-15 18:16:25 +08:00
|
|
|
test_expect_success 'show added path under "--follow -M"' '
|
|
|
|
# This tests for a regression introduced in v1.7.2-rc0~103^2~2
|
|
|
|
test_create_repo regression &&
|
|
|
|
(
|
|
|
|
cd regression &&
|
|
|
|
test_commit needs-another-commit &&
|
|
|
|
test_commit foo.bar &&
|
|
|
|
git log -M --follow -p foo.bar.t &&
|
|
|
|
git log -M --follow --stat foo.bar.t &&
|
|
|
|
git log -M --follow --name-only foo.bar.t
|
|
|
|
)
|
|
|
|
'
|
2008-07-23 05:23:31 +08:00
|
|
|
|
2010-08-15 18:16:25 +08:00
|
|
|
test_done
|