D5352: match: drop unnecessary wrapping of regex in group

martinvonz (Martin von Zweigbergk) phabricator at mercurial-scm.org
Sun Dec 2 21:53:58 UTC 2018


martinvonz created this revision.
Herald added a reviewer: durin42.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  It seems the regexes have been wrapped in an unnamed group since
  https://phab.mercurial-scm.org/rHGb6c42714d900453ed698bf365d264de02e031ff6 (Add locate command., 2005-07-05). In that commit, the
  grouping was needed because there was a "head" ('^') added before the
  group and a "tail" (os.sep) added after it. It seems the head was
  moved inside the group in https://phab.mercurial-scm.org/rHG1c0c413cccdd4c8bb3381c59215b4ca5442539ce (Get add and locate to use new
  repo and dirstate walk code., 2005-07-18) and the tail was moved
  inside the group in https://phab.mercurial-scm.org/rHG89985a1b342711c63868ad6da72f90f09236c4c8 (Clean up walk and changes code to
  use normalised names properly., 2005-07-31), So it seems to me that
  we've carried around the unnecessary group for 13 years. This patch
  removes it.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D5352

AFFECTED FILES
  mercurial/match.py
  tests/test-fileset.t
  tests/test-hgignore.t
  tests/test-narrow-commit.t
  tests/test-walk.t

CHANGE DETAILS

diff --git a/tests/test-walk.t b/tests/test-walk.t
--- a/tests/test-walk.t
+++ b/tests/test-walk.t
@@ -46,7 +46,7 @@
   f  mammals/skunk                   mammals/skunk
   $ hg debugwalk -v -I.
   * matcher:
-  <includematcher includes='(?:)'>
+  <includematcher includes=''>
   f  beans/black                     beans/black
   f  beans/borlotti                  beans/borlotti
   f  beans/kidney                    beans/kidney
@@ -82,7 +82,7 @@
   * matcher:
   <differencematcher
     m1=<alwaysmatcher>,
-    m2=<includematcher includes='(?:beans(?:/|$))'>>
+    m2=<includematcher includes='beans(?:/|$)'>>
   f  fennel                          ../fennel
   f  fenugreek                       ../fenugreek
   f  fiddlehead                      ../fiddlehead
@@ -92,48 +92,48 @@
   f  mammals/skunk                   skunk
   $ hg debugwalk -v -I '*k'
   * matcher:
-  <includematcher includes='(?:mammals/[^/]*k(?:/|$))'>
+  <includematcher includes='mammals/[^/]*k(?:/|$)'>
   f  mammals/skunk  skunk
   $ hg debugwalk -v -I 'glob:*k'
   * matcher:
-  <includematcher includes='(?:mammals/[^/]*k(?:/|$))'>
+  <includematcher includes='mammals/[^/]*k(?:/|$)'>
   f  mammals/skunk  skunk
   $ hg debugwalk -v -I 'relglob:*k'
   * matcher:
-  <includematcher includes='(?:(?:|.*/)[^/]*k(?:/|$))'>
+  <includematcher includes='(?:|.*/)[^/]*k(?:/|$)'>
   f  beans/black    ../beans/black
   f  fenugreek      ../fenugreek
   f  mammals/skunk  skunk
   $ hg debugwalk -v -I 'relglob:*k' .
   * matcher:
   <intersectionmatcher
-    m1=<patternmatcher patterns='(?:mammals(?:/|$))'>,
-    m2=<includematcher includes='(?:(?:|.*/)[^/]*k(?:/|$))'>>
+    m1=<patternmatcher patterns='mammals(?:/|$)'>,
+    m2=<includematcher includes='(?:|.*/)[^/]*k(?:/|$)'>>
   f  mammals/skunk  skunk
   $ hg debugwalk -v -I 're:.*k$'
   * matcher:
-  <includematcher includes='(?:.*k$)'>
+  <includematcher includes='.*k$'>
   f  beans/black    ../beans/black
   f  fenugreek      ../fenugreek
   f  mammals/skunk  skunk
   $ hg debugwalk -v -I 'relre:.*k$'
   * matcher:
-  <includematcher includes='(?:.*.*k$)'>
+  <includematcher includes='.*.*k$'>
   f  beans/black    ../beans/black
   f  fenugreek      ../fenugreek
   f  mammals/skunk  skunk
   $ hg debugwalk -v -I 'path:beans'
   * matcher:
