sapling/mercurial
Martin von Zweigbergk da238dd9f0 dirstate: optimize walk() by using match.visitdir()
We already have the logic for restricting directory walks in
match.visitdir() that we use for treemanifests. We should take
advantage of it when walking the working copy as well.

This speeds up "hg st -I rootfilesin:." on the Firefox repo from
0.587s to 0.305s on warm disk (and much more on cold disk). More time
is spent reading the dirstate than walking the working copy after.

I tried to find scenarios where calling match.visitdir() would be a
noticeable overhead, but I couldn't find any. I encourage the reader
to try for themselves, since this is performance-critical code.
2017-05-05 08:49:46 -07:00
..
cffi setup: move cffi stuff to mercurial/cffi 2016-11-09 22:08:30 +00:00
default.d mergetools.rc: find OSX FileMerge in the new location inside Xcode 4.3 2015-10-16 11:37:34 +02:00
help merge with stable 2017-05-04 00:26:55 -04:00
hgweb webcommands: use fctx.isbinary 2017-05-03 18:04:43 -07:00
httpclient httpclient: don't use mutable default argument value 2017-03-14 23:49:25 -07:00
pure py3: abuse r'' to preserve str-ness of literals passed to __setattr__() 2017-03-26 16:33:12 +09:00
templates hgweb: change text of followlines links to "older / newer" 2017-04-24 10:48:07 +02:00
__init__.py py3: add pycompat.unicode and add it to importer 2017-04-07 23:35:51 +05:30
ancestor.py py3: add __bool__ to every class defining __nonzero__ 2017-03-13 12:40:14 -07:00
archival.py py3: remove use of *L syntax 2016-09-01 02:29:46 +05:30
base85.c base85: fix comparison of an int and a long 2015-08-21 14:29:42 -04:00
bdiff_module.c bdiff: include util.h 2016-10-13 13:27:14 +02:00
bdiff.c bdiff: split bdiff into cpy-aware and cpy-agnostic part 2016-07-13 10:46:26 +02:00
bdiff.h bdiff: split bdiff into cpy-aware and cpy-agnostic part 2016-07-13 10:46:26 +02:00
bitmanipulation.h internals: move the bitmanipulation routines into its own file 2016-06-06 13:08:13 +02:00
bookmarks.py bookmarks: abort 'push -B .' when no active bookmark 2016-06-13 23:50:26 +02:00
branchmap.py rbc: fix superfluous rebuilding from scratch - don't abuse self._rbcnamescount 2016-07-18 22:25:09 +02:00
bundle2.py bundle2: ignore errors seeking a bundle after an exception (issue4784) 2017-04-16 11:55:08 -07:00
bundlerepo.py bundlerepo: fix raw handling in revision() 2017-04-06 17:45:47 -07:00
byterange.py pycompat: switch to util.urlreq/util.urlerr for py3 compat 2016-04-06 23:22:12 +00:00
changegroup.py changegroup: deprecate 'getlocalchangroup' (API) 2017-05-04 12:43:41 +02:00
changelog.py py3: slice over bytes to prevent getting ascii values 2017-05-05 01:26:13 +05:30
chgserver.py pager: set some environment variables if they're not set 2017-04-13 08:27:19 -07:00
cmdutil.py forget: access status fields by name, not index 2017-05-04 21:11:40 -07:00
color.py color: special case 'always' in 'ui.color' 2017-05-02 20:19:09 +02:00
commands.py bundle: factor the 'getchangegroup' out 2017-05-04 12:48:45 +02:00
commandserver.py commandserver: update comment about setpgid 2016-07-18 15:59:08 +01:00
compat.h compat: define ssize_t as int on 32bit Windows, silences C4142 warning 2016-07-15 23:54:56 +09:00
config.py ui: move configlist parser to config.py 2017-03-17 09:19:56 -07:00
context.py py3: use raw strings while accessing class.__dict__ 2017-04-28 01:13:07 +05:30
copies.py merge: avoid superfluous filemerges when grafting through renames (issue5407) 2016-10-25 21:01:53 +02:00
crecord.py crecord: avoid setting non-existing SIGTSTP signal on windows (issue5512) 2017-04-06 11:28:25 +02:00
dagparser.py error: get Abort from 'error' instead of 'util' 2015-10-08 12:55:45 -07:00
dagutil.py dagutil: use absolute_import 2015-08-08 19:04:09 -07:00
debugcommands.py upgrade: extract code in its own module 2017-04-07 18:53:17 +02:00
demandimport.py demandimport: add urwid.command_map to ignore list 2017-05-03 18:26:57 -07:00
destutil.py update: use single quotes in use warning 2016-09-02 21:49:33 +00:00
diffhelpers.c diffhelpers: fix botched return statement from e48d70075d8a 2015-01-28 13:34:20 -05:00
dirs.c dirs: use PyVarObject_HEAD_INIT 2016-10-13 13:14:14 +02:00
dirstate.py dirstate: optimize walk() by using match.visitdir() 2017-05-05 08:49:46 -07:00
dirstateguard.py dirstateguard: move to new module so I can break some layering violations 2016-11-21 21:29:32 -05:00
discovery.py discovery: prevent crash caused by prune marker having no parent data 2017-04-19 23:10:05 +09:00
dispatch.py py3: make adefaults keys str to be compatible with getattr 2017-05-04 00:44:53 +05:30
dummycert.pem ssl: on OS X, use a dummy cert to trick Python/OpenSSL to use system CA certs 2014-09-26 02:19:48 +02:00
encoding.py py3: use pycompat.bytechr instead of chr 2017-05-03 15:37:51 +05:30
error.py error: rename RichIOError to PeerTransportError 2017-04-16 11:12:37 -07:00
exchange.py exchange: directly 'getchangegroup' 2017-05-04 12:41:36 +02:00
exewrapper.c exewrapper: add .dll to LoadLibrary() argument 2016-04-27 09:23:39 -07:00
extensions.py extensions: move the "import" logic out from "load" 2016-10-03 03:37:10 +01:00
fancyopts.py flags: allow specifying --no-boolean-flag on the command line (BC) 2016-09-13 22:57:57 -04:00
filelog.py filelog: fix parsemeta docstring 2017-05-02 22:39:14 -07:00
filemerge.py filemerge: optionally strip quotes from merge marker template (BC) 2017-02-25 19:36:02 +09:00
fileset.py fileset: use fctx.isbinary instead of util.binary(fctx.data()) 2017-05-03 18:02:00 -07:00
formatter.py py3: use pycompat.byteskwargs to converts kwargs to bytes 2017-05-04 01:12:14 +05:30
graphmod.py py3: use list of bytes rather than bytestring while extending bytes into lists 2017-05-04 04:38:20 +05:30
hbisect.py bisect: move check_state into the bisect module 2016-08-24 04:25:20 +02:00
help.py py3: make sure opts are passed and used correctly in help command 2017-04-28 00:49:30 +05:30
hg.py outgoing: run on filtered repo 2017-05-05 10:08:36 -07:00
hook.py hook: add hook name information to external hook 2017-03-31 11:53:56 +02:00
httpconnection.py httpconnection: allow a global auth.cookiefile config entry 2017-03-09 22:35:10 -08:00
httppeer.py httppeer: unify hint message for PeerTransportError 2017-05-01 05:52:36 +09:00
i18n.py i18n: make the locale directory name the same string type as the datapath 2016-10-08 05:26:18 -04:00
keepalive.py keepalive: send HTTP request headers in a deterministic order 2017-04-13 18:04:38 -07:00
localrepo.py localrepo: reuse exchange.bundle2requested() 2017-05-03 10:33:26 -07:00
lock.py lock: avoid unintentional lock acquisition at failure of readlock 2017-05-01 19:59:13 +09:00
lsprof.py lsprof: use print function 2016-01-02 11:40:53 -08:00
lsprofcalltree.py lsprofcalltree: use print function 2016-01-02 11:45:29 -08:00
mail.py mail: handle renamed email.Header 2016-10-07 17:30:11 +02:00
manifest.c manifest: use PyVarObject_HEAD_INIT 2016-10-13 13:17:23 +02:00
manifest.py manifest: remove check for non-contexts in _dirmancache 2017-05-05 14:10:58 -07:00
match.py match: optimize visitdir() for patterns matching only root directory 2017-05-05 08:49:07 -07:00
mdiff.py mdiff: add a hunkinrange helper function 2017-04-01 12:24:59 +02:00
merge.py rebase: use matcher to optimize manifestmerge 2017-05-03 10:43:59 -07:00
mergeutil.py checkunresolved: move to new package to help avoid import cycles 2016-11-21 21:31:45 -05:00
minirst.py help: search section of help topic by translated section name correctly 2016-05-13 07:19:59 +09:00
mpatch_module.c mpatch: raise MemoryError instead of mpatchError if lalloc() failed 2016-08-07 10:06:56 +09:00
mpatch.c internals: move the bitmanipulation routines into its own file 2016-06-06 13:08:13 +02:00
mpatch.h mpatch: raise MemoryError instead of mpatchError if lalloc() failed 2016-08-07 10:06:56 +09:00
namespaces.py namespaces: fix name/node confusion 2016-03-16 23:12:43 +00:00
node.py node: use byte literals to construct nullid and wdirid 2016-03-12 14:04:57 -08:00
obsolete.py obsolete: use single quotes in use warning 2016-09-20 23:48:19 +00:00
osutil.c osutil: use PyLongObject on Python 3 for listdir_slot 2016-10-09 13:47:46 +02:00
parser.py parser: preserve order of keyword arguments 2017-04-09 11:58:27 +09:00
parsers.c parsers: avoid PySliceObject cast on Python 3 2016-10-13 13:34:53 +02:00
patch.py record: update help message to use operation instead of "record" (issue5432) 2017-04-24 17:13:24 +02:00
pathencode.c pathencode: use assert() for PyBytes_Check() 2016-10-13 21:42:11 +02:00
pathutil.py util: rename checkcase() to fscasesensitive() (API) 2016-08-30 09:22:53 -07:00
peer.py py3: convert to next() function 2016-05-16 21:30:53 +00:00
phases.py phases: emit phases to pushkey protocol in deterministic order 2017-04-13 22:12:04 -07:00
policy.py policy: add cffi policy for PyPy 2016-06-07 15:35:58 +02:00
posix.py py3: make posix.getuser return a bytes 2017-04-21 00:53:38 +05:30
profiling.py py3: replace pycompat.getenv with encoding.environ.get 2017-01-15 13:17:05 +05:30
progress.py progress: retry ferr.flush() and .write() on EINTR (issue5532) 2017-04-13 22:31:17 +09:00
pushkey.py pushkey: use absolute_import 2015-08-08 19:57:27 -07:00
pvec.py pvec: use absolute_import 2015-12-21 21:32:58 -08:00
pycompat.py pycompat: verify sys.argv exists before forwarding it (issue5493) 2017-03-07 13:24:24 -05:00
rcutil.py pager: use less as a fallback on Unix 2017-04-28 20:51:14 +09:00
registrar.py templater: add support for keyword arguments 2017-04-03 21:22:39 +09:00
repair.py repair: use rawvfs when copying extra store files 2017-04-08 11:36:39 -07:00
repoview.py cleanup: replace uses of util.(md5|sha1|sha256|sha512) with hashlib.\1 2016-06-10 00:12:33 -04:00
revlog.py revlog: make "size" diverge from "rawsize" 2017-04-09 12:53:31 -07:00
revset.py revset: add i18n comments to error messages for followlines predicate 2017-05-01 05:52:36 +09:00
revsetlang.py revsetlang: add a getboolean helper function 2017-04-15 11:26:09 +02:00
scmposix.py pager: use less as a fallback on Unix 2017-04-28 20:51:14 +09:00
scmutil.py outgoing: run on filtered repo 2017-05-05 10:08:36 -07:00
scmwindows.py pager: use less as a fallback on Unix 2017-04-28 20:51:14 +09:00
server.py serve: add support for Mercurial subrepositories 2017-04-15 18:05:40 -04:00
setdiscovery.py setdiscovery: use iterbatch interface instead of batch 2016-03-01 17:44:41 -05:00
similar.py similar: remove caching from the module level 2017-01-13 11:42:36 -08:00
simplemerge.py simplemerge: move conflict warning message to filemerge 2015-10-09 13:54:52 -07:00
smartset.py py3: use raw strings while accessing class.__dict__ 2017-04-28 01:13:07 +05:30
sshpeer.py sshpeer: try harder to snag stderr when stdout closes unexpectedly 2017-04-13 16:09:40 -04:00
sshserver.py wireproto: compress data from a generator 2016-10-16 11:10:21 -07:00
sslutil.py sslutil: guard against broken certifi installations (issue5406) 2016-10-19 18:06:14 +02:00
statichttprepo.py manifest: make manifestlog a storecache 2016-10-18 17:33:39 -07:00
statprof.py statprof: require input file 2017-01-18 22:45:07 -08:00
store.py store: py26 compat, don't use a dict comprehension 2016-10-09 12:58:22 +02:00
streamclone.py streamclone: clear caches after writing changes into files for visibility 2016-09-12 03:06:29 +09:00
subrepo.py py3: abuse r'' to access keys in keyword arguments 2017-05-03 15:41:28 +05:30
tagmerge.py tagmerge: use 'wvfs' instead of 'wfile' 2017-03-15 00:28:58 -07:00
tags.py track-tags: write all tag changes to a file 2017-03-28 10:15:02 +02:00
templatefilters.py py3: use pycompat.bytestr() instead of str() 2017-04-27 09:49:57 +05:30
templatekw.py templatekw: factor out showdict() helper 2017-04-05 21:57:05 +09:00
templater.py py3: use pycompat.bytestr instead of bytes 2017-05-05 01:26:49 +05:30
transaction.py transaction: open a file with checkambig=True to avoid file stat ambiguity 2016-09-22 21:52:00 +09:00
treediscovery.py error: get Abort from 'error' instead of 'util' 2015-10-08 12:55:45 -07:00
txnutil.py txnutil: factor out the logic to read file in according to HG_PENDING 2017-02-21 01:20:59 +09:00
ui.py pager: drop the support for 'pager.enable=<bool>' 2017-05-02 17:18:13 +02:00
unionrepo.py revlog: add 'raw' argument to revision and _addrevision 2017-01-05 17:16:07 +00:00
upgrade.py upgrade: register all format variants in a list 2017-04-12 16:48:13 +02:00
url.py url: support auth.cookiesfile for adding cookies to HTTP requests 2017-03-09 22:40:52 -08:00
util.h parsers: move PyInt aliasing out of util.h 2016-10-09 13:50:53 +02:00
util.py py3: use pycompat.bytestr instead of bytes 2017-05-05 01:26:49 +05:30
verify.py verify: fix length check 2017-03-29 14:49:14 -07:00
vfs.py py3: abuse r'' to preserve str-ness of literals passed to __setattr__() 2017-03-26 16:33:12 +09:00
win32.py py3: use pycompat.getcwd instead of os.getcwd 2016-12-22 01:54:17 +05:30
windows.py windows: add context manager support to mixedfilemodewrapper 2017-04-11 21:38:11 -04:00
wireproto.py wireproto: properly report server Abort during 'getbundle' 2017-02-10 18:20:58 +01:00
worker.py worker: rewrite error handling so os._exit covers all cases 2017-04-22 16:50:08 -07:00