diff: resurrect XDF_NEED_MINIMAL with --minimal
authorJunio C Hamano <gitster@pobox.com>
Sun, 2 Oct 2011 04:56:28 +0000 (21:56 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 3 Oct 2011 18:58:18 +0000 (11:58 -0700)
Earlier, 582aa00 (git diff too slow for a file, 2010-05-02)
unconditionally dropped XDF_NEED_MINIMAL option from the internal xdiff
invocation to help performance on pathological cases, while hinting that a
follow-up patch could reintroduce it with "--minimal" option from the
command line.

Make it so.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/diff-options.txt
diff.c

index b620b3afeca14166840fb76b4cefe1e4038fb47e..5c53bdba948ea817e01e169a9fc183d4fc2d1313 100644 (file)
@@ -45,6 +45,10 @@ ifndef::git-format-patch[]
        Synonym for `-p --raw`.
 endif::git-format-patch[]
 
+--minimal::
+       Spend extra time to make sure the smallest possible
+       diff is produced.
+
 --patience::
        Generate a diff using the "patience diff" algorithm.
 
diff --git a/diff.c b/diff.c
index 93ef9a265ca6b52b644468979dba732c70b5097a..c261cc049d1870845a500bafb6bf53067cf00fc3 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -3385,6 +3385,10 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
        }
 
        /* xdiff options */
+       else if (!strcmp(arg, "--minimal"))
+               DIFF_XDL_SET(options, NEED_MINIMAL);
+       else if (!strcmp(arg, "--no-minimal"))
+               DIFF_XDL_CLR(options, NEED_MINIMAL);
        else if (!strcmp(arg, "-w") || !strcmp(arg, "--ignore-all-space"))
                DIFF_XDL_SET(options, IGNORE_WHITESPACE);
        else if (!strcmp(arg, "-b") || !strcmp(arg, "--ignore-space-change"))