Merge branch 'jc/rename-degrade-cc-to-c'

* jc/rename-degrade-cc-to-c:
  diffcore-rename: fall back to -C when -C -C busts the rename limit
  diffcore-rename: record filepair for rename src
  diffcore-rename: refactor "too many candidates" logic
  builtin/diff.c: remove duplicated call to diff_result_code()
This commit is contained in:
Junio C Hamano
2011-04-28 14:11:43 -07:00
8 changed files with 152 additions and 40 deletions

26
diff.c
View File

@ -3987,6 +3987,28 @@ static int is_summary_empty(const struct diff_queue_struct *q)
return 1;
}
static const char rename_limit_warning[] =
"inexact rename detection was skipped due to too many files.";
static const char degrade_cc_to_c_warning[] =
"only found copies from modified paths due to too many files.";
static const char rename_limit_advice[] =
"you may want to set your %s variable to at least "
"%d and retry the command.";
void diff_warn_rename_limit(const char *varname, int needed, int degraded_cc)
{
if (degraded_cc)
warning(degrade_cc_to_c_warning);
else if (needed)
warning(rename_limit_warning);
else
return;
if (0 < needed && needed < 32767)
warning(rename_limit_advice, varname, needed);
}
void diff_flush(struct diff_options *options)
{
struct diff_queue_struct *q = &diff_queued_diff;
@ -4268,6 +4290,10 @@ void diffcore_std(struct diff_options *options)
int diff_result_code(struct diff_options *opt, int status)
{
int result = 0;
diff_warn_rename_limit("diff.renamelimit",
opt->needed_rename_limit,
opt->degraded_cc_to_c);
if (!DIFF_OPT_TST(opt, EXIT_WITH_STATUS) &&
!(opt->output_format & DIFF_FORMAT_CHECKDIFF))
return status;