提交 fd777141 编写于 作者: J Jeff King 提交者: Junio C Hamano

t0020: fix ignored exit code inside loops

A loop like:

  for f in one two; do
	  something $f ||
	  break
  done

will correctly break out of the loop when we see a failure
of one item, but the resulting exit code will always be
zero. We can fix that by putting the loop into a function or
subshell, but in this case it is simpler still to just
unroll the loop. We do add a helper function, which
hopefully makes the end result even more readable (in
addition to being shorter).
Reported-by: NSZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: NJeff King <peff@peff.net>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 ecb590a9
......@@ -8,6 +8,13 @@ has_cr() {
tr '\015' Q <"$1" | grep Q >/dev/null
}
# add or remove CRs to disk file in-place
# usage: munge_cr <append|remove> <file>
munge_cr () {
"${1}_cr" <"$2" >tmp &&
mv tmp "$2"
}
test_expect_success setup '
git config core.autocrlf false &&
......@@ -100,14 +107,9 @@ test_expect_success 'update with autocrlf=input' '
rm -f tmp one dir/two three &&
git read-tree --reset -u HEAD &&
git config core.autocrlf input &&
for f in one dir/two
do
append_cr <$f >tmp && mv -f tmp $f &&
git update-index -- $f ||
break
done &&
munge_cr append one &&
munge_cr append dir/two &&
git update-index -- one dir/two &&
differs=$(git diff-index --cached HEAD) &&
verbose test -z "$differs"
......@@ -118,14 +120,9 @@ test_expect_success 'update with autocrlf=true' '
rm -f tmp one dir/two three &&
git read-tree --reset -u HEAD &&
git config core.autocrlf true &&
for f in one dir/two
do
append_cr <$f >tmp && mv -f tmp $f &&
git update-index -- $f ||
break
done &&
munge_cr append one &&
munge_cr append dir/two &&
git update-index -- one dir/two &&
differs=$(git diff-index --cached HEAD) &&
verbose test -z "$differs"
......@@ -136,13 +133,9 @@ test_expect_success 'checkout with autocrlf=true' '
rm -f tmp one dir/two three &&
git config core.autocrlf true &&
git read-tree --reset -u HEAD &&
for f in one dir/two
do
remove_cr <"$f" >tmp && mv -f tmp $f &&
verbose git update-index -- $f ||
break
done &&
munge_cr remove one &&
munge_cr remove dir/two &&
git update-index -- one dir/two &&
test "$one" = $(git hash-object --stdin <one) &&
test "$two" = $(git hash-object --stdin <dir/two) &&
differs=$(git diff-index --cached HEAD) &&
......@@ -154,18 +147,9 @@ test_expect_success 'checkout with autocrlf=input' '
rm -f tmp one dir/two three &&
git config core.autocrlf input &&
git read-tree --reset -u HEAD &&
for f in one dir/two
do
if has_cr "$f"
then
echo "Eh? $f"
false
break
else
git update-index -- $f
fi
done &&
test_must_fail has_cr one &&
test_must_fail has_cr two &&
git update-index -- one dir/two &&
test "$one" = $(git hash-object --stdin <one) &&
test "$two" = $(git hash-object --stdin <dir/two) &&
differs=$(git diff-index --cached HEAD) &&
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册