sapling/mercurial
Pierre-Yves David 9d76dff252 hidden: use _domainancestors to compute revs revealed by dynamic blocker
The complexity of computing the revealed changesets is now 'O(revealed)'.
This massively speeds up the computation on large repository. Moving it to the
millisecond range.

Below are timing from two Mozilla repositories with different contents:

1) mozilla repository with:
 * 400667 changesets
 * 35 hidden changesets (first rev-268334)
 * 288 visible drafts
 * obsolete working copy (dynamicblockers),

Before:
! visible
! wall 0.030247 comb 0.030000 user 0.030000 sys 0.000000 (best of 100)

After:
! visible
! wall 0.000585 comb 0.000000 user 0.000000 sys 0.000000 (best of 4221)

The timing above include the computation of obsolete changeset:
! obsolete
! wall 0.000396 comb 0.000000 user 0.000000 sys 0.000000 (best of 6816)

So adjusted time give 30ms before versus 0.2ms after. A 150x speedup.

2) mozilla repository with:
 * 405645 changesets
 * 4312 hidden changesets (first rev-326004)
 * 264 visible drafts
 * obsolete working copy (dynamicblockers),

Before:
! visible
! wall 0.168658 comb 0.170000 user 0.170000 sys 0.000000 (best of 48)

After
! visible
! wall 0.008612 comb 0.010000 user 0.010000 sys 0.000000 (best of 325)

The timing above include the computation of obsolete changeset:
! obsolete
! wall 0.006408 comb 0.010000 user 0.010000 sys 0.000000 (best of 404)

