2006-12-23 00:15:59 +03:00
#!/bin/sh
#
# Copyright (c) 2006 Johannes E. Schindelin
#
2007-07-03 09:52:14 +04:00
test_description = ' git shortlog
2006-12-23 00:15:59 +03:00
'
. ./test-lib.sh
2010-05-04 06:57:36 +04:00
test_expect_success 'setup' '
2017-11-12 18:25:23 +03:00
test_tick &&
2010-05-04 06:57:36 +04:00
echo 1 >a1 &&
git add a1 &&
tree = $( git write-tree) &&
commit = $( printf "%s\n" "Test" "" | git commit-tree " $tree " ) &&
git update-ref HEAD " $commit " &&
echo 2 >a1 &&
git commit --quiet -m "This is a very, very long first line for the commit message to see if it is wrapped correctly" a1 &&
# test if the wrapping is still valid
# when replacing all is by treble clefs.
echo 3 >a1 &&
git commit --quiet -m " $(
echo "This is a very, very long first line for the commit message to see if it is wrapped correctly" |
sed "s/i/1234/g" |
tr 1234 "\360\235\204\236" ) " a1 &&
# now fsck up the utf8
git config i18n.commitencoding non-utf-8 &&
echo 4 >a1 &&
git commit --quiet -m " $(
echo "This is a very, very long first line for the commit message to see if it is wrapped correctly" |
sed "s/i/1234/g" |
tr 1234 "\370\235\204\236" ) " a1 &&
echo 5 >a1 &&
2010-10-31 04:46:54 +03:00
git commit --quiet -m "a 12 34 56 78" a1 &&
2010-05-04 06:58:04 +04:00
echo 6 >a1 &&
git commit --quiet -m "Commit by someone else" \
2010-05-04 06:59:55 +04:00
--author= "Someone else <not!me>" a1 &&
cat >expect.template <<-\E OF
A U Thor ( 5) :
SUBJECT
SUBJECT
SUBJECT
SUBJECT
SUBJECT
Someone else ( 1) :
SUBJECT
EOF
'
fuzz( ) {
file = $1 &&
sed "
2018-05-13 05:24:15 +03:00
s/$OID_REGEX /OBJECT_NAME/g
2017-11-12 18:25:23 +03:00
s/$_x35 /OBJID/g
2010-05-04 06:59:55 +04:00
s/^ \{ 6\} [ CTa] .*/ SUBJECT/g
s/^ \{ 8\} [ ^ ] .*/ CONTINUATION/g
" <" $file " >" $file .fuzzy" &&
sed "/CONTINUATION/ d" <" $file .fuzzy "
}
test_expect_success 'default output format' '
git shortlog HEAD >log &&
fuzz log >log.predictable &&
test_cmp expect.template log.predictable
'
test_expect_success 'pretty format' '
sed s/SUBJECT/OBJECT_NAME/ expect.template >expect &&
git shortlog --format= "%H" HEAD >log &&
fuzz log >log.predictable &&
test_cmp expect log.predictable
'
2010-05-04 07:18:57 +04:00
test_expect_success '--abbrev' '
2010-05-04 06:59:55 +04:00
sed s/SUBJECT/OBJID/ expect.template >expect &&
2017-11-12 18:25:23 +03:00
git shortlog --format= "%h" --abbrev= 35 HEAD >log &&
2010-05-04 06:59:55 +04:00
fuzz log >log.predictable &&
test_cmp expect log.predictable
'
test_expect_success 'output from user-defined format is re-wrapped' '
sed "s/SUBJECT/two lines/" expect.template >expect &&
git shortlog --format= "two%nlines" HEAD >log &&
fuzz log >log.predictable &&
test_cmp expect log.predictable
2010-05-04 06:57:36 +04:00
'
2006-12-23 00:15:59 +03:00
2014-07-22 02:09:27 +04:00
test_expect_success !MINGW 'shortlog wrapping' '
2010-05-04 06:57:36 +04:00
cat >expect <<\E OF &&
2006-12-23 00:15:59 +03:00
A U Thor ( 5) :
Test
This is a very, very long first line for the commit message to see if
it is wrapped correctly
Th𝄞s 𝄞s a very, very long f𝄞rst l𝄞ne for the comm𝄞t message to see 𝄞f
𝄞t 𝄞s wrapped correctly
Th<54> <68> <EFBFBD> <EFBFBD> s <20> <> <EFBFBD> <EFBFBD> s a very, very long f<> <66> <EFBFBD> <EFBFBD> rst l<> <6C> <EFBFBD> <EFBFBD> ne for the comm<6D> <6D> <EFBFBD> <EFBFBD> t
message to see <20> <> <EFBFBD> <EFBFBD> f <20> <> <EFBFBD> <EFBFBD> t <20> <> <EFBFBD> <EFBFBD> s wrapped correctly
a 12 34
56 78
2010-05-04 06:58:04 +04:00
Someone else ( 1) :
Commit by someone else
2006-12-23 00:15:59 +03:00
EOF
2010-05-04 06:57:36 +04:00
git shortlog -w HEAD >out &&
test_cmp expect out
'
2006-12-23 00:15:59 +03:00
2014-07-22 02:09:27 +04:00
test_expect_success !MINGW 'shortlog from non-git directory' '
2016-03-30 01:49:24 +03:00
git log --no-expand-tabs HEAD >log &&
2010-05-04 06:57:36 +04:00
GIT_DIR = non-existing git shortlog -w <log >out &&
test_cmp expect out
'
2008-03-15 00:35:24 +03:00
2016-01-18 23:02:40 +03:00
test_expect_success !MINGW 'shortlog can read --format=raw output' '
git log --format= raw HEAD >log &&
GIT_DIR = non-existing git shortlog -w <log >out &&
test_cmp expect out
'
2018-03-15 00:34:19 +03:00
test_expect_success 'shortlog from non-git directory refuses extra arguments' '
test_must_fail env GIT_DIR = non-existing git shortlog foo 2>out &&
test_i18ngrep "too many arguments" out
'
2012-12-11 09:59:21 +04:00
test_expect_success 'shortlog should add newline when input line matches wraplen' '
cat >expect <<\E OF &&
A U Thor ( 2) :
bbbbbbbbbbbbbbbbbb: bbbbbbbb bbb bbbb bbbbbbb bb bbbb bbb bbbbb bbbbbb
aaaaaaaaaaaaaaaaaaaaaa: aaaaaa aaaaaaaaaa aaaa aaaaaaaa aa aaaa aa aaa
EOF
git shortlog -w >out <<\E OF &&
commit 0000000000000000000000000000000000000001
Author: A U Thor <author@example.com>
Date: Thu Apr 7 15:14:13 2005 -0700
aaaaaaaaaaaaaaaaaaaaaa: aaaaaa aaaaaaaaaa aaaa aaaaaaaa aa aaaa aa aaa
commit 0000000000000000000000000000000000000002
Author: A U Thor <author@example.com>
Date: Thu Apr 7 15:14:13 2005 -0700
bbbbbbbbbbbbbbbbbb: bbbbbbbb bbb bbbb bbbbbbb bb bbbb bbb bbbbb bbbbbb
EOF
test_cmp expect out
'
2009-11-25 22:33:28 +03:00
iconvfromutf8toiso88591( ) {
2009-12-03 20:52:45 +03:00
printf "%s" " $* " | iconv -f UTF-8 -t ISO8859-1
2009-11-25 22:33:28 +03:00
}
DSCHO = "Jöhännës \"Dschö\" Schindëlin"
DSCHOE = " $DSCHO <Johannes.Schindelin@gmx.de> "
MSG1 = "set a1 to 2 and some non-ASCII chars: Äßø"
MSG2 = "set a1 to 3 and some non-ASCII chars: áæï"
cat > expect << EOF
$DSCHO ( 2) :
$MSG1
$MSG2
EOF
2014-07-22 02:09:27 +04:00
test_expect_success !MINGW 'shortlog encoding' '
2009-11-25 22:33:28 +03:00
git reset --hard " $commit " &&
git config --unset i18n.commitencoding &&
echo 2 > a1 &&
git commit --quiet -m " $MSG1 " --author= " $DSCHOE " a1 &&
2009-12-03 20:52:45 +03:00
git config i18n.commitencoding "ISO8859-1" &&
2009-11-25 22:33:28 +03:00
echo 3 > a1 &&
git commit --quiet -m " $( iconvfromutf8toiso88591 " $MSG2 " ) " \
--author= " $( iconvfromutf8toiso88591 " $DSCHOE " ) " a1 &&
git config --unset i18n.commitencoding &&
git shortlog HEAD~2.. > out &&
test_cmp expect out'
2014-05-30 23:57:25 +04:00
test_expect_success 'shortlog with revision pseudo options' '
git shortlog --all &&
git shortlog --branches &&
git shortlog --exclude= refs/heads/m* --all
'
2016-06-22 18:02:07 +03:00
test_expect_success 'shortlog with --output=<file>' '
2016-07-11 16:11:37 +03:00
git shortlog --output= shortlog -1 master >output &&
2016-06-22 18:02:07 +03:00
test ! -s output &&
2016-07-11 16:11:37 +03:00
test_line_count = 3 shortlog
2016-06-22 18:02:07 +03:00
'
2016-12-16 16:51:41 +03:00
test_expect_success 'shortlog --committer (internal)' '
2016-12-20 21:35:54 +03:00
git checkout --orphan side &&
git commit --allow-empty -m one &&
git commit --allow-empty -m two &&
GIT_COMMITTER_NAME = "Sin Nombre" git commit --allow-empty -m three &&
2016-12-16 16:51:41 +03:00
cat >expect <<-\E OF &&
2016-12-20 21:35:54 +03:00
2 C O Mitter
1 Sin Nombre
2016-12-16 16:51:41 +03:00
EOF
git shortlog -nsc HEAD >actual &&
test_cmp expect actual
'
test_expect_success 'shortlog --committer (external)' '
git log --format= full | git shortlog -nsc >actual &&
test_cmp expect actual
'
2006-12-23 00:15:59 +03:00
test_done