summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2007-03-26 20:55:39 +0200
committerJunio C Hamano <junkio@cox.net>2007-03-27 21:43:39 +0200
commite4d9516b2196623d927e232b4e8766269a837fe6 (patch)
tree385d5bc225ed5983a619449688c7fadba1abceaa
parentBisect: Use "git-show-ref --verify" when reseting. (diff)
downloadgit-e4d9516b2196623d927e232b4e8766269a837fe6.tar.xz
git-e4d9516b2196623d927e232b4e8766269a837fe6.zip
git-rm: don't remove newly added file without -f
Given this set of commands: $ echo "newly added file" >new $ git add new $ git rm new the file "new" was previously removed from the working directory and the index. Because it was not in HEAD, it is available only by searching for unreachable objects. Instead, we now err on the safe side and refuse to remove a file which is not referenced by HEAD. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--builtin-rm.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/builtin-rm.c b/builtin-rm.c
index 00dbe39960..bf42003a7e 100644
--- a/builtin-rm.c
+++ b/builtin-rm.c
@@ -89,20 +89,10 @@ static int check_local_mod(unsigned char *head)
if (ce_match_stat(ce, &st, 0))
errs = error("'%s' has local modifications "
"(hint: try -f)", ce->name);
- if (no_head)
- continue;
- /*
- * It is Ok to remove a newly added path, as long as
- * it is cache-clean.
- */
- if (get_tree_entry(head, name, sha1, &mode))
- continue;
- /*
- * Otherwise make sure the version from the HEAD
- * matches the index.
- */
- if (ce->ce_mode != create_ce_mode(mode) ||
- hashcmp(ce->sha1, sha1))
+ if (no_head
+ || get_tree_entry(head, name, sha1, &mode)
+ || ce->ce_mode != create_ce_mode(mode)
+ || hashcmp(ce->sha1, sha1))
errs = error("'%s' has changes staged in the index "
"(hint: try -f)", name);
}