2010-05-02 19:00:44 +08:00
|
|
|
#!/bin/sh
|
|
|
|
#
|
|
|
|
# Copyright (c) 2010, Will Palmer
|
2013-06-26 18:19:49 +08:00
|
|
|
# Copyright (c) 2011, Alexey Shumkin (+ non-UTF-8 commit encoding tests)
|
2010-05-02 19:00:44 +08:00
|
|
|
#
|
|
|
|
|
|
|
|
test_description='Test pretty formats'
|
|
|
|
. ./test-lib.sh
|
|
|
|
|
2013-07-05 20:01:50 +08:00
|
|
|
sample_utf8_part=$(printf "f\303\244ng")
|
|
|
|
|
2013-06-26 18:19:49 +08:00
|
|
|
commit_msg () {
|
2013-07-05 20:01:48 +08:00
|
|
|
# String "initial. initial" partly in German
|
|
|
|
# (translated with Google Translate),
|
2013-06-26 18:19:49 +08:00
|
|
|
# encoded in UTF-8, used as a commit log message below.
|
2013-07-05 20:01:50 +08:00
|
|
|
msg="initial. an${sample_utf8_part}lich\n"
|
2013-06-26 18:19:49 +08:00
|
|
|
if test -n "$1"
|
|
|
|
then
|
2013-07-05 20:01:50 +08:00
|
|
|
printf "$msg" | iconv -f utf-8 -t "$1"
|
|
|
|
else
|
|
|
|
printf "$msg"
|
2013-06-26 18:19:49 +08:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2010-05-02 19:00:44 +08:00
|
|
|
test_expect_success 'set up basic repos' '
|
|
|
|
>foo &&
|
|
|
|
>bar &&
|
|
|
|
git add foo &&
|
|
|
|
test_tick &&
|
2013-07-04 20:45:46 +08:00
|
|
|
git config i18n.commitEncoding iso8859-1 &&
|
|
|
|
git commit -m "$(commit_msg iso8859-1)" &&
|
2010-05-02 19:00:44 +08:00
|
|
|
git add bar &&
|
|
|
|
test_tick &&
|
2013-06-26 18:19:49 +08:00
|
|
|
git commit -m "add bar" &&
|
|
|
|
git config --unset i18n.commitEncoding
|
2010-05-02 19:00:44 +08:00
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'alias builtin format' '
|
|
|
|
git log --pretty=oneline >expected &&
|
|
|
|
git config pretty.test-alias oneline &&
|
|
|
|
git log --pretty=test-alias >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'alias masking builtin format' '
|
|
|
|
git log --pretty=oneline >expected &&
|
|
|
|
git config pretty.oneline "%H" &&
|
|
|
|
git log --pretty=oneline >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'alias user-defined format' '
|
|
|
|
git log --pretty="format:%h" >expected &&
|
|
|
|
git config pretty.test-alias "format:%h" &&
|
|
|
|
git log --pretty=test-alias >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2013-07-04 20:45:46 +08:00
|
|
|
test_expect_success 'alias user-defined tformat with %s (iso8859-1 encoding)' '
|
|
|
|
git config i18n.logOutputEncoding iso8859-1 &&
|
2013-06-26 18:19:49 +08:00
|
|
|
git log --oneline >expected-s &&
|
|
|
|
git log --pretty="tformat:%h %s" >actual-s &&
|
|
|
|
git config --unset i18n.logOutputEncoding &&
|
|
|
|
test_cmp expected-s actual-s
|
|
|
|
'
|
|
|
|
|
2013-06-26 18:19:50 +08:00
|
|
|
test_expect_success 'alias user-defined tformat with %s (utf-8 encoding)' '
|
2013-06-26 18:19:49 +08:00
|
|
|
git log --oneline >expected-s &&
|
|
|
|
git log --pretty="tformat:%h %s" >actual-s &&
|
|
|
|
test_cmp expected-s actual-s
|
|
|
|
'
|
|
|
|
|
2010-05-02 19:00:44 +08:00
|
|
|
test_expect_success 'alias user-defined tformat' '
|
|
|
|
git log --pretty="tformat:%h" >expected &&
|
|
|
|
git config pretty.test-alias "tformat:%h" &&
|
|
|
|
git log --pretty=test-alias >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2011-06-16 21:42:48 +08:00
|
|
|
test_expect_success 'alias non-existent format' '
|
2010-05-02 19:00:44 +08:00
|
|
|
git config pretty.test-alias format-that-will-never-exist &&
|
|
|
|
test_must_fail git log --pretty=test-alias
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'alias of an alias' '
|
|
|
|
git log --pretty="tformat:%h" >expected &&
|
|
|
|
git config pretty.test-foo "tformat:%h" &&
|
|
|
|
git config pretty.test-bar test-foo &&
|
|
|
|
git log --pretty=test-bar >actual && test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'alias masking an alias' '
|
|
|
|
git log --pretty=format:"Two %H" >expected &&
|
|
|
|
git config pretty.duplicate "format:One %H" &&
|
|
|
|
git config --add pretty.duplicate "format:Two %H" &&
|
|
|
|
git log --pretty=duplicate >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'alias loop' '
|
|
|
|
git config pretty.test-foo test-bar &&
|
|
|
|
git config pretty.test-bar test-foo &&
|
|
|
|
test_must_fail git log --pretty=test-foo
|
|
|
|
'
|
|
|
|
|
2013-06-26 18:19:50 +08:00
|
|
|
test_expect_success 'NUL separation' '
|
2013-06-26 18:19:49 +08:00
|
|
|
printf "add bar\0$(commit_msg)" >expected &&
|
2012-05-01 04:28:25 +08:00
|
|
|
git log -z --pretty="format:%s" >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2013-06-26 18:19:50 +08:00
|
|
|
test_expect_success 'NUL termination' '
|
2013-06-26 18:19:49 +08:00
|
|
|
printf "add bar\0$(commit_msg)\0" >expected &&
|
2012-05-01 04:28:25 +08:00
|
|
|
git log -z --pretty="tformat:%s" >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2013-06-26 18:19:50 +08:00
|
|
|
test_expect_success 'NUL separation with --stat' '
|
2012-05-02 01:29:43 +08:00
|
|
|
stat0_part=$(git diff --stat HEAD^ HEAD) &&
|
Fix "git diff --stat" for interesting - but empty - file changes
The behavior of "git diff --stat" is rather odd for files that have
zero lines of changes: it will discount them entirely unless they were
renames.
Which means that the stat output will simply not show files that only
had "other" changes: they were created or deleted, or their mode was
changed.
Now, those changes do show up in the summary, but so do renames, so
the diffstat logic is inconsistent. Why does it show renames with zero
lines changed, but not mode changes or added files with zero lines
changed?
So change the logic to not check for "is_renamed", but for
"is_interesting" instead, where "interesting" is judged to be any
action but a pure data change (because a pure data change with zero
data changed really isn't worth showing, if we ever get one in our
diffpairs).
So if you did
chmod +x Makefile
git diff --stat
before, it would show empty (" 0 files changed"), with this it shows
Makefile | 0
1 file changed, 0 insertions(+), 0 deletions(-)
which I think is a more correct diffstat (and then with "--summary" it
shows *what* the metadata change to Makefile was - this is completely
consistent with our handling of renamed files).
Side note: the old behavior was *really* odd. With no changes at all,
"git diff --stat" output was empty. With just a chmod, it said "0
files changed". No way is our legacy behavior sane.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-10-18 01:00:37 +08:00
|
|
|
stat1_part=$(git diff-tree --no-commit-id --stat --root HEAD^) &&
|
2013-06-26 18:19:49 +08:00
|
|
|
printf "add bar\n$stat0_part\n\0$(commit_msg)\n$stat1_part\n" >expected &&
|
2012-05-02 01:29:43 +08:00
|
|
|
git log -z --stat --pretty="format:%s" >actual &&
|
2012-08-27 13:36:51 +08:00
|
|
|
test_i18ncmp expected actual
|
2012-05-02 01:29:43 +08:00
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_failure 'NUL termination with --stat' '
|
|
|
|
stat0_part=$(git diff --stat HEAD^ HEAD) &&
|
Fix "git diff --stat" for interesting - but empty - file changes
The behavior of "git diff --stat" is rather odd for files that have
zero lines of changes: it will discount them entirely unless they were
renames.
Which means that the stat output will simply not show files that only
had "other" changes: they were created or deleted, or their mode was
changed.
Now, those changes do show up in the summary, but so do renames, so
the diffstat logic is inconsistent. Why does it show renames with zero
lines changed, but not mode changes or added files with zero lines
changed?
So change the logic to not check for "is_renamed", but for
"is_interesting" instead, where "interesting" is judged to be any
action but a pure data change (because a pure data change with zero
data changed really isn't worth showing, if we ever get one in our
diffpairs).
So if you did
chmod +x Makefile
git diff --stat
before, it would show empty (" 0 files changed"), with this it shows
Makefile | 0
1 file changed, 0 insertions(+), 0 deletions(-)
which I think is a more correct diffstat (and then with "--summary" it
shows *what* the metadata change to Makefile was - this is completely
consistent with our handling of renamed files).
Side note: the old behavior was *really* odd. With no changes at all,
"git diff --stat" output was empty. With just a chmod, it said "0
files changed". No way is our legacy behavior sane.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-10-18 01:00:37 +08:00
|
|
|
stat1_part=$(git diff-tree --no-commit-id --stat --root HEAD^) &&
|
2013-06-26 18:19:49 +08:00
|
|
|
printf "add bar\n$stat0_part\n\0$(commit_msg)\n$stat1_part\n0" >expected &&
|
2012-05-02 01:29:43 +08:00
|
|
|
git log -z --stat --pretty="tformat:%s" >actual &&
|
2012-08-27 13:36:51 +08:00
|
|
|
test_i18ncmp expected actual
|
2012-05-02 01:29:43 +08:00
|
|
|
'
|
|
|
|
|
2013-04-19 07:08:50 +08:00
|
|
|
test_expect_success 'setup more commits' '
|
|
|
|
test_commit "message one" one one message-one &&
|
2013-06-26 18:19:48 +08:00
|
|
|
test_commit "message two" two two message-two &&
|
|
|
|
head1=$(git rev-parse --verify --short HEAD~0) &&
|
|
|
|
head2=$(git rev-parse --verify --short HEAD~1) &&
|
|
|
|
head3=$(git rev-parse --verify --short HEAD~2) &&
|
|
|
|
head4=$(git rev-parse --verify --short HEAD~3)
|
2013-04-19 07:08:50 +08:00
|
|
|
'
|
|
|
|
|
2013-07-05 20:01:47 +08:00
|
|
|
test_expect_success 'left alignment formatting' '
|
|
|
|
git log --pretty="format:%<(40)%s" >actual &&
|
2013-04-19 07:08:50 +08:00
|
|
|
# complete the incomplete line at the end
|
|
|
|
echo >>actual &&
|
2013-07-05 20:01:47 +08:00
|
|
|
qz_to_tab_space <<EOF >expected &&
|
2013-04-19 07:08:50 +08:00
|
|
|
message two Z
|
|
|
|
message one Z
|
|
|
|
add bar Z
|
2013-06-26 18:19:49 +08:00
|
|
|
$(commit_msg) Z
|
2013-04-19 07:08:50 +08:00
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
2013-07-05 20:01:47 +08:00
|
|
|
'
|
2013-04-19 07:08:50 +08:00
|
|
|
|
2013-07-05 20:01:47 +08:00
|
|
|
test_expect_success 'left alignment formatting at the nth column' '
|
|
|
|
git log --pretty="format:%h %<|(40)%s" >actual &&
|
2013-04-19 07:08:50 +08:00
|
|
|
# complete the incomplete line at the end
|
|
|
|
echo >>actual &&
|
2013-07-05 20:01:47 +08:00
|
|
|
qz_to_tab_space <<EOF >expected &&
|
2013-06-26 18:19:48 +08:00
|
|
|
$head1 message two Z
|
|
|
|
$head2 message one Z
|
|
|
|
$head3 add bar Z
|
2013-06-26 18:19:49 +08:00
|
|
|
$head4 $(commit_msg) Z
|
2013-04-19 07:08:50 +08:00
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
2013-07-05 20:01:47 +08:00
|
|
|
'
|
2013-04-19 07:08:50 +08:00
|
|
|
|
2013-07-05 20:01:47 +08:00
|
|
|
test_expect_success 'left alignment formatting with no padding' '
|
|
|
|
git log --pretty="format:%<(1)%s" >actual &&
|
2013-04-19 07:08:50 +08:00
|
|
|
# complete the incomplete line at the end
|
|
|
|
echo >>actual &&
|
2013-07-05 20:01:47 +08:00
|
|
|
cat <<EOF >expected &&
|
2013-04-19 07:08:50 +08:00
|
|
|
message two
|
|
|
|
message one
|
|
|
|
add bar
|
2013-06-26 18:19:49 +08:00
|
|
|
$(commit_msg)
|
2013-04-19 07:08:50 +08:00
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
2013-07-05 20:01:47 +08:00
|
|
|
'
|
2013-04-19 07:08:50 +08:00
|
|
|
|
2013-07-05 20:01:47 +08:00
|
|
|
test_expect_success 'left alignment formatting with trunc' '
|
|
|
|
git log --pretty="format:%<(10,trunc)%s" >actual &&
|
2013-04-19 07:08:51 +08:00
|
|
|
# complete the incomplete line at the end
|
|
|
|
echo >>actual &&
|
2013-07-05 20:01:47 +08:00
|
|
|
qz_to_tab_space <<EOF >expected &&
|
2013-04-19 07:08:51 +08:00
|
|
|
message ..
|
|
|
|
message ..
|
|
|
|
add bar Z
|
2013-07-05 20:01:50 +08:00
|
|
|
initial...
|
2013-04-19 07:08:51 +08:00
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
2013-07-05 20:01:47 +08:00
|
|
|
'
|
2013-04-19 07:08:51 +08:00
|
|
|
|
2013-07-05 20:01:47 +08:00
|
|
|
test_expect_success 'left alignment formatting with ltrunc' '
|
|
|
|
git log --pretty="format:%<(10,ltrunc)%s" >actual &&
|
2013-04-19 07:08:51 +08:00
|
|
|
# complete the incomplete line at the end
|
|
|
|
echo >>actual &&
|
2013-07-05 20:01:47 +08:00
|
|
|
qz_to_tab_space <<EOF >expected &&
|
2013-04-19 07:08:51 +08:00
|
|
|
..sage two
|
|
|
|
..sage one
|
|
|
|
add bar Z
|
2013-07-05 20:01:50 +08:00
|
|
|
..${sample_utf8_part}lich
|
2013-04-19 07:08:51 +08:00
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
2013-07-05 20:01:47 +08:00
|
|
|
'
|
2013-04-19 07:08:51 +08:00
|
|
|
|
2013-07-05 20:01:47 +08:00
|
|
|
test_expect_success 'left alignment formatting with mtrunc' '
|
|
|
|
git log --pretty="format:%<(10,mtrunc)%s" >actual &&
|
2013-04-19 07:08:51 +08:00
|
|
|
# complete the incomplete line at the end
|
|
|
|
echo >>actual &&
|
2013-07-05 20:01:47 +08:00
|
|
|
qz_to_tab_space <<EOF >expected &&
|
2013-04-19 07:08:51 +08:00
|
|
|
mess.. two
|
|
|
|
mess.. one
|
|
|
|
add bar Z
|
2013-07-05 20:01:50 +08:00
|
|
|
init..lich
|
2013-04-19 07:08:51 +08:00
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
2013-07-05 20:01:47 +08:00
|
|
|
'
|
2013-04-19 07:08:51 +08:00
|
|
|
|
2013-07-05 20:01:47 +08:00
|
|
|
test_expect_success 'right alignment formatting' '
|
|
|
|
git log --pretty="format:%>(40)%s" >actual &&
|
2013-04-19 07:08:50 +08:00
|
|
|
# complete the incomplete line at the end
|
|
|
|
echo >>actual &&
|
2013-07-05 20:01:47 +08:00
|
|
|
qz_to_tab_space <<EOF >expected &&
|
2013-04-19 07:08:50 +08:00
|
|
|
Z message two
|
|
|
|
Z message one
|
|
|
|
Z add bar
|
2013-06-26 18:19:49 +08:00
|
|
|
Z $(commit_msg)
|
2013-04-19 07:08:50 +08:00
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
2013-07-05 20:01:47 +08:00
|
|
|
'
|
2013-04-19 07:08:50 +08:00
|
|
|
|
2013-07-05 20:01:47 +08:00
|
|
|
test_expect_success 'right alignment formatting at the nth column' '
|
|
|
|
git log --pretty="format:%h %>|(40)%s" >actual &&
|
2013-04-19 07:08:50 +08:00
|
|
|
# complete the incomplete line at the end
|
|
|
|
echo >>actual &&
|
2013-07-05 20:01:47 +08:00
|
|
|
qz_to_tab_space <<EOF >expected &&
|
2013-06-26 18:19:48 +08:00
|
|
|
$head1 message two
|
|
|
|
$head2 message one
|
|
|
|
$head3 add bar
|
2013-06-26 18:19:49 +08:00
|
|
|
$head4 $(commit_msg)
|
2013-04-19 07:08:50 +08:00
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
2013-07-05 20:01:47 +08:00
|
|
|
'
|
2013-04-19 07:08:50 +08:00
|
|
|
|
2013-07-05 20:01:47 +08:00
|
|
|
test_expect_success 'right alignment formatting with no padding' '
|
|
|
|
git log --pretty="format:%>(1)%s" >actual &&
|
2013-04-19 07:08:50 +08:00
|
|
|
# complete the incomplete line at the end
|
|
|
|
echo >>actual &&
|
2013-07-05 20:01:47 +08:00
|
|
|
cat <<EOF >expected &&
|
2013-04-19 07:08:50 +08:00
|
|
|
message two
|
|
|
|
message one
|
|
|
|
add bar
|
2013-06-26 18:19:49 +08:00
|
|
|
$(commit_msg)
|
2013-04-19 07:08:50 +08:00
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
2013-07-05 20:01:47 +08:00
|
|
|
'
|
2013-04-19 07:08:50 +08:00
|
|
|
|
2013-07-05 20:01:47 +08:00
|
|
|
test_expect_success 'center alignment formatting' '
|
|
|
|
git log --pretty="format:%><(40)%s" >actual &&
|
2013-04-19 07:08:50 +08:00
|
|
|
# complete the incomplete line at the end
|
|
|
|
echo >>actual &&
|
2013-07-05 20:01:47 +08:00
|
|
|
qz_to_tab_space <<EOF >expected &&
|
2013-04-19 07:08:50 +08:00
|
|
|
Z message two Z
|
|
|
|
Z message one Z
|
|
|
|
Z add bar Z
|
2013-06-26 18:19:49 +08:00
|
|
|
Z $(commit_msg) Z
|
2013-04-19 07:08:50 +08:00
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
2013-07-05 20:01:47 +08:00
|
|
|
'
|
2013-04-19 07:08:50 +08:00
|
|
|
|
2013-07-05 20:01:47 +08:00
|
|
|
test_expect_success 'center alignment formatting at the nth column' '
|
|
|
|
git log --pretty="format:%h %><|(40)%s" >actual &&
|
2013-04-19 07:08:50 +08:00
|
|
|
# complete the incomplete line at the end
|
|
|
|
echo >>actual &&
|
2013-07-05 20:01:47 +08:00
|
|
|
qz_to_tab_space <<EOF >expected &&
|
2013-06-26 18:19:48 +08:00
|
|
|
$head1 message two Z
|
|
|
|
$head2 message one Z
|
|
|
|
$head3 add bar Z
|
2013-06-26 18:19:49 +08:00
|
|
|
$head4 $(commit_msg) Z
|
2013-04-19 07:08:50 +08:00
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
2013-07-05 20:01:47 +08:00
|
|
|
'
|
2013-04-19 07:08:50 +08:00
|
|
|
|
2013-07-05 20:01:47 +08:00
|
|
|
test_expect_success 'center alignment formatting with no padding' '
|
|
|
|
git log --pretty="format:%><(1)%s" >actual &&
|
2013-04-19 07:08:50 +08:00
|
|
|
# complete the incomplete line at the end
|
|
|
|
echo >>actual &&
|
2013-07-05 20:01:47 +08:00
|
|
|
cat <<EOF >expected &&
|
2013-04-19 07:08:50 +08:00
|
|
|
message two
|
|
|
|
message one
|
|
|
|
add bar
|
2013-06-26 18:19:49 +08:00
|
|
|
$(commit_msg)
|
2013-04-19 07:08:50 +08:00
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
2013-07-05 20:01:47 +08:00
|
|
|
'
|
2013-04-19 07:08:50 +08:00
|
|
|
|
2013-07-05 20:01:47 +08:00
|
|
|
test_expect_success 'left/right alignment formatting with stealing' '
|
|
|
|
git commit --amend -m short --author "long long long <long@me.com>" &&
|
|
|
|
git log --pretty="format:%<(10,trunc)%s%>>(10,ltrunc)% an" >actual &&
|
2013-04-19 07:08:52 +08:00
|
|
|
# complete the incomplete line at the end
|
|
|
|
echo >>actual &&
|
2013-07-05 20:01:47 +08:00
|
|
|
cat <<EOF >expected &&
|
2013-04-19 07:08:52 +08:00
|
|
|
short long long long
|
|
|
|
message .. A U Thor
|
|
|
|
add bar A U Thor
|
2013-07-05 20:01:50 +08:00
|
|
|
initial... A U Thor
|
2013-04-19 07:08:52 +08:00
|
|
|
EOF
|
|
|
|
test_cmp expected actual
|
2013-07-05 20:01:47 +08:00
|
|
|
'
|
2013-04-19 07:08:52 +08:00
|
|
|
|
2010-05-02 19:00:44 +08:00
|
|
|
test_done
|