-  <includematcher includes='(?:beans(?:/|$))'>
+  <includematcher includes='beans(?:/|$)'>
   f  beans/black     ../beans/black
   f  beans/borlotti  ../beans/borlotti
   f  beans/kidney    ../beans/kidney
   f  beans/navy      ../beans/navy
   f  beans/pinto     ../beans/pinto
   f  beans/turtle    ../beans/turtle
   $ hg debugwalk -v -I 'relpath:detour/../../beans'
   * matcher:
-  <includematcher includes='(?:beans(?:/|$))'>
+  <includematcher includes='beans(?:/|$)'>
   f  beans/black     ../beans/black
   f  beans/borlotti  ../beans/borlotti
   f  beans/kidney    ../beans/kidney
@@ -246,53 +246,53 @@
 
   $ hg debugwalk -v .
   * matcher:
-  <patternmatcher patterns='(?:mammals(?:/|$))'>
+  <patternmatcher patterns='mammals(?:/|$)'>
   f  mammals/Procyonidae/cacomistle  Procyonidae/cacomistle
   f  mammals/Procyonidae/coatimundi  Procyonidae/coatimundi
   f  mammals/Procyonidae/raccoon     Procyonidae/raccoon
   f  mammals/skunk                   skunk
   $ hg debugwalk -v -I.
   * matcher:
-  <includematcher includes='(?:mammals(?:/|$))'>
+  <includematcher includes='mammals(?:/|$)'>
   f  mammals/Procyonidae/cacomistle  Procyonidae/cacomistle
   f  mammals/Procyonidae/coatimundi  Procyonidae/coatimundi
   f  mammals/Procyonidae/raccoon     Procyonidae/raccoon
   f  mammals/skunk                   skunk
   $ hg debugwalk -v Procyonidae
   * matcher:
-  <patternmatcher patterns='(?:mammals/Procyonidae(?:/|$))'>
+  <patternmatcher patterns='mammals/Procyonidae(?:/|$)'>
   f  mammals/Procyonidae/cacomistle  Procyonidae/cacomistle
   f  mammals/Procyonidae/coatimundi  Procyonidae/coatimundi
   f  mammals/Procyonidae/raccoon     Procyonidae/raccoon
 
   $ cd Procyonidae
   $ hg debugwalk -v .
   * matcher:
-  <patternmatcher patterns='(?:mammals/Procyonidae(?:/|$))'>
+  <patternmatcher patterns='mammals/Procyonidae(?:/|$)'>
   f  mammals/Procyonidae/cacomistle  cacomistle
   f  mammals/Procyonidae/coatimundi  coatimundi
   f  mammals/Procyonidae/raccoon     raccoon
   $ hg debugwalk -v ..
   * matcher:
-  <patternmatcher patterns='(?:mammals(?:/|$))'>
+  <patternmatcher patterns='mammals(?:/|$)'>
   f  mammals/Procyonidae/cacomistle  cacomistle
   f  mammals/Procyonidae/coatimundi  coatimundi
   f  mammals/Procyonidae/raccoon     raccoon
   f  mammals/skunk                   ../skunk
   $ cd ..
 
   $ hg debugwalk -v ../beans
   * matcher:
-  <patternmatcher patterns='(?:beans(?:/|$))'>
+  <patternmatcher patterns='beans(?:/|$)'>
   f  beans/black     ../beans/black
   f  beans/borlotti  ../beans/borlotti
   f  beans/kidney    ../beans/kidney
   f  beans/navy      ../beans/navy
   f  beans/pinto     ../beans/pinto
   f  beans/turtle    ../beans/turtle
   $ hg debugwalk -v .
   * matcher:
-  <patternmatcher patterns='(?:mammals(?:/|$))'>
+  <patternmatcher patterns='mammals(?:/|$)'>
   f  mammals/Procyonidae/cacomistle  Procyonidae/cacomistle
   f  mammals/Procyonidae/coatimundi  Procyonidae/coatimundi
   f  mammals/Procyonidae/raccoon     Procyonidae/raccoon
@@ -307,97 +307,97 @@
 
   $ hg debugwalk -v -Ibeans
   * matcher:
