[PATCH 12 of 16] push: extract bundle pushing in a dedicated method
pierre-yves.david at logilab.fr
pierre-yves.david at logilab.fr
Wed Apr 17 10:58:47 CDT 2013
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at logilab.fr>
# Date 1366210875 -7200
# Wed Apr 17 17:01:15 2013 +0200
# Node ID 9b8ee7a0d0f9c3c047f0fb14ca90d2796dd5deb1
# Parent 74fe7f2c9abe580306ed39c0968fa87188a9bbaa
push: extract bundle pushing in a dedicated method
Another stop toward god function diet
diff --git a/mercurial/exchangeutil.py b/mercurial/exchangeutil.py
--- a/mercurial/exchangeutil.py
+++ b/mercurial/exchangeutil.py
@@ -61,35 +61,11 @@ class pushoperation(object):
# nothing to push
scmutil.nochangesfound(unfi.ui, unfi,
self._outgoing.excluded)
ret = None
else:
- # create a changegroup from local
- if self.revs is None and not self._outgoing.excluded:
- # push everything,
- # use the fast path, no race possible on push
- cg = repo._changegroup(self._outgoing.missing, 'push')
- else:
- cg = repo.getlocalbundle('push', self._outgoing)
-
- # apply changegroup to remote
- if unbundle:
- # local repo finds heads on server, finds out what
- # revs it must push. once revs transferred, if server
- # finds it has different heads (someone else won
- # commit/push race), server aborts.
- if self.force:
- remoteheads = ['force']
- else:
- remoteheads = self._remoteheads
- # ssh: return remote's addchangegroup()
- # http: return remote's addchangegroup() or 0 for error
- ret = remote.unbundle(cg, remoteheads, 'push')
- else:
- # we return an integer indicating remote head count
- # change
- ret = remote.addchangegroup(cg, 'push', repo.url())
+ ret = self._pushbundle()
if ret:
# push succeed, synchronize target of the push
cheads = self._outgoing.missingheads
elif self.revs is None:
@@ -207,10 +183,38 @@ class pushoperation(object):
ctx))
discovery.checkheads(unfi, self.remote, outgoing,
remoteheads, self.newbranch, bool(inc))
return outgoing, remoteheads
+ def _pushbundle(self):
+ # create a changegroup from local
+ if self.revs is None and not self._outgoing.excluded:
+ # push everything,
+ # use the fast path, no race possible on push
+ cg = self.repo._changegroup(self._outgoing.missing, 'push')
+ else:
+ cg = self.repo.getlocalbundle('push', self._outgoing)
+
+ # apply changegroup to remote
+ if self.remote.capable('unbundle'):
+ # local repo finds heads on server, finds out what
+ # revs it must push. once revs transferred, if server
+ # finds it has different heads (someone else won
+ # commit/push race), server aborts.
+ if self.force:
+ remoteheads = ['force']
+ else:
+ remoteheads = self._remoteheads
+ # ssh: return remote's addchangegroup()
+ # http: return remote's addchangegroup() or 0 for error
+ return self.remote.unbundle(cg, remoteheads, 'push')
+ else:
+ # we return an integer indicating remote head count
+ # change
+ return self.remote.addchangegroup(cg, 'push', self.repo.url())
+
+
def _pushobsolescence(self):
"""Send local obsolescence marker to remote"""
self.repo.ui.debug('try to push obsolete markers to remote\n')
More information about the Mercurial-devel
mailing list