Recently, Foozy created a Plan page for the matcher issues:

https://www.mercurial-scm.org/wiki/FileNamePatternsPlan

It is a good start but there is a couple of elements that are
missing or still a bit fuzzy to me.


1) Default matcher:

  What is the default pattern mode ?

  When one do `hg files FOO` how is FOO processed. It seems like to be
  'relpath:'. Double checking this would be useful and mentioning it
  on the page is important.

2) Difference in command behavior:

  There seems to be some commands behaving differently than other,
  notably `hg locates` have some strange kind of
  raw-non-recursive-any-rooted matching by default. It seems to go back to
  'relpath:' when using -I

  I wonder if there is other commands like this. It might be useful to
  search for the default matcher on a command/flag basis.

3) Recursion behavior,

   There is some data about this in the page, but I think we need more
   formal representation to have a clear view of the situation.

   The existing 'path:' and 'relpath:' are recursive in all cases,
   while 'glob:' and 're:' variants are only recursive with -I/-E.
   This is a key point because as far as I understand fixing this is a
   core goal of the current plan.

   However, Foozy point out that using 'set:' with -I disable the
   automatic recursion for 're' and 'glob', but not for 'path', so we
   have more "variants" here.

   (bonus point: Rodrigo use case can we fulfilled by adding 'set:' to
   his selector.)

   I also wonder if there is other variants than "pattern", "-I" and
   "-I + set:".

   Having a table with 'pattern-type / usage' listing the recursive
   case would probably be a good start.

4) Reading from file,

  Foozy mention the pattern name in some file (hgignore) does not
  match pattern name on the command line.

  I think it would be useful to be a bit more formal here. What kind
  of file do we read pattern from? Do we have difference from 1 file
  to another? what are the translation (and default), etc.

5) Pattern-type table

  Foozy made many table explaining how variants are covered by
  pattern type. Having a pattern centric summary will be useful.

  Proposal for columns:

  * pattern type;
  * from cli or file;
  * matching mode (raw, glob, or re),
  * rooting (root, cwd or any),
  * recursive when used as Pattern
  * recursive when used with -I

  Having the same table for the proposed keyword would help to
  understand inconsistency and similarity with

6) file:/dir:

  I'm a bit confused here because Mercurial does not really track/work
  on directories. What is is benefit of 'dir:' ? 'dir:' seems very
  similar to 'path' am I missing something important?

  As I understand 'file:' could be useful for the non-recursive
  part if we want to cover every single cases. Am I right?

7) compatibility conclusion

  Getting a whole new set of matcher is a big step that have a
  significant confusion step, we have to get it right

  We cannot change the default behavior (raw string) and this is what
  people will find the most. So we have to be careful about
  inconsistency here because we cannot change the behavior of this
  current default. For example it is probably better that all the new
  matcher very consistent with each other and that the behavior
  mismatch between raw and the new official one is simple to grasp.

  In the same way, I do not think we'll be able to alias the old
  pattern-type to the new-ones. Because we cannot fix recursion
  behavior of the old ones.
  There will be online material with the old one and we won't be able
  to fix them. This is a lesser issue but we should probably keep it
  in mind. (Without any serious backing I expect that pattern for
  hgignore are probably the most documented online).

Cheers,

--
Pierre-Yves David
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to