mirror of
https://github.com/git/git.git
synced 2024-10-31 22:37:54 +01:00
f0dc593a95
Using 'test_must_be_empty' is preferable to 'test ! -s', because it gives a helpful error message if the given file is unexpectedly no empty, while the latter remains completely silent. Furthermore, it also catches cases when the given file unexpectedly does not exist at all. This patch was created by: sed -i -e 's/test ! -s/test_must_be_empty/' t[0-9]*.sh Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
218 lines
5.8 KiB
Bash
Executable file
218 lines
5.8 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2006 Johannes E. Schindelin
|
|
#
|
|
|
|
test_description='git shortlog
|
|
'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success 'setup' '
|
|
test_tick &&
|
|
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 &&
|
|
git commit --quiet -m "a 12 34 56 78" a1 &&
|
|
|
|
echo 6 >a1 &&
|
|
git commit --quiet -m "Commit by someone else" \
|
|
--author="Someone else <not!me>" a1 &&
|
|
|
|
cat >expect.template <<-\EOF
|
|
A U Thor (5):
|
|
SUBJECT
|
|
SUBJECT
|
|
SUBJECT
|
|
SUBJECT
|
|
SUBJECT
|
|
|
|
Someone else (1):
|
|
SUBJECT
|
|
|
|
EOF
|
|
'
|
|
|
|
fuzz() {
|
|
file=$1 &&
|
|
sed "
|
|
s/$OID_REGEX/OBJECT_NAME/g
|
|
s/$_x35/OBJID/g
|
|
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
|
|
'
|
|
|
|
test_expect_success '--abbrev' '
|
|
sed s/SUBJECT/OBJID/ expect.template >expect &&
|
|
git shortlog --format="%h" --abbrev=35 HEAD >log &&
|
|
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
|
|
'
|
|
|
|
test_expect_success !MINGW 'shortlog wrapping' '
|
|
cat >expect <<\EOF &&
|
|
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����s ����s a very, very long f����rst l����ne for the comm����t
|
|
message to see ����f ����t ����s wrapped correctly
|
|
a 12 34
|
|
56 78
|
|
|
|
Someone else (1):
|
|
Commit by someone else
|
|
|
|
EOF
|
|
git shortlog -w HEAD >out &&
|
|
test_cmp expect out
|
|
'
|
|
|
|
test_expect_success !MINGW 'shortlog from non-git directory' '
|
|
git log --no-expand-tabs HEAD >log &&
|
|
GIT_DIR=non-existing git shortlog -w <log >out &&
|
|
test_cmp expect out
|
|
'
|
|
|
|
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
|
|
'
|
|
|
|
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
|
|
'
|
|
|
|
test_expect_success 'shortlog should add newline when input line matches wraplen' '
|
|
cat >expect <<\EOF &&
|
|
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 <<\EOF &&
|
|
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
|
|
'
|
|
|
|
iconvfromutf8toiso88591() {
|
|
printf "%s" "$*" | iconv -f UTF-8 -t ISO8859-1
|
|
}
|
|
|
|
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
|
|
|
|
test_expect_success !MINGW 'shortlog encoding' '
|
|
git reset --hard "$commit" &&
|
|
git config --unset i18n.commitencoding &&
|
|
echo 2 > a1 &&
|
|
git commit --quiet -m "$MSG1" --author="$DSCHOE" a1 &&
|
|
git config i18n.commitencoding "ISO8859-1" &&
|
|
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'
|
|
|
|
test_expect_success 'shortlog with revision pseudo options' '
|
|
git shortlog --all &&
|
|
git shortlog --branches &&
|
|
git shortlog --exclude=refs/heads/m* --all
|
|
'
|
|
|
|
test_expect_success 'shortlog with --output=<file>' '
|
|
git shortlog --output=shortlog -1 master >output &&
|
|
test_must_be_empty output &&
|
|
test_line_count = 3 shortlog
|
|
'
|
|
|
|
test_expect_success 'shortlog --committer (internal)' '
|
|
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 &&
|
|
|
|
cat >expect <<-\EOF &&
|
|
2 C O Mitter
|
|
1 Sin Nombre
|
|
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
|
|
'
|
|
|
|
test_done
|