-  <includematcher includes='(?:beans(?:/|$))'>
+  <includematcher includes='beans(?:/|$)'>
   f  beans/black     beans/black
   f  beans/borlotti  beans/borlotti
   f  beans/kidney    beans/kidney
   f  beans/navy      beans/navy
   f  beans/pinto     beans/pinto
   f  beans/turtle    beans/turtle
   $ hg debugwalk -v -I '{*,{b,m}*/*}k'
   * matcher:
-  <includematcher includes='(?:(?:[^/]*|(?:b|m)[^/]*/[^/]*)k(?:/|$))'>
+  <includematcher includes='(?:[^/]*|(?:b|m)[^/]*/[^/]*)k(?:/|$)'>
   f  beans/black    beans/black
   f  fenugreek      fenugreek
   f  mammals/skunk  mammals/skunk
   $ hg debugwalk -v -Ibeans mammals
   * matcher:
   <intersectionmatcher
-    m1=<patternmatcher patterns='(?:mammals(?:/|$))'>,
-    m2=<includematcher includes='(?:beans(?:/|$))'>>
+    m1=<patternmatcher patterns='mammals(?:/|$)'>,
+    m2=<includematcher includes='beans(?:/|$)'>>
   $ hg debugwalk -v -Inon-existent
   * matcher:
-  <includematcher includes='(?:non\\-existent(?:/|$))'>
+  <includematcher includes='non\\-existent(?:/|$)'>
   $ hg debugwalk -v -Inon-existent -Ibeans/black
   * matcher:
-  <includematcher includes='(?:non\\-existent(?:/|$)|beans/black(?:/|$))'>
+  <includematcher includes='non\\-existent(?:/|$)|beans/black(?:/|$)'>
   f  beans/black  beans/black
   $ hg debugwalk -v -Ibeans beans/black
   * matcher:
   <intersectionmatcher
-    m1=<patternmatcher patterns='(?:beans/black(?:/|$))'>,
-    m2=<includematcher includes='(?:beans(?:/|$))'>>
+    m1=<patternmatcher patterns='beans/black(?:/|$)'>,
+    m2=<includematcher includes='beans(?:/|$)'>>
   f  beans/black  beans/black  exact
   $ hg debugwalk -v -Ibeans/black beans
   * matcher:
   <intersectionmatcher
-    m1=<patternmatcher patterns='(?:beans(?:/|$))'>,
-    m2=<includematcher includes='(?:beans/black(?:/|$))'>>
+    m1=<patternmatcher patterns='beans(?:/|$)'>,
+    m2=<includematcher includes='beans/black(?:/|$)'>>
   f  beans/black  beans/black
   $ hg debugwalk -v -Xbeans/black beans
   * matcher:
   <differencematcher
-    m1=<patternmatcher patterns='(?:beans(?:/|$))'>,
-    m2=<includematcher includes='(?:beans/black(?:/|$))'>>
+    m1=<patternmatcher patterns='beans(?:/|$)'>,
+    m2=<includematcher includes='beans/black(?:/|$)'>>
   f  beans/borlotti  beans/borlotti
   f  beans/kidney    beans/kidney
   f  beans/navy      beans/navy
   f  beans/pinto     beans/pinto
   f  beans/turtle    beans/turtle
   $ hg debugwalk -v -Xbeans/black -Ibeans
   * matcher:
   <differencematcher
-    m1=<includematcher includes='(?:beans(?:/|$))'>,
-    m2=<includematcher includes='(?:beans/black(?:/|$))'>>
+    m1=<includematcher includes='beans(?:/|$)'>,
+    m2=<includematcher includes='beans/black(?:/|$)'>>
   f  beans/borlotti  beans/borlotti
   f  beans/kidney    beans/kidney
   f  beans/navy      beans/navy
   f  beans/pinto     beans/pinto
   f  beans/turtle    beans/turtle
   $ hg debugwalk -v -Xbeans/black beans/black
   * matcher:
   <differencematcher
-    m1=<patternmatcher patterns='(?:beans/black(?:/|$))'>,
-    m2=<includematcher includes='(?:beans/black(?:/|$))'>>
+    m1=<patternmatcher patterns='beans/black(?:/|$)'>,
+    m2=<includematcher includes='beans/black(?:/|$)'>>
   $ hg debugwalk -v -Xbeans/black -Ibeans/black
   * matcher:
   <differencematcher
