describe: teach --match to handle branches and remotes

When `git describe` uses `--match`, it matches only tags, basically
ignoring the `--all` argument even when it is specified.

Fix it by also matching branch name and $remote_name/$remote_branch_name,
for remote-tracking references, with the specified patterns. Update
documentation accordingly and add tests.

Signed-off-by: Max Kirillov <max@max630.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Max Kirillov
2017-09-20 04:10:10 +03:00
committed by Junio C Hamano
parent 3445c3dd72
commit 6d68b2ab78
3 changed files with 57 additions and 21 deletions

View File

@ -87,19 +87,23 @@ OPTIONS
--match <pattern>::
Only consider tags matching the given `glob(7)` pattern,
excluding the "refs/tags/" prefix. This can be used to avoid
leaking private tags from the repository. If given multiple times, a
list of patterns will be accumulated, and tags matching any of the
patterns will be considered. Use `--no-match` to clear and reset the
list of patterns.
excluding the "refs/tags/" prefix. If used with `--all`, it also
considers local branches and remote-tracking references matching the
pattern, excluding respectively "refs/heads/" and "refs/remotes/"
prefix; references of other types are never considered. If given
multiple times, a list of patterns will be accumulated, and tags
matching any of the patterns will be considered. Use `--no-match` to
clear and reset the list of patterns.
--exclude <pattern>::
Do not consider tags matching the given `glob(7)` pattern, excluding
the "refs/tags/" prefix. This can be used to narrow the tag space and
find only tags matching some meaningful criteria. If given multiple
times, a list of patterns will be accumulated and tags matching any
of the patterns will be excluded. When combined with --match a tag will
be considered when it matches at least one --match pattern and does not
the "refs/tags/" prefix. If used with `--all`, it also does not consider
local branches and remote-tracking references matching the pattern,
excluding respectively "refs/heads/" and "refs/remotes/" prefix;
references of other types are never considered. If given multiple times,
a list of patterns will be accumulated and tags matching any of the
patterns will be excluded. When combined with --match a tag will be
considered when it matches at least one --match pattern and does not
match any of the --exclude patterns. Use `--no-exclude` to clear and
reset the list of patterns.