From: Junio C Hamano Date: Thu, 30 Sep 2010 22:00:03 +0000 (-0700) Subject: Merge branch 'kb/merge-recursive-rename-threshold' into next X-Git-Tag: ko-next~196 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=4f33817d59605a5d0766babe3ef8acf34900c44e;p=git.git Merge branch 'kb/merge-recursive-rename-threshold' into next * kb/merge-recursive-rename-threshold: diff: add synonyms for -M, -C, -B merge-recursive: option to specify rename threshold Conflicts: Documentation/diff-options.txt --- 4f33817d59605a5d0766babe3ef8acf34900c44e diff --cc Documentation/diff-options.txt index f77a0f874,df37ccd36..a51152900 --- a/Documentation/diff-options.txt +++ b/Documentation/diff-options.txt @@@ -206,29 -206,12 +206,31 @@@ endif::git-format-patch[ the diff-patch output format. Non default number of digits can be specified with `--abbrev=`. --B:: +-B[][/]:: + --break-rewrites[=[][/]]:: - Break complete rewrite changes into pairs of delete and create. - --M:: + Break complete rewrite changes into pairs of delete and + create. This serves two purposes: ++ +It affects the way a change that amounts to a total rewrite of a file +not as a series of deletion and insertion mixed together with a very +few lines that happen to match textually as the context, but as a +single deletion of everything old followed by a single insertion of +everything new, and the number `m` controls this aspect of the -B +option (defaults to 60%). `-B/70%` specifies that less than 30% of the +original should remain in the result for git to consider it a total +rewrite (i.e. otherwise the resulting patch will be a series of +deletion and insertion mixed together with context lines). ++ +When used with -M, a totally-rewritten file is also considered as the +source of a rename (usually -M only considers a file that disappeared +as the source of a rename), and the number `n` controls this aspect of +the -B option (defaults to 50%). `-B20%` specifies that a change with +addition and deletion compared to 20% or more of the file's size are +eligible for being picked up as a possible source of a rename to +another file. + +-M[]:: + --detect-renames[=]:: ifndef::git-log[] Detect renames. endif::git-log[] @@@ -237,15 -220,10 +239,16 @@@ ifdef::git-log[ For following files across renames while traversing history, see `--follow`. endif::git-log[] + If `n` is specified, it is a is a threshold on the similarity + index (i.e. amount of addition/deletions compared to the + file's size). For example, `-M90%` means git should consider a + delete/add pair to be a rename if more than 90% of the file + hasn't changed. --C:: +-C[]:: + --detect-copies[=]:: Detect copies as well as renames. See also `--find-copies-harder`. + If `n` is specified, it has the same meaning as for `-M`. ifndef::git-format-patch[] --diff-filter=[ACDMRTUXB*]:: diff --cc diff.c index 71efa8edd,85a7fb02f..4732b3203 --- a/diff.c +++ b/diff.c @@@ -3135,12 -3030,37 +3135,13 @@@ int diff_opt_parse(struct diff_options options->output_format |= DIFF_FORMAT_NAME_STATUS; else if (!strcmp(arg, "-s")) options->output_format |= DIFF_FORMAT_NO_OUTPUT; - else if (!prefixcmp(arg, "--stat")) { - char *end; - int width = options->stat_width; - int name_width = options->stat_name_width; - arg += 6; - end = (char *)arg; - - switch (*arg) { - case '-': - if (!prefixcmp(arg, "-width=")) - width = strtoul(arg + 7, &end, 10); - else if (!prefixcmp(arg, "-name-width=")) - name_width = strtoul(arg + 12, &end, 10); - break; - case '=': - width = strtoul(arg+1, &end, 10); - if (*end == ',') - name_width = strtoul(end+1, &end, 10); - } - - /* Important! This checks all the error cases! */ - if (*end) - return 0; - options->output_format |= DIFF_FORMAT_DIFFSTAT; - options->stat_name_width = name_width; - options->stat_width = width; - } + else if (!prefixcmp(arg, "--stat")) + /* --stat, --stat-width, or --stat-name-width */ + return stat_opt(options, av); /* renames options */ - else if (!prefixcmp(arg, "-B")) { + else if (!prefixcmp(arg, "-B") || !prefixcmp(arg, "--break-rewrites=") || + !strcmp(arg, "--break-rewrites")) { if ((options->break_opt = diff_scoreopt_parse(arg)) == -1) return -1; }