@ -344,10 +344,11 @@ static void make_room_for_directories_of_df_conflicts(struct merge_options *o,
@@ -344,10 +344,11 @@ static void make_room_for_directories_of_df_conflicts(struct merge_options *o,
* make room for the corresponding directory. Such paths will
* later be processed in process_df_entry() at the end. If
* the corresponding directory ends up being removed by the
* merge, then the file will be reinstated at that time;
* otherwise, if the file is not supposed to be removed by the
* merge, the contents of the file will be placed in another
* unique filename.
* merge, then the file will be reinstated at that time
* (albeit with a different timestamp!); otherwise, if the
* file is not supposed to be removed by the merge, the
* contents of the file will be placed in another unique
* filename.
*
* NOTE: This function relies on the fact that entries for a
* D/F conflict will appear adjacent in the index, with the
@ -358,6 +359,13 @@ static void make_room_for_directories_of_df_conflicts(struct merge_options *o,
@@ -358,6 +359,13 @@ static void make_room_for_directories_of_df_conflicts(struct merge_options *o,
int last_len = 0;
int i;
/*
* Do not do any of this crazyness during the recursive; we don't
* even write anything to the working tree!
*/
if (o->call_depth)
return;
for (i = 0; i < entries->nr; i++) {
const char *path = entries->items[i].string;
int len = strlen(path);
@ -1260,9 +1268,13 @@ static int merge_content(struct merge_options *o,
@@ -1260,9 +1268,13 @@ static int merge_content(struct merge_options *o,
}
if (mfi.clean && !df_conflict_remains &&
sha_eq(mfi.sha, a_sha) && mfi.mode == a.mode)
sha_eq(mfi.sha, a_sha) && mfi.mode == a.mode &&
!o->call_depth && !lstat(path, &st)) {
output(o, 3, "Skipped %s (merged same as existing)", path);
else
add_cacheinfo(mfi.mode, mfi.sha, path,
0 /*stage*/, 1 /*refresh*/, 0 /*options*/);
return mfi.clean;
} else
output(o, 2, "Auto-merging %s", path);
if (!mfi.clean) {