conflict_rename_normal() was doing some handling for dirty files that
more naturally belonged in merge_content.  Move it, and rename a
parameter for clarity while at it.

Signed-off-by: Elijah Newren <new...@gmail.com>
---
 merge-recursive.c | 30 ++++++++++++------------------
 1 file changed, 12 insertions(+), 18 deletions(-)

diff --git a/merge-recursive.c b/merge-recursive.c
index b0f74cb243..7b0081565a 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -2727,7 +2727,7 @@ static int handle_modify_delete(struct merge_options *o,
 
 static int merge_content(struct merge_options *o,
                         const char *path,
-                        int file_in_way,
+                        int is_dirty,
                         struct object_id *o_oid, int o_mode,
                         struct object_id *a_oid, int a_mode,
                         struct object_id *b_oid, int b_mode,
@@ -2803,7 +2803,7 @@ static int merge_content(struct merge_options *o,
                                return -1;
        }
 
-       if (df_conflict_remains || file_in_way) {
+       if (df_conflict_remains || is_dirty) {
                char *new_path;
                if (o->call_depth) {
                        remove_file_from_cache(path);
@@ -2825,6 +2825,10 @@ static int merge_content(struct merge_options *o,
 
                }
                new_path = unique_path(o, path, rename_conflict_info->branch1);
+               if (is_dirty) {
+                       output(o, 1, _("Refusing to lose dirty file at %s"),
+                              path);
+               }
                output(o, 1, _("Adding as %s instead"), new_path);
                if (update_file(o, 0, &mfi.oid, mfi.mode, new_path)) {
                        free(new_path);
@@ -2834,7 +2838,7 @@ static int merge_content(struct merge_options *o,
                mfi.clean = 0;
        } else if (update_file(o, mfi.clean, &mfi.oid, mfi.mode, path))
                return -1;
-       return mfi.clean;
+       return !is_dirty && mfi.clean;
 }
 
 static int conflict_rename_normal(struct merge_options *o,
@@ -2844,21 +2848,10 @@ static int conflict_rename_normal(struct merge_options 
*o,
                                  struct object_id *b_oid, unsigned int b_mode,
                                  struct rename_conflict_info *ci)
 {
-       int clean_merge;
-       int file_in_the_way = 0;
-
-       if (was_dirty(o, path)) {
-               file_in_the_way = 1;
-               output(o, 1, _("Refusing to lose dirty file at %s"), path);
-       }
-
        /* Merge the content and write it out */
-       clean_merge = merge_content(o, path, file_in_the_way,
-                                   o_oid, o_mode, a_oid, a_mode, b_oid, b_mode,
-                                   ci);
-       if (clean_merge > 0 && file_in_the_way)
-               clean_merge = 0;
-       return clean_merge;
+       return merge_content(o, path, was_dirty(o, path),
+                            o_oid, o_mode, a_oid, a_mode, b_oid, b_mode,
+                            ci);
 }
 
 /* Per entry merge function */
@@ -2981,7 +2974,8 @@ static int process_entry(struct merge_options *o,
        } else if (a_oid && b_oid) {
                /* Case C: Added in both (check for same permissions) and */
                /* case D: Modified in both, but differently. */
-               clean_merge = merge_content(o, path, 0 /* file_in_way */,
+               int is_dirty = 0; /* unpack_trees would have bailed if dirty */
+               clean_merge = merge_content(o, path, is_dirty,
                                            o_oid, o_mode, a_oid, a_mode, 
b_oid, b_mode,
                                            NULL);
        } else if (!o_oid && !a_oid && !b_oid) {
-- 
2.17.0.290.ge988e9ce2a

Reply via email to