Re: [PATCH v2] config: correct '**' matching in includeIf patterns
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Mar 25, 2019, 02:30 UTC
- Message-ID
- <xmqqa7hjofc8.fsf@gitster-ct.c.googlers.com>
- In-Reply-To
- <20190324131755.26821-1-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
Show 15 quoted lines
> The current wildmatch() call for includeIf's gitdir pattern does not > pass the WM_PATHNAME flag. Without this flag, '*' is treated _almost_ > the same as '**' (because '*' also matches slashes) with one exception: > > '/**/' can match a single slash. The pattern 'foo/**/bar' matches > 'foo/bar'. > > But '/*/', which is essentially what wildmatch engine sees without > WM_PATHNAME, has to match two slashes (and '*' matches nothing). Which > means 'foo/*/bar' cannot match 'foo/bar'. It can only match 'foo//bar'. > > The result of this is the current wildmatch() call works most of the > time until the user depends on '/**/' matching no path component. And > also '*' matches slashes while it should not, but people probably > haven't noticed this yet. The fix is straightforward.
Show 12 quoted lines
> +test_expect_success 'conditional include with /**/' ' > + mkdir foo/bar && > + git init foo/bar/repo && > + ( > + cd foo/bar/repo && > + echo "[includeIf \"gitdir:**/foo/**/bar/**\"]path=bar7" >>.git/config && > + echo "[test]seven=7" >.git/bar7 && > + echo 7 >expect && > + git config test.seven >actual && > + test_cmp expect actual > + ) > +'
That's cute ;-)
Thanks for quickly working on the fix with an incredibly short turnaround time since the initial report.
P.S. I expect to be offline for most of the week (packing, moving and unpacking. Even though the places packing and unpacking happens are within 1 kilometer radius, that does not make it less hassle X-<). See you guys next month.