merge-recursive: handle D/F conflict case more carefully.
[gitweb.git] / builtin-rm.c
index d81f289c3c28fa9afbc99facf6ea81b68306a46d..8a0738f83dd31a847bf486ddb3aefef94af5e049 100644 (file)
@@ -10,7 +10,7 @@
 #include "tree-walk.h"
 
 static const char builtin_rm_usage[] =
-"git-rm [-n] [-f] [--cached] <filepattern>...";
+"git-rm [-f] [-n] [-r] [--cached] [--] <file>...";
 
 static struct {
        int nr, alloc;
@@ -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);
        }
@@ -120,7 +110,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
 
        git_config(git_default_config);
 
-       newfd = hold_lock_file_for_update(&lock_file, get_index_file(), 1);
+       newfd = hold_locked_index(&lock_file, 1);
 
        if (read_cache() < 0)
                die("index file corrupt");
@@ -230,7 +220,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
 
        if (active_cache_changed) {
                if (write_cache(newfd, active_cache, active_nr) ||
-                   close(newfd) || commit_lock_file(&lock_file))
+                   close(newfd) || commit_locked_index(&lock_file))
                        die("Unable to write new index file");
        }