-    m1=<includematcher includes='(?:beans/black(?:/|$))'>,
-    m2=<includematcher includes='(?:beans/black(?:/|$))'>>
+    m1=<includematcher includes='beans/black(?:/|$)'>,
+    m2=<includematcher includes='beans/black(?:/|$)'>>
   $ hg debugwalk -v -Xbeans beans/black
   * matcher:
   <differencematcher
-    m1=<patternmatcher patterns='(?:beans/black(?:/|$))'>,
-    m2=<includematcher includes='(?:beans(?:/|$))'>>
+    m1=<patternmatcher patterns='beans/black(?:/|$)'>,
+    m2=<includematcher includes='beans(?:/|$)'>>
   $ hg debugwalk -v -Xbeans -Ibeans/black
   * matcher:
   <differencematcher
-    m1=<includematcher includes='(?:beans/black(?:/|$))'>,
-    m2=<includematcher includes='(?:beans(?:/|$))'>>
+    m1=<includematcher includes='beans/black(?:/|$)'>,
+    m2=<includematcher includes='beans(?:/|$)'>>
   $ hg debugwalk -v 'glob:mammals/../beans/b*'
   * matcher:
-  <patternmatcher patterns='(?:beans/b[^/]*$)'>
+  <patternmatcher patterns='beans/b[^/]*$'>
   f  beans/black     beans/black
   f  beans/borlotti  beans/borlotti
   $ hg debugwalk -v '-X*/Procyonidae' mammals
   * matcher:
   <differencematcher
-    m1=<patternmatcher patterns='(?:mammals(?:/|$))'>,
-    m2=<includematcher includes='(?:[^/]*/Procyonidae(?:/|$))'>>
+    m1=<patternmatcher patterns='mammals(?:/|$)'>,
+    m2=<includematcher includes='[^/]*/Procyonidae(?:/|$)'>>
   f  mammals/skunk  mammals/skunk
   $ hg debugwalk -v path:mammals
   * matcher:
-  <patternmatcher patterns='(?:mammals(?:/|$))'>
+  <patternmatcher patterns='mammals(?:/|$)'>
   f  mammals/Procyonidae/cacomistle  mammals/Procyonidae/cacomistle
   f  mammals/Procyonidae/coatimundi  mammals/Procyonidae/coatimundi
   f  mammals/Procyonidae/raccoon     mammals/Procyonidae/raccoon
@@ -426,29 +426,29 @@
   $ hg debugwalk -v fennel -X fennel
   * matcher:
   <differencematcher
-    m1=<patternmatcher patterns='(?:fennel(?:/|$))'>,
-    m2=<includematcher includes='(?:fennel(?:/|$))'>>
+    m1=<patternmatcher patterns='fennel(?:/|$)'>,
+    m2=<includematcher includes='fennel(?:/|$)'>>
   $ hg debugwalk -v fennel -X 'f*'
   * matcher:
   <differencematcher
-    m1=<patternmatcher patterns='(?:fennel(?:/|$))'>,
-    m2=<includematcher includes='(?:f[^/]*(?:/|$))'>>
+    m1=<patternmatcher patterns='fennel(?:/|$)'>,
+    m2=<includematcher includes='f[^/]*(?:/|$)'>>
   $ hg debugwalk -v beans/black -X 'path:beans'
   * matcher:
   <differencematcher
-    m1=<patternmatcher patterns='(?:beans/black(?:/|$))'>,
-    m2=<includematcher includes='(?:beans(?:/|$))'>>
+    m1=<patternmatcher patterns='beans/black(?:/|$)'>,
+    m2=<includematcher includes='beans(?:/|$)'>>
   $ hg debugwalk -v -I 'path:beans/black' -X 'path:beans'
   * matcher:
   <differencematcher
-    m1=<includematcher includes='(?:beans/black(?:/|$))'>,
-    m2=<includematcher includes='(?:beans(?:/|$))'>>
+    m1=<includematcher includes='beans/black(?:/|$)'>,
+    m2=<includematcher includes='beans(?:/|$)'>>
 
 Test absolute paths:
 
   $ hg debugwalk -v `pwd`/beans
   * matcher:
-  <patternmatcher patterns='(?:beans(?:/|$))'>
+  <patternmatcher patterns='beans(?:/|$)'>
   f  beans/black     beans/black
   f  beans/borlotti  beans/borlotti
   f  beans/kidney    beans/kidney
