From da769d2986470931b8e80b8d14afcae3d7cc20d7 Mon Sep 17 00:00:00 2001 From: Max Kirillov Date: Sat, 16 Sep 2017 08:53:44 +0300 Subject: [PATCH] describe: fix matching to actually match all patterns `git describe --match` with multiple patterns matches only first pattern. If it fails, next patterns are not tried. Fix it, add test cases and update existing test which has wrong expectation. Signed-off-by: Max Kirillov Signed-off-by: Junio C Hamano --- builtin/describe.c | 11 +++++++---- t/t6120-describe.sh | 6 +++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/builtin/describe.c b/builtin/describe.c index 6769446e1f..ba4ebb4d1b 100644 --- a/builtin/describe.c +++ b/builtin/describe.c @@ -151,18 +151,21 @@ static int get_name(const char *path, const struct object_id *oid, int flag, voi * pattern. */ if (patterns.nr) { + int found = 0; struct string_list_item *item; if (!is_tag) return 0; for_each_string_list_item(item, &patterns) { - if (!wildmatch(item->string, path + 10, 0, NULL)) + if (!wildmatch(item->string, path + 10, 0, NULL)) { + found = 1; break; - - /* If we get here, no pattern matched. */ - return 0; + } } + + if (!found) + return 0; } /* Is it annotated? */ diff --git a/t/t6120-describe.sh b/t/t6120-describe.sh index 167491fd5b..38570f63bb 100755 --- a/t/t6120-describe.sh +++ b/t/t6120-describe.sh @@ -182,10 +182,14 @@ check_describe "test2-lightweight-*" --tags --match="test2-*" check_describe "test2-lightweight-*" --long --tags --match="test2-*" HEAD^ -check_describe "test1-lightweight-*" --long --tags --match="test1-*" --match="test2-*" HEAD^ +check_describe "test2-lightweight-*" --long --tags --match="test1-*" --match="test2-*" HEAD^ check_describe "test2-lightweight-*" --long --tags --match="test1-*" --no-match --match="test2-*" HEAD^ +check_describe "test1-lightweight-*" --long --tags --match="test1-*" --match="test3-*" HEAD + +check_describe "test1-lightweight-*" --long --tags --match="test3-*" --match="test1-*" HEAD + test_expect_success 'name-rev with exact tags' ' echo A >expect && tag_object=$(git rev-parse refs/tags/A) &&