Merge branch 'js/tests-windows-port-fix'
authorJunio C Hamano <gitster@pobox.com>
Fri, 1 Nov 2013 14:38:54 +0000 (07:38 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 1 Nov 2013 14:38:54 +0000 (07:38 -0700)
* js/tests-windows-port-fix:
tests: undo special treatment of CRLF for Windows
Windows: a test_cmp that is agnostic to random LF <> CRLF conversions
t5300-pack-object: do not compare binary data using test_cmp

t/lib-credential.sh
t/t5300-pack-object.sh
t/t7407-submodule-foreach.sh
t/t9001-send-email.sh
t/test-lib-functions.sh
t/test-lib.sh
index 3c43ff11b305c5d533323c1ed9520ac52d0cfbe3..957ae936e8b785f8b1afbffd9a5918a3260d213f 100755 (executable)
@@ -18,10 +18,6 @@ check() {
                cat stderr &&
                false
        fi &&
-       if test_have_prereq MINGW
-       then
-               dos2unix -q stderr
-       fi &&
        test_cmp expect-stdout stdout &&
        test_cmp expect-stderr stderr
 }
index a07c871797d22e1da4b2d3904cab024a7bef37b4..61e787dca121928a191051acc40aefffabbcc0e1 100755 (executable)
@@ -151,7 +151,7 @@ test_expect_success \
            git cat-file $t $object || return 1
         done <obj-list
     } >current &&
-    test_cmp expect current'
+    cmp expect current'
 
 test_expect_success \
     'use packed deltified (REF_DELTA) objects' \
@@ -166,7 +166,7 @@ test_expect_success \
            git cat-file $t $object || return 1
         done <obj-list
     } >current &&
-    test_cmp expect current'
+    cmp expect current'
 
 test_expect_success \
     'use packed deltified (OFS_DELTA) objects' \
@@ -181,7 +181,7 @@ test_expect_success \
            git cat-file $t $object || return 1
         done <obj-list
     } >current &&
-    test_cmp expect current'
+    cmp expect current'
 
 unset GIT_OBJECT_DIRECTORY
 
@@ -195,9 +195,9 @@ test_expect_success 'survive missing objects/pack directory' '
                rm -fr $GOP &&
                git index-pack --stdin --keep=test <../test-3-${packname_3}.pack &&
                test -f $GOP/pack-${packname_3}.pack &&
-               test_cmp $GOP/pack-${packname_3}.pack ../test-3-${packname_3}.pack &&
+               cmp $GOP/pack-${packname_3}.pack ../test-3-${packname_3}.pack &&
                test -f $GOP/pack-${packname_3}.idx &&
-               test_cmp $GOP/pack-${packname_3}.idx ../test-3-${packname_3}.idx &&
+               cmp $GOP/pack-${packname_3}.idx ../test-3-${packname_3}.idx &&
                test -f $GOP/pack-${packname_3}.keep
        )
 '
index be93f10cf02bc77e7c78be41bea69b4268305e66..b64c9ed8e73644b52aff38c7b4dca248ab690c73 100755 (executable)
@@ -254,10 +254,6 @@ test_expect_success 'ensure "status --cached --recursive" preserves the --cached
                ) &&
                git submodule status --cached --recursive -- nested1 > ../actual
        ) &&
-       if test_have_prereq MINGW
-       then
-               dos2unix actual
-       fi &&
        test_cmp expect actual
 '
 
index 2813aa9a61dc52d6d72f684c51fe6894e623754d..3119c8c523168922d42448ffbd1ee4c9647b0567 100755 (executable)
@@ -23,7 +23,6 @@ test_expect_success $PREREQ \
       echo do
       echo "  echo \"!\$a!\""
       echo "done >commandline\$output"
-      test_have_prereq MINGW && echo "dos2unix commandline\$output"
       echo "cat > msgtxt\$output"
       ) >fake.sendmail &&
      chmod +x ./fake.sendmail &&
index a7e9aacbb2d9b05b0d5083a0fd70cb9287fcf454..f98769427b51017db7b9d757fd12e582609dbb03 100644 (file)
@@ -710,3 +710,69 @@ test_ln_s_add () {
                git update-index --add --cacheinfo 120000 $ln_s_obj "$2"
        fi
 }
+
+# The following mingw_* functions obey POSIX shell syntax, but are actually
+# bash scripts, and are meant to be used only with bash on Windows.
+
+# A test_cmp function that treats LF and CRLF equal and avoids to fork
+# diff when possible.
+mingw_test_cmp () {
+       # Read text into shell variables and compare them. If the results
+       # are different, use regular diff to report the difference.
+       local test_cmp_a= test_cmp_b=
+
+       # When text came from stdin (one argument is '-') we must feed it
+       # to diff.
+       local stdin_for_diff=
+
+       # Since it is difficult to detect the difference between an
+       # empty input file and a failure to read the files, we go straight
+       # to diff if one of the inputs is empty.
+       if test -s "$1" && test -s "$2"
+       then
+               # regular case: both files non-empty
+               mingw_read_file_strip_cr_ test_cmp_a <"$1"
+               mingw_read_file_strip_cr_ test_cmp_b <"$2"
+       elif test -s "$1" && test "$2" = -
+       then
+               # read 2nd file from stdin
+               mingw_read_file_strip_cr_ test_cmp_a <"$1"
+               mingw_read_file_strip_cr_ test_cmp_b
+               stdin_for_diff='<<<"$test_cmp_b"'
+       elif test "$1" = - && test -s "$2"
+       then
+               # read 1st file from stdin
+               mingw_read_file_strip_cr_ test_cmp_a
+               mingw_read_file_strip_cr_ test_cmp_b <"$2"
+               stdin_for_diff='<<<"$test_cmp_a"'
+       fi
+       test -n "$test_cmp_a" &&
+       test -n "$test_cmp_b" &&
+       test "$test_cmp_a" = "$test_cmp_b" ||
+       eval "diff -u \"\$@\" $stdin_for_diff"
+}
+
+# $1 is the name of the shell variable to fill in
+mingw_read_file_strip_cr_ () {
+       # Read line-wise using LF as the line separator
+       # and use IFS to strip CR.
+       local line
+       while :
+       do
+               if IFS=$'\r' read -r -d $'\n' line
+               then
+                       # good
+                       line=$line$'\n'
+               else
+                       # we get here at EOF, but also if the last line
+                       # was not terminated by LF; in the latter case,
+                       # some text was read
+                       if test -z "$line"
+                       then
+                               # EOF, really
+                               break
+                       fi
+               fi
+               eval "$1=\$$1\$line"
+       done
+}
index 9802b0b0e99dfb9019c9839a040b6f54fe040ea0..b25249ec4cc2844f5cd7491dd5fcc88c884ff450 100644 (file)
@@ -752,6 +752,7 @@ case $(uname -s) in
        test_set_prereq NOT_CYGWIN
        test_set_prereq SED_STRIPS_CR
        test_set_prereq GREP_STRIPS_CR
+       GIT_TEST_CMP=mingw_test_cmp
        ;;
 *CYGWIN*)
        test_set_prereq POSIXPERM