debugwalk: pretty-print nested matcher
authorYuya Nishihara <yuya@tcha.org>
Sun, 10 Jun 2018 11:55:52 +0900
changeset 38275 dbf31732ef64
parent 38274 7c3a59e2971b
child 38276 fbb2eddea4d2
debugwalk: pretty-print nested matcher While porting filesets to composition of matchers, I found the original one-liner was hard to read.
mercurial/debugcommands.py
tests/test-eolfilename.t
tests/test-narrow-commit.t
tests/test-walk.t
--- a/mercurial/debugcommands.py	Sun Jun 10 11:53:56 2018 +0900
+++ b/mercurial/debugcommands.py	Sun Jun 10 11:55:52 2018 +0900
@@ -2543,7 +2543,7 @@
     opts = pycompat.byteskwargs(opts)
     m = scmutil.match(repo[None], pats, opts)
     if ui.verbose:
-        ui.write(('matcher: %r\n' % m))
+        ui.write(('* matcher:\n'), stringutil.prettyrepr(m), '\n')
     items = list(repo[None].walk(m))
     if not items:
         return
--- a/tests/test-eolfilename.t	Sun Jun 10 11:53:56 2018 +0900
+++ b/tests/test-eolfilename.t	Sun Jun 10 11:55:52 2018 +0900
@@ -33,7 +33,8 @@
   [255]
   $ echo foo > "$A"
   $ hg debugwalk -v
-  matcher: <alwaysmatcher>
+  * matcher:
+  <alwaysmatcher>
   f  he\r (no-eol) (esc)
   llo  he\r (no-eol) (esc)
   llo
--- a/tests/test-narrow-commit.t	Sun Jun 10 11:53:56 2018 +0900
+++ b/tests/test-narrow-commit.t	Sun Jun 10 11:55:52 2018 +0900
@@ -50,7 +50,8 @@
   $ mkdir outside
   $ touch outside/f1
   $ hg debugwalk -v -I 'relglob:f1'
-  matcher: <includematcher includes='(?:(?:|.*/)f1(?:/|$))'>
+  * matcher:
+  <includematcher includes='(?:(?:|.*/)f1(?:/|$))'>
   f  inside/f1  inside/f1
   $ hg add outside/f1
   abort: cannot track 'outside/f1' - it is outside the narrow clone
--- a/tests/test-walk.t	Sun Jun 10 11:53:56 2018 +0900
+++ b/tests/test-walk.t	Sun Jun 10 11:55:52 2018 +0900
@@ -29,7 +29,8 @@
   $ hg commit -m "commit #0"
 
   $ hg debugwalk -v
-  matcher: <alwaysmatcher>
+  * matcher:
+  <alwaysmatcher>
   f  beans/black                     beans/black
   f  beans/borlotti                  beans/borlotti
   f  beans/kidney                    beans/kidney
@@ -44,7 +45,8 @@
   f  mammals/Procyonidae/raccoon     mammals/Procyonidae/raccoon
   f  mammals/skunk                   mammals/skunk
   $ hg debugwalk -v -I.
-  matcher: <includematcher includes='(?:)'>
+  * matcher:
+  <includematcher includes='(?:)'>
   f  beans/black                     beans/black
   f  beans/borlotti                  beans/borlotti
   f  beans/kidney                    beans/kidney
@@ -61,7 +63,8 @@
 
   $ cd mammals
   $ hg debugwalk -v
-  matcher: <alwaysmatcher>
+  * matcher:
+  <alwaysmatcher>
   f  beans/black                     ../beans/black
   f  beans/borlotti                  ../beans/borlotti
   f  beans/kidney                    ../beans/kidney
@@ -76,7 +79,10 @@
   f  mammals/Procyonidae/raccoon     Procyonidae/raccoon
   f  mammals/skunk                   skunk
   $ hg debugwalk -v -X ../beans
