sapling/mercurial
Pierre-Yves David a74c131fb4 push: add a way to allow concurrent pushes on unrelated heads
Client has a mechanism for the server to check that nothing changed server side
since the client prepared a push. That check is wide and any head changed on
the server will lead to an aborted push. We introduce a way for the client to
send a less strict checking. That logic will check that no heads impacted by
the push have been affected. If other unrelated heads (including named branches
heads) have been affected, the push will proceed.

This is very helpful for repositories with high developers traffic on different
heads, a common setup.

That behavior is currently controlled by an experimental option. The config
should live in the "server" section but bike-shedding of the name will happen
in the next changesets. Servers advertise this capability through a new bundle2
capability 'checkeads', using the value 'related'.

The 'test-push-race.t' is updated to check that new capabilities on the
documented cases.
2017-05-29 05:53:58 +02:00
..
cext cext: mark constant variables 2017-05-21 13:41:01 +09:00
cffi cffi: remove superfluous "if True" blocks 2017-05-02 21:45:10 +09: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 revset: lookup descendents for negative arguments to ancestor operator 2017-05-27 10:25:09 -07:00
hgweb help: pass commands module by argument 2017-05-21 16:57:32 +09:00
httpclient httpclient: update to 54868ef054d2 of httpplus 2016-06-27 11:53:50 -04:00
pure cffi: split modules from pure 2017-05-02 21:15:31 +09:00
templates hgweb: change text of followlines links to "older / newer" 2017-04-24 10:48:07 +02:00
__init__.py loader: pywatchman appears to already be py3 compatible 2017-05-28 15:45:47 -04:00
ancestor.py cleanup: use set literals 2017-02-10 16:56:29 -08:00
archival.py py3: remove use of *L syntax 2016-09-01 02:29:46 +05:30
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 bitmanipulation: add missing include of string.h 2017-06-02 10:32:39 -07: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 push: add a way to allow concurrent pushes on unrelated heads 2017-05-29 05:53:58 +02: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: store old heads as a set 2017-03-23 19:54:59 -07:00
changelog.py revlog: make 'storedeltachains' a "public" attribute 2016-10-14 02:25:08 +02:00
chgserver.py pager: set some environment variables if they're not set 2017-04-13 08:27:19 -07:00
cmdutil.py export: map wctx.node() to 'ff...' node id (issue5438) 2017-06-03 19:17:19 +09:00
color.py color: enable ANSI support on Windows 10 2017-05-22 22:20:38 -04:00
commands.py annotate: restructure formatter output to be nested list (BC) 2017-06-03 00:25:24 +09: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 merge with stable 2017-06-03 16:33:28 -04:00
copies.py py3: use dict.update() instead of constructing lists and adding them 2017-06-01 01:14:02 +05:30
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 debugbundle: add --part-type flag to emit only named part types 2017-06-05 16:19:41 -07:00
destutil.py update: show the commit to which we updated in case of multiple heads (BC) 2017-06-06 22:17:39 +05:30
dirstate.py dirstate: add docstring for invalidate 2017-06-04 16:08:50 -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 push: add a way to allow concurrent pushes on unrelated heads 2017-05-29 05:53:58 +02:00
dispatch.py dispatch: do not close stdout and stderr, just flush() instead 2017-04-23 00:31:29 +09: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 encoding: make sure "wide" variable never be referenced from other modules 2017-05-29 21:57:51 +09:00
error.py py3: implement __bytes__() on most of our exception classes 2017-06-01 22:43:24 +09:00
exchange.py push: add a way to allow concurrent pushes on unrelated heads 2017-05-29 05:53:58 +02:00
exewrapper.c exewrapper: add .dll to LoadLibrary() argument 2016-04-27 09:23:39 -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: optionally strip quotes from merge marker template (BC) 2017-02-25 19:36:02 +09:00
fileset.py py3: use pycompat.bytestr so that we don't get ascii values 2017-05-29 16:21:15 +05:30
formatter.py formatter: add nullformatter 2017-05-27 17:44:26 +09:00
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 help: convert flag default to bytes portably 2017-05-28 15:49:29 -04:00
hg.py local-clone: also copy tags related caches 2017-05-25 12:09:09 +02:00
hook.py py3: convert exception to bytes to pass into ui.warn() 2017-06-02 10:35:21 +05:30
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: set buffering=True to do more efficient reads of headers 2017-06-02 14:08:26 -07:00
localrepo.py revlog: skeleton support for version 2 revlogs 2017-05-19 20:29:11 -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.py cleanup: rename all iteritems methods to items and add iteritems alias 2017-05-29 00:00:02 -04:00
match.py match: simplify nevermatcher 2017-06-01 08:31:21 -07:00
mdiff.py mdiff: add a hunkinrange helper function 2017-04-01 12:24:59 +02:00
merge.py merge: use scmutil.intrev() to sort ctx objects 2017-06-03 19:01:19 +09:00
mergeutil.py checkunresolved: move to new package to help avoid import cycles 2016-11-21 21:31:45 -05:00
minirst.py minirst: look for column delimiters using slices instead of indicies 2017-05-28 15:47:43 -04: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: rename all iteritems methods to items and add iteritems alias 2017-05-29 00:00:02 -04:00
node.py revlog: add support for partial matching of wdir node id 2016-08-19 18:26:04 +09:00
obsolete.py obsstore: move _version to a propertycache 2017-06-04 08:49:15 -07: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: remove unused policynoc and policynocffi constants 2017-05-02 21:45:48 +09: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 py3: convert __doc__ back to bytes in help.py 2017-06-01 22:24:15 +09: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 strip: do not include obsolescence markers for the temporary bundle 2017-06-01 12:08:49 +02:00
repoview.py hidden: remove unnecessary guard condition 2017-05-30 13:16:32 -07:00
revlog.py revlog: skeleton support for version 2 revlogs 2017-05-19 20:29:11 -07:00
revset.py revset: lookup descendents for negative arguments to ancestor operator 2017-05-27 10:25:09 -07: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 revlog: map rev(wdirid) to WdirUnsupported exception 2016-08-20 22:37:58 +09:00
scmwindows.py pager: use less as a fallback on Unix 2017-04-28 20:51:14 +09:00
server.py py3: simply use b'%d\n' to format pid in server.py 2017-06-01 23:05:29 +09:00
setdiscovery.py cleanup: use set literals 2017-02-10 16:56:29 -08: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: 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 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 clone: warn when streaming was requested but couldn't be performed 2017-05-08 20:01:06 -07:00
subrepo.py cat: add formatter support 2017-05-25 21:53:44 +09:00
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 scmutil: introduce binnode(ctx) as paired function with intrev(ctx) 2017-06-03 19:12:01 +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 transaction: delete callbacks after use 2017-05-26 13:27:21 -07: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.py merge with stable 2017-06-03 16:33:28 -04: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 win32: add a method to enable ANSI color code processing on Windows 10 2017-05-22 22:00:56 -04:00
windows.py windows: do not close stdout on flush() failure 2017-06-05 23:36:35 +09:00
wireproto.py wireproto: properly report server Abort during 'getbundle' 2017-02-10 18:20:58 +01:00
worker.py py3: pass str in os.sysconf() 2017-05-31 23:42:58 +05:30