Merge branch 'jk/remote-literal-string-leakfix'
[gitweb.git] / t / t3600-rm.sh
index 5c87b55645e249929585c2ed0e7bcf98a1b62da3..639cb70941078cbf10fb0653ac34dd511941f909 100755 (executable)
@@ -263,6 +263,7 @@ test_expect_success 'rm removes subdirectories recursively' '
 '
 
 cat >expect <<EOF
+M  .gitmodules
 D  submod
 EOF
 
@@ -270,6 +271,15 @@ cat >expect.modified <<EOF
  M submod
 EOF
 
+cat >expect.cached <<EOF
+D  submod
+EOF
+
+cat >expect.both_deleted<<EOF
+D  .gitmodules
+D  submod
+EOF
+
 test_expect_success 'rm removes empty submodules from work tree' '
        mkdir submod &&
        git update-index --add --cacheinfo 160000 $(git rev-parse HEAD) submod &&
@@ -281,16 +291,20 @@ test_expect_success 'rm removes empty submodules from work tree' '
        git rm submod &&
        test ! -e submod &&
        git status -s -uno --ignore-submodules=none > actual &&
-       test_cmp expect actual
+       test_cmp expect actual &&
+       test_must_fail git config -f .gitmodules submodule.sub.url &&
+       test_must_fail git config -f .gitmodules submodule.sub.path
 '
 
-test_expect_success 'rm removes removed submodule from index' '
+test_expect_success 'rm removes removed submodule from index and .gitmodules' '
        git reset --hard &&
        git submodule update &&
        rm -rf submod &&
        git rm submod &&
        git status -s -uno --ignore-submodules=none > actual &&
-       test_cmp expect actual
+       test_cmp expect actual &&
+       test_must_fail git config -f .gitmodules submodule.sub.url &&
+       test_must_fail git config -f .gitmodules submodule.sub.path
 '
 
 test_expect_success 'rm removes work tree of unmodified submodules' '
@@ -299,7 +313,9 @@ test_expect_success 'rm removes work tree of unmodified submodules' '
        git rm submod &&
        test ! -d submod &&
        git status -s -uno --ignore-submodules=none > actual &&
-       test_cmp expect actual
+       test_cmp expect actual &&
+       test_must_fail git config -f .gitmodules submodule.sub.url &&
+       test_must_fail git config -f .gitmodules submodule.sub.path
 '
 
 test_expect_success 'rm removes a submodule with a trailing /' '
@@ -333,6 +349,72 @@ test_expect_success 'rm of a populated submodule with different HEAD fails unles
        git rm -f submod &&
        test ! -d submod &&
        git status -s -uno --ignore-submodules=none > actual &&
+       test_cmp expect actual &&
+       test_must_fail git config -f .gitmodules submodule.sub.url &&
+       test_must_fail git config -f .gitmodules submodule.sub.path
+'
+
+test_expect_success 'rm --cached leaves work tree of populated submodules and .gitmodules alone' '
+       git reset --hard &&
+       git submodule update &&
+       git rm --cached submod &&
+       test -d submod &&
+       test -f submod/.git &&
+       git status -s -uno >actual &&
+       test_cmp expect.cached actual &&
+       git config -f .gitmodules submodule.sub.url &&
+       git config -f .gitmodules submodule.sub.path
+'
+
+test_expect_success 'rm --dry-run does not touch the submodule or .gitmodules' '
+       git reset --hard &&
+       git submodule update &&
+       git rm -n submod &&
+       test -f submod/.git &&
+       git diff-index --exit-code HEAD
+'
+
+test_expect_success 'rm does not complain when no .gitmodules file is found' '
+       git reset --hard &&
+       git submodule update &&
+       git rm .gitmodules &&
+       git rm submod >actual 2>actual.err &&
+       ! test -s actual.err &&
+       ! test -d submod &&
+       ! test -f submod/.git &&
+       git status -s -uno >actual &&
+       test_cmp expect.both_deleted actual
+'
+
+test_expect_success 'rm will error out on a modified .gitmodules file unless staged' '
+       git reset --hard &&
+       git submodule update &&
+       git config -f .gitmodules foo.bar true &&
+       test_must_fail git rm submod >actual 2>actual.err &&
+       test -s actual.err &&
+       test -d submod &&
+       test -f submod/.git &&
+       git diff-files --quiet -- submod &&
+       git add .gitmodules &&
+       git rm submod >actual 2>actual.err &&
+       ! test -s actual.err &&
+       ! test -d submod &&
+       ! test -f submod/.git &&
+       git status -s -uno >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'rm issues a warning when section is not found in .gitmodules' '
+       git reset --hard &&
+       git submodule update &&
+       git config -f .gitmodules --remove-section submodule.sub &&
+       git add .gitmodules &&
+       echo "warning: Could not find section in .gitmodules where path=submod" >expect.err &&
+       git rm submod >actual 2>actual.err &&
+       test_i18ncmp expect.err actual.err &&
+       ! test -d submod &&
+       ! test -f submod/.git &&
+       git status -s -uno >actual &&
        test_cmp expect actual
 '
 
@@ -427,7 +509,9 @@ test_expect_success 'rm of a conflicted populated submodule with different HEAD
        git rm -f submod &&
        test ! -d submod &&
        git status -s -uno --ignore-submodules=none > actual &&
-       test_cmp expect actual
+       test_cmp expect actual &&
+       test_must_fail git config -f .gitmodules submodule.sub.url &&
+       test_must_fail git config -f .gitmodules submodule.sub.path
 '
 
 test_expect_success 'rm of a conflicted populated submodule with modifications fails unless forced' '
@@ -446,7 +530,9 @@ test_expect_success 'rm of a conflicted populated submodule with modifications f
        git rm -f submod &&
        test ! -d submod &&
        git status -s -uno --ignore-submodules=none > actual &&
-       test_cmp expect actual
+       test_cmp expect actual &&
+       test_must_fail git config -f .gitmodules submodule.sub.url &&
+       test_must_fail git config -f .gitmodules submodule.sub.path
 '
 
 test_expect_success 'rm of a conflicted populated submodule with untracked files fails unless forced' '