diffcore-rename: fall back to -C when -C -C busts the rename limit
When there are too many paths in the project, the number of rename source candidates "git diff -C -C" finds will exceed the rename detection limit, and no inexact rename detection is performed. We however could fall back to "git diff -C" if the number of modified paths is sufficiently small. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
@ -247,6 +247,8 @@ static void finish_early_output(struct rev_info *rev)
|
||||
static int cmd_log_walk(struct rev_info *rev)
|
||||
{
|
||||
struct commit *commit;
|
||||
int saved_nrl = 0;
|
||||
int saved_dcctc = 0;
|
||||
|
||||
if (rev->early_output)
|
||||
setup_early_output(rev);
|
||||
@ -277,7 +279,14 @@ static int cmd_log_walk(struct rev_info *rev)
|
||||
}
|
||||
free_commit_list(commit->parents);
|
||||
commit->parents = NULL;
|
||||
if (saved_nrl < rev->diffopt.needed_rename_limit)
|
||||
saved_nrl = rev->diffopt.needed_rename_limit;
|
||||
if (rev->diffopt.degraded_cc_to_c)
|
||||
saved_dcctc = 1;
|
||||
}
|
||||
rev->diffopt.degraded_cc_to_c = saved_dcctc;
|
||||
rev->diffopt.needed_rename_limit = saved_nrl;
|
||||
|
||||
if (rev->diffopt.output_format & DIFF_FORMAT_CHECKDIFF &&
|
||||
DIFF_OPT_TST(&rev->diffopt, CHECK_FAILED)) {
|
||||
return 02;
|
||||
|
Reference in New Issue
Block a user