[PATCH] match: adding non-recursive directory matching
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Mon Oct 24 09:21:05 EDT 2016
On 10/21/2016 05:13 PM, FUJIWARA Katsunori wrote:
> At Tue, 18 Oct 2016 10:12:07 -0400,
> Augie Fackler wrote:
>>
>> On Tue, Oct 18, 2016 at 9:52 AM, Yuya Nishihara <yuya at tcha.org> wrote:
>>> On Tue, 18 Oct 2016 09:40:36 -0400, Augie Fackler wrote:
>>>>> On Oct 18, 2016, at 09:38, Yuya Nishihara <yuya at tcha.org> wrote:
>>>>>> After coordinating on irc to figure out what this proposal actually
>>>>>> is, I've noticed that the semantics of this "exact" proposal are
>>>>>> exactly what "glob" does today, which means (I think) that
>>>>>> "files:foo/bar" should be representable as "glob:foo/bar/*" - what am
>>>>>> I missing?
>>>>>
>>>>> Maybe we want a "glob" relative to the repo root?
>>>>
>>>> As far as I can tell, it already is. "relglob:" is relative to your
>>>> location in the repo according to the docs.
>>>
>>> Unfortunately that isn't.
>>>
>>> 'glob:<glob>' - a glob relative to cwd
>>> 'relglob:<glob>' - an unrooted glob (*.c matches C files in all dirs)
>>>
>>> Don't ask me why. ;-)
>>
>> Oh wat. It looks like narrowhg might change this behavior in narrowed
>> repositories, thus my additional confusion.
>>
>> Maybe we should add "absglob" that is always repo-root-absolute. How
>> do we feel about that overall?
>
> FYI, current pattern matching is implemented as below. This was
> chatted in "non-recursive directory matching" session of 4.0 sprint,
> and sorry for my late posting of this translation from
> http://d.hatena.ne.jp/flying-foozy/20140107/1389087728 in Japanese, as
> my backlog of the last sprint.
>
> ============ ======= ======= ===========
> pattern type root-ed cwd-ed any-of-path
> ============ ======= ======= ===========
> wildcard --- glob relglob
> regexp re --- relre
> raw string path relpath ---
> ============ ======= ======= ===========
>
> If rule is read in from file (e.g. .hgignore):
>
> * "glob" is treated as "relglob"
> * "re" is treated as "relre"
>
> This is mentioned in "hg help patterns" and "hg help hgignore", but
> syntax name "relglob" and "relre" themselves aren't explained.
>
> "end of name" matching is required:
>
> * for glob/relglob as PATTERN (e.g. argument in command line), but
> * not for glob/relglob as INCLUDES/EXCLUDES, or other pattern syntaxes
>
> For example, file "foo/bar/baz" is:
>
> * not matched at "hg files glob:foo/bar"
> * but matched at "hg file -I glob:foo/bar"
>
> This isn't mentioned in any help document :-<, and the latter seems
> to cause the issue mentioned in this patch series.
>
> How about introducing new systematic names like below to re-organize
> current complicated mapping between names and matching ? (and enable
> "end of name" matching by "-eon" suffix or so)
>
> ============ ======== ======= ===========
> pattern type root-ed cwd-ed any-of-path
> ============ ======== ======= ===========
> wildcard rootglob cwdglob anyglob
> regexp rootre cwdre anyre
> raw string rootpath cwdpath anypath
> ============ ======== ======= ===========
Moving toward a more regular and clear feature set and naming seems a
win. I'm +1 for moving in that direction.
Cheers,
--
Pierre-Yves David
More information about the Mercurial-devel
mailing list