sapling/mercurial
Bryan O'Sullivan 4a3a46aff6 ancestor: a new algorithm that is faster for nodes near tip
Instead of walking all the way to the root of the DAG, we generate
a set of candidate GCA revs, then figure out which ones will win
the race to the root (usually without needing to traverse all the
way to the root).

In the common case of nodes that are close to each other in both
revision number and topology, this is usually a big win: it makes
"hg --time debugancestors" up to 9 times faster than the more general
ancestor function when measured on heads of the linux-2.6 hg repo.

Victory is not assured, however. The older function can still win
by a large margin if one node is much closer to the root than the
other, or by a much smaller amount if one is an ancestor of the
other.

For now, we've also got a small paranoid harness function that calls
both ancestor functions on every input and ensures that they give
equivalent answers.

Even without the checker function, the old ancestor function needs
to stay alive for the time being, as its generality is used by
context.filectx.merge.
2013-04-16 10:08:18 -07:00
..
help check-code: check txt files for trailing whitespace 2013-04-15 01:37:23 +02:00
hgweb hgweb: respond HTTP_NOT_FOUND when an archive request does not match any files 2013-03-21 23:27:37 +01:00
httpclient httpclient: apply change df9aea1def3e: remove use of two-argument raise 2013-01-01 13:25:07 -06:00
pure check-code: catch trailing space in comments 2013-04-15 01:37:23 +02:00
templates hgweb: change manifest archive links to only archive the current directory 2013-02-26 21:20:35 +01:00
__init__.py Add back links from file revisions to changeset revisions 2005-05-03 13:16:10 -08:00
ancestor.py ancestor: a new algorithm that is faster for nodes near tip 2013-04-16 10:08:18 -07:00
archival.py archive: raise error.Abort if the file pattern matches no files 2013-03-21 22:09:15 +01:00
base85.c base85: cast Py_ssize_t values to int (issue3481) 2012-06-04 16:59:34 +02:00
bdiff.c bdiff: simplify overflow checks 2013-02-02 16:15:22 -06:00
bookmarks.py pull: list bookmarks before pulling changesets (issue3873) 2013-03-29 19:54:06 -07:00
branchmap.py spelling: fix some minor issues found by spell checker 2013-02-10 18:24:29 +01:00
bundlerepo.py bundlerepo: replace basemap with the base field in the index 2013-02-08 23:26:00 +01:00
byterange.py byterange: remove now-unused sys import 2013-02-09 07:44:22 -06:00
changegroup.py changegroup: decompress GZ algorithm in larger chunks for better performance 2012-04-29 20:58:50 +02:00
changelog.py changelog: hexlify node when throwing a LookupError on a filtered node 2013-02-09 06:07:32 -06:00
cmdutil.py duplicatecopies: do not mark items not in the dirstate as copies 2013-03-28 18:27:19 -07:00
commands.py debugrebuildstate: rename to debugrebuilddirstate 2013-04-15 01:41:47 +02:00
commandserver.py commandserver: report capabilities sorted 2012-12-12 02:38:14 +01:00
config.py grammar: it-handles 2012-08-17 13:58:19 -07:00
context.py ancestor: a new algorithm that is faster for nodes near tip 2013-04-16 10:08:18 -07:00
copies.py scmutil: use new dirs class in dirstate and context 2013-04-10 15:08:26 -07:00
dagparser.py en-us: labeled 2012-08-17 13:58:18 -07:00
dagutil.py cleanup: "raise SomeException()" -> "raise SomeException" 2012-05-12 16:00:58 +02:00
demandimport.py demandimport: determine at load time if __import__ has level argument 2011-08-22 22:50:52 +02:00
dicthelpers.py dicthelpers.diff: compare against default for missing values 2013-04-10 12:31:07 -07:00
diffhelpers.c diffhelpers: use Py_ssize_t in testhunk() 2012-05-12 14:00:51 +02:00
dirs.c dirs: use mutable strings internally 2013-04-10 15:08:28 -07:00
dirstate.py scmutil: use new dirs class in dirstate and context 2013-04-10 15:08:26 -07:00
discovery.py filtering: rename filters to their antonyms 2013-01-13 01:39:16 -06:00
dispatch.py dispatch: exit with status 1 for an InterventionRequired exception (bc) 2013-02-08 16:17:46 -06:00
encoding.py tests: stabilize doctest output 2013-01-15 02:59:14 +01:00
error.py hgweb: show correct error message for i18n environment 2013-02-15 18:07:14 +09:00
exewrapper.c exewrapper: adapt for legacy HackableMercurial 2012-08-07 11:04:41 +02:00
extensions.py extensions: remove erroneous comment 2013-02-14 13:56:02 -06:00
fancyopts.py fancyopts: don't show a traceback on invalid integer values 2012-10-08 15:35:16 +02:00
filelog.py filelog: add file function to open other filelogs 2011-05-10 17:38:58 +02:00
filemerge.py merge: warn when internal:merge cannot merge symlinks 2013-01-15 01:05:11 +01:00
fileset.py filesets: add eol predicate 2013-03-29 16:48:32 -07:00
formatter.py formatter: add condwrite method 2012-11-03 14:37:50 -05:00
graphmod.py graphmod: don't try to visit nullrev (issue3772) 2013-01-23 00:20:26 -06:00
hbisect.py bisect: use changelog for iteration 2013-01-22 03:23:02 +01:00
help.py help: use a full header for topic titles 2013-02-10 12:58:57 +01:00
hg.py largefiles: don't crash when trying to find default dest for url without path 2013-02-04 23:26:44 +01:00
hook.py blackbox: do not translate the log messages 2013-02-13 12:51:30 -08:00
httpconnection.py httpclient: fix calling convention violation 2012-10-18 23:55:15 -05:00
httppeer.py httppeer: improve protocol check 2013-02-17 14:34:53 -06:00
i18n.py i18n: use getattr instead of hasattr 2011-07-25 20:46:30 -05:00
ignore.py ignore: process hgignore files in deterministic order 2012-12-17 15:57:02 -08:00
keepalive.py keepalive: drop python 2.2 legacy code 2012-10-02 14:27:13 -07:00
localrepo.py localrepo: use "vfs.rename()" instead of "util.rename()" 2013-04-15 01:22:15 +09:00
lock.py lock: if we fork, ensure that only the parent releases 2013-04-11 13:30:27 -07:00
lsprof.py profiling: replace '+' markup of nested lines with indentation 2013-02-08 22:54:48 +01:00
lsprofcalltree.py drop unused imports 2009-05-14 15:35:46 +02:00
mail.py mail: add missing import of sys 2013-04-12 17:17:35 -07:00
manifest.py manifestdict: add a method to diff _flags 2013-03-24 17:17:38 -07:00
match.py match: more accurately report when we're always going to match 2013-02-21 12:55:39 -08:00
mdiff.py diff: move index header generation to patch 2012-11-15 15:16:41 -08:00
merge.py manifestmerge: handle workdir removed, remote removed with flags 2013-04-10 12:34:42 -07:00
minirst.py minirst: optimize HTML table generation a bit 2013-02-09 21:51:21 +00:00
mpatch.c mpatch: use Py_ssize_t for string length 2012-05-20 01:28:31 +02:00
node.py Update license to GPLv2+ 2010-01-19 22:20:08 -06:00
obsolete.py obsolete: ensure all markers have a date 2013-02-11 11:20:12 +01:00
osutil.c osutil: tab damage, how i hate thee 2012-12-03 13:17:01 -08:00
parser.py en-us: labeled 2012-08-17 13:58:18 -07:00
parsers.c scmutil: rewrite dirs in C, use if available 2013-04-10 15:08:27 -07:00
patch.py patch: match 'diff --git a/' instead of 'diff --git' 2013-03-22 17:27:06 -05:00
pathencode.c pathencode: don't use alloca() for safety/portability 2013-01-19 17:20:39 -06:00
peer.py peer: delete double definition of method peer 2012-07-28 22:36:22 +02:00
phases.py phases: make _filterunknown a member function of phasecache 2013-01-04 06:11:29 +01:00
posix.py util: add functions to check symlink/exec bits 2013-04-03 11:35:27 -07:00
pushkey.py pushkey: do not exchange obsole markers if feature is disabled 2012-07-28 13:33:06 +02:00
pvec.py pvec: use the correct name for an identifier 2013-04-12 17:20:09 -07:00
py3kcompat.py spelling: relies 2012-08-17 13:58:18 -07:00
repair.py blackbox: add backup bundle paths to blackbox logs 2013-03-13 10:43:51 -07:00
repoview.py repoview: remove unreachable code 2013-04-12 17:18:52 -07:00
revlog.py ancestor: a new algorithm that is faster for nodes near tip 2013-04-16 10:08:18 -07:00
revset.py revset: don't abort when regex to tag() matches nothing (issue3850) 2013-03-18 16:04:10 -05:00
scmposix.py scmutil: split platform-specific bits into their own modules 2013-02-12 11:36:21 -06:00
scmutil.py localrepo: use "vfs.setflags()" instead of "util.setflags()" 2013-04-15 01:22:15 +09:00
scmwindows.py scmutil: fix NameError on windows 2013-02-21 13:16:02 -06:00
setdiscovery.py delete some dead comments and docstrings 2012-08-21 02:41:20 +02:00
similar.py cleanup: eradicate long lines 2012-05-12 15:54:54 +02:00
simplemerge.py cleanup: "raise SomeException()" -> "raise SomeException" 2012-05-12 16:00:58 +02:00
sshpeer.py sshpeer: store subprocess so it cleans up correctly 2013-03-08 16:59:36 -08:00
sshserver.py sshserver: avoid a multi-dot attribute lookup in a hot loop 2012-09-14 12:09:44 -07:00
sslutil.py sslutil: abort if peer certificate is not verified for secure use 2013-03-26 02:28:10 +09:00
statichttprepo.py statichttprepo: add missing import of os 2013-04-12 17:17:05 -07:00
store.py store: switch to C-based hashed path encoding 2012-12-12 13:09:37 -08:00
strutil.py Update license to GPLv2+ 2010-01-19 22:20:08 -06:00
subrepo.py archive: raise error.Abort if the file pattern matches no files 2013-03-21 22:09:15 +01:00
tags.py fix trivial spelling errors 2012-08-15 22:38:42 +02:00
templatefilters.py templatefilters: add missing import of _ 2013-02-28 13:55:00 +01:00
templatekw.py templatekw: add default styles for hybrid types (issue3887) 2013-04-16 09:44:29 -05:00
templater.py templatekw: add default styles for hybrid types (issue3887) 2013-04-16 09:44:29 -05:00
transaction.py spelling: journaling 2012-08-17 13:58:18 -07:00
treediscovery.py util: subclass deque for Python 2.4 backwards compatibility 2012-06-01 17:05:31 -07:00
ui.py ui: add 'force' parameter to traceback() to override the current print setting 2013-02-09 14:22:52 -05:00
unionrepo.py unionrepo: read-only operations on a union of two localrepos 2013-01-18 15:54:09 +01:00
url.py url: clean up use of two-argument raise 2013-01-01 12:50:46 -06:00
util.h store: implement fncache basic path encoding in C 2012-09-18 15:42:19 -07:00
util.py util: add notindexed optional parameter to makedirs function 2013-02-16 11:44:13 +01:00
verify.py clfilter: verify logic should be unfiltered 2012-10-08 17:08:52 +02:00
win32.py check-code: catch trailing space in comments 2013-04-15 01:37:23 +02:00
windows.py util: add functions to check symlink/exec bits 2013-04-03 11:35:27 -07:00
wireproto.py wireproto: clarify cryptic 'remote: unsynced changes' error message on push 2013-04-11 14:54:18 +02:00
worker.py worker: add missing import of errno 2013-04-12 17:16:37 -07:00