Code

Merge branch 'kb/merge-recursive-rename-threshold' into next
authorJunio C Hamano <gitster@pobox.com>
Thu, 30 Sep 2010 22:00:03 +0000 (15:00 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 30 Sep 2010 22:00:03 +0000 (15:00 -0700)
* kb/merge-recursive-rename-threshold:
  diff: add synonyms for -M, -C, -B
  merge-recursive: option to specify rename threshold

Conflicts:
Documentation/diff-options.txt

1  2 
Documentation/diff-options.txt
diff.c
diff.h
merge-recursive.c
merge-recursive.h

index f77a0f874937eb8e530d685fce2ee38e5e5f14a9,df37ccd36572ea682ccebd67c1e8dccc217add79..a5115290080230049cae98dc64107162c990d4fc
@@@ -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=<n>`.
  
 --B::
 +-B[<n>][/<m>]::
+ --break-rewrites[=[<n>][/<m>]]::
 -      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[<n>]::
+ --detect-renames[=<n>]::
  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[<n>]::
+ --detect-copies[=<n>]::
        Detect copies as well as renames.  See also `--find-copies-harder`.
 +      If `n` is specified, it has the same meaning as for `-M<n>`.
  
  ifndef::git-format-patch[]
  --diff-filter=[ACDMRTUXB*]::
diff --cc diff.c
index 71efa8edd49fe1c80fb37a0468c68ef5ab0d2596,85a7fb02f0777692151cad28f4e02f3f26918591..4732b320370e26391951f575d321b862cc2b3981
--- 1/diff.c
--- 2/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;
        }
diff --cc diff.h
Simple merge
Simple merge
Simple merge