-  matcher: <differencematcher m1=<alwaysmatcher>, m2=<includematcher includes='(?:beans(?:/|$))'>>
+  * matcher:
+  <differencematcher m1=
+    <alwaysmatcher>, m2=
+    <includematcher includes='(?:beans(?:/|$))'>>
   f  fennel                          ../fennel
   f  fenugreek                       ../fenugreek
   f  fiddlehead                      ../fiddlehead
@@ -85,31 +91,40 @@
   f  mammals/Procyonidae/raccoon     Procyonidae/raccoon
   f  mammals/skunk                   skunk
   $ hg debugwalk -v -I '*k'
-  matcher: <includematcher includes='(?:mammals\\/[^/]*k(?:/|$))'>
+  * matcher:
+  <includematcher includes='(?:mammals\\/[^/]*k(?:/|$))'>
   f  mammals/skunk  skunk
   $ hg debugwalk -v -I 'glob:*k'
-  matcher: <includematcher includes='(?:mammals\\/[^/]*k(?:/|$))'>
+  * matcher:
+  <includematcher includes='(?:mammals\\/[^/]*k(?:/|$))'>
   f  mammals/skunk  skunk
   $ hg debugwalk -v -I 'relglob:*k'
-  matcher: <includematcher includes='(?:(?:|.*/)[^/]*k(?:/|$))'>
+  * matcher:
+  <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(?:/|$))'>>
+  * matcher:
+  <intersectionmatcher m1=
+    <patternmatcher patterns='(?:mammals(?:/|$))'>, m2=
+    <includematcher includes='(?:(?:|.*/)[^/]*k(?:/|$))'>>
   f  mammals/skunk  skunk
   $ hg debugwalk -v -I 're:.*k$'
-  matcher: <includematcher includes='(?:.*k$)'>
+  * matcher:
+  <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$)'>
+  * matcher:
+  <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(?:/|$))'>
+  * matcher:
+  <includematcher includes='(?:beans(?:/|$))'>
   f  beans/black     ../beans/black
   f  beans/borlotti  ../beans/borlotti
   f  beans/kidney    ../beans/kidney
@@ -117,7 +132,8 @@
   f  beans/pinto     ../beans/pinto
   f  beans/turtle    ../beans/turtle
   $ hg debugwalk -v -I 'relpath:detour/../../beans'
-  matcher: <includematcher includes='(?:beans(?:/|$))'>
+  * matcher:
+  <includematcher includes='(?:beans(?:/|$))'>
   f  beans/black     ../beans/black
   f  beans/borlotti  ../beans/borlotti
   f  beans/kidney    ../beans/kidney
@@ -126,27 +142,34 @@
   f  beans/turtle    ../beans/turtle
 
   $ hg debugwalk -v 'rootfilesin:'
-  matcher: <patternmatcher patterns='(?:[^/]+$)'>
+  * matcher:
+  <patternmatcher patterns='(?:[^/]+$)'>
   f  fennel      ../fennel
   f  fenugreek   ../fenugreek
   f  fiddlehead  ../fiddlehead
   $ hg debugwalk -v -I 'rootfilesin:'
-  matcher: <includematcher includes='(?:[^/]+$)'>
+  * matcher:
+  <includematcher includes='(?:[^/]+$)'>
   f  fennel      ../fennel
   f  fenugreek   ../fenugreek
   f  fiddlehead  ../fiddlehead
   $ hg debugwalk -v 'rootfilesin:.'
-  matcher: <patternmatcher patterns='(?:[^/]+$)'>
+  * matcher:
+  <patternmatcher patterns='(?:[^/]+$)'>
   f  fennel      ../fennel
   f  fenugreek   ../fenugreek
   f  fiddlehead  ../fiddlehead
   $ hg debugwalk -v -I 'rootfilesin:.'
-  matcher: <includematcher includes='(?:[^/]+$)'>
+  * matcher:
+  <includematcher includes='(?:[^/]+$)'>
   f  fennel      ../fennel
   f  fenugreek   ../fenugreek
   f  fiddlehead  ../fiddlehead
   $ hg debugwalk -v -X 'rootfilesin:'