@@ -463,7 +463,7 @@
 
   $ hg debugwalk -v glob:\*
   * matcher:
-  <patternmatcher patterns='(?:[^/]*$)'>
+  <patternmatcher patterns='[^/]*$'>
   f  fennel      fennel
   f  fenugreek   fenugreek
   f  fiddlehead  fiddlehead
@@ -474,163 +474,163 @@
   warning: filename contains ':', which is reserved on Windows: 'glob:glob'
   $ hg debugwalk -v glob:\*
   * matcher:
-  <patternmatcher patterns='(?:[^/]*$)'>
+  <patternmatcher patterns='[^/]*$'>
   f  fennel      fennel
   f  fenugreek   fenugreek
   f  fiddlehead  fiddlehead
   f  glob:glob   glob:glob
   $ hg debugwalk -v glob:glob
   * matcher:
-  <patternmatcher patterns='(?:glob$)'>
+  <patternmatcher patterns='glob$'>
   glob: $ENOENT$
   $ hg debugwalk -v glob:glob:glob
   * matcher:
-  <patternmatcher patterns='(?:glob:glob$)'>
+  <patternmatcher patterns='glob:glob$'>
   f  glob:glob  glob:glob  exact
   $ hg debugwalk -v path:glob:glob
   * matcher:
-  <patternmatcher patterns='(?:glob:glob(?:/|$))'>
+  <patternmatcher patterns='glob:glob(?:/|$)'>
   f  glob:glob  glob:glob  exact
   $ rm glob:glob
   $ hg addremove
   removing glob:glob
 #endif
 
   $ hg debugwalk -v 'glob:**e'
   * matcher:
-  <patternmatcher patterns='(?:.*e$)'>
+  <patternmatcher patterns='.*e$'>
   f  beans/turtle                    beans/turtle
   f  mammals/Procyonidae/cacomistle  mammals/Procyonidae/cacomistle
 
   $ hg debugwalk -v 're:.*[kb]$'
   * matcher:
-  <patternmatcher patterns='(?:.*[kb]$)'>
+  <patternmatcher patterns='.*[kb]$'>
   f  beans/black    beans/black
   f  fenugreek      fenugreek
   f  mammals/skunk  mammals/skunk
 
   $ hg debugwalk -v path:beans/black
   * matcher:
-  <patternmatcher patterns='(?:beans/black(?:/|$))'>
+  <patternmatcher patterns='beans/black(?:/|$)'>
   f  beans/black  beans/black  exact
   $ hg debugwalk -v path:beans//black
   * matcher:
-  <patternmatcher patterns='(?:beans/black(?:/|$))'>
+  <patternmatcher patterns='beans/black(?:/|$)'>
   f  beans/black  beans/black  exact
 
   $ hg debugwalk -v relglob:Procyonidae
   * matcher:
-  <patternmatcher patterns='(?:(?:|.*/)Procyonidae$)'>
+  <patternmatcher patterns='(?:|.*/)Procyonidae$'>
   $ hg debugwalk -v 'relglob:Procyonidae/**'
   * matcher:
-  <patternmatcher patterns='(?:(?:|.*/)Procyonidae/.*$)'>
+  <patternmatcher patterns='(?:|.*/)Procyonidae/.*$'>
   f  mammals/Procyonidae/cacomistle  mammals/Procyonidae/cacomistle
   f  mammals/Procyonidae/coatimundi  mammals/Procyonidae/coatimundi
   f  mammals/Procyonidae/raccoon     mammals/Procyonidae/raccoon
   $ hg debugwalk -v 'relglob:Procyonidae/**' fennel
   * matcher:
-  <patternmatcher patterns='(?:(?:|.*/)Procyonidae/.*$|fennel(?:/|$))'>
+  <patternmatcher patterns='(?:|.*/)Procyonidae/.*$|fennel(?:/|$)'>
   f  fennel                          fennel                          exact
   f  mammals/Procyonidae/cacomistle  mammals/Procyonidae/cacomistle
   f  mammals/Procyonidae/coatimundi  mammals/Procyonidae/coatimundi
   f  mammals/Procyonidae/raccoon     mammals/Procyonidae/raccoon
   $ hg debugwalk -v beans 'glob:beans/*'
   * matcher:
