merge-ort: add initial outline for basic rename detection
Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
864075ec43
commit
e1a124e8dc
68
merge-ort.c
68
merge-ort.c
@ -644,20 +644,72 @@ static int handle_content_merge(struct merge_options *opt,
|
|||||||
|
|
||||||
/*** Function Grouping: functions related to regular rename detection ***/
|
/*** 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,
|
static int detect_and_process_renames(struct merge_options *opt,
|
||||||
struct tree *merge_base,
|
struct tree *merge_base,
|
||||||
struct tree *side1,
|
struct tree *side1,
|
||||||
struct tree *side2)
|
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;
|
return clean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user