t6044: add more testcases with staged changes before a merge is invoked
[gitweb.git] / merge-recursive.c
index 129577987ba25402a6b9494b103a4643e2b37e68..171587bc7aab23bd7576ca7a5c2ad7d5ef42a942 100644 (file)
@@ -1983,10 +1983,10 @@ int merge_trees(struct merge_options *o,
        if (oid_eq(&common->object.oid, &merge->object.oid)) {
                struct strbuf sb = STRBUF_INIT;
 
-               if (!o->call_depth && index_has_changes(&sb)) {
-                       err(o, _("Dirty index: cannot merge (dirty: %s)"),
+               if (!o->call_depth && index_has_changes(&the_index, head, &sb)) {
+                       err(o, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
                            sb.buf);
-                       return 0;
+                       return -1;
                }
                output(o, 0, _("Already up to date!"));
                *result = head;
@@ -2090,7 +2090,7 @@ int merge_recursive(struct merge_options *o,
 {
        struct commit_list *iter;
        struct commit *merged_common_ancestors;
-       struct tree *mrtree = mrtree;
+       struct tree *mrtree;
        int clean;
 
        if (show(o, 4)) {
@@ -2223,10 +2223,9 @@ int merge_recursive_generic(struct merge_options *o,
                return clean;
        }
 
-       if (active_cache_changed &&
-           write_locked_index(&the_index, &lock, COMMIT_LOCK))
+       if (write_locked_index(&the_index, &lock,
+                              COMMIT_LOCK | SKIP_IF_UNCHANGED))
                return err(o, _("Unable to write index."));
-       rollback_lock_file(&lock);
 
        return clean ? 0 : 1;
 }