builtin-rm: use warning() instead of fprintf(stderr, "warning: ")
[gitweb.git] / t / t3600-rm.sh
index 66aca99fd32c6b98f5e6e34a3cf7b096b3e236cf..2aefbcf47137f9be5cff8786123ce1252656abc6 100755 (executable)
@@ -21,10 +21,11 @@ embedded'
 embedded' &&
      git commit -m 'add files with tabs and newlines'
      else
-         say 'Your filesystem does not allow tabs in filenames.'
          test_tabs=n
      fi"
 
+test "$test_tabs" = n && say 'Your filesystem does not allow tabs in filenames.'
+
 # Later we will try removing an unremovable path to make sure
 # git rm barfs, but if the test is run as root that cannot be
 # arranged.
@@ -112,7 +113,7 @@ test_expect_success \
     'test_must_fail git rm -f baz'
 chmod 775 .
 else
-    test_expect_success 'skipping removal failure (perhaps running as root?)' :
+    say 'skipping removal failure test (perhaps running as root?)'
 fi
 
 test_expect_success \
@@ -187,6 +188,19 @@ test_expect_success 'but with -f it should work.' '
        test_must_fail git ls-files --error-unmatch baz
 '
 
+test_expect_success 'refuse to remove cached empty file with modifications' '
+       >empty &&
+       git add empty &&
+       echo content >empty &&
+       test_must_fail git rm --cached empty
+'
+
+test_expect_success 'remove intent-to-add file without --force' '
+       echo content >intent-to-add &&
+       git add -N intent-to-add
+       git rm --cached intent-to-add
+'
+
 test_expect_success 'Recursive test setup' '
        mkdir -p frotz &&
        echo qfwfq >frotz/nitfol &&
@@ -238,4 +252,21 @@ test_expect_success 'refresh index before checking if it is up-to-date' '
 
 '
 
+test_expect_success 'choking "git rm" should not let it die with cruft' '
+       git reset -q --hard &&
+       H=0000000000000000000000000000000000000000 &&
+       i=0 &&
+       while test $i -lt 12000
+       do
+           echo "100644 $H 0   some-file-$i"
+           i=$(( $i + 1 ))
+       done | git update-index --index-info &&
+       git rm -n "some-file-*" | :;
+       test -f .git/index.lock
+       status=$?
+       rm -f .git/index.lock
+       git reset -q --hard
+       test "$status" != 0
+'
+
 test_done