]> git.ipfire.org Git - thirdparty/git.git/commitdiff
diff: add --default-prefix option
authorJeff King <peff@peff.net>
Thu, 9 Mar 2023 06:09:54 +0000 (01:09 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 9 Mar 2023 16:32:21 +0000 (08:32 -0800)
You can change the output of prefixes with diff.noprefix and
diff.mnemonicprefix, but there's no easy way to override them from the
command-line. We do have "--no-prefix", but there's no way to get back
to the default prefix. So let's add an option to do that.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/diff-options.txt
diff.c
t/t4013-diff-various.sh

index 7d73e976d9936bb35981ad7f64b0af66865491b8..08ab86189a7b62cf88898d04a57ed3e943bdc311 100644 (file)
@@ -852,6 +852,11 @@ endif::git-format-patch[]
 --no-prefix::
        Do not show any source or destination prefix.
 
+--default-prefix::
+       Use the default source and destination prefixes ("a/" and "b/").
+       This is usually the default already, but may be used to override
+       config such as `diff.noprefix`.
+
 --line-prefix=<prefix>::
        Prepend an additional prefix to every line of output.
 
diff --git a/diff.c b/diff.c
index 750d1b1a6c36b5a10fd26226f6dec7b50973d46e..b322e319ff363b02fefa16b47d579283fa4344f4 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -5275,6 +5275,17 @@ static int diff_opt_no_prefix(const struct option *opt,
        return 0;
 }
 
+static int diff_opt_default_prefix(const struct option *opt,
+                                  const char *optarg, int unset)
+{
+       struct diff_options *options = opt->value;
+
+       BUG_ON_OPT_NEG(unset);
+       BUG_ON_OPT_ARG(optarg);
+       diff_set_default_prefix(options);
+       return 0;
+}
+
 static enum parse_opt_result diff_opt_output(struct parse_opt_ctx_t *ctx,
                                             const struct option *opt,
                                             const char *arg, int unset)
@@ -5564,6 +5575,9 @@ struct option *add_diff_options(const struct option *opts,
                OPT_CALLBACK_F(0, "no-prefix", options, NULL,
                               N_("do not show any source or destination prefix"),
                               PARSE_OPT_NONEG | PARSE_OPT_NOARG, diff_opt_no_prefix),
+               OPT_CALLBACK_F(0, "default-prefix", options, NULL,
+                              N_("use default prefixes a/ and b/"),
+                              PARSE_OPT_NONEG | PARSE_OPT_NOARG, diff_opt_default_prefix),
                OPT_INTEGER_F(0, "inter-hunk-context", &options->interhunkcontext,
                              N_("show context between diff hunks up to the specified number of lines"),
                              PARSE_OPT_NONEG),
index 0bc695798983157827ea29c242d17411c127aba9..5de1d190759f958f8c3c0319f7b4cca34f39d83c 100755 (executable)
@@ -643,9 +643,19 @@ test_expect_success 'diff respects diff.noprefix' '
        check_prefix actual file0 file0
 '
 
+test_expect_success 'diff --default-prefix overrides diff.noprefix' '
+       git -c diff.noprefix diff --default-prefix >actual &&
+       check_prefix actual a/file0 b/file0
+'
+
 test_expect_success 'diff respects diff.mnemonicprefix' '
        git -c diff.mnemonicprefix diff >actual &&
        check_prefix actual i/file0 w/file0
 '
 
+test_expect_success 'diff --default-prefix overrides diff.mnemonicprefix' '
+       git -c diff.mnemonicprefix diff --default-prefix >actual &&
+       check_prefix actual a/file0 b/file0
+'
+
 test_done