sapling/mercurial
Jun Wu 884aac4596 xdiff: add a python wrapper
Summary:
Implement a `mercurial.cext.xdiff` module that exposes the xdiff algorithm.

`xdiff.blocks` should be a drop-in replacement for `bdiff.blocks`.

In theory we can change the pure C version of `bdiff.c` directly. However
that means we lose bdiff entirely. It seems more flexible to have both at
the same time so they can be easily switched via Python code. Hence the
Python module approach.

Reviewed By: ryanmce

Differential Revision: D7135205

fbshipit-source-id: 48cd3b5be7fd5ef41b64eab6c76a5c8a6ce99e05
2018-04-13 21:51:21 -07:00
..
cext xdiff: add a python wrapper 2018-04-13 21:51:21 -07:00
cffi codemod: use pycompat.isdarwin 2017-10-12 23:34:34 -07: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 hgsubversion: move its help text to mercurial/help 2018-04-13 21:51:02 -07:00
hgweb hg: make file view in hgweb working 2018-04-13 21:51:10 -07:00
httpclient codemod: use single blank line 2018-04-13 21:51:08 -07:00
pure flake8: enable F821 check 2018-04-13 21:51:09 -07:00
templates hgweb: stop using HTML comments in <script> 2017-12-15 12:15:58 +08:00
thirdparty codemod: use single blank line 2018-04-13 21:51:08 -07:00
__init__.py thirdparty: move selectors2 module to where it should be 2017-11-30 22:43:03 +09:00
ancestor.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
archival.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
bdiff.c bdiff: remove trailing newlines 2017-10-04 10:51:39 -04:00
bdiff.h bdiff: include compat.h in header to define ssize_t 2017-10-13 22:38:24 +09:00
bitmanipulation.h fix undefined behavior in bitmanipulation.h 2018-04-13 21:51:13 -07:00
bookmarks.py bookmark: add methods to binary encode and decode bookmark values 2017-10-15 14:59:55 +02:00
branchmap.py branchmap: remove superfluous pass statements 2017-09-30 07:42:59 -04:00
bundle2.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
bundlerepo.py bundlerepo: always copy bundle parts before processing 2018-01-03 05:35:56 -08:00
byterange.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
changegroup.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
changelog.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
chgserver.py chgserver: import sys module 2018-01-03 05:35:56 -08:00
cmdutil.py add --abort flag to hg graft 2018-04-13 21:51:19 -07:00
color.py py3: handle keyword arguments correctly in color.py 2017-12-10 04:45:27 +05:30
commands.py add --abort flag to hg graft 2018-04-13 21:51:19 -07:00
commandserver.py commandserver: unblock SIGCHLD 2018-01-03 05:35:56 -08:00
compat.h encoding: add function to test if a str consists of ASCII characters 2017-04-23 12:59:42 +09:00
config.py ignore all errors when including config file 2018-04-13 21:51:14 -07:00
configitems.py hg: add an option to disable filtersuspectsymlink logic 2018-04-13 21:51:20 -07:00
context.py hg: add an option to disable filtersuspectsymlink logic 2018-04-13 21:51:20 -07:00
copies.py copies: group wdir-handling in one place 2017-12-14 00:25:03 -08:00
crecord.py hg: remove version check from crecord 2018-04-13 21:50:59 -07:00
dagop.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
dagparser.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
dagutil.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
debugcommands.py Make rebuilddirstate not crash due to existing corrupt dirstate files. 2018-04-13 21:51:20 -07:00
destutil.py show: implement "stack" view 2017-07-01 22:38:42 -07:00
dirstate.py hg: improve perf interactions with treedirstate 2018-04-13 21:50:58 -07:00
dirstateguard.py dirstate: update backup functions to take full backup filename 2017-07-12 15:24:07 -07:00
discovery.py push: restrict common discovery to the pushed set 2017-12-06 23:33:01 +01:00
dispatch.py fix show failure if alias is set 2018-04-13 21:51:19 -07:00
drawdag.py test-lfs-bundle: new test testing lfs bundle exchanging behavior 2018-04-13 21:51:05 -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 flake8: enable F821 check 2018-04-13 21:51:09 -07:00
error.py extensions: forbid "foo=" from importing foreign mercurial modules 2018-01-09 17:06:09 -08:00
exchange.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
exewrapper.c exewrapper: format with clang-format 2017-10-04 11:04:18 -04:00
extensions.py buck: fix tests with opt build 2018-04-13 21:51:09 -07:00
fancyopts.py fancyopts: add early-options parser compatible with getopt() 2017-11-23 22:04:53 +09:00
filelog.py python3: replace sorted(<dict>.iterkeys()) with sorted(<dict>) 2017-08-22 20:06:58 -04:00
filemerge.py merge: use relative path names 2018-04-13 21:51:14 -07:00
fileset.py hg: fix check execute 2018-04-13 21:50:57 -07:00
formatter.py templater: load aliases from [templatealias] section in map file 2017-10-14 18:06:42 +09:00
graphmod.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
hbisect.py Teach bisect to ignore empty commits on sparse checkouts 2018-04-13 21:51:12 -07:00
help.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
hg.py hg: skip substate verification if verify.skipmanifests=True 2018-04-13 21:51:20 -07:00
hook.py py3: handle keyword arguments correctly in hook.py 2017-12-10 04:46:50 +05:30
httpconnection.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
httppeer.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
i18n.py i18n: cache translated messages per encoding 2017-10-13 21:36:10 +09:00
interpreter.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
keepalive.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
localrepo.py hg: move mutable manifest lifetime to repo 2018-04-13 21:51:18 -07:00
lock.py lock: allow to configure when the lock messages are displayed 2017-11-29 20:39:59 -05:00
logexchange.py remotenames: rename related file and storage dir to logexchange 2017-12-07 00:26:45 +05:30
lsprof.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
lsprofcalltree.py lsprofcalltree: use print function 2016-01-02 11:45:29 -08:00
mail.py py3: make sure the first argument of time.strftime() is str 2017-11-29 08:44:06 +05:30
main.py buck: fix tests with opt build 2018-04-13 21:51:09 -07:00
manifest.py hg: add ui to manifestlog 2018-04-13 21:51:18 -07:00
match.py match: remove doc about undefined behavior of visitdir() 2017-11-30 22:32:13 +09:00
mdiff.py mdiff: remove rewindhunk by yielding a bool first to indicate data 2018-04-13 21:51:10 -07:00
merge.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
mergeutil.py checkunresolved: move to new package to help avoid import cycles 2016-11-21 21:31:45 -05:00
minirst.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
mpatch.c mpatch: switch alignment of wrapped line from tab to spaces with clang-format 2017-10-04 11:00:04 -04:00
mpatch.h mpatch: reformat function prototypes with clang-format 2017-10-04 10:56:33 -04:00
namespaces.py log: translate column labels at once (issue5750) 2017-12-02 16:29:49 +09:00
node.py node: use byte literals to construct nullid and wdirid 2016-03-12 14:04:57 -08:00
obsolete.py inhibit: move part of logic to core 2018-04-13 21:51:10 -07:00
obsutil.py perftweaks: move effectflag removal logic to core 2018-04-13 21:50:52 -07:00
parser.py doctest: use print_function and convert bytes to unicode where needed 2017-09-03 14:56:31 +09:00
patch.py patch: avoid repeated binary checks if all files in a patch are text 2018-04-13 21:51:09 -07:00
pathutil.py pathutil: add doctests for canonpath() 2017-11-03 22:22:50 -04:00
peer.py peer: ensure command names are always ascii bytestrs 2017-10-15 00:05:00 -04:00
phases.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
policy.py osutil: add a function to unblock signals 2018-01-03 05:35:56 -08:00
posix.py flake8: resolve some F checks 2018-04-13 21:51:09 -07:00
profiling.py configitems: register the 'profiling.type' config 2017-06-30 03:44:00 +02:00
progress.py progress: add spinner context manager for easy spinners 2018-04-13 21:51:08 -07:00
pushkey.py Preserve order of revisions after hg pullbackup 2018-04-13 21:51:05 -07:00
pvec.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
pycompat.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
rcutil.py codemod: use pycompat.iswindows 2017-10-12 23:30:46 -07:00
registrar.py registrar: don't i18n ProgrammingError message 2017-10-18 22:10:08 -07:00
repair.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
repository.py repository: formalize wire protocol interface 2017-08-13 11:04:42 -07:00
repoview.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
revlog.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
revset.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
revsetlang.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
rewriteutil.py rewriteutil: add a precheck function to check if revs can be rewritten 2017-11-24 03:44:50 +05:30
scmposix.py codemod: use pycompat.isdarwin 2017-10-12 23:34:34 -07:00
scmutil.py Fix typos ("and and" -> "and") 2018-04-13 21:51:19 -07:00
scmwindows.py pager: use less as a fallback on Unix 2017-04-28 20:51:14 +09:00
server.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
setdiscovery.py setdiscover: allow to ignore part of the local graph 2017-12-06 22:44:51 +01:00
similar.py similar: remove caching from the module level 2017-01-13 11:42:36 -08:00
simplemerge.py rebase: tactical fix for rebase dropping flags 2018-04-13 21:51:16 -07:00
smartset.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
sparse.py merge: add merge action 'pr' to rename files during update 2017-10-02 14:05:30 -07:00
sshpeer.py sshpeer: allow for additional environment passing to ssh exe 2017-12-14 14:31:57 +00:00
sshserver.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
sslutil.py py3: handle keyword arguments correctly in sslutil.py 2017-12-10 04:48:59 +05:30
statichttprepo.py statichttprepo: do not use platform path separator to build a URL 2017-10-28 17:23:52 +09:00
statprof.py flake8: enable some E checks 2018-04-13 21:51:09 -07:00
store.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
streamclone.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
subrepo.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
tagmerge.py hgext: use relative imports wherever possible 2018-04-13 21:50:56 -07:00
tags.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
templatefilters.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
templatekw.py log: translate column labels at once (issue5750) 2017-12-02 16:29:49 +09:00
templater.py hg: fix check code errors 2018-04-13 21:50:58 -07:00
transaction.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
treediscovery.py flake8: enable F821 check 2018-04-13 21:51:09 -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 ui: improve performance for multi-component writes 2018-04-13 21:51:10 -07:00
unionrepo.py revlog: update signature of dummy addgroup() in bundlerepo and unionrepo 2017-09-15 23:58:45 +09:00
upgrade.py upgrade: simplify workaround for repo.ui.copy() 2017-12-10 19:43:35 +09:00
url.py lfs: add git to the User-Agent header for blob transfers 2017-12-14 13:04:08 -05:00
urllibcompat.py urllibcompat: move some adapters from pycompat to urllibcompat 2017-10-04 11:58:00 -04:00
util.py hg: explain why util.safehasattr should be used 2018-04-13 21:51:18 -07:00
verify.py verify: add --rev support 2018-04-13 21:51:12 -07:00
vfs.py rebase: tactical fix for rebase dropping flags 2018-04-13 21:51:16 -07:00
win32.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
windows.py ssh: quote parameters using shellquote (SEC) 2017-08-04 23:54:12 -07:00
wireproto.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
worker.py worker: handle interrupt on windows 2017-12-18 15:18:37 -08:00