Browse Source

Merge branch 'jk/log-decorate-opts-with-implicit-decorate'

When "git log" implicitly enabled the "decoration" processing
without being explicitly asked with "--decorate" option, it failed
to read and honor the settings given by the "--decorate-refs"
option.

* jk/log-decorate-opts-with-implicit-decorate:
  log: load decorations with --simplify-by-decoration
  log: handle --decorate-refs with userformat "%d"
maint
Junio C Hamano 3 years ago
parent
commit
00cbaf9362
  1. 23
      builtin/log.c
  2. 37
      t/t4202-log.sh

23
builtin/log.c

@ -245,10 +245,24 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
rev->abbrev_commit = 0; rev->abbrev_commit = 0;
} }


if (rev->commit_format == CMIT_FMT_USERFORMAT && !w.decorate) if (rev->commit_format == CMIT_FMT_USERFORMAT) {
decoration_style = 0; if (!w.decorate) {
/*
* Disable decoration loading if the format will not
* show them anyway.
*/
decoration_style = 0;
} else if (!decoration_style) {
/*
* If we are going to show them, make sure we do load
* them here, but taking care not to override a
* specific style set by config or --decorate.
*/
decoration_style = DECORATE_SHORT_REFS;
}
}


if (decoration_style) { if (decoration_style || rev->simplify_by_decoration) {
const struct string_list *config_exclude = const struct string_list *config_exclude =
repo_config_get_value_multi(the_repository, repo_config_get_value_multi(the_repository,
"log.excludeDecoration"); "log.excludeDecoration");
@ -260,7 +274,8 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
item->string); item->string);
} }


rev->show_decorations = 1; if (decoration_style)
rev->show_decorations = 1;


load_ref_decorations(&decoration_filter, decoration_style); load_ref_decorations(&decoration_filter, decoration_style);
} }

37
t/t4202-log.sh

@ -952,6 +952,43 @@ test_expect_success 'decorate-refs-exclude and simplify-by-decoration' '
test_cmp expect.decorate actual test_cmp expect.decorate actual
' '


test_expect_success 'decorate-refs with implied decorate from format' '
cat >expect <<-\EOF &&
side-2 (tag: side-2)
side-1
EOF
git log --no-walk --format="%s%d" \
--decorate-refs="*side-2" side-1 side-2 \
>actual &&
test_cmp expect actual
'

test_expect_success 'implied decorate does not override option' '
cat >expect <<-\EOF &&
side-2 (tag: refs/tags/side-2, refs/heads/side)
side-1 (tag: refs/tags/side-1)
EOF
git log --no-walk --format="%s%d" \
--decorate=full side-1 side-2 \
>actual &&
test_cmp expect actual
'

test_expect_success 'decorate-refs and simplify-by-decoration without output' '
cat >expect <<-\EOF &&
side-2
initial
EOF
# Do not just use a --format without %d here; we want to
# make sure that we did not accidentally turn on displaying
# the decorations, too. And that requires one of the regular
# formats.
git log --decorate-refs="*side-2" --oneline \
--simplify-by-decoration >actual.raw &&
sed "s/^[0-9a-f]* //" <actual.raw >actual &&
test_cmp expect actual
'

test_expect_success 'log.decorate config parsing' ' test_expect_success 'log.decorate config parsing' '
git log --oneline --decorate=full >expect.full && git log --oneline --decorate=full >expect.full &&
git log --oneline --decorate=short >expect.short && git log --oneline --decorate=short >expect.short &&

Loading…
Cancel
Save