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>
108 lines
2.8 KiB
Bash
Executable file
108 lines
2.8 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2009 Eric Wong, Mark Lodato
|
|
#
|
|
|
|
test_description='git svn authors prog tests'
|
|
|
|
. ./lib-git-svn.sh
|
|
|
|
write_script svn-authors-prog "$PERL_PATH" <<-\EOF
|
|
$_ = shift;
|
|
if (s/-hermit//) {
|
|
print "$_ <>\n";
|
|
} elsif (s/-sub$//) {
|
|
print "$_ <$_\@sub.example.com>\n";
|
|
} else {
|
|
print "$_ <$_\@example.com>\n";
|
|
}
|
|
EOF
|
|
|
|
test_expect_success 'svn-authors setup' '
|
|
cat >svn-authors <<-\EOF
|
|
ff = FFFFFFF FFFFFFF <fFf@other.example.com>
|
|
EOF
|
|
'
|
|
|
|
test_expect_success 'setup svnrepo' '
|
|
for i in aa bb cc-sub dd-sub ee-foo ff
|
|
do
|
|
svn mkdir -m $i --username $i "$svnrepo"/$i || return 1
|
|
done
|
|
'
|
|
|
|
test_expect_success 'import authors with prog and file' '
|
|
git svn clone --authors-prog=./svn-authors-prog \
|
|
--authors-file=svn-authors "$svnrepo" x
|
|
'
|
|
|
|
test_expect_success 'imported 6 revisions successfully' '
|
|
(
|
|
cd x &&
|
|
git rev-list refs/remotes/git-svn >actual &&
|
|
test_line_count = 6 actual
|
|
)
|
|
'
|
|
|
|
test_expect_success 'authors-prog ran correctly' '
|
|
(
|
|
cd x &&
|
|
git rev-list -1 --pretty=raw refs/remotes/git-svn~1 >actual &&
|
|
grep "^author ee-foo <ee-foo@example\.com> " actual &&
|
|
git rev-list -1 --pretty=raw refs/remotes/git-svn~2 >actual &&
|
|
grep "^author dd <dd@sub\.example\.com> " actual &&
|
|
git rev-list -1 --pretty=raw refs/remotes/git-svn~3 >actual &&
|
|
grep "^author cc <cc@sub\.example\.com> " actual &&
|
|
git rev-list -1 --pretty=raw refs/remotes/git-svn~4 >actual &&
|
|
grep "^author bb <bb@example\.com> " actual &&
|
|
git rev-list -1 --pretty=raw refs/remotes/git-svn~5 >actual &&
|
|
grep "^author aa <aa@example\.com> " actual
|
|
)
|
|
'
|
|
|
|
test_expect_success 'authors-file overrode authors-prog' '
|
|
(
|
|
cd x &&
|
|
git rev-list -1 --pretty=raw refs/remotes/git-svn >actual &&
|
|
grep "^author FFFFFFF FFFFFFF <fFf@other\.example\.com> " actual
|
|
)
|
|
'
|
|
|
|
git --git-dir=x/.git config --unset svn.authorsfile
|
|
git --git-dir=x/.git config --unset svn.authorsprog
|
|
|
|
test_expect_success 'authors-prog imported user without email' '
|
|
svn mkdir -m gg --username gg-hermit "$svnrepo"/gg &&
|
|
(
|
|
cd x &&
|
|
git svn fetch --authors-prog=../svn-authors-prog &&
|
|
git rev-list -1 --pretty=raw refs/remotes/git-svn | \
|
|
grep "^author gg <> "
|
|
)
|
|
'
|
|
|
|
test_expect_success 'imported without authors-prog and authors-file' '
|
|
svn mkdir -m hh --username hh "$svnrepo"/hh &&
|
|
(
|
|
uuid=$(svn info "$svnrepo" |
|
|
sed -n "s/^Repository UUID: //p") &&
|
|
cd x &&
|
|
git svn fetch &&
|
|
git rev-list -1 --pretty=raw refs/remotes/git-svn | \
|
|
grep "^author hh <hh@$uuid> "
|
|
)
|
|
'
|
|
|
|
test_expect_success 'authors-prog handled special characters in username' '
|
|
svn mkdir -m bad --username "xyz; touch evil" "$svnrepo"/bad &&
|
|
(
|
|
cd x &&
|
|
git svn --authors-prog=../svn-authors-prog fetch &&
|
|
git rev-list -1 --pretty=raw refs/remotes/git-svn >actual &&
|
|
grep "^author xyz; touch evil <xyz; touch evil@example\.com> " actual &&
|
|
! test -f evil
|
|
)
|
|
'
|
|
|
|
test_done
|