@@ -644,20 +644,72 @@ static int handle_content_merge(struct merge_options *opt,
/*** Function Grouping: functions related to regular rename detection ***/
+static int process_renames(struct merge_options *opt,
+ struct diff_queue_struct *renames)
+{
+ die("Not yet implemented.");
+}
+
+static int compare_pairs(const void *a_, const void *b_)
+{
+ die("Not yet implemented.");
+}
+
+/* Call diffcore_rename() to compute which files have changed on given side */
+static void detect_regular_renames(struct merge_options *opt,
+ struct tree *merge_base,
+ struct tree *side,
+ unsigned side_index)
+{
+ die("Not yet implemented.");
+}
+
+/*
+ * Get information of all renames which occurred in 'side_pairs', discarding
+ * non-renames.
+ */
+static int collect_renames(struct merge_options *opt,
+ struct diff_queue_struct *result,
+ unsigned side_index)
+{
+ die("Not yet implemented.");
+}
+
static int detect_and_process_renames(struct merge_options *opt,
struct tree *merge_base,
struct tree *side1,
struct tree *side2)
{
- int clean = 1;
+ struct diff_queue_struct combined;
+ struct rename_info *renames = &opt->priv->renames;
+ int s, clean = 1;
+
+ memset(&combined, 0, sizeof(combined));
+
+ detect_regular_renames(opt, merge_base, side1, MERGE_SIDE1);
+ detect_regular_renames(opt, merge_base, side2, MERGE_SIDE2);
+
+ ALLOC_GROW(combined.queue,
+ renames->pairs[1].nr + renames->pairs[2].nr,
+ combined.alloc);
+ clean &= collect_renames(opt, &combined, MERGE_SIDE1);
+ clean &= collect_renames(opt, &combined, MERGE_SIDE2);
+ QSORT(combined.queue, combined.nr, compare_pairs);
+
+ clean &= process_renames(opt, &combined);
+
+ /* Free memory for renames->pairs[] and combined */
+ for (s = MERGE_SIDE1; s <= MERGE_SIDE2; s++) {
+ free(renames->pairs[s].queue);
+ DIFF_QUEUE_CLEAR(&renames->pairs[s]);
+ }
+ if (combined.nr) {
+ int i;
+ for (i = 0; i < combined.nr; i++)
+ diff_free_filepair(combined.queue[i]);
+ free(combined.queue);
+ }
- /*
- * Rename detection works by detecting file similarity. Here we use
- * a really easy-to-implement scheme: files are similar IFF they have
- * the same filename. Therefore, by this scheme, there are no renames.
- *
- * TODO: Actually implement a real rename detection scheme.
- */
return clean;
}