ref-filter: align: introduce long-form syntax
Introduce optional prefixes "width=" and "position=" for the align atom so that the atom can be used as "%(align:width=<width>,position=<position>)". Add Documentation and tests for the same. Helped-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Karthik Nayak <Karthik.188@gmail.com> Reviewed-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
5bd881d998
commit
395fb8f9f4
@ -133,14 +133,18 @@ color::
|
|||||||
|
|
||||||
align::
|
align::
|
||||||
Left-, middle-, or right-align the content between
|
Left-, middle-, or right-align the content between
|
||||||
%(align:...) and %(end). The "align:" is followed by `<width>`
|
%(align:...) and %(end). The "align:" is followed by
|
||||||
and `<position>` in any order separated by a comma, where the
|
`width=<width>` and `position=<position>` in any order
|
||||||
`<position>` is either left, right or middle, default being
|
separated by a comma, where the `<position>` is either left,
|
||||||
left and `<width>` is the total length of the content with
|
right or middle, default being left and `<width>` is the total
|
||||||
alignment. If the contents length is more than the width then
|
length of the content with alignment. For brevity, the
|
||||||
no alignment is performed. If used with '--quote' everything
|
"width=" and/or "position=" prefixes may be omitted, and bare
|
||||||
in between %(align:...) and %(end) is quoted, but if nested
|
<width> and <position> used instead. For instance,
|
||||||
then only the topmost level performs quoting.
|
`%(align:<width>,<position>)`. If the contents length is more
|
||||||
|
than the width then no alignment is performed. If used with
|
||||||
|
'--quote' everything in between %(align:...) and %(end) is
|
||||||
|
quoted, but if nested then only the topmost level performs
|
||||||
|
quoting.
|
||||||
|
|
||||||
In addition to the above, for commit and tag objects, the header
|
In addition to the above, for commit and tag objects, the header
|
||||||
field names (`tree`, `parent`, `object`, `type`, and `tag`) can
|
field names (`tree`, `parent`, `object`, `type`, and `tag`) can
|
||||||
|
10
ref-filter.c
10
ref-filter.c
@ -78,7 +78,15 @@ static void align_atom_parser(struct used_atom *atom, const char *arg)
|
|||||||
const char *s = params.items[i].string;
|
const char *s = params.items[i].string;
|
||||||
int position;
|
int position;
|
||||||
|
|
||||||
if (!strtoul_ui(s, 10, &width))
|
if (skip_prefix(s, "position=", &s)) {
|
||||||
|
position = parse_align_position(s);
|
||||||
|
if (position < 0)
|
||||||
|
die(_("unrecognized position:%s"), s);
|
||||||
|
align->position = position;
|
||||||
|
} else if (skip_prefix(s, "width=", &s)) {
|
||||||
|
if (strtoul_ui(s, 10, &width))
|
||||||
|
die(_("unrecognized width:%s"), s);
|
||||||
|
} else if (!strtoul_ui(s, 10, &width))
|
||||||
;
|
;
|
||||||
else if ((position = parse_align_position(s)) >= 0)
|
else if ((position = parse_align_position(s)) >= 0)
|
||||||
align->position = position;
|
align->position = position;
|
||||||
|
@ -133,6 +133,48 @@ test_expect_success 'right alignment' '
|
|||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
cat >expect <<-\EOF
|
||||||
|
| refname is refs/heads/master |refs/heads/master
|
||||||
|
| refname is refs/heads/side |refs/heads/side
|
||||||
|
| refname is refs/odd/spot |refs/odd/spot
|
||||||
|
| refname is refs/tags/double-tag |refs/tags/double-tag
|
||||||
|
| refname is refs/tags/four |refs/tags/four
|
||||||
|
| refname is refs/tags/one |refs/tags/one
|
||||||
|
| refname is refs/tags/signed-tag |refs/tags/signed-tag
|
||||||
|
| refname is refs/tags/three |refs/tags/three
|
||||||
|
| refname is refs/tags/two |refs/tags/two
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_align_permutations() {
|
||||||
|
while read -r option
|
||||||
|
do
|
||||||
|
test_expect_success "align:$option" '
|
||||||
|
git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
test_align_permutations <<-\EOF
|
||||||
|
middle,42
|
||||||
|
42,middle
|
||||||
|
position=middle,42
|
||||||
|
42,position=middle
|
||||||
|
middle,width=42
|
||||||
|
width=42,middle
|
||||||
|
position=middle,width=42
|
||||||
|
width=42,position=middle
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Last one wins (silently) when multiple arguments of the same type are given
|
||||||
|
|
||||||
|
test_align_permutations <<-\EOF
|
||||||
|
32,width=42,middle
|
||||||
|
width=30,42,middle
|
||||||
|
width=42,position=right,middle
|
||||||
|
42,right,position=middle
|
||||||
|
EOF
|
||||||
|
|
||||||
# Individual atoms inside %(align:...) and %(end) must not be quoted.
|
# Individual atoms inside %(align:...) and %(end) must not be quoted.
|
||||||
|
|
||||||
test_expect_success 'alignment with format quote' "
|
test_expect_success 'alignment with format quote' "
|
||||||
|
Loading…
Reference in New Issue
Block a user