Merge branch 'js/maint-merge-recursive-r-d-conflict'
authorJunio C Hamano <gitster@pobox.com>
Wed, 7 Jan 2009 08:09:42 +0000 (00:09 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 7 Jan 2009 08:09:42 +0000 (00:09 -0800)
* js/maint-merge-recursive-r-d-conflict:
merge-recursive: mark rename/delete conflict as unmerged

1  2 
merge-recursive.c
diff --combined merge-recursive.c
index 2da4333439d01d29365d150aed3156aceb0cfbd9,69e71522048a3eeb70a093ae3c17a225168e932b..b97026bd5cc1d2ef1b46a9ef3dcd7562ad52c377
@@@ -447,30 -447,6 +447,30 @@@ static void flush_buffer(int fd, const 
        }
  }
  
 +static int would_lose_untracked(const char *path)
 +{
 +      int pos = cache_name_pos(path, strlen(path));
 +
 +      if (pos < 0)
 +              pos = -1 - pos;
 +      while (pos < active_nr &&
 +             !strcmp(path, active_cache[pos]->name)) {
 +              /*
 +               * If stage #0, it is definitely tracked.
 +               * If it has stage #2 then it was tracked
 +               * before this merge started.  All other
 +               * cases the path was not tracked.
 +               */
 +              switch (ce_stage(active_cache[pos])) {
 +              case 0:
 +              case 2:
 +                      return 0;
 +              }
 +              pos++;
 +      }
 +      return file_exists(path);
 +}
 +
  static int make_room_for_path(const char *path)
  {
        int status;
                die(msg, path, "");
        }
  
 +      /*
 +       * Do not unlink a file in the work tree if we are not
 +       * tracking it.
 +       */
 +      if (would_lose_untracked(path))
 +              return error("refusing to lose untracked file at '%s'",
 +                           path);
 +
        /* Successful unlink is good.. */
        if (!unlink(path))
                return 0;
@@@ -934,6 -902,11 +934,11 @@@ static int process_renames(struct merge
                                       ren1_src, ren1_dst, branch1,
                                       branch2);
                                update_file(o, 0, ren1->pair->two->sha1, ren1->pair->two->mode, ren1_dst);
+                               update_stages(ren1_dst, NULL,
+                                               branch1 == o->branch1 ?
+                                               ren1->pair->two : NULL,
+                                               branch1 == o->branch1 ?
+                                               NULL : ren1->pair->two, 1);
                        } else if (!sha_eq(dst_other.sha1, null_sha1)) {
                                const char *new_path;
                                clean_merge = 0;