mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
![Eric Sunshine](/assets/img/avatar_default.png)
Failures within `for` and `while` loops can go unnoticed if not detected and signaled manually since the loop itself does not abort when a contained command fails, nor will a failure necessarily be detected when the loop finishes since the loop returns the exit code of the last command it ran on the final iteration, which may not be the command which failed. Therefore, detect and signal failures manually within loops using the idiom `|| return 1` (or `|| exit 1` within subshells). Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Reviewed-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
374 lines
10 KiB
Bash
Executable file
374 lines
10 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2012 Zbigniew Jędrzejewski-Szmek
|
|
#
|
|
|
|
test_description='test --stat output of various commands'
|
|
|
|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
|
|
|
. ./test-lib.sh
|
|
. "$TEST_DIRECTORY"/lib-terminal.sh
|
|
|
|
# 120 character name
|
|
name=aaaaaaaaaa
|
|
name=$name$name$name$name$name$name$name$name$name$name$name$name
|
|
test_expect_success 'preparation' '
|
|
>"$name" &&
|
|
git add "$name" &&
|
|
git commit -m message &&
|
|
echo a >"$name" &&
|
|
git commit -m message "$name"
|
|
'
|
|
|
|
cat >expect72 <<-'EOF'
|
|
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
|
EOF
|
|
test_expect_success "format-patch: small change with long name gives more space to the name" '
|
|
git format-patch -1 --stdout >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp expect72 actual
|
|
'
|
|
|
|
while read cmd args
|
|
do
|
|
cat >expect80 <<-'EOF'
|
|
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
|
EOF
|
|
test_expect_success "$cmd: small change with long name gives more space to the name" '
|
|
git $cmd $args >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp expect80 actual
|
|
'
|
|
done <<\EOF
|
|
diff HEAD^ HEAD --stat
|
|
show --stat
|
|
log -1 --stat
|
|
EOF
|
|
|
|
cat >expect.60 <<-'EOF'
|
|
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
|
EOF
|
|
cat >expect.6030 <<-'EOF'
|
|
...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
|
EOF
|
|
cat >expect2.60 <<-'EOF'
|
|
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
|
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
|
EOF
|
|
cat >expect2.6030 <<-'EOF'
|
|
...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
|
...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
|
EOF
|
|
while read expect cmd args
|
|
do
|
|
test_expect_success "$cmd --stat=width: a long name is given more room when the bar is short" '
|
|
git $cmd $args --stat=40 >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp $expect.60 actual
|
|
'
|
|
|
|
test_expect_success "$cmd --stat-width=width with long name" '
|
|
git $cmd $args --stat-width=40 >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp $expect.60 actual
|
|
'
|
|
|
|
test_expect_success "$cmd --stat=...,name-width with long name" '
|
|
git $cmd $args --stat=60,30 >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp $expect.6030 actual
|
|
'
|
|
|
|
test_expect_success "$cmd --stat-name-width with long name" '
|
|
git $cmd $args --stat-name-width=30 >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp $expect.6030 actual
|
|
'
|
|
done <<\EOF
|
|
expect2 format-patch --cover-letter -1 --stdout
|
|
expect diff HEAD^ HEAD --stat
|
|
expect show --stat
|
|
expect log -1 --stat
|
|
EOF
|
|
|
|
|
|
test_expect_success 'preparation for big change tests' '
|
|
>abcd &&
|
|
git add abcd &&
|
|
git commit -m message &&
|
|
i=0 &&
|
|
while test $i -lt 1000
|
|
do
|
|
echo $i && i=$(($i + 1)) || return 1
|
|
done >abcd &&
|
|
git commit -m message abcd
|
|
'
|
|
|
|
cat >expect72 <<'EOF'
|
|
abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
EOF
|
|
test_expect_success "format-patch --cover-letter ignores COLUMNS (big change)" '
|
|
COLUMNS=200 git format-patch -1 --stdout --cover-letter >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp expect72 actual
|
|
'
|
|
|
|
cat >expect72 <<'EOF'
|
|
abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
EOF
|
|
cat >expect72-graph <<'EOF'
|
|
| abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
EOF
|
|
cat >expect200 <<'EOF'
|
|
abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
EOF
|
|
cat >expect200-graph <<'EOF'
|
|
| abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
EOF
|
|
while read verb expect cmd args
|
|
do
|
|
test_expect_success "$cmd $verb COLUMNS (big change)" '
|
|
COLUMNS=200 git $cmd $args >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp "$expect" actual
|
|
'
|
|
|
|
case "$cmd" in diff|show) continue;; esac
|
|
|
|
test_expect_success "$cmd --graph $verb COLUMNS (big change)" '
|
|
COLUMNS=200 git $cmd $args --graph >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp "$expect-graph" actual
|
|
'
|
|
done <<\EOF
|
|
ignores expect72 format-patch -1 --stdout
|
|
respects expect200 diff HEAD^ HEAD --stat
|
|
respects expect200 show --stat
|
|
respects expect200 log -1 --stat
|
|
EOF
|
|
|
|
cat >expect40 <<'EOF'
|
|
abcd | 1000 ++++++++++++++++++++++++++
|
|
EOF
|
|
cat >expect40-graph <<'EOF'
|
|
| abcd | 1000 ++++++++++++++++++++++++
|
|
EOF
|
|
while read verb expect cmd args
|
|
do
|
|
test_expect_success "$cmd $verb not enough COLUMNS (big change)" '
|
|
COLUMNS=40 git $cmd $args >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp "$expect" actual
|
|
'
|
|
|
|
case "$cmd" in diff|show) continue;; esac
|
|
|
|
test_expect_success "$cmd --graph $verb not enough COLUMNS (big change)" '
|
|
COLUMNS=40 git $cmd $args --graph >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp "$expect-graph" actual
|
|
'
|
|
done <<\EOF
|
|
ignores expect72 format-patch -1 --stdout
|
|
respects expect40 diff HEAD^ HEAD --stat
|
|
respects expect40 show --stat
|
|
respects expect40 log -1 --stat
|
|
EOF
|
|
|
|
cat >expect40 <<'EOF'
|
|
abcd | 1000 ++++++++++++++++++++++++++
|
|
EOF
|
|
cat >expect40-graph <<'EOF'
|
|
| abcd | 1000 ++++++++++++++++++++++++++
|
|
EOF
|
|
while read verb expect cmd args
|
|
do
|
|
test_expect_success "$cmd $verb statGraphWidth config" '
|
|
git -c diff.statGraphWidth=26 $cmd $args >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp "$expect" actual
|
|
'
|
|
|
|
case "$cmd" in diff|show) continue;; esac
|
|
|
|
test_expect_success "$cmd --graph $verb statGraphWidth config" '
|
|
git -c diff.statGraphWidth=26 $cmd $args --graph >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp "$expect-graph" actual
|
|
'
|
|
done <<\EOF
|
|
ignores expect72 format-patch -1 --stdout
|
|
respects expect40 diff HEAD^ HEAD --stat
|
|
respects expect40 show --stat
|
|
respects expect40 log -1 --stat
|
|
EOF
|
|
|
|
|
|
cat >expect <<'EOF'
|
|
abcd | 1000 ++++++++++++++++++++++++++
|
|
EOF
|
|
cat >expect-graph <<'EOF'
|
|
| abcd | 1000 ++++++++++++++++++++++++++
|
|
EOF
|
|
while read cmd args
|
|
do
|
|
test_expect_success "$cmd --stat=width with big change" '
|
|
git $cmd $args --stat=40 >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success "$cmd --stat-width=width with big change" '
|
|
git $cmd $args --stat-width=40 >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success "$cmd --stat-graph-width with big change" '
|
|
git $cmd $args --stat-graph-width=26 >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
case "$cmd" in diff|show) continue;; esac
|
|
|
|
test_expect_success "$cmd --stat-width=width --graph with big change" '
|
|
git $cmd $args --stat-width=40 --graph >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp expect-graph actual
|
|
'
|
|
|
|
test_expect_success "$cmd --stat-graph-width --graph with big change" '
|
|
git $cmd $args --stat-graph-width=26 --graph >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp expect-graph actual
|
|
'
|
|
done <<\EOF
|
|
format-patch -1 --stdout
|
|
diff HEAD^ HEAD --stat
|
|
show --stat
|
|
log -1 --stat
|
|
EOF
|
|
|
|
test_expect_success 'preparation for long filename tests' '
|
|
cp abcd aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
|
|
git add aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
|
|
git commit -m message
|
|
'
|
|
|
|
cat >expect <<'EOF'
|
|
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++
|
|
EOF
|
|
cat >expect-graph <<'EOF'
|
|
| ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++
|
|
EOF
|
|
while read cmd args
|
|
do
|
|
test_expect_success "$cmd --stat=width with big change is more balanced" '
|
|
git $cmd $args --stat-width=60 >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
case "$cmd" in diff|show) continue;; esac
|
|
|
|
test_expect_success "$cmd --stat=width --graph with big change is balanced" '
|
|
git $cmd $args --stat-width=60 --graph >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp expect-graph actual
|
|
'
|
|
done <<\EOF
|
|
format-patch -1 --stdout
|
|
diff HEAD^ HEAD --stat
|
|
show --stat
|
|
log -1 --stat
|
|
EOF
|
|
|
|
cat >expect72 <<'EOF'
|
|
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++
|
|
EOF
|
|
cat >expect72-graph <<'EOF'
|
|
| ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++
|
|
EOF
|
|
cat >expect200 <<'EOF'
|
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
EOF
|
|
cat >expect200-graph <<'EOF'
|
|
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
EOF
|
|
while read verb expect cmd args
|
|
do
|
|
test_expect_success "$cmd $verb COLUMNS (long filename)" '
|
|
COLUMNS=200 git $cmd $args >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp "$expect" actual
|
|
'
|
|
|
|
case "$cmd" in diff|show) continue;; esac
|
|
|
|
test_expect_success "$cmd --graph $verb COLUMNS (long filename)" '
|
|
COLUMNS=200 git $cmd $args --graph >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp "$expect-graph" actual
|
|
'
|
|
done <<\EOF
|
|
ignores expect72 format-patch -1 --stdout
|
|
respects expect200 diff HEAD^ HEAD --stat
|
|
respects expect200 show --stat
|
|
respects expect200 log -1 --stat
|
|
EOF
|
|
|
|
cat >expect1 <<'EOF'
|
|
...aaaaaaa | 1000 ++++++
|
|
EOF
|
|
cat >expect1-graph <<'EOF'
|
|
| ...aaaaaaa | 1000 ++++++
|
|
EOF
|
|
while read verb expect cmd args
|
|
do
|
|
test_expect_success COLUMNS_CAN_BE_1 \
|
|
"$cmd $verb prefix greater than COLUMNS (big change)" '
|
|
COLUMNS=1 git $cmd $args >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp "$expect" actual
|
|
'
|
|
|
|
case "$cmd" in diff|show) continue;; esac
|
|
|
|
test_expect_success COLUMNS_CAN_BE_1 \
|
|
"$cmd --graph $verb prefix greater than COLUMNS (big change)" '
|
|
COLUMNS=1 git $cmd $args --graph >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp "$expect-graph" actual
|
|
'
|
|
done <<\EOF
|
|
ignores expect72 format-patch -1 --stdout
|
|
respects expect1 diff HEAD^ HEAD --stat
|
|
respects expect1 show --stat
|
|
respects expect1 log -1 --stat
|
|
EOF
|
|
|
|
cat >expect <<'EOF'
|
|
abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
EOF
|
|
test_expect_success 'merge --stat respects COLUMNS (big change)' '
|
|
git checkout -b branch HEAD^^ &&
|
|
COLUMNS=100 git merge --stat --no-ff main^ >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
cat >expect <<'EOF'
|
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++++++++++++++++++++++++
|
|
EOF
|
|
test_expect_success 'merge --stat respects COLUMNS (long filename)' '
|
|
COLUMNS=100 git merge --stat --no-ff main >output &&
|
|
grep " | " output >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_done
|