-  matcher: <differencematcher m1=<alwaysmatcher>, m2=<includematcher includes='(?:[^/]+$)'>>
+  * matcher:
+  <differencematcher m1=
+    <alwaysmatcher>, m2=
+    <includematcher includes='(?:[^/]+$)'>>
   f  beans/black                     ../beans/black
   f  beans/borlotti                  ../beans/borlotti
   f  beans/kidney                    ../beans/kidney
@@ -158,15 +181,20 @@
   f  mammals/Procyonidae/raccoon     Procyonidae/raccoon
   f  mammals/skunk                   skunk
   $ hg debugwalk -v 'rootfilesin:fennel'
-  matcher: <patternmatcher patterns='(?:fennel/[^/]+$)'>
+  * matcher:
+  <patternmatcher patterns='(?:fennel/[^/]+$)'>
   $ hg debugwalk -v -I 'rootfilesin:fennel'
-  matcher: <includematcher includes='(?:fennel/[^/]+$)'>
+  * matcher:
+  <includematcher includes='(?:fennel/[^/]+$)'>
   $ hg debugwalk -v 'rootfilesin:skunk'
-  matcher: <patternmatcher patterns='(?:skunk/[^/]+$)'>
+  * matcher:
+  <patternmatcher patterns='(?:skunk/[^/]+$)'>
   $ hg debugwalk -v -I 'rootfilesin:skunk'
-  matcher: <includematcher includes='(?:skunk/[^/]+$)'>
+  * matcher:
+  <includematcher includes='(?:skunk/[^/]+$)'>
   $ hg debugwalk -v 'rootfilesin:beans'
-  matcher: <patternmatcher patterns='(?:beans/[^/]+$)'>
+  * matcher:
+  <patternmatcher patterns='(?:beans/[^/]+$)'>
   f  beans/black     ../beans/black
   f  beans/borlotti  ../beans/borlotti
   f  beans/kidney    ../beans/kidney
@@ -174,7 +202,8 @@
   f  beans/pinto     ../beans/pinto
   f  beans/turtle    ../beans/turtle
   $ hg debugwalk -v -I 'rootfilesin:beans'
-  matcher: <includematcher includes='(?:beans/[^/]+$)'>
+  * matcher:
+  <includematcher includes='(?:beans/[^/]+$)'>
   f  beans/black     ../beans/black
   f  beans/borlotti  ../beans/borlotti
   f  beans/kidney    ../beans/kidney
@@ -182,19 +211,26 @@
   f  beans/pinto     ../beans/pinto
   f  beans/turtle    ../beans/turtle
   $ hg debugwalk -v 'rootfilesin:mammals'
-  matcher: <patternmatcher patterns='(?:mammals/[^/]+$)'>
+  * matcher:
+  <patternmatcher patterns='(?:mammals/[^/]+$)'>
   f  mammals/skunk  skunk
   $ hg debugwalk -v -I 'rootfilesin:mammals'
-  matcher: <includematcher includes='(?:mammals/[^/]+$)'>
+  * matcher:
+  <includematcher includes='(?:mammals/[^/]+$)'>
   f  mammals/skunk  skunk
   $ hg debugwalk -v 'rootfilesin:mammals/'
-  matcher: <patternmatcher patterns='(?:mammals/[^/]+$)'>
+  * matcher:
+  <patternmatcher patterns='(?:mammals/[^/]+$)'>
   f  mammals/skunk  skunk
   $ hg debugwalk -v -I 'rootfilesin:mammals/'
-  matcher: <includematcher includes='(?:mammals/[^/]+$)'>
+  * matcher:
+  <includematcher includes='(?:mammals/[^/]+$)'>
   f  mammals/skunk  skunk
   $ hg debugwalk -v -X 'rootfilesin:mammals'
