@@ -38,7 +38,8 @@ ifdef::git-log[]
--no-diff-merges::
Specify diff format to be used for merge commits. Default is
{diff-merges-default} unless `--first-parent` is in use, in which case
- `first-parent` is the default.
+ `first-parent` is the default. Comma-separated list of
+ supported values is accepted as well.
+
--diff-merges=(off|none):::
--no-diff-merges:::
@@ -53,7 +54,7 @@ ifdef::git-log[]
`log.diffMerges` configuration parameter, which default value
is `separate`.
+
- `-m` is a shortcut for '--diff-merges=on --diff-merges=hide'.
+ `-m` is a shortcut for '--diff-merges=on,hide'.
In addition it implies `-p` when `log.diffMerges-m-imply-p` is
active.
+
@@ -1,6 +1,7 @@
#include "diff-merges.h"
#include "revision.h"
+#include "strbuf.h"
typedef void (*diff_merges_setup_func_t)(struct rev_info *);
static void set_separate(struct rev_info *revs);
@@ -109,12 +110,25 @@ static diff_merges_setup_func_t func_by_opt(const char *optarg)
static void set_diff_merges(struct rev_info *revs, const char *optarg)
{
- diff_merges_setup_func_t func = func_by_opt(optarg);
+ char const delim = ',';
+ struct strbuf **opts = strbuf_split_str(optarg, delim, -1);
+ struct strbuf **p;
- if (!func)
- die(_("invalid value for '%s': '%s'"), "--diff-merges", optarg);
+ for (p = opts; *p; p++) {
+ diff_merges_setup_func_t func;
+ char *opt = (*p)->buf;
+ int len = (*p)->len;
- func(revs);
+ if (opt[len - 1] == delim)
+ opt[len - 1] = '\0';
+ func = func_by_opt(opt);
+ if (!func) {
+ strbuf_list_free(opts);
+ die(_("invalid value for '%s': '%s'"), "--diff-merges", opt);
+ }
+ func(revs);
+ }
+ strbuf_list_free(opts);
}
/*
@@ -485,6 +485,14 @@ test_expect_success 'log --diff-merges=on matches --diff-merges=separate' '
test_cmp expected actual
'
+test_expect_success 'log --diff-merges=<V1>,<V2>' '
+ git log --diff-merges=1,hide master >result &&
+ process_diffs result >expected &&
+ git log --diff-merges=1 --diff-merges=hide master >result &&
+ process_diffs result >actual &&
+ test_cmp expected actual
+'
+
test_expect_success 'deny wrong log.diffMerges config' '
test_config log.diffMerges wrong-value &&
test_expect_code 128 git log
Support comma-separated list of options in --diff-merges=. This allows for shorter: --diff-merges=on,hide instead of: --diff-merges=on --diff-merges=hide Signed-off-by: Sergey Organov <sorganov@gmail.com> --- Documentation/diff-options.txt | 5 +++-- diff-merges.c | 22 ++++++++++++++++++---- t/t4013-diff-various.sh | 8 ++++++++ 3 files changed, 29 insertions(+), 6 deletions(-)