So adjusted time give 160ms before versus 2ms after. A 75x speedup.
2017-05-21 15:35:21 +02:00
..
cext cext: mark constant variables 2017-05-21 13:41:01 +09: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 revlog: remove some revlogNG terminology 2017-05-19 20:14:31 -07:00
hgweb hgweb: do not show "descending" link in followlines UI for filelog heads 2017-04-24 10:32:15 +02:00
httpclient httpclient: update to 54868ef054d2 of httpplus 2016-06-27 11:53:50 -04:00
pure lazymanifest: write a more efficient, pypy friendly version of lazymanifest 2016-09-12 13:37:14 +02:00
templates hgweb: change text of followlines links to "older / newer" 2017-04-24 10:48:07 +02:00
__init__.py python3: allow hgloader to work with lazy loaders 2017-05-21 13:26:17 -07:00
ancestor.py cleanup: use set literals 2017-02-10 16:56:29 -08:00
archival.py vfs: use 'vfs' module directly in 'mercurial.archival' 2017-03-02 13:30:28 +01:00
bdiff.c bdiff: don't check border condition in loop 2016-11-20 16:56:21 -08: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 localrepo: extract bookmarkheads method to bookmarks.py 2017-05-18 16:43:56 -04:00
branchmap.py branchmap: remove use of buffer() to support Python 2.6 2017-05-13 11:58:08 -07:00
bundle2.py merge with stable 2017-05-21 02:45:32 -04:00
bundlerepo.py bundlerepo: use raw revision in revdiff() 2017-04-03 09:31:39 -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: add bundlecaps back 2017-05-15 09:35:27 -07:00
changelog.py revlog: rename constants (API) 2017-05-17 19:52:18 -07:00
chgserver.py pager: set some environment variables if they're not set 2017-04-13 08:27:19 -07:00
cmdutil.py cmdutil: avoid redefining write() function in export if possible 2017-05-22 15:05:18 -04:00
color.py cleanup: use set literals 2017-02-10 16:56:29 -08:00
commands.py bookmarks: warn about bookmark names that unambiguously resolve to a node (BC) 2017-05-22 19:18:12 -04:00
commandserver.py commandserver: move printbanner logic to bindsocket 2017-04-30 11:21:05 -07: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 config: make config.items() return a copy 2017-05-18 13:38:37 -07:00
context.py devel: add a config field to force dates to timestamp 0 2017-05-19 12:18:25 +02:00
copies.py cleanup: use set literals 2017-02-10 16:56:29 -08: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 debugwalk: also print matcher representation 2017-05-22 11:08:52 -07:00
destutil.py localrepo: extract bookmarkheads method to bookmarks.py 2017-05-18 16:43:56 -04:00
dirstate.py dirstate: fix debug.dirstate.delaywrite to use the new "now" after sleeping 2016-10-18 16:52:35 +02: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 obscheckhead: skip context creation to test phase 2017-05-19 12:35:14 +02:00
dispatch.py dispatch: make request accept additional reposetups 2017-04-29 21:39:47 -07:00
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 parsers: switch to policy importer 2016-08-13 12:23:56 +09:00
error.py error: add a new exception named WdirUnsupported 2017-05-19 19:10:37 +05:30
exchange.py cleanup: use set literals 2017-02-10 16:56:29 -08:00
exewrapper.c exewrapper: prefer HackableMercurial python if availbale 2017-03-13 12:44:13 -07:00
extensions.py profiling: allow loading profiling extension before everything else 2017-05-22 01:17:49 -07:00
fancyopts.py cleanup: use set literals 2017-02-10 16:56:29 -08:00
filelog.py filelog: fix parsemeta docstring 2017-05-02 22:39:14 -07:00
filemerge.py filemerge: store error messages in module variables 2017-05-19 03:47:43 -07:00
fileset.py cleanup: use set literals 2017-02-10 16:56:29 -08: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 cleanup: use set literals 2017-02-10 16:56:29 -08:00
hg.py dispatch: make request accept additional reposetups 2017-04-29 21:39:47 -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 transaction: run _writejournal unfiltered 2017-05-25 01:45:52 +02: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: remove code to support < Python 2.7 2017-05-13 11:12:44 -07:00
manifest.py parsers: switch to policy importer 2016-08-13 12:23:56 +09:00
match.py match: remove support for excludes from matcher class 2017-05-16 22:15:42 -07:00
mdiff.py mpatch: switch to policy importer 2016-08-13 12:18:58 +09:00
merge.py merge: migrate to context manager for changing dirstate parents 2017-05-18 17:11:24 -04:00
mergeutil.py checkunresolved: move to new package to help avoid import cycles 2016-11-21 21:31:45 -05:00
minirst.py minirst: remove redundant _admonitions set 2017-03-29 20:19:26 -07: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 cleanup: use set literals 2017-02-10 16:56:29 -08:00
node.py cleanup: use set literals 2017-02-10 16:56:29 -08:00
obsolete.py devel: use default-date config field when creating obsmarkers 2017-05-19 12:08:47 +02:00
parser.py parser: preserve order of keyword arguments 2017-04-09 11:58:27 +09:00
patch.py record: update help message to use operation instead of "record" (issue5432) 2017-04-24 17:13:24 +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: define C module versions individually 2017-05-22 22:59:40 -07:00
posix.py checklink: degrade gracefully on posix when fs is readonly (issue5511) 2017-05-21 18:36:28 -04:00
profiling.py profiling: allow loading profiling extension before everything else 2017-05-22 01:17:49 -07:00
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 base85: proxy through util module 2017-04-26 21:56:47 +09:00
pycompat.py pycompat: try __bytes__() to convert object to bytestr 2017-05-04 11:51:07 +09:00
rcutil.py pager: use less as a fallback on Unix 2017-04-28 20:51:14 +09:00
registrar.py registrar: unindent superfluous "if True" block 2017-05-08 22:14:56 +09:00
repair.py strip: use the 'writenewbundle' function to get bundle on disk 2017-05-05 18:15:42 +02:00
repoview.py hidden: use _domainancestors to compute revs revealed by dynamic blocker 2017-05-21 15:35:21 +02:00
revlog.py revlog: raise error.WdirUnsupported from revlog.node() if wdirrev is passed 2017-05-23 01:30:36 +05:30
revset.py revset: add support for ancestors(wdir()) 2017-05-23 01:22:33 +05:30
revsetlang.py revsetlang: add a getboolean helper function 2017-04-15 11:26:09 +02:00
scmposix.py osutil: proxy through util (and platform) modules (API) 2017-04-26 22:26:28 +09:00
scmutil.py scmutil: make simplekeyvaluefile able to have a non-key-value first line 2017-05-11 08:49:33 -07:00
scmwindows.py osutil: proxy through util (and platform) modules (API) 2017-04-26 22:26:28 +09:00
server.py cleanup: use set literals 2017-02-10 16:56:29 -08:00
setdiscovery.py cleanup: use set literals 2017-02-10 16:56:29 -08:00
similar.py bdiff: proxy through mdiff module 2017-04-26 22:03:37 +09:00
simplemerge.py vfs: use 'vfs' module directly in 'mercurial.simplemerge' 2017-03-02 13:30:58 +01: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: reference fingerprints config option properly (issue5559) 2017-05-08 09:30:26 -07:00
statichttprepo.py manifest: make manifestlog a storecache 2016-10-18 17:33:39 -07:00
statprof.py cleanup: use set literals 2017-02-10 16:56:29 -08:00
store.py parsers: switch to policy importer 2016-08-13 12:23:56 +09:00
streamclone.py clone: warn when streaming was requested but couldn't be performed 2017-05-08 20:01:06 -07: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 templatefilters: fix crash by string formatting of '{x|splitlines}' 2017-04-15 10:51:17 +09:00
templatekw.py templatekw: factor out showdict() helper 2017-04-05 21:57:05 +09:00
templater.py templatekw: have showlist() take mapping dict with no **kwargs expansion (API) 2017-04-05 21:47:34 +09:00
transaction.py cleanup: use set literals 2017-02-10 16:56:29 -08: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 util: raise ParseError when parsing dates (BC) 2017-05-24 17:50:17 +02:00
unionrepo.py revlog: add 'raw' argument to revision and _addrevision 2017-01-05 17:16:07 +00:00
upgrade.py cleanup: use set literals 2017-02-10 16:56:29 -08:00
url.py url: support auth.cookiesfile for adding cookies to HTTP requests 2017-03-09 22:40:52 -08:00
util.py util: raise ParseError when parsing dates (BC) 2017-05-24 17:50:17 +02:00
verify.py verify: add a config option to skip certain flag processors 2017-05-14 09:38:06 -07:00
vfs.py osutil: proxy through util (and platform) modules (API) 2017-04-26 22:26:28 +09:00
win32.py py3: use pycompat.getcwd instead of os.getcwd 2016-12-22 01:54:17 +05:30
windows.py osutil: switch to policy importer 2016-08-12 11:35:17 +09:00
wireproto.py cleanup: use set literals 2017-02-10 16:56:29 -08:00
worker.py worker: rewrite error handling so os._exit covers all cases 2017-04-22 16:50:08 -07:00