@@ -2758,23 +2758,22 @@ static int process_renames(struct merge_options *opt,
2758
2758
const struct rename * sre ;
2759
2759
2760
2760
/*
2761
- * FIXME: As string-list.h notes, it's O(n^2) to build a sorted
2762
- * string_list one-by-one, but O(n log n) to build it unsorted and
2763
- * then sort it. Note that as we build the list, we do not need to
2764
- * check if the existing destination path is already in the list,
2765
- * because the structure of diffcore_rename guarantees we won't
2766
- * have duplicates.
2761
+ * Note that as we build the list, we do not need to check if the
2762
+ * existing destination path is already in the list, because the
2763
+ * structure of diffcore_rename guarantees we won't have duplicates.
2767
2764
*/
2768
2765
for (i = 0 ; i < a_renames -> nr ; i ++ ) {
2769
2766
sre = a_renames -> items [i ].util ;
2770
- string_list_insert (& a_by_dst , sre -> pair -> two -> path )-> util
2767
+ string_list_append (& a_by_dst , sre -> pair -> two -> path )-> util
2771
2768
= (void * )sre ;
2772
2769
}
2773
2770
for (i = 0 ; i < b_renames -> nr ; i ++ ) {
2774
2771
sre = b_renames -> items [i ].util ;
2775
- string_list_insert (& b_by_dst , sre -> pair -> two -> path )-> util
2772
+ string_list_append (& b_by_dst , sre -> pair -> two -> path )-> util
2776
2773
= (void * )sre ;
2777
2774
}
2775
+ string_list_sort (& a_by_dst );
2776
+ string_list_sort (& b_by_dst );
2778
2777
2779
2778
for (i = 0 , j = 0 ; i < a_renames -> nr || j < b_renames -> nr ;) {
2780
2779
struct string_list * renames1 , * renames2Dst ;
0 commit comments