@@ -855,8 +855,11 @@ static void conflict_rename_rename_1to2(struct merge_options *o,
855
855
* update_file(o, 0, pair2->two->sha1, pair2->two->mode, dst_name2);
856
856
*/
857
857
} else {
858
- update_stages (dst_name1 , NULL , pair1 -> two , NULL , 1 );
859
- update_stages (dst_name2 , NULL , NULL , pair2 -> two , 1 );
858
+ update_stages (ren1_dst , NULL , pair1 -> two , NULL , 1 );
859
+ update_stages (ren2_dst , NULL , NULL , pair2 -> two , 1 );
860
+
861
+ update_file (o , 0 , pair1 -> two -> sha1 , pair1 -> two -> mode , dst_name1 );
862
+ update_file (o , 0 , pair2 -> two -> sha1 , pair2 -> two -> mode , dst_name2 );
860
863
}
861
864
while (delp -- )
862
865
free (del [delp ]);
@@ -958,19 +961,15 @@ static int process_renames(struct merge_options *o,
958
961
ren2 -> dst_entry -> processed = 1 ;
959
962
ren2 -> processed = 1 ;
960
963
if (strcmp (ren1_dst , ren2_dst ) != 0 ) {
961
- clean_merge = 0 ;
962
- output (o , 1 , "CONFLICT (rename/rename): "
963
- "Rename \"%s\"->\"%s\" in branch \"%s\" "
964
- "rename \"%s\"->\"%s\" in \"%s\"%s" ,
965
- src , ren1_dst , branch1 ,
966
- src , ren2_dst , branch2 ,
967
- o -> call_depth ? " (left unresolved)" : "" );
968
- if (o -> call_depth ) {
969
- remove_file_from_cache (src );
970
- update_file (o , 0 , ren1 -> pair -> one -> sha1 ,
971
- ren1 -> pair -> one -> mode , src );
972
- }
973
- conflict_rename_rename_1to2 (o , ren1 -> pair , branch1 , ren2 -> pair , branch2 );
964
+ setup_rename_df_conflict_info (RENAME_ONE_FILE_TO_TWO ,
965
+ ren1 -> pair ,
966
+ ren2 -> pair ,
967
+ branch1 ,
968
+ branch2 ,
969
+ ren1 -> dst_entry ,
970
+ ren2 -> dst_entry );
971
+ remove_file (o , 0 , ren1_dst , 0 );
972
+ /* ren2_dst not in head, so no need to delete */
974
973
} else {
975
974
struct merge_file_info mfi ;
976
975
remove_file (o , 1 , ren1_src , 1 );
@@ -1364,7 +1363,33 @@ static int process_df_entry(struct merge_options *o,
1364
1363
1365
1364
entry -> processed = 1 ;
1366
1365
if (entry -> rename_df_conflict_info ) {
1367
- die ("Not yet implemented." );
1366
+ struct rename_df_conflict_info * conflict_info = entry -> rename_df_conflict_info ;
1367
+ char * src ;
1368
+ switch (conflict_info -> rename_type ) {
1369
+ case RENAME_ONE_FILE_TO_TWO :
1370
+ src = conflict_info -> pair1 -> one -> path ;
1371
+ clean_merge = 0 ;
1372
+ output (o , 1 , "CONFLICT (rename/rename): "
1373
+ "Rename \"%s\"->\"%s\" in branch \"%s\" "
1374
+ "rename \"%s\"->\"%s\" in \"%s\"%s" ,
1375
+ src , conflict_info -> pair1 -> two -> path , conflict_info -> branch1 ,
1376
+ src , conflict_info -> pair2 -> two -> path , conflict_info -> branch2 ,
1377
+ o -> call_depth ? " (left unresolved)" : "" );
1378
+ if (o -> call_depth ) {
1379
+ remove_file_from_cache (src );
1380
+ update_file (o , 0 , conflict_info -> pair1 -> one -> sha1 ,
1381
+ conflict_info -> pair1 -> one -> mode , src );
1382
+ }
1383
+ conflict_rename_rename_1to2 (o , conflict_info -> pair1 ,
1384
+ conflict_info -> branch1 ,
1385
+ conflict_info -> pair2 ,
1386
+ conflict_info -> branch2 );
1387
+ conflict_info -> dst_entry2 -> processed = 1 ;
1388
+ break ;
1389
+ default :
1390
+ entry -> processed = 0 ;
1391
+ break ;
1392
+ }
1368
1393
} else if (!o_sha && !!a_sha != !!b_sha ) {
1369
1394
/* directory -> (directory, file) */
1370
1395
const char * add_branch ;
0 commit comments