pretty: add tag option to %(describe)
The %(describe) placeholder by default, like `git describe`, only supports annotated tags. However, some people do use lightweight tags for releases, and would like to describe those anyway. The command line tool has an option to support this. Teach the placeholder to support this as well. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
3c6eb4ec50
commit
1d517ceab9
@ -220,6 +220,8 @@ The placeholders are:
|
||||
inconsistent when tags are added or removed at
|
||||
the same time.
|
||||
+
|
||||
** 'tags[=<bool>]': Instead of only considering annotated tags,
|
||||
consider lightweight tags as well.
|
||||
** 'match=<pattern>': Only consider tags matching the given
|
||||
`glob(7)` pattern, excluding the "refs/tags/" prefix.
|
||||
** 'exclude=<pattern>': Do not consider tags matching the given
|
||||
@ -273,11 +275,6 @@ endif::git-rev-list[]
|
||||
If any option is provided multiple times the
|
||||
last occurrence wins.
|
||||
+
|
||||
The boolean options accept an optional value `[=<BOOL>]`. The values
|
||||
`true`, `false`, `on`, `off` etc. are all accepted. See the "boolean"
|
||||
sub-section in "EXAMPLES" in linkgit:git-config[1]. If a boolean
|
||||
option is given with no value, it's enabled.
|
||||
+
|
||||
** 'key=<K>': only show trailers with specified key. Matching is done
|
||||
case-insensitively and trailing colon is optional. If option is
|
||||
given multiple times trailer lines matching any of the keys are
|
||||
@ -313,6 +310,11 @@ insert an empty string unless we are traversing reflog entries (e.g., by
|
||||
decoration format if `--decorate` was not already provided on the command
|
||||
line.
|
||||
|
||||
The boolean options accept an optional value `[=<bool>]`. The values
|
||||
`true`, `false`, `on`, `off` etc. are all accepted. See the "boolean"
|
||||
sub-section in "EXAMPLES" in linkgit:git-config[1]. If a boolean
|
||||
option is given with no value, it's enabled.
|
||||
|
||||
If you add a `+` (plus sign) after '%' of a placeholder, a line-feed
|
||||
is inserted immediately before the expansion if and only if the
|
||||
placeholder expands to a non-empty string.
|
||||
|
12
pretty.c
12
pretty.c
@ -1219,9 +1219,11 @@ static size_t parse_describe_args(const char *start, struct strvec *args)
|
||||
struct {
|
||||
char *name;
|
||||
enum {
|
||||
DESCRIBE_ARG_BOOL,
|
||||
DESCRIBE_ARG_STRING,
|
||||
} type;
|
||||
} option[] = {
|
||||
{ "tags", DESCRIBE_ARG_BOOL},
|
||||
{ "exclude", DESCRIBE_ARG_STRING },
|
||||
{ "match", DESCRIBE_ARG_STRING },
|
||||
};
|
||||
@ -1231,10 +1233,20 @@ static size_t parse_describe_args(const char *start, struct strvec *args)
|
||||
int found = 0;
|
||||
const char *argval;
|
||||
size_t arglen = 0;
|
||||
int optval = 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; !found && i < ARRAY_SIZE(option); i++) {
|
||||
switch (option[i].type) {
|
||||
case DESCRIBE_ARG_BOOL:
|
||||
if (match_placeholder_bool_arg(arg, option[i].name, &arg, &optval)) {
|
||||
if (optval)
|
||||
strvec_pushf(args, "--%s", option[i].name);
|
||||
else
|
||||
strvec_pushf(args, "--no-%s", option[i].name);
|
||||
found = 1;
|
||||
}
|
||||
break;
|
||||
case DESCRIBE_ARG_STRING:
|
||||
if (match_placeholder_arg_value(arg, option[i].name, &arg,
|
||||
&argval, &arglen)) {
|
||||
|
@ -1002,4 +1002,12 @@ test_expect_success '%(describe:exclude=...) vs git describe --exclude ...' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '%(describe:tags) vs git describe --tags' '
|
||||
test_when_finished "git tag -d tagname" &&
|
||||
git tag tagname &&
|
||||
git describe --tags >expect &&
|
||||
git log -1 --format="%(describe:tags)" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user