Nguyễn Thái Ngọc Duy  <pclo...@gmail.com> writes:

> 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.

> +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.

Reply via email to