summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2017-10-07 16:27:56 +0900
committerLibravatar Junio C Hamano <gitster@pobox.com>2017-10-07 16:27:56 +0900
commit43c9e7e365d7a8961767d0bd4a305ca378800a2a (patch)
tree342920df153ff2430522658d9338f2d8734f01fe
parentMerge branch 'ks/verify-filename-non-option-error-message-tweak' (diff)
parentref-filter.c: pass empty-string as NULL to atom parsers (diff)
downloadtgif-43c9e7e365d7a8961767d0bd4a305ca378800a2a.tar.xz
Merge branch 'tb/ref-filter-empty-modifier'
In the "--format=..." option of the "git for-each-ref" command (and its friends, i.e. the listing mode of "git branch/tag"), "%(atom:)" (e.g. "%(refname:)", "%(body:)" used to error out. Instead, treat them as if the colon and an empty string that follows it were not there. * tb/ref-filter-empty-modifier: ref-filter.c: pass empty-string as NULL to atom parsers
-rw-r--r--ref-filter.c10
-rwxr-xr-xt/t6300-for-each-ref.sh1
2 files changed, 10 insertions, 1 deletions
diff --git a/ref-filter.c b/ref-filter.c
index 55323620ab..45a3be8340 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -413,8 +413,16 @@ static int parse_ref_filter_atom(const struct ref_format *format,
REALLOC_ARRAY(used_atom, used_atom_cnt);
used_atom[at].name = xmemdupz(atom, ep - atom);
used_atom[at].type = valid_atom[i].cmp_type;
- if (arg)
+ if (arg) {
arg = used_atom[at].name + (arg - atom) + 1;
+ if (!*arg) {
+ /*
+ * Treat empty sub-arguments list as NULL (i.e.,
+ * "%(atom:)" is equivalent to "%(atom)").
+ */
+ arg = NULL;
+ }
+ }
memset(&used_atom[at].u, 0, sizeof(used_atom[at].u));
if (valid_atom[i].parser)
valid_atom[i].parser(format, &used_atom[at], arg);
diff --git a/t/t6300-for-each-ref.sh b/t/t6300-for-each-ref.sh
index 6358134805..a6f51a5003 100755
--- a/t/t6300-for-each-ref.sh
+++ b/t/t6300-for-each-ref.sh
@@ -51,6 +51,7 @@ test_atom() {
}
test_atom head refname refs/heads/master
+test_atom head refname: refs/heads/master
test_atom head refname:short master
test_atom head refname:lstrip=1 heads/master
test_atom head refname:lstrip=2 master