Skip to content

Commit f831acc

Browse files
peffgitster
authored andcommitted
t9107: use "return 1" instead of "exit 1"
When a test runs a loop, it cannot rely on the usual &&-chaining to propagate a failure inside the loop; it needs to break out with a failure signal. However, unless you are in a subshell, doing so with "exit 1" will exit the entire test script, not just the test snippet we are in (and cause the harness to complain that test_done was never reached). So the fundamental point of this patch is s/exit/return/. But while we're there, let's fix a number of style and readability issues: - snippets in double-quotes need an extra layer of quoting for their meta-characters; let's avoid that by using single quotes - accumulating loop output by appending to a file in each iteration is brittle, as it can be affected by content left in the file by earlier tests. Instead, it's better to redirect stdout for the whole loop, so we know the output only comes from that loop. - using "test -z" to check that diff output is empty is overly verbose; we can just ask diff to use --exit-code. - we can factor out long lists of refs to make it more obvious we're using the same ones in each loop - subshells are unnecessary when ending an &&-chain with "|| return 1" - minor style fixups like space-after-redirection, and "do" and "done" on their own lines Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 577dfd0 commit f831acc

File tree

1 file changed

+26
-16
lines changed

1 file changed

+26
-16
lines changed

t/t9107-git-svn-migrate.sh

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,11 @@ test_expect_success 'initialize a multi-repository repo' '
5656
"^tags/\*:refs/remotes/origin/tags/\*$" &&
5757
git config --add svn-remote.svn.fetch "branches/a:refs/remotes/origin/a" &&
5858
git config --add svn-remote.svn.fetch "branches/b:refs/remotes/origin/b" &&
59-
for i in tags/0.1 tags/0.2 tags/0.3; do
59+
for i in tags/0.1 tags/0.2 tags/0.3
60+
do
6061
git config --add svn-remote.svn.fetch \
61-
$i:refs/remotes/origin/$i || exit 1; done &&
62+
$i:refs/remotes/origin/$i || return 1
63+
done &&
6264
git config --get-all svn-remote.svn.fetch > fetch.out &&
6365
grep "^trunk:refs/remotes/origin/trunk$" fetch.out &&
6466
grep "^branches/a:refs/remotes/origin/a$" fetch.out &&
@@ -70,30 +72,38 @@ test_expect_success 'initialize a multi-repository repo' '
7072
'
7173

7274
# refs should all be different, but the trees should all be the same:
73-
test_expect_success 'multi-fetch works on partial urls + paths' "
75+
test_expect_success 'multi-fetch works on partial urls + paths' '
76+
refs="trunk a b tags/0.1 tags/0.2 tags/0.3" &&
7477
git svn multi-fetch &&
75-
for i in trunk a b tags/0.1 tags/0.2 tags/0.3; do
76-
git rev-parse --verify refs/remotes/origin/\$i^0 >> refs.out || exit 1;
77-
done &&
78-
test -z \"\$(sort < refs.out | uniq -d)\" &&
79-
for i in trunk a b tags/0.1 tags/0.2 tags/0.3; do
80-
for j in trunk a b tags/0.1 tags/0.2 tags/0.3; do
81-
if test \$j != \$i; then continue; fi
82-
test -z \"\$(git diff refs/remotes/origin/\$i \
83-
refs/remotes/origin/\$j)\" ||exit 1; done; done
84-
"
78+
for i in $refs
79+
do
80+
git rev-parse --verify refs/remotes/origin/$i^0 || return 1;
81+
done >refs.out &&
82+
test -z "$(sort <refs.out | uniq -d)" &&
83+
for i in $refs
84+
do
85+
for j in $refs
86+
do
87+
git diff --exit-code refs/remotes/origin/$i \
88+
refs/remotes/origin/$j ||
89+
return 1
90+
done
91+
done
92+
'
8593

8694
test_expect_success 'migrate --minimize on old inited layout' '
8795
git config --unset-all svn-remote.svn.fetch &&
8896
git config --unset-all svn-remote.svn.url &&
8997
rm -rf "$GIT_DIR"/svn &&
90-
for i in $(cat fetch.out); do
98+
for i in $(cat fetch.out)
99+
do
91100
path=$(expr $i : "\([^:]*\):.*$")
92101
ref=$(expr $i : "[^:]*:\(refs/remotes/.*\)$")
93102
if test -z "$ref"; then continue; fi
94103
if test -n "$path"; then path="/$path"; fi
95-
( mkdir -p "$GIT_DIR"/svn/$ref/info/ &&
96-
echo "$svnrepo"$path > "$GIT_DIR"/svn/$ref/info/url ) || exit 1;
104+
mkdir -p "$GIT_DIR"/svn/$ref/info/ &&
105+
echo "$svnrepo"$path >"$GIT_DIR"/svn/$ref/info/url ||
106+
return 1
97107
done &&
98108
git svn migrate --minimize &&
99109
test -z "$(git config -l | grep "^svn-remote\.git-svn\.")" &&

0 commit comments

Comments
 (0)