From ec727e189cce9e8457e2b00e0756cfdf325a12d9 Mon Sep 17 00:00:00 2001 From: K Jayatheerth Date: Sat, 3 May 2025 11:37:36 +0530 Subject: dir.c: literal match with wildcard in pathspec should still glob When a path with wildcard characters, e.g. 'f*o', exists in the working tree, "git add -- 'f*o'" stops after happily finding that there is 'f*o' and adding it to the index, without realizing there may be other paths, e.g. 'foooo', that may match the given pathspec. This is because dir.c:do_match_pathspec() disables further matches with pathspec when it finds an exact match. Reported-by: piotrsiupa Helped-by: Jeff King Signed-off-by: K Jayatheerth Signed-off-by: Junio C Hamano --- dir.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'dir.c') diff --git a/dir.c b/dir.c index cbd82be6c9..85cc08f4fc 100644 --- a/dir.c +++ b/dir.c @@ -519,7 +519,8 @@ static int do_match_pathspec(struct index_state *istate, ( exclude && !(ps->items[i].magic & PATHSPEC_EXCLUDE))) continue; - if (seen && seen[i] == MATCHED_EXACTLY) + if (seen && seen[i] == MATCHED_EXACTLY && + ps->items[i].nowildcard_len == ps->items[i].len) continue; /* * Make exclude patterns optional and never report -- cgit v1.3-5-g45d5