-  matcher: <differencematcher m1=<alwaysmatcher>, m2=<includematcher includes='(?:mammals/[^/]+$)'>>
+  * matcher:
+  <differencematcher m1=
+    <alwaysmatcher>, m2=
+    <includematcher includes='(?:mammals/[^/]+$)'>>
   f  beans/black                     ../beans/black
   f  beans/borlotti                  ../beans/borlotti
   f  beans/kidney                    ../beans/kidney
@@ -209,31 +245,36 @@
   f  mammals/Procyonidae/raccoon     Procyonidae/raccoon
 
   $ hg debugwalk -v .
-  matcher: <patternmatcher patterns='(?:mammals(?:/|$))'>
+  * matcher:
+  <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(?:/|$))'>
+  * matcher:
+  <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(?:/|$))'>
+  * matcher:
+  <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(?:/|$))'>
+  * matcher:
+  <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(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:mammals(?:/|$))'>
   f  mammals/Procyonidae/cacomistle  cacomistle
   f  mammals/Procyonidae/coatimundi  coatimundi
   f  mammals/Procyonidae/raccoon     raccoon
@@ -241,7 +282,8 @@
   $ cd ..
 
   $ hg debugwalk -v ../beans
-  matcher: <patternmatcher patterns='(?:beans(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:beans(?:/|$))'>
   f  beans/black     ../beans/black
   f  beans/borlotti  ../beans/borlotti
   f  beans/kidney    ../beans/kidney
@@ -249,7 +291,8 @@
   f  beans/pinto     ../beans/pinto
   f  beans/turtle    ../beans/turtle
   $ hg debugwalk -v .
-  matcher: <patternmatcher patterns='(?:mammals(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:mammals(?:/|$))'>
   f  mammals/Procyonidae/cacomistle  Procyonidae/cacomistle
   f  mammals/Procyonidae/coatimundi  Procyonidae/coatimundi
   f  mammals/Procyonidae/raccoon     Procyonidae/raccoon
@@ -263,7 +306,8 @@
   $ cd ..
 
   $ hg debugwalk -v -Ibeans
-  matcher: <includematcher includes='(?:beans(?:/|$))'>
+  * matcher:
+  <includematcher includes='(?:beans(?:/|$))'>
   f  beans/black     beans/black
   f  beans/borlotti  beans/borlotti
   f  beans/kidney    beans/kidney
@@ -271,54 +315,89 @@
   f  beans/pinto     beans/pinto
   f  beans/turtle    beans/turtle
   $ hg debugwalk -v -I '{*,{b,m}*/*}k'
-  matcher: <includematcher includes='(?:(?:[^/]*|(?:b|m)[^/]*\\/[^/]*)k(?:/|$))'>
+  * matcher:
+  <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(?:/|$))'>>
+  * matcher:
+  <intersectionmatcher m1=
+    <patternmatcher patterns='(?:mammals(?:/|$))'>, m2=
+    <includematcher includes='(?:beans(?:/|$))'>>
   $ hg debugwalk -v -Inon-existent
-  matcher: <includematcher includes='(?:non\\-existent(?:/|$))'>
+  * matcher:
+  <includematcher includes='(?:non\\-existent(?:/|$))'>
   $ hg debugwalk -v -Inon-existent -Ibeans/black
-  matcher: <includematcher includes='(?:non\\-existent(?:/|$)|beans\\/black(?:/|$))'>
+  * matcher:
+  <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(?:/|$))'>>
+  * matcher:
+  <intersectionmatcher 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(?:/|$))'>>
+  * matcher:
+  <intersectionmatcher 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(?:/|$))'>>
+  * matcher:
+  <differencematcher 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(?:/|$))'>>
+  * matcher:
+  <differencematcher 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(?:/|$))'>>
+  * matcher:
+  <differencematcher 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(?:/|$))'>>
+  * matcher:
+  <differencematcher 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(?:/|$))'>>
+  * matcher:
+  <differencematcher 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(?:/|$))'>>
+  * matcher:
+  <differencematcher m1=
+    <includematcher includes='(?:beans\\/black(?:/|$))'>, m2=
+    <includematcher includes='(?:beans(?:/|$))'>>
   $ hg debugwalk -v 'glob:mammals/../beans/b*'
