Browse Source

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 <max@max630.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Max Kirillov 7 years ago committed by Junio C Hamano
parent
commit
da769d2986
  1. 9
      builtin/describe.c
  2. 6
      t/t6120-describe.sh

9
builtin/describe.c

@ -151,18 +151,21 @@ static int get_name(const char *path, const struct object_id *oid, int flag, voi @@ -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. */
if (!found)
return 0;
}
}

/* Is it annotated? */

6
t/t6120-describe.sh

@ -182,10 +182,14 @@ check_describe "test2-lightweight-*" --tags --match="test2-*" @@ -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) &&

Loading…
Cancel
Save