Merge branch 'ib/t3700-add-chmod-x-updates' into tg/add-chmod+x-fix
[gitweb.git] / t / t3700-add.sh
index 1fa5dfd5cccb77ba1e0ea4b76f25d007051dcd9e..2978cb9d640d1e826e8fb9b96e99bc69ee86f09d 100755 (executable)
@@ -7,6 +7,20 @@ test_description='Test of git add, including the -- option.'
 
 . ./test-lib.sh
 
+# Test the file mode "$1" of the file "$2" in the index.
+test_mode_in_index () {
+       case "$(git ls-files -s "$2")" in
+       "$1 "*" $2")
+               echo pass
+               ;;
+       *)
+               echo fail
+               git ls-files -s "$2"
+               return 1
+               ;;
+       esac
+}
+
 test_expect_success \
     'Test of git add' \
     'touch foo && git add foo'
@@ -25,18 +39,12 @@ test_expect_success \
         echo foo >xfoo1 &&
         chmod 755 xfoo1 &&
         git add xfoo1 &&
-        case "$(git ls-files --stage xfoo1)" in
-        100644" "*xfoo1) echo pass;;
-        *) echo fail; git ls-files --stage xfoo1; (exit 1);;
-        esac'
+        test_mode_in_index 100644 xfoo1'
 
 test_expect_success 'git add: filemode=0 should not get confused by symlink' '
        rm -f xfoo1 &&
        test_ln_s_add foo xfoo1 &&
-       case "$(git ls-files --stage xfoo1)" in
-       120000" "*xfoo1) echo pass;;
-       *) echo fail; git ls-files --stage xfoo1; (exit 1);;
-       esac
+       test_mode_in_index 120000 xfoo1
 '
 
 test_expect_success \
@@ -45,28 +53,19 @@ test_expect_success \
         echo foo >xfoo2 &&
         chmod 755 xfoo2 &&
         git update-index --add xfoo2 &&
-        case "$(git ls-files --stage xfoo2)" in
-        100644" "*xfoo2) echo pass;;
-        *) echo fail; git ls-files --stage xfoo2; (exit 1);;
-        esac'
+        test_mode_in_index 100644 xfoo2'
 
 test_expect_success 'git add: filemode=0 should not get confused by symlink' '
        rm -f xfoo2 &&
        test_ln_s_add foo xfoo2 &&
-       case "$(git ls-files --stage xfoo2)" in
-       120000" "*xfoo2) echo pass;;
-       *) echo fail; git ls-files --stage xfoo2; (exit 1);;
-       esac
+       test_mode_in_index 120000 xfoo2
 '
 
 test_expect_success \
        'git update-index --add: Test that executable bit is not used...' \
        'git config core.filemode 0 &&
         test_ln_s_add xfoo2 xfoo3 &&   # runs git update-index --add
-        case "$(git ls-files --stage xfoo3)" in
-        120000" "*xfoo3) echo pass;;
-        *) echo fail; git ls-files --stage xfoo3; (exit 1);;
-        esac'
+        test_mode_in_index 120000 xfoo3'
 
 test_expect_success '.gitignore test setup' '
        echo "*.ig" >.gitignore &&
@@ -336,15 +335,9 @@ test_expect_success 'git add --chmod=[+-]x stages correctly' '
        rm -f foo1 &&
        echo foo >foo1 &&
        git add --chmod=+x foo1 &&
-       case "$(git ls-files --stage foo1)" in
-       100755" "*foo1) echo pass;;
-       *) echo fail; git ls-files --stage foo1; (exit 1);;
-       esac &&
+       test_mode_in_index 100755 foo1 &&
        git add --chmod=-x foo1 &&
-       case "$(git ls-files --stage foo1)" in
-       100644" "*foo1) echo pass;;
-       *) echo fail; git ls-files --stage foo1; (exit 1);;
-       esac
+       test_mode_in_index 100644 foo1
 '
 
 test_expect_success POSIXPERM,SYMLINKS 'git add --chmod=+x with symlinks' '
@@ -353,10 +346,7 @@ test_expect_success POSIXPERM,SYMLINKS 'git add --chmod=+x with symlinks' '
        rm -f foo2 &&
        echo foo >foo2 &&
        git add --chmod=+x foo2 &&
-       case "$(git ls-files --stage foo2)" in
-       100755" "*foo2) echo pass;;
-       *) echo fail; git ls-files --stage foo2; (exit 1);;
-       esac
+       test_mode_in_index 100755 foo2
 '
 
 test_done