-  matcher: <patternmatcher patterns='(?:beans\\/b[^/]*$)'>
+  * matcher:
+  <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(?:/|$))'>>
+  * matcher:
+  <differencematcher m1=
+    <patternmatcher patterns='(?:mammals(?:/|$))'>, m2=
+    <includematcher includes='(?:[^/]*\\/Procyonidae(?:/|$))'>>
   f  mammals/skunk  mammals/skunk
   $ hg debugwalk -v path:mammals
-  matcher: <patternmatcher patterns='(?:mammals(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:mammals(?:/|$))'>
   f  mammals/Procyonidae/cacomistle  mammals/Procyonidae/cacomistle
   f  mammals/Procyonidae/coatimundi  mammals/Procyonidae/coatimundi
   f  mammals/Procyonidae/raccoon     mammals/Procyonidae/raccoon
@@ -345,18 +424,31 @@
 Test explicit paths and excludes:
 
   $ hg debugwalk -v fennel -X fennel
-  matcher: <differencematcher m1=<patternmatcher patterns='(?:fennel(?:/|$))'>, m2=<includematcher includes='(?:fennel(?:/|$))'>>
+  * matcher:
+  <differencematcher m1=
+    <patternmatcher patterns='(?:fennel(?:/|$))'>, m2=
+    <includematcher includes='(?:fennel(?:/|$))'>>
   $ hg debugwalk -v fennel -X 'f*'
-  matcher: <differencematcher m1=<patternmatcher patterns='(?:fennel(?:/|$))'>, m2=<includematcher includes='(?:f[^/]*(?:/|$))'>>
+  * matcher:
+  <differencematcher 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(?:/|$))'>>
+  * matcher:
+  <differencematcher 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(?:/|$))'>>
+  * matcher:
+  <differencematcher m1=
+    <includematcher includes='(?:beans\\/black(?:/|$))'>, m2=
+    <includematcher includes='(?:beans(?:/|$))'>>
 
 Test absolute paths:
 
   $ hg debugwalk -v `pwd`/beans
-  matcher: <patternmatcher patterns='(?:beans(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:beans(?:/|$))'>
   f  beans/black     beans/black
   f  beans/borlotti  beans/borlotti
   f  beans/kidney    beans/kidney
@@ -370,7 +462,8 @@
 Test patterns:
 
   $ hg debugwalk -v glob:\*
-  matcher: <patternmatcher patterns='(?:[^/]*$)'>
+  * matcher:
+  <patternmatcher patterns='(?:[^/]*$)'>
   f  fennel      fennel
   f  fenugreek   fenugreek
   f  fiddlehead  fiddlehead
@@ -380,19 +473,23 @@
   adding glob:glob
   warning: filename contains ':', which is reserved on Windows: 'glob:glob'
   $ hg debugwalk -v glob:\*
-  matcher: <patternmatcher patterns='(?:[^/]*$)'>
+  * matcher:
+  <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$)'>
+  * matcher:
+  <patternmatcher patterns='(?:glob$)'>
   glob: $ENOENT$
   $ hg debugwalk -v glob:glob:glob
-  matcher: <patternmatcher patterns='(?:glob\\:glob$)'>
+  * matcher:
+  <patternmatcher patterns='(?:glob\\:glob$)'>
   f  glob:glob  glob:glob  exact
   $ hg debugwalk -v path:glob:glob
-  matcher: <patternmatcher patterns='(?:glob\\:glob(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:glob\\:glob(?:/|$))'>
   f  glob:glob  glob:glob  exact
   $ rm glob:glob
   $ hg addremove
@@ -400,38 +497,46 @@
 #endif
 
   $ hg debugwalk -v 'glob:**e'
-  matcher: <patternmatcher patterns='(?:.*e$)'>
+  * matcher:
+  <patternmatcher patterns='(?:.*e$)'>
   f  beans/turtle                    beans/turtle
   f  mammals/Procyonidae/cacomistle  mammals/Procyonidae/cacomistle
 
   $ hg debugwalk -v 're:.*[kb]$'
