|  | #!/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 | 
|  | } | 
|  |  | 
|  | ' | 
|  |  | 
|  | 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 branch 'reach' | 
|  | |\ | 
|  | | \ | 
|  | |  \ | 
|  | *-. \   Merge branches 'octopus-a' and '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 | 
|  |  |