Re: What's cooking in git.git (Oct 2012, #01; Tue, 2)
- From
Nguyen Thai Ngoc Duy <pclouds@gmail.com>
- Date
- Oct 5, 2012, 13:21 UTC
- Message-ID
- <20121005132132.GA13591@do>
- In-Reply-To
- <7vobki19ax.fsf@alter.siamese.dyndns.org>
On Thu, Oct 04, 2012 at 09:39:02AM -0700, Junio C Hamano wrote:
> Assuming that we do want to match "x/y" with "x/**/y", I suspect > that "'**' matches anything including a slash" would not give us > that semantics. Is it something we can easily fix in the wildmatch > code?
Something like this may suffice. Lightly tested with "git add -n". Reading the code, I think we can even distinguish "match zero or more directories" and "match one or more directories" with "/**/" and maybe "/***/". Right now **, ***, ****... are the same. So are /**/, /***/, /****/...
-- 8< --
diff --git a/wildmatch.c b/wildmatch.c index f153f8a..81eadc8 100644 --- a/wildmatch.c +++ b/wildmatch.c @@ -98,8 +98,12 @@ static int dowild(const uchar *p, const uchar *text, continue; case '*': if (*++p == '*') { + int slashstarstar = p[-2] == '/'; while (*++p == '*') {} special = TRUE; + if (slashstarstar && *p == '/' && + dowild(p + 1, text, a, force_lower_case) == TRUE) + return TRUE; } else special = FALSE; if (*p == '\0') { -- 8< --
-- Duy