-  matcher: <patternmatcher patterns='(?:.*[kb]$)'>
+  * matcher:
+  <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(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:beans\\/black(?:/|$))'>
   f  beans/black  beans/black  exact
   $ hg debugwalk -v path:beans//black
-  matcher: <patternmatcher patterns='(?:beans\\/black(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:beans\\/black(?:/|$))'>
   f  beans/black  beans/black  exact
 
   $ hg debugwalk -v relglob:Procyonidae
-  matcher: <patternmatcher patterns='(?:(?:|.*/)Procyonidae$)'>
+  * matcher:
+  <patternmatcher patterns='(?:(?:|.*/)Procyonidae$)'>
   $ hg debugwalk -v 'relglob:Procyonidae/**'
-  matcher: <patternmatcher patterns='(?:(?:|.*/)Procyonidae\\/.*$)'>
+  * matcher:
+  <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(?:/|$))'>
+  * matcher:
+  <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\\/[^/]*$)'>
+  * matcher:
+  <patternmatcher patterns='(?:beans(?:/|$)|beans\\/[^/]*$)'>
   f  beans/black     beans/black
   f  beans/borlotti  beans/borlotti
   f  beans/kidney    beans/kidney
@@ -439,78 +544,93 @@
   f  beans/pinto     beans/pinto
   f  beans/turtle    beans/turtle
   $ hg debugwalk -v 'glob:mamm**'
-  matcher: <patternmatcher patterns='(?:mamm.*$)'>
+  * matcher:
+  <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(?:/|$))'>
+  * matcher:
+  <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[^/]*$)'>
+  * matcher:
+  <patternmatcher patterns='(?:j[^/]*$)'>
   $ hg debugwalk -v NOEXIST
-  matcher: <patternmatcher patterns='(?:NOEXIST(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:NOEXIST(?:/|$))'>
   NOEXIST: * (glob)
 
 #if fifo
   $ mkfifo fifo
   $ hg debugwalk -v fifo
-  matcher: <patternmatcher patterns='(?:fifo(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:fifo(?:/|$))'>
   fifo: unsupported file type (type is fifo)
 #endif
 
   $ rm fenugreek
   $ hg debugwalk -v fenugreek
-  matcher: <patternmatcher patterns='(?:fenugreek(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:fenugreek(?:/|$))'>
   f  fenugreek  fenugreek  exact
   $ hg rm fenugreek
   $ hg debugwalk -v fenugreek
-  matcher: <patternmatcher patterns='(?:fenugreek(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:fenugreek(?:/|$))'>
   f  fenugreek  fenugreek  exact
   $ touch new
   $ hg debugwalk -v new
-  matcher: <patternmatcher patterns='(?:new(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:new(?:/|$))'>
   f  new  new  exact
 
   $ mkdir ignored
   $ touch ignored/file
   $ echo '^ignored$' > .hgignore
   $ hg debugwalk -v ignored
-  matcher: <patternmatcher patterns='(?:ignored(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:ignored(?:/|$))'>
   $ hg debugwalk -v ignored/file
-  matcher: <patternmatcher patterns='(?:ignored\\/file(?:/|$))'>
+  * matcher:
+  <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(?:/|$))'>
+  * matcher:
+  <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(?:/|$))'>
+  * matcher:
+  <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(?:/|$))'>
+  * matcher:
+  <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(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:mammals\\/skunk(?:/|$))'>
   f  mammals/skunk  ../t/mammals/skunk  exact
   $ hg debugwalk -v --cwd ../t mammals/skunk
-  matcher: <patternmatcher patterns='(?:mammals\\/skunk(?:/|$))'>
+  * matcher:
+  <patternmatcher patterns='(?:mammals\\/skunk(?:/|$))'>
   f  mammals/skunk  mammals/skunk  exact
 
   $ cd ..