-  <patternmatcher patterns='(?:beans(?:/|$)|beans/[^/]*$)'>
+  <patternmatcher patterns='beans(?:/|$)|beans/[^/]*$'>
   f  beans/black     beans/black
   f  beans/borlotti  beans/borlotti
   f  beans/kidney    beans/kidney
   f  beans/navy      beans/navy
   f  beans/pinto     beans/pinto
   f  beans/turtle    beans/turtle
   $ hg debugwalk -v 'glob:mamm**'
   * matcher:
-  <patternmatcher patterns='(?:mamm.*$)'>
+  <patternmatcher patterns='mamm.*$'>
   f  mammals/Procyonidae/cacomistle  mammals/Procyonidae/cacomistle
   f  mammals/Procyonidae/coatimundi  mammals/Procyonidae/coatimundi
   f  mammals/Procyonidae/raccoon     mammals/Procyonidae/raccoon
   f  mammals/skunk                   mammals/skunk
   $ hg debugwalk -v 'glob:mamm**' fennel
   * matcher:
-  <patternmatcher patterns='(?:mamm.*$|fennel(?:/|$))'>
+  <patternmatcher patterns='mamm.*$|fennel(?:/|$)'>
   f  fennel                          fennel                          exact
   f  mammals/Procyonidae/cacomistle  mammals/Procyonidae/cacomistle
   f  mammals/Procyonidae/coatimundi  mammals/Procyonidae/coatimundi
   f  mammals/Procyonidae/raccoon     mammals/Procyonidae/raccoon
   f  mammals/skunk                   mammals/skunk
   $ hg debugwalk -v 'glob:j*'
   * matcher:
-  <patternmatcher patterns='(?:j[^/]*$)'>
+  <patternmatcher patterns='j[^/]*$'>
   $ hg debugwalk -v NOEXIST
   * matcher:
-  <patternmatcher patterns='(?:NOEXIST(?:/|$))'>
+  <patternmatcher patterns='NOEXIST(?:/|$)'>
   NOEXIST: * (glob)
 
 #if fifo
   $ mkfifo fifo
   $ hg debugwalk -v fifo
   * matcher:
-  <patternmatcher patterns='(?:fifo(?:/|$))'>
+  <patternmatcher patterns='fifo(?:/|$)'>
   fifo: unsupported file type (type is fifo)
 #endif
 
   $ rm fenugreek
   $ hg debugwalk -v fenugreek
   * matcher:
-  <patternmatcher patterns='(?:fenugreek(?:/|$))'>
+  <patternmatcher patterns='fenugreek(?:/|$)'>
   f  fenugreek  fenugreek  exact
   $ hg rm fenugreek
   $ hg debugwalk -v fenugreek
   * matcher:
-  <patternmatcher patterns='(?:fenugreek(?:/|$))'>
+  <patternmatcher patterns='fenugreek(?:/|$)'>
   f  fenugreek  fenugreek  exact
   $ touch new
   $ hg debugwalk -v new
   * matcher:
-  <patternmatcher patterns='(?:new(?:/|$))'>
+  <patternmatcher patterns='new(?:/|$)'>
   f  new  new  exact
 
   $ mkdir ignored
   $ touch ignored/file
   $ echo '^ignored$' > .hgignore
   $ hg debugwalk -v ignored
   * matcher:
-  <patternmatcher patterns='(?:ignored(?:/|$))'>
+  <patternmatcher patterns='ignored(?:/|$)'>
   $ hg debugwalk -v ignored/file
   * matcher:
-  <patternmatcher patterns='(?:ignored/file(?:/|$))'>
+  <patternmatcher patterns='ignored/file(?:/|$)'>
   f  ignored/file  ignored/file  exact
 
 Test listfile and listfile0
 
   $ "$PYTHON" -c "open('listfile0', 'wb').write(b'fenugreek\0new\0')"
   $ hg debugwalk -v -I 'listfile0:listfile0'
   * matcher:
-  <includematcher includes='(?:fenugreek(?:/|$)|new(?:/|$))'>
+  <includematcher includes='fenugreek(?:/|$)|new(?:/|$)'>
   f  fenugreek  fenugreek
   f  new        new
   $ "$PYTHON" -c "open('listfile', 'wb').write(b'fenugreek\nnew\r\nmammals/skunk\n')"
   $ hg debugwalk -v -I 'listfile:listfile'
   * matcher:
