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: SZEDER Gábor <sze...@ira.uka.de>
Signed-off-by: Jeff King <p...@peff.net>
---
You can make each call site a one-liner that does the loop inside the
function (including the update-index call). But I tried to shoot for
readability rather than absolute minimum characters.

 t/t0020-crlf.sh | 54 +++++++++++++++++++-----------------------------------
 1 file changed, 19 insertions(+), 35 deletions(-)

diff --git a/t/t0020-crlf.sh b/t/t0020-crlf.sh
index 9fa26df..144fdcd 100755
--- a/t/t0020-crlf.sh
+++ b/t/t0020-crlf.sh
@@ -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) &&
-- 
2.3.4.635.gd6ffcfe

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to