# HG changeset patch # User Yuya Nishihara # Date 2018-06-10 02:55:52 # Node ID dbf31732ef6414fc15d68ed9d0690c6406910ec0 # Parent 7c3a59e2971b9b6550a8d0243dbf22cb1bbe6221 debugwalk: pretty-print nested matcher While porting filesets to composition of matchers, I found the original one-liner was hard to read. diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py --- a/mercurial/debugcommands.py +++ b/mercurial/debugcommands.py @@ -2543,7 +2543,7 @@ def debugwalk(ui, repo, *pats, **opts): 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 diff --git a/tests/test-eolfilename.t b/tests/test-eolfilename.t --- a/tests/test-eolfilename.t +++ b/tests/test-eolfilename.t @@ -33,7 +33,8 @@ test issue352 [255] $ echo foo > "$A" $ hg debugwalk -v - matcher: + * matcher: + f he\r (no-eol) (esc) llo he\r (no-eol) (esc) llo 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 @@ -50,7 +50,8 @@ Can not modify dirstate outside $ mkdir outside $ touch outside/f1 $ hg debugwalk -v -I 'relglob:f1' - matcher: + * matcher: + f inside/f1 inside/f1 $ hg add outside/f1 abort: cannot track 'outside/f1' - it is outside the narrow clone diff --git a/tests/test-walk.t b/tests/test-walk.t --- a/tests/test-walk.t +++ b/tests/test-walk.t @@ -29,7 +29,8 @@ $ hg commit -m "commit #0" $ hg debugwalk -v - matcher: + * matcher: + 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: + * matcher: + 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: + * matcher: + 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: , m2=> + * matcher: + , m2= + > 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: + * matcher: + f mammals/skunk skunk $ hg debugwalk -v -I 'glob:*k' - matcher: + * matcher: + f mammals/skunk skunk $ hg debugwalk -v -I 'relglob:*k' - matcher: + * matcher: + f beans/black ../beans/black f fenugreek ../fenugreek f mammals/skunk skunk $ hg debugwalk -v -I 'relglob:*k' . - matcher: , m2=> + * matcher: + , m2= + > f mammals/skunk skunk $ hg debugwalk -v -I 're:.*k$' - matcher: + * matcher: + f beans/black ../beans/black f fenugreek ../fenugreek f mammals/skunk skunk $ hg debugwalk -v -I 'relre:.*k$' - matcher: + * matcher: + f beans/black ../beans/black f fenugreek ../fenugreek f mammals/skunk skunk $ hg debugwalk -v -I 'path:beans' - matcher: + * matcher: + 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: + * matcher: + 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: + * matcher: + f fennel ../fennel f fenugreek ../fenugreek f fiddlehead ../fiddlehead $ hg debugwalk -v -I 'rootfilesin:' - matcher: + * matcher: + f fennel ../fennel f fenugreek ../fenugreek f fiddlehead ../fiddlehead $ hg debugwalk -v 'rootfilesin:.' - matcher: + * matcher: + f fennel ../fennel f fenugreek ../fenugreek f fiddlehead ../fiddlehead $ hg debugwalk -v -I 'rootfilesin:.' - matcher: + * matcher: + f fennel ../fennel f fenugreek ../fenugreek f fiddlehead ../fiddlehead $ hg debugwalk -v -X 'rootfilesin:' - matcher: , m2=> + * matcher: + , m2= + > 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: + * matcher: + $ hg debugwalk -v -I 'rootfilesin:fennel' - matcher: + * matcher: + $ hg debugwalk -v 'rootfilesin:skunk' - matcher: + * matcher: + $ hg debugwalk -v -I 'rootfilesin:skunk' - matcher: + * matcher: + $ hg debugwalk -v 'rootfilesin:beans' - matcher: + * matcher: + 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: + * matcher: + 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: + * matcher: + f mammals/skunk skunk $ hg debugwalk -v -I 'rootfilesin:mammals' - matcher: + * matcher: + f mammals/skunk skunk $ hg debugwalk -v 'rootfilesin:mammals/' - matcher: + * matcher: + f mammals/skunk skunk $ hg debugwalk -v -I 'rootfilesin:mammals/' - matcher: + * matcher: + f mammals/skunk skunk $ hg debugwalk -v -X 'rootfilesin:mammals' - matcher: , m2=> + * matcher: + , m2= + > 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: + * matcher: + 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: + * matcher: + 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: + * matcher: + f mammals/Procyonidae/cacomistle Procyonidae/cacomistle f mammals/Procyonidae/coatimundi Procyonidae/coatimundi f mammals/Procyonidae/raccoon Procyonidae/raccoon $ cd Procyonidae $ hg debugwalk -v . - matcher: + * matcher: + f mammals/Procyonidae/cacomistle cacomistle f mammals/Procyonidae/coatimundi coatimundi f mammals/Procyonidae/raccoon raccoon $ hg debugwalk -v .. - matcher: + * matcher: + 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: + * matcher: + 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: + * matcher: + 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: + * matcher: + 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: + * matcher: + f beans/black beans/black f fenugreek fenugreek f mammals/skunk mammals/skunk $ hg debugwalk -v -Ibeans mammals - matcher: , m2=> + * matcher: + , m2= + > $ hg debugwalk -v -Inon-existent - matcher: + * matcher: + $ hg debugwalk -v -Inon-existent -Ibeans/black - matcher: + * matcher: + f beans/black beans/black $ hg debugwalk -v -Ibeans beans/black - matcher: , m2=> + * matcher: + , m2= + > f beans/black beans/black exact $ hg debugwalk -v -Ibeans/black beans - matcher: , m2=> + * matcher: + , m2= + > f beans/black beans/black $ hg debugwalk -v -Xbeans/black beans - matcher: , m2=> + * matcher: + , m2= + > 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: , m2=> + * matcher: + , m2= + > 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: , m2=> + * matcher: + , m2= + > $ hg debugwalk -v -Xbeans/black -Ibeans/black - matcher: , m2=> + * matcher: + , m2= + > $ hg debugwalk -v -Xbeans beans/black - matcher: , m2=> + * matcher: + , m2= + > $ hg debugwalk -v -Xbeans -Ibeans/black - matcher: , m2=> + * matcher: + , m2= + > $ hg debugwalk -v 'glob:mammals/../beans/b*' - matcher: + * matcher: + f beans/black beans/black f beans/borlotti beans/borlotti $ hg debugwalk -v '-X*/Procyonidae' mammals - matcher: , m2=> + * matcher: + , m2= + > f mammals/skunk mammals/skunk $ hg debugwalk -v path:mammals - matcher: + * matcher: + 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: , m2=> + * matcher: + , m2= + > $ hg debugwalk -v fennel -X 'f*' - matcher: , m2=> + * matcher: + , m2= + > $ hg debugwalk -v beans/black -X 'path:beans' - matcher: , m2=> + * matcher: + , m2= + > $ hg debugwalk -v -I 'path:beans/black' -X 'path:beans' - matcher: , m2=> + * matcher: + , m2= + > Test absolute paths: $ hg debugwalk -v `pwd`/beans - matcher: + * matcher: + f beans/black beans/black f beans/borlotti beans/borlotti f beans/kidney beans/kidney @@ -370,7 +462,8 @@ Test absolute paths: Test patterns: $ hg debugwalk -v glob:\* - matcher: + * matcher: + f fennel fennel f fenugreek fenugreek f fiddlehead fiddlehead @@ -380,19 +473,23 @@ Test patterns: adding glob:glob warning: filename contains ':', which is reserved on Windows: 'glob:glob' $ hg debugwalk -v glob:\* - matcher: + * matcher: + f fennel fennel f fenugreek fenugreek f fiddlehead fiddlehead f glob:glob glob:glob $ hg debugwalk -v glob:glob - matcher: + * matcher: + glob: $ENOENT$ $ hg debugwalk -v glob:glob:glob - matcher: + * matcher: + f glob:glob glob:glob exact $ hg debugwalk -v path:glob:glob - matcher: + * matcher: + f glob:glob glob:glob exact $ rm glob:glob $ hg addremove @@ -400,38 +497,46 @@ Test patterns: #endif $ hg debugwalk -v 'glob:**e' - matcher: + * matcher: + f beans/turtle beans/turtle f mammals/Procyonidae/cacomistle mammals/Procyonidae/cacomistle $ hg debugwalk -v 're:.*[kb]$' - matcher: + * matcher: + f beans/black beans/black f fenugreek fenugreek f mammals/skunk mammals/skunk $ hg debugwalk -v path:beans/black - matcher: + * matcher: + f beans/black beans/black exact $ hg debugwalk -v path:beans//black - matcher: + * matcher: + f beans/black beans/black exact $ hg debugwalk -v relglob:Procyonidae - matcher: + * matcher: + $ hg debugwalk -v 'relglob:Procyonidae/**' - matcher: + * matcher: + 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: + * matcher: + 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: + * matcher: + f beans/black beans/black f beans/borlotti beans/borlotti f beans/kidney beans/kidney @@ -439,78 +544,93 @@ Test patterns: f beans/pinto beans/pinto f beans/turtle beans/turtle $ hg debugwalk -v 'glob:mamm**' - matcher: + * matcher: + 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: + * matcher: + 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: + * matcher: + $ hg debugwalk -v NOEXIST - matcher: + * matcher: + NOEXIST: * (glob) #if fifo $ mkfifo fifo $ hg debugwalk -v fifo - matcher: + * matcher: + fifo: unsupported file type (type is fifo) #endif $ rm fenugreek $ hg debugwalk -v fenugreek - matcher: + * matcher: + f fenugreek fenugreek exact $ hg rm fenugreek $ hg debugwalk -v fenugreek - matcher: + * matcher: + f fenugreek fenugreek exact $ touch new $ hg debugwalk -v new - matcher: + * matcher: + f new new exact $ mkdir ignored $ touch ignored/file $ echo '^ignored$' > .hgignore $ hg debugwalk -v ignored - matcher: + * matcher: + $ hg debugwalk -v ignored/file - matcher: + * matcher: + 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: + * matcher: + 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: + * matcher: + f fenugreek fenugreek f mammals/skunk mammals/skunk f new new $ cd .. $ hg debugwalk -v -R t t/mammals/skunk - matcher: + * matcher: + f mammals/skunk t/mammals/skunk exact $ mkdir t2 $ cd t2 $ hg debugwalk -v -R ../t ../t/mammals/skunk - matcher: + * matcher: + f mammals/skunk ../t/mammals/skunk exact $ hg debugwalk -v --cwd ../t mammals/skunk - matcher: + * matcher: + f mammals/skunk mammals/skunk exact $ cd ..