-  <includematcher includes='(?:fenugreek(?:/|$)|new(?:/|$)|mammals/skunk(?:/|$))'>
+  <includematcher includes='fenugreek(?:/|$)|new(?:/|$)|mammals/skunk(?:/|$)'>
   f  fenugreek      fenugreek
   f  mammals/skunk  mammals/skunk
   f  new            new
 
   $ cd ..
   $ hg debugwalk -v -R t t/mammals/skunk
   * matcher:
-  <patternmatcher patterns='(?:mammals/skunk(?:/|$))'>
+  <patternmatcher patterns='mammals/skunk(?:/|$)'>
   f  mammals/skunk  t/mammals/skunk  exact
   $ mkdir t2
   $ cd t2
   $ hg debugwalk -v -R ../t ../t/mammals/skunk
   * matcher:
-  <patternmatcher patterns='(?:mammals/skunk(?:/|$))'>
+  <patternmatcher patterns='mammals/skunk(?:/|$)'>
   f  mammals/skunk  ../t/mammals/skunk  exact
   $ hg debugwalk -v --cwd ../t mammals/skunk
   * matcher:
-  <patternmatcher patterns='(?:mammals/skunk(?:/|$))'>
+  <patternmatcher patterns='mammals/skunk(?:/|$)'>
   f  mammals/skunk  mammals/skunk  exact
 
   $ cd ..
diff --git a/tests/test-narrow-commit.t b/tests/test-narrow-commit.t
--- a/tests/test-narrow-commit.t
+++ b/tests/test-narrow-commit.t
@@ -51,7 +51,7 @@
   $ touch outside/f1
   $ hg debugwalk -v -I 'relglob:f1'
   * matcher:
-  <includematcher includes='(?:(?:|.*/)f1(?:/|$))'>
+  <includematcher includes='(?:|.*/)f1(?:/|$)'>
   f  inside/f1  inside/f1
   $ hg add .
   $ hg add outside/f1
diff --git a/tests/test-hgignore.t b/tests/test-hgignore.t
--- a/tests/test-hgignore.t
+++ b/tests/test-hgignore.t
@@ -197,7 +197,7 @@
   A b.o
 
   $ hg debugignore
-  <includematcher includes='(?:(?:|.*/)[^/]*(?:/|$))'>
+  <includematcher includes='(?:|.*/)[^/]*(?:/|$)'>
 
   $ hg debugignore b.o
   b.o is ignored
diff --git a/tests/test-fileset.t b/tests/test-fileset.t
--- a/tests/test-fileset.t
+++ b/tests/test-fileset.t
@@ -19,18 +19,18 @@
   $ fileset -v a1
   (symbol 'a1')
   * matcher:
-  <patternmatcher patterns='(?:a1$)'>
+  <patternmatcher patterns='a1$'>
   a1
   $ fileset -v 'a*'
   (symbol 'a*')
   * matcher:
-  <patternmatcher patterns='(?:a[^/]*$)'>
+  <patternmatcher patterns='a[^/]*$'>
   a1
   a2
   $ fileset -v '"re:a\d"'
   (string 're:a\\d')
   * matcher:
-  <patternmatcher patterns='(?:a\\d)'>
+  <patternmatcher patterns='a\\d'>
   a1
   a2
   $ fileset -v '!re:"a\d"'
@@ -41,7 +41,7 @@
   * matcher:
   <predicatenmatcher
     pred=<not
-      <patternmatcher patterns='(?:a\\d)'>>>
+      <patternmatcher patterns='a\\d'>>>
   b1
   b2
   $ fileset -v 'path:a1 or glob:b?'
@@ -53,7 +53,7 @@
       (symbol 'glob')
       (symbol 'b?')))
   * matcher:
-  <patternmatcher patterns='(?:a1(?:/|$)|b.$)'>
+  <patternmatcher patterns='a1(?:/|$)|b.$'>
   a1
   b1
   b2
@@ -196,7 +196,7 @@
         (string 'b'))))
   * matcher:
   <unionmatcher matchers=[
-    <patternmatcher patterns='(?:a1$|a2$)'>,
+    <patternmatcher patterns='a1$|a2$'>,
     <intersectionmatcher
       m1=<predicatenmatcher pred=clean>,
       m2=<predicatenmatcher pred=grep('b')>>]>
@@ -216,7 +216,7 @@
       (symbol 'path')
       (symbol 'b1')))
   * matcher:
