The idea is from Keith Cascio. Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> --- I do not particularly like what this patch does, but I like the non-intrusiveness and conciseness of it. Documentation/config.txt | 4 ++++ Documentation/git-diff.txt | 3 +++ builtin-diff.c | 1 + builtin-log.c | 4 ++++ diff.c | 25 +++++++++++++++++++++++++ diff.h | 2 ++ t/t4037-diff-default-options.sh | 19 +++++++++++++++++++ 7 files changed, 58 insertions(+), 0 deletions(-) create mode 100755 t/t4037-diff-default-options.sh diff --git a/Documentation/config.txt b/Documentation/config.txt index 7506755..4913bd6 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -625,6 +625,10 @@ diff.autorefreshindex:: affects only 'git-diff' Porcelain, and not lower level 'diff' commands, such as 'git-diff-files'. +diff.defaultoptions: + The value of this option will be prepended to the command line + options of the porcelains showing diffs. + diff.external:: If this config variable is set, diff generation is not performed using the internal diff machinery, but using the diff --git a/Documentation/git-diff.txt b/Documentation/git-diff.txt index a2f192f..7025717 100644 --- a/Documentation/git-diff.txt +++ b/Documentation/git-diff.txt @@ -74,6 +74,9 @@ and the range notations ("<commit>..<commit>" and "<commit>\...<commit>") do not mean a range as defined in the "SPECIFYING RANGES" section in linkgit:git-rev-parse[1]. +Default options can be set via the config variable +`diff.defaultOptions`. + OPTIONS ------- :git-diff: 1 diff --git a/builtin-diff.c b/builtin-diff.c index d75d69b..d9a6e7d 100644 --- a/builtin-diff.c +++ b/builtin-diff.c @@ -296,6 +296,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix) if (nongit) die("Not a git repository"); + parse_default_diff_options(&rev.diffopt); argc = setup_revisions(argc, argv, &rev, NULL); if (!rev.diffopt.output_format) { rev.diffopt.output_format = DIFF_FORMAT_PATCH; diff --git a/builtin-log.c b/builtin-log.c index 8af55d2..2a63652 100644 --- a/builtin-log.c +++ b/builtin-log.c @@ -243,6 +243,7 @@ int cmd_whatchanged(int argc, const char **argv, const char *prefix) init_revisions(&rev, prefix); rev.diff = 1; rev.simplify_history = 0; + parse_default_diff_options(&rev.diffopt); cmd_log_init(argc, argv, prefix, &rev); if (!rev.diffopt.output_format) rev.diffopt.output_format = DIFF_FORMAT_RAW; @@ -314,6 +315,7 @@ int cmd_show(int argc, const char **argv, const char *prefix) rev.always_show_header = 1; rev.ignore_merges = 0; rev.no_walk = 1; + parse_default_diff_options(&rev.diffopt); cmd_log_init(argc, argv, prefix, &rev); count = rev.pending.nr; @@ -381,6 +383,7 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix) init_reflog_walk(&rev.reflog_info); rev.abbrev_commit = 1; rev.verbose_header = 1; + parse_default_diff_options(&rev.diffopt); cmd_log_init(argc, argv, prefix, &rev); /* @@ -412,6 +415,7 @@ int cmd_log(int argc, const char **argv, const char *prefix) init_revisions(&rev, prefix); rev.always_show_header = 1; + parse_default_diff_options(&rev.diffopt); cmd_log_init(argc, argv, prefix, &rev); return cmd_log_walk(&rev); } diff --git a/diff.c b/diff.c index 75d9fab..0e1b321 100644 --- a/diff.c +++ b/diff.c @@ -2657,6 +2657,31 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) return 1; } +static int default_diff_options(const char *key, const char *value, void *cb) +{ + if (!strcmp(key, "diff.defaultoptions")) { + char **options = cb; + free(*options); + *options = xstrdup(value); + } + return 0; +} + +void parse_default_diff_options(struct diff_options *options) +{ + char *default_options = NULL; + const char **argv; + int argc; + + git_config(default_diff_options, &default_options); + if (!default_options) + return; + + argc = split_cmdline(default_options, &argv); + diff_opt_parse(options, argv, argc); + free(argv); +} + static int parse_num(const char **cp_p) { unsigned long num, scale; diff --git a/diff.h b/diff.h index 6616877..e05e796 100644 --- a/diff.h +++ b/diff.h @@ -270,4 +270,6 @@ extern void diff_no_index(struct rev_info *, int, const char **, int, const char extern int index_differs_from(const char *def, int diff_flags); +extern void parse_default_diff_options(struct diff_options *options); + #endif /* DIFF_H */ diff --git a/t/t4037-diff-default-options.sh b/t/t4037-diff-default-options.sh new file mode 100755 index 0000000..0284f7b --- /dev/null +++ b/t/t4037-diff-default-options.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +test_description='default options for diff' + +. ./test-lib.sh + +test_expect_success 'setup' ' + test_commit a && + test_commit b +' + +test_expect_success 'diff.defaultOptions' ' + git config diff.defaultOptions --raw && + git diff a > output && + grep ^: output && + test 1 = $(wc -l < output) +' + +test_done -- 1.6.2.1.493.g67cf3 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html