@@ -644,20 +644,72 @@ static int handle_content_merge(struct merge_options *opt,
644
644
645
645
/*** Function Grouping: functions related to regular rename detection ***/
646
646
647
+ static int process_renames (struct merge_options * opt ,
648
+ struct diff_queue_struct * renames )
649
+ {
650
+ die ("Not yet implemented." );
651
+ }
652
+
653
+ static int compare_pairs (const void * a_ , const void * b_ )
654
+ {
655
+ die ("Not yet implemented." );
656
+ }
657
+
658
+ /* Call diffcore_rename() to compute which files have changed on given side */
659
+ static void detect_regular_renames (struct merge_options * opt ,
660
+ struct tree * merge_base ,
661
+ struct tree * side ,
662
+ unsigned side_index )
663
+ {
664
+ die ("Not yet implemented." );
665
+ }
666
+
667
+ /*
668
+ * Get information of all renames which occurred in 'side_pairs', discarding
669
+ * non-renames.
670
+ */
671
+ static int collect_renames (struct merge_options * opt ,
672
+ struct diff_queue_struct * result ,
673
+ unsigned side_index )
674
+ {
675
+ die ("Not yet implemented." );
676
+ }
677
+
647
678
static int detect_and_process_renames (struct merge_options * opt ,
648
679
struct tree * merge_base ,
649
680
struct tree * side1 ,
650
681
struct tree * side2 )
651
682
{
652
- int clean = 1 ;
683
+ struct diff_queue_struct combined ;
684
+ struct rename_info * renames = & opt -> priv -> renames ;
685
+ int s , clean = 1 ;
686
+
687
+ memset (& combined , 0 , sizeof (combined ));
688
+
689
+ detect_regular_renames (opt , merge_base , side1 , MERGE_SIDE1 );
690
+ detect_regular_renames (opt , merge_base , side2 , MERGE_SIDE2 );
691
+
692
+ ALLOC_GROW (combined .queue ,
693
+ renames -> pairs [1 ].nr + renames -> pairs [2 ].nr ,
694
+ combined .alloc );
695
+ clean &= collect_renames (opt , & combined , MERGE_SIDE1 );
696
+ clean &= collect_renames (opt , & combined , MERGE_SIDE2 );
697
+ QSORT (combined .queue , combined .nr , compare_pairs );
698
+
699
+ clean &= process_renames (opt , & combined );
700
+
701
+ /* Free memory for renames->pairs[] and combined */
702
+ for (s = MERGE_SIDE1 ; s <= MERGE_SIDE2 ; s ++ ) {
703
+ free (renames -> pairs [s ].queue );
704
+ DIFF_QUEUE_CLEAR (& renames -> pairs [s ]);
705
+ }
706
+ if (combined .nr ) {
707
+ int i ;
708
+ for (i = 0 ; i < combined .nr ; i ++ )
709
+ diff_free_filepair (combined .queue [i ]);
710
+ free (combined .queue );
711
+ }
653
712
654
- /*
655
- * Rename detection works by detecting file similarity. Here we use
656
- * a really easy-to-implement scheme: files are similar IFF they have
657
- * the same filename. Therefore, by this scheme, there are no renames.
658
- *
659
- * TODO: Actually implement a real rename detection scheme.
660
- */
661
713
return clean ;
662
714
}
663
715
0 commit comments