-  <patternmatcher patterns='(?:a1$|a2$|b1(?:/|$))'>
+  <patternmatcher patterns='a1$|a2$|b1(?:/|$)'>
   a1
   a2
   b1
@@ -237,7 +237,7 @@
       (string 'b')))
   * matcher:
   <unionmatcher matchers=[
-    <patternmatcher patterns='(?:a1$|b2$)'>,
+    <patternmatcher patterns='a1$|b2$'>,
     <predicatenmatcher pred=grep('a')>,
     <predicatenmatcher pred=grep('b')>]>
   a1
@@ -254,8 +254,8 @@
     (symbol 'a1'))
   * matcher:
   <differencematcher
-    m1=<patternmatcher patterns='(?:a[^/]*$)'>,
-    m2=<patternmatcher patterns='(?:a1$)'>>
+    m1=<patternmatcher patterns='a[^/]*$'>,
+    m2=<patternmatcher patterns='a1$'>>
   a2
 
   $ fileset -p optimized -s '!binary() and a*'
@@ -267,7 +267,7 @@
       None))
   * matcher:
   <differencematcher
-    m1=<patternmatcher patterns='(?:a[^/]*$)'>,
+    m1=<patternmatcher patterns='a[^/]*$'>,
     m2=<predicatenmatcher pred=binary>>
   a1
   a2
@@ -286,8 +286,8 @@
     (symbol 'a1'))
   * matcher:
   <differencematcher
-    m1=<patternmatcher patterns='(?:a[^/]*$)'>,
-    m2=<patternmatcher patterns='(?:a1$)'>>
+    m1=<patternmatcher patterns='a[^/]*$'>,
+    m2=<patternmatcher patterns='a1$'>>
   a2
 
   $ fileset -p analyzed -p optimized -s 'binary() - a*'
@@ -309,7 +309,7 @@
   <intersectionmatcher
     m1=<predicatenmatcher
       pred=<not
-        <patternmatcher patterns='(?:a[^/]*$)'>>>,
+        <patternmatcher patterns='a[^/]*$'>>>,
     m2=<predicatenmatcher pred=binary>>
 
 Test files status
@@ -551,7 +551,7 @@
       None))
   * matcher:
   <intersectionmatcher
-    m1=<patternmatcher patterns='(?:b[^/]*$)'>,
+    m1=<patternmatcher patterns='b[^/]*$'>,
     m2=<predicatenmatcher pred=binary>>
   bin
 
diff --git a/mercurial/match.py b/mercurial/match.py
--- a/mercurial/match.py
+++ b/mercurial/match.py
@@ -1185,11 +1185,10 @@
         return regex, lambda f: any(mf(f) for mf in matchfuncs)
 
 MAX_RE_SIZE = 20000
-_BASE_SIZE = len('(?:)')
 
 def _joinregexes(regexps):
     """gather multiple regular expressions into a single one"""
-    return '(?:%s)' % '|'.join(regexps)
+    return '|'.join(regexps)
 
 def _buildregexmatch(kindpats, globsuffix):
     """Build a match function from a list of kinds and kindpats,
@@ -1209,17 +1208,17 @@
         fullregexp = _joinregexes(regexps)
 
         startidx = 0
-        groupsize = _BASE_SIZE
+        groupsize = 0
         for idx, r in enumerate(regexps):
             piecesize = len(r)
-            if (piecesize + _BASE_SIZE) > MAX_RE_SIZE:
+            if piecesize > MAX_RE_SIZE:
                 msg = _("matcher pattern is too long (%d bytes)") % piecesize
                 raise error.Abort(msg)
             elif (groupsize + piecesize) > MAX_RE_SIZE:
                 group = regexps[startidx:idx]
                 allgroups.append(_joinregexes(group))
                 startidx = idx
-                groupsize = _BASE_SIZE
+                groupsize = 0
             groupsize += piecesize + 1
 
         if startidx == 0:
@@ -1233,7 +1232,7 @@
     except re.error:
         for k, p, s in kindpats:
             try:
-                _rematcher('(?:%s)' % _regex(k, p, globsuffix))
+                _rematcher(_regex(k, p, globsuffix))
             except re.error:
                 if s:
                     raise error.Abort(_("%s: invalid pattern (%s): %s") %



To: martinvonz, durin42, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list