From b39a5697296659c344cd0a286b51303fd5375fab Mon Sep 17 00:00:00 2001 From: Jeff King Date: Thu, 9 Mar 2023 01:09:54 -0500 Subject: [PATCH] diff: add --default-prefix option 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 Signed-off-by: Junio C Hamano --- Documentation/diff-options.txt | 5 +++++ diff.c | 14 ++++++++++++++ t/t4013-diff-various.sh | 10 ++++++++++ 3 files changed, 29 insertions(+) diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt index 7d73e976d9..08ab86189a 100644 --- a/Documentation/diff-options.txt +++ b/Documentation/diff-options.txt @@ -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=:: Prepend an additional prefix to every line of output. diff --git a/diff.c b/diff.c index 750d1b1a6c..b322e319ff 100644 --- 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), diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh index 0bc6957989..5de1d19075 100755 --- a/t/t4013-diff-various.sh +++ b/t/t4013-diff-various.sh @@ -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