changeset 33138:78fc540c53e1

pushrace: avoid crash on bare push when using concurrent push mode If the remote is empty, we do now bother computing head changes and the 'pushbranchmap' attribute stays at None. We now handle and tests this case.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 28 Jun 2017 17:41:25 +0200
parents 99ce2f586cd4
children 40ee74bfa111
files mercurial/exchange.py tests/test-push.t
diffstat 2 files changed, 21 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/exchange.py	Sun Jun 25 22:20:37 2017 -0700
+++ b/mercurial/exchange.py	Wed Jun 28 17:41:25 2017 +0200
@@ -730,7 +730,8 @@
     # * if we don't push anything, there are nothing to check.
     if not pushop.force and pushop.outgoing.missingheads:
         allowunrelated = 'related' in bundler.capabilities.get('checkheads', ())
-        if not allowunrelated:
+        emptyremote = pushop.pushbranchmap is None
+        if not allowunrelated or emptyremote:
             bundler.newpart('check:heads', data=iter(pushop.remoteheads))
         else:
             affected = set()
--- a/tests/test-push.t	Sun Jun 25 22:20:37 2017 -0700
+++ b/tests/test-push.t	Wed Jun 28 17:41:25 2017 +0200
@@ -297,3 +297,22 @@
   lock:  user *, process * (*s) (glob)
   wlock: user *, process * (*s) (glob)
 
+Test bare push with multiple race checking options
+--------------------------------------------------
+
+  $ hg init test-bare-push-no-concurrency
+  $ hg init test-bare-push-unrelated-concurrency
+  $ hg -R test-revflag push -r 0 test-bare-push-no-concurrency --config server.concurrent-push-mode=strict
+  pushing to test-bare-push-no-concurrency
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  $ hg -R test-revflag push -r 0 test-bare-push-unrelated-concurrency --config server.concurrent-push-mode=check-related
+  pushing to test-bare-push-unrelated-concurrency
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files