From patchwork Wed Apr 2 17:59:02 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [1, of, 5, (4, more, to, go)] push: pass a `pushoperation` object to localrepo.checkpush From: Pierre-Yves David X-Patchwork-Id: 4194 Message-Id: To: mercurial-devel@selenic.com Cc: pierre-yves.david@ens-lyon.org Date: Wed, 02 Apr 2014 10:59:02 -0700 # HG changeset patch # User Pierre-Yves David # Date 1396385148 25200 # Tue Apr 01 13:45:48 2014 -0700 # Node ID c7d0eb8fe4afcb5e3deeb0080a6c32b1a3e20377 # Parent 9e9e3a4e9261d31318f0f177538636370c50fe57 push: pass a `pushoperation` object to localrepo.checkpush The `pushoperation` object contains strictly more data the arguments currently passed to `localrepo.checkpush` we pass the new object instead. This function is used by MQ to abort push that includes MQ changesets. Note: extension that may use this function will have to align. diff --git a/hgext/mq.py b/hgext/mq.py --- a/hgext/mq.py +++ b/hgext/mq.py @@ -3287,29 +3287,29 @@ def reposetup(ui, repo): force) return super(mqrepo, self).commit(text, user, date, match, force, editor, extra) - def checkpush(self, force, revs): - if self.mq.applied and self.mq.checkapplied and not force: + def checkpush(self, pushop): + if self.mq.applied and self.mq.checkapplied and not pushop.force: outapplied = [e.node for e in self.mq.applied] - if revs: + if pushop.revs: # Assume applied patches have no non-patch descendants and # are not on remote already. Filtering any changeset not # pushed. - heads = set(revs) + heads = set(pushop.revs) for node in reversed(outapplied): if node in heads: break else: outapplied.pop() # looking for pushed and shared changeset for node in outapplied: if self[node].phase() < phases.secret: raise util.Abort(_('source has mq patches applied')) # no non-secret patches pushed - super(mqrepo, self).checkpush(force, revs) + super(mqrepo, self).checkpush(pushop) def _findtags(self): '''augment tags from base class with patch tags''' result = super(mqrepo, self)._findtags() diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -93,11 +93,11 @@ def push(repo, remote, force=False, revs # We do not abort the push, but just disable the local phase # synchronisation. msg = 'cannot lock source repository: %s\n' % err pushop.ui.debug(msg) try: - pushop.repo.checkpush(pushop.force, pushop.revs) + pushop.repo.checkpush(pushop) lock = None unbundle = pushop.remote.capable('unbundle') if not unbundle: lock = pushop.remote.lock() try: diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1,6 +1,6 @@ -# localrepo.py - read/write repository class for mercurial + # # Copyright 2005-2007 Matt Mackall # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. @@ -1667,11 +1667,11 @@ class localrepository(object): return r def pull(self, remote, heads=None, force=False): return exchange.pull (self, remote, heads, force) - def checkpush(self, force, revs): + def checkpush(self, pushop): """Extensions can override this function if additional checks have to be performed before pushing, or call it if they override push command. """ pass