treemanifests: remove _loadalllazy in _diff()
The benchmarks below use a similar setup as in ee7ee0c516ca and my other recent
commits. Yes, in some cases this runs in literally 5% of the time it
previously took.
before = a6f8ab53
diff --git:
repo | N | T | before (mean +- stdev) | after (mean +- stdev) | % of before
------+---+---+------------------------+-----------------------+------------
m-u | | | 1.301 s +- 0.004 s | 1.309 s +- 0.012 s | 100.6%
m-u | | x | 1.303 s +- 0.009 s | 1.302 s +- 0.006 s | 99.9%
m-u | x | | 1.308 s +- 0.006 s | 1.309 s +- 0.007 s | 100.1%
m-u | x | x | 85.7 ms +- 0.6 ms | 86.0 ms +- 0.3 ms | 100.4%
l-d-r | | | 197.5 ms +- 0.7 ms | 197.8 ms +- 2.2 ms | 100.2%
l-d-r | | x | 199.4 ms +- 0.6 ms | 199.3 ms +- 0.9 ms | 99.9%
l-d-r | x | | 86.1 ms +- 0.5 ms | 85.8 ms +- 0.9 ms | 99.7%
l-d-r | x | x | 64.4 ms +- 0.4 ms | 64.4 ms +- 0.3 ms | 100.0%
diff -c . --git:
repo | N | T | before (mean +- stdev) | after (mean +- stdev) | % of before
------+---+---+------------------------+-----------------------+------------
m-u | | | 236.7 ms +- 1.1 ms | 236.5 ms +- 1.3 ms | 99.9%
m-u | | x | 158.7 ms +- 1.0 ms | 128.0 ms +- 1.0 ms | 80.7% <--
m-u | x | | 239.7 ms +- 1.8 ms | 238.1 ms +- 1.5 ms | 99.3%
m-u | x | x | 132.4 ms +- 0.9 ms | 132.3 ms +- 0.6 ms | 99.9%
l-d-r | | | 81.8 ms +- 0.4 ms | 81.8 ms +- 0.3 ms | 100.0%
l-d-r | | x | 3.894 s +- 0.017 s | 193.6 ms +- 0.4 ms | 5.0% <--
l-d-r | x | | 106.9 ms +- 0.4 ms | 106.6 ms +- 0.3 ms | 99.7%
l-d-r | x | x | 182.7 ms +- 0.8 ms | 183.3 ms +- 0.9 ms | 100.3%
rebase -r . --keep -d .^^:
repo | N | T | before (mean +- stdev) | after (mean +- stdev) | % of before
------+---+---+------------------------+-----------------------+------------
m-u | | | 5.615 s +- 0.109 s | 5.562 s +- 0.015 s | 99.1%
m-u | | x | 5.701 s +- 0.027 s | 5.715 s +- 0.023 s | 100.2%
m-u | x | | 5.572 s +- 0.128 s | 5.613 s +- 0.182 s | 100.7%
m-u | x | x | 633.3 ms +- 28.7 ms | 636.2 ms +- 13.8 ms | 100.5%
l-d-r | | | 666.4 ms +- 17.0 ms | 658.5 ms +- 9.3 ms | 98.8%
l-d-r | | x | 6.520 s +- 0.070 s | 6.505 s +- 0.026 s | 99.8%
l-d-r | x | | 279.0 ms +- 13.0 ms | 276.5 ms +- 4.7 ms | 99.1%
l-d-r | x | x | 1.636 s +- 0.058 s | 1.657 s +- 0.014 s | 101.3%
status --change . --copies:
repo | N | T | before (mean +- stdev) | after (mean +- stdev) | % of before
------+---+---+------------------------+-----------------------+------------
m-u | | | 218.6 ms +- 1.4 ms | 217.9 ms +- 1.5 ms | 99.7%
m-u | | x | 138.5 ms +- 0.4 ms | 108.4 ms +- 0.2 ms | 78.3% <--
m-u | x | | 220.1 ms +- 1.3 ms | 219.7 ms +- 1.5 ms | 99.8%
m-u | x | x | 113.2 ms +- 0.4 ms | 112.4 ms +- 0.8 ms | 99.3%
l-d-r | | | 80.2 ms +- 0.3 ms | 80.6 ms +- 0.6 ms | 100.5%
l-d-r | | x | 3.899 s +- 0.020 s | 194.8 ms +- 4.0 ms | 5.0% <--
l-d-r | x | | 83.4 ms +- 0.8 ms | 83.2 ms +- 0.2 ms | 99.8%
l-d-r | x | x | 732.2 ms +- 4.3 ms | 194.9 ms +- 1.0 ms | 26.6% <--
status --copies:
repo | N | T | before (mean +- stdev) | after (mean +- stdev) | % of before
------+---+---+------------------------+-----------------------+------------
m-u | | | 1.917 s +- 0.005 s | 1.914 s +- 0.004 s | 99.8%
m-u | | x | 1.909 s +- 0.012 s | 1.934 s +- 0.004 s | 101.3%
m-u | x | | 1.915 s +- 0.005 s | 1.904 s +- 0.004 s | 99.4%
m-u | x | x | 94.8 ms +- 0.3 ms | 94.7 ms +- 0.2 ms | 99.9%
l-d-r | | | 593.9 ms +- 1.2 ms | 594.6 ms +- 9.4 ms | 100.1%
l-d-r | | x | 595.2 ms +- 3.8 ms | 597.2 ms +- 2.6 ms | 100.3%
l-d-r | x | | 182.5 ms +- 1.6 ms | 182.1 ms +- 0.6 ms | 99.8%
l-d-r | x | x | 149.6 ms +- 0.9 ms | 149.1 ms +- 0.8 ms | 99.7%
update $rev^; ~/src/hg/hg{hg}/hg update $rev:
repo | N | T | before (mean +- stdev) | after (mean +- stdev) | % of before
------+---+---+------------------------+-----------------------+------------
m-u | | | 3.121 s +- 0.007 s | 3.129 s +- 0.012 s | 100.3%
m-u | | x | 2.972 s +- 0.011 s | 2.981 s +- 0.012 s | 100.3%
m-u | x | | 3.144 s +- 0.014 s | 3.141 s +- 0.011 s | 99.9%
m-u | x | x | 312.2 ms +- 2.4 ms | 312.3 ms +- 2.1 ms | 100.0%
l-d-r | | | 444.4 ms +- 4.3 ms | 446.9 ms +- 5.3 ms | 100.6%
l-d-r | | x | 9.159 s +- 0.069 s | 9.182 s +- 0.040 s | 100.3%
l-d-r | x | | 254.6 ms +- 1.6 ms | 255.2 ms +- 1.6 ms | 100.2%
l-d-r | x | x | 1.525 s +- 0.007 s | 1.577 s +- 0.007 s | 103.4% <--?
Differential Revision: https://phab.mercurial-scm.org/D4845
$ hg init t
$ cd t
$ mkdir -p beans
$ for b in kidney navy turtle borlotti black pinto; do
> echo $b > beans/$b
> done
$ mkdir -p mammals/Procyonidae
$ for m in cacomistle coatimundi raccoon; do
> echo $m > mammals/Procyonidae/$m
> done
$ echo skunk > mammals/skunk
$ echo fennel > fennel
$ echo fenugreek > fenugreek
$ echo fiddlehead > fiddlehead
$ hg addremove
adding beans/black
adding beans/borlotti
adding beans/kidney
adding beans/navy
adding beans/pinto
adding beans/turtle
adding fennel
adding fenugreek
adding fiddlehead
adding mammals/Procyonidae/cacomistle
adding mammals/Procyonidae/coatimundi
adding mammals/Procyonidae/raccoon
adding mammals/skunk
$ hg commit -m "commit #0"
$ hg debugwalk -v
* matcher:
<alwaysmatcher>
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
f fennel fennel
f fenugreek fenugreek
f fiddlehead fiddlehead
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 -I.
* matcher:
<includematcher includes='(?:)'>
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
f fennel fennel
f fenugreek fenugreek
f fiddlehead fiddlehead
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
$ cd mammals
$ hg debugwalk -v
* matcher:
<alwaysmatcher>
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
f fennel ../fennel
f fenugreek ../fenugreek
f fiddlehead ../fiddlehead
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 -X ../beans
* matcher:
<differencematcher
m1=<alwaysmatcher>,
m2=<includematcher includes='(?:beans(?:/|$))'>>
f fennel ../fennel
f fenugreek ../fenugreek
f fiddlehead ../fiddlehead
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 '*k'
* matcher:
<includematcher includes='(?:mammals/[^/]*k(?:/|$))'>
f mammals/skunk skunk
$ hg debugwalk -v -I 'glob:*k'
* matcher:
<includematcher includes='(?:mammals/[^/]*k(?:/|$))'>
f mammals/skunk skunk
$ hg debugwalk -v -I 'relglob:*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(?:/|$))'>>
f mammals/skunk skunk
$ hg debugwalk -v -I 're:.*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$)'>
f beans/black ../beans/black
f fenugreek ../fenugreek
f mammals/skunk skunk
$ hg debugwalk -v -I 'path:beans'
* matcher:
<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(?:/|$))'>
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 'rootfilesin:'
* matcher:
<patternmatcher patterns='(?:[^/]+$)'>
f fennel ../fennel
f fenugreek ../fenugreek
f fiddlehead ../fiddlehead
$ hg debugwalk -v -I 'rootfilesin:'
* matcher:
<includematcher includes='(?:[^/]+$)'>
f fennel ../fennel
f fenugreek ../fenugreek
f fiddlehead ../fiddlehead
$ hg debugwalk -v 'rootfilesin:.'
* matcher:
<patternmatcher patterns='(?:[^/]+$)'>
f fennel ../fennel
f fenugreek ../fenugreek
f fiddlehead ../fiddlehead
$ hg debugwalk -v -I 'rootfilesin:.'
* matcher:
<includematcher includes='(?:[^/]+$)'>
f fennel ../fennel
f fenugreek ../fenugreek
f fiddlehead ../fiddlehead
$ hg debugwalk -v -X 'rootfilesin:'
* matcher:
<differencematcher
m1=<alwaysmatcher>,
m2=<includematcher includes='(?:[^/]+$)'>>
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
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 'rootfilesin:fennel'
* matcher:
<patternmatcher patterns='(?:fennel/[^/]+$)'>
$ hg debugwalk -v -I 'rootfilesin:fennel'
* matcher:
<includematcher includes='(?:fennel/[^/]+$)'>
$ hg debugwalk -v 'rootfilesin:skunk'
* matcher:
<patternmatcher patterns='(?:skunk/[^/]+$)'>
$ hg debugwalk -v -I 'rootfilesin:skunk'
* matcher:
<includematcher includes='(?:skunk/[^/]+$)'>
$ hg debugwalk -v 'rootfilesin:beans'
* matcher:
<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 -I 'rootfilesin:beans'
* matcher:
<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 'rootfilesin:mammals'
* matcher:
<patternmatcher patterns='(?:mammals/[^/]+$)'>
f mammals/skunk skunk
$ hg debugwalk -v -I 'rootfilesin:mammals'
* matcher:
<includematcher includes='(?:mammals/[^/]+$)'>
f mammals/skunk skunk
$ hg debugwalk -v 'rootfilesin:mammals/'
* matcher:
<patternmatcher patterns='(?:mammals/[^/]+$)'>
f mammals/skunk skunk
$ hg debugwalk -v -I 'rootfilesin:mammals/'
* matcher:
<includematcher includes='(?:mammals/[^/]+$)'>
f mammals/skunk skunk
$ hg debugwalk -v -X 'rootfilesin:mammals'
* matcher:
<differencematcher
m1=<alwaysmatcher>,
m2=<includematcher includes='(?:mammals/[^/]+$)'>>
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
f fennel ../fennel
f fenugreek ../fenugreek
f fiddlehead ../fiddlehead
f mammals/Procyonidae/cacomistle Procyonidae/cacomistle
f mammals/Procyonidae/coatimundi Procyonidae/coatimundi
f mammals/Procyonidae/raccoon Procyonidae/raccoon
$ hg debugwalk -v .
* 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(?:/|$))'>
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(?:/|$))'>
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(?:/|$))'>
f mammals/Procyonidae/cacomistle cacomistle
f mammals/Procyonidae/coatimundi coatimundi
f mammals/Procyonidae/raccoon raccoon
$ hg debugwalk -v ..
* matcher:
<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(?:/|$))'>
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(?:/|$))'>
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 .hg
abort: path 'mammals/.hg' is inside nested repo 'mammals'
[255]
$ hg debugwalk -v ../.hg
abort: path contains illegal component: .hg
[255]
$ cd ..
$ hg debugwalk -v -Ibeans
* matcher:
<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(?:/|$))'>
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(?:/|$))'>>
$ hg debugwalk -v -Inon-existent
* matcher:
<includematcher includes='(?:non\\-existent(?:/|$))'>
$ hg debugwalk -v -Inon-existent -Ibeans/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(?:/|$))'>>
f beans/black beans/black exact
$ hg debugwalk -v -Ibeans/black beans
* 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(?:/|$))'>>
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(?:/|$))'>>
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(?:/|$))'>>
$ hg debugwalk -v -Xbeans/black -Ibeans/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(?:/|$))'>>
$ hg debugwalk -v -Xbeans -Ibeans/black
* matcher:
<differencematcher
m1=<includematcher includes='(?:beans/black(?:/|$))'>,
m2=<includematcher includes='(?:beans(?:/|$))'>>
$ hg debugwalk -v 'glob:mammals/../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(?:/|$))'>>
f mammals/skunk mammals/skunk
$ hg debugwalk -v path: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
f mammals/skunk mammals/skunk
$ hg debugwalk -v ..
abort: .. not under root '$TESTTMP/t'
[255]
$ hg debugwalk -v beans/../..
abort: beans/../.. not under root '$TESTTMP/t'
[255]
$ hg debugwalk -v .hg
abort: path contains illegal component: .hg
[255]
$ hg debugwalk -v beans/../.hg
abort: path contains illegal component: .hg
[255]
$ hg debugwalk -v beans/../.hg/data
abort: path contains illegal component: .hg/data
[255]
$ hg debugwalk -v beans/.hg
abort: path 'beans/.hg' is inside nested repo 'beans'
[255]
Test explicit paths and excludes:
$ hg debugwalk -v fennel -X 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[^/]*(?:/|$))'>>
$ hg debugwalk -v beans/black -X 'path: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(?:/|$))'>>
Test absolute paths:
$ hg debugwalk -v `pwd`/beans
* matcher:
<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 `pwd`/..
abort: $TESTTMP/t/.. not under root '$TESTTMP/t'
[255]
Test patterns:
$ hg debugwalk -v glob:\*
* matcher:
<patternmatcher patterns='(?:[^/]*$)'>
f fennel fennel
f fenugreek fenugreek
f fiddlehead fiddlehead
#if eol-in-paths
$ echo glob:glob > glob:glob
$ hg addremove
adding glob:glob
warning: filename contains ':', which is reserved on Windows: 'glob:glob'
$ hg debugwalk -v glob:\*
* 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$)'>
glob: $ENOENT$
$ hg debugwalk -v glob:glob:glob
* matcher:
<patternmatcher patterns='(?:glob:glob$)'>
f glob:glob glob:glob exact
$ hg debugwalk -v path:glob:glob
* matcher:
<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$)'>
f beans/turtle beans/turtle
f mammals/Procyonidae/cacomistle mammals/Procyonidae/cacomistle
$ hg debugwalk -v 're:.*[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(?:/|$))'>
f beans/black beans/black exact
$ hg debugwalk -v path:beans//black
* matcher:
<patternmatcher patterns='(?:beans/black(?:/|$))'>
f beans/black beans/black exact
$ hg debugwalk -v relglob:Procyonidae
* matcher:
<patternmatcher patterns='(?:(?:|.*/)Procyonidae$)'>
$ hg debugwalk -v 'relglob: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(?:/|$))'>
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/[^/]*$)'>
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.*$)'>
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(?:/|$))'>
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[^/]*$)'>
$ hg debugwalk -v NOEXIST
* matcher:
<patternmatcher patterns='(?:NOEXIST(?:/|$))'>
NOEXIST: * (glob)
#if fifo
$ mkfifo fifo
$ hg debugwalk -v fifo
* matcher:
<patternmatcher patterns='(?:fifo(?:/|$))'>
fifo: unsupported file type (type is fifo)
#endif
$ rm fenugreek
$ hg debugwalk -v fenugreek
* matcher:
<patternmatcher patterns='(?:fenugreek(?:/|$))'>
f fenugreek fenugreek exact
$ hg rm fenugreek
$ hg debugwalk -v fenugreek
* matcher:
<patternmatcher patterns='(?:fenugreek(?:/|$))'>
f fenugreek fenugreek exact
$ touch new
$ hg debugwalk -v 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(?:/|$))'>
$ hg debugwalk -v 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(?:/|$))'>
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(?:/|$))'>
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(?:/|$))'>
f mammals/skunk t/mammals/skunk exact
$ mkdir t2
$ cd t2
$ hg debugwalk -v -R ../t ../t/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(?:/|$))'>
f mammals/skunk mammals/skunk exact
$ cd ..
Test split patterns on overflow
$ cd t
$ echo fennel > overflow.list
$ cat >> printnum.py <<EOF
> from __future__ import print_function
> for i in range(20000 // 100):
> print('x' * 100)
> EOF
$ "$PYTHON" printnum.py >> overflow.list
$ echo fenugreek >> overflow.list
$ hg debugwalk 'listfile:overflow.list' 2>&1 | egrep -v '^xxx'
f fennel fennel exact
f fenugreek fenugreek exact
$ cd ..