зеркало из https://github.com/microsoft/git.git
merge-recursive: move the get_renames() function
Move this function so it can re-use some others (without either moving all of them or adding an annoying split between function declarations and definitions). Cheat slightly by adding a blank line for readability, and in order to silence checkpatch.pl. Reviewed-by: Stefan Beller <sbeller@google.com> Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
e04d4a23d8
Коммит
a706e8f6fc
|
@ -537,75 +537,6 @@ struct rename {
|
||||||
unsigned processed:1;
|
unsigned processed:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
* Get information of all renames which occurred between 'o_tree' and
|
|
||||||
* 'tree'. We need the three trees in the merge ('o_tree', 'a_tree' and
|
|
||||||
* 'b_tree') to be able to associate the correct cache entries with
|
|
||||||
* the rename information. 'tree' is always equal to either a_tree or b_tree.
|
|
||||||
*/
|
|
||||||
static struct string_list *get_renames(struct merge_options *o,
|
|
||||||
struct tree *tree,
|
|
||||||
struct tree *o_tree,
|
|
||||||
struct tree *a_tree,
|
|
||||||
struct tree *b_tree,
|
|
||||||
struct string_list *entries)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
struct string_list *renames;
|
|
||||||
struct diff_options opts;
|
|
||||||
|
|
||||||
renames = xcalloc(1, sizeof(struct string_list));
|
|
||||||
if (!o->detect_rename)
|
|
||||||
return renames;
|
|
||||||
|
|
||||||
diff_setup(&opts);
|
|
||||||
opts.flags.recursive = 1;
|
|
||||||
opts.flags.rename_empty = 0;
|
|
||||||
opts.detect_rename = DIFF_DETECT_RENAME;
|
|
||||||
opts.rename_limit = o->merge_rename_limit >= 0 ? o->merge_rename_limit :
|
|
||||||
o->diff_rename_limit >= 0 ? o->diff_rename_limit :
|
|
||||||
1000;
|
|
||||||
opts.rename_score = o->rename_score;
|
|
||||||
opts.show_rename_progress = o->show_rename_progress;
|
|
||||||
opts.output_format = DIFF_FORMAT_NO_OUTPUT;
|
|
||||||
diff_setup_done(&opts);
|
|
||||||
diff_tree_oid(&o_tree->object.oid, &tree->object.oid, "", &opts);
|
|
||||||
diffcore_std(&opts);
|
|
||||||
if (opts.needed_rename_limit > o->needed_rename_limit)
|
|
||||||
o->needed_rename_limit = opts.needed_rename_limit;
|
|
||||||
for (i = 0; i < diff_queued_diff.nr; ++i) {
|
|
||||||
struct string_list_item *item;
|
|
||||||
struct rename *re;
|
|
||||||
struct diff_filepair *pair = diff_queued_diff.queue[i];
|
|
||||||
if (pair->status != 'R') {
|
|
||||||
diff_free_filepair(pair);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
re = xmalloc(sizeof(*re));
|
|
||||||
re->processed = 0;
|
|
||||||
re->pair = pair;
|
|
||||||
item = string_list_lookup(entries, re->pair->one->path);
|
|
||||||
if (!item)
|
|
||||||
re->src_entry = insert_stage_data(re->pair->one->path,
|
|
||||||
o_tree, a_tree, b_tree, entries);
|
|
||||||
else
|
|
||||||
re->src_entry = item->util;
|
|
||||||
|
|
||||||
item = string_list_lookup(entries, re->pair->two->path);
|
|
||||||
if (!item)
|
|
||||||
re->dst_entry = insert_stage_data(re->pair->two->path,
|
|
||||||
o_tree, a_tree, b_tree, entries);
|
|
||||||
else
|
|
||||||
re->dst_entry = item->util;
|
|
||||||
item = string_list_insert(renames, pair->one->path);
|
|
||||||
item->util = re;
|
|
||||||
}
|
|
||||||
opts.output_format = DIFF_FORMAT_NO_OUTPUT;
|
|
||||||
diff_queued_diff.nr = 0;
|
|
||||||
diff_flush(&opts);
|
|
||||||
return renames;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int update_stages(struct merge_options *opt, const char *path,
|
static int update_stages(struct merge_options *opt, const char *path,
|
||||||
const struct diff_filespec *o,
|
const struct diff_filespec *o,
|
||||||
const struct diff_filespec *a,
|
const struct diff_filespec *a,
|
||||||
|
@ -1380,6 +1311,76 @@ static int conflict_rename_rename_2to1(struct merge_options *o,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get information of all renames which occurred between 'o_tree' and
|
||||||
|
* 'tree'. We need the three trees in the merge ('o_tree', 'a_tree' and
|
||||||
|
* 'b_tree') to be able to associate the correct cache entries with
|
||||||
|
* the rename information. 'tree' is always equal to either a_tree or b_tree.
|
||||||
|
*/
|
||||||
|
static struct string_list *get_renames(struct merge_options *o,
|
||||||
|
struct tree *tree,
|
||||||
|
struct tree *o_tree,
|
||||||
|
struct tree *a_tree,
|
||||||
|
struct tree *b_tree,
|
||||||
|
struct string_list *entries)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
struct string_list *renames;
|
||||||
|
struct diff_options opts;
|
||||||
|
|
||||||
|
renames = xcalloc(1, sizeof(struct string_list));
|
||||||
|
if (!o->detect_rename)
|
||||||
|
return renames;
|
||||||
|
|
||||||
|
diff_setup(&opts);
|
||||||
|
opts.flags.recursive = 1;
|
||||||
|
opts.flags.rename_empty = 0;
|
||||||
|
opts.detect_rename = DIFF_DETECT_RENAME;
|
||||||
|
opts.rename_limit = o->merge_rename_limit >= 0 ? o->merge_rename_limit :
|
||||||
|
o->diff_rename_limit >= 0 ? o->diff_rename_limit :
|
||||||
|
1000;
|
||||||
|
opts.rename_score = o->rename_score;
|
||||||
|
opts.show_rename_progress = o->show_rename_progress;
|
||||||
|
opts.output_format = DIFF_FORMAT_NO_OUTPUT;
|
||||||
|
diff_setup_done(&opts);
|
||||||
|
diff_tree_oid(&o_tree->object.oid, &tree->object.oid, "", &opts);
|
||||||
|
diffcore_std(&opts);
|
||||||
|
if (opts.needed_rename_limit > o->needed_rename_limit)
|
||||||
|
o->needed_rename_limit = opts.needed_rename_limit;
|
||||||
|
for (i = 0; i < diff_queued_diff.nr; ++i) {
|
||||||
|
struct string_list_item *item;
|
||||||
|
struct rename *re;
|
||||||
|
struct diff_filepair *pair = diff_queued_diff.queue[i];
|
||||||
|
|
||||||
|
if (pair->status != 'R') {
|
||||||
|
diff_free_filepair(pair);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
re = xmalloc(sizeof(*re));
|
||||||
|
re->processed = 0;
|
||||||
|
re->pair = pair;
|
||||||
|
item = string_list_lookup(entries, re->pair->one->path);
|
||||||
|
if (!item)
|
||||||
|
re->src_entry = insert_stage_data(re->pair->one->path,
|
||||||
|
o_tree, a_tree, b_tree, entries);
|
||||||
|
else
|
||||||
|
re->src_entry = item->util;
|
||||||
|
|
||||||
|
item = string_list_lookup(entries, re->pair->two->path);
|
||||||
|
if (!item)
|
||||||
|
re->dst_entry = insert_stage_data(re->pair->two->path,
|
||||||
|
o_tree, a_tree, b_tree, entries);
|
||||||
|
else
|
||||||
|
re->dst_entry = item->util;
|
||||||
|
item = string_list_insert(renames, pair->one->path);
|
||||||
|
item->util = re;
|
||||||
|
}
|
||||||
|
opts.output_format = DIFF_FORMAT_NO_OUTPUT;
|
||||||
|
diff_queued_diff.nr = 0;
|
||||||
|
diff_flush(&opts);
|
||||||
|
return renames;
|
||||||
|
}
|
||||||
|
|
||||||
static int process_renames(struct merge_options *o,
|
static int process_renames(struct merge_options *o,
|
||||||
struct string_list *a_renames,
|
struct string_list *a_renames,
|
||||||
struct string_list *b_renames)
|
struct string_list *b_renames)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче