[PATCH 5 of 6] mq: convert mqrepo.checkpush into a beforepush pyhook

Gregory Szorc gregory.szorc at gmail.com
Sat Jul 12 15:12:25 CDT 2014


# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1405194867 25200
#      Sat Jul 12 12:54:27 2014 -0700
# Node ID be71c972fa2c2fe40060626ac4d150fa39b29c14
# Parent  b8382807ed1766b93799b94eaabe2774fbca65e2
mq: convert mqrepo.checkpush into a beforepush pyhook

diff --git a/hgext/mq.py b/hgext/mq.py
--- a/hgext/mq.py
+++ b/hgext/mq.py
@@ -3266,8 +3266,28 @@ def mqphasedefaults(repo, roots):
         qbase = repo[repo.mq.applied[0].node]
         roots[mqphase].add(qbase.node())
     return roots
 
+def mqrepobeforepush(repo, pushop=None):
+    """pyhook for beforepush"""
+    if repo.mq.applied and repo.mq.checkapplied and not pushop.force:
+        outapplied = [e.node for e in repo.mq.applied]
+        if pushop.revs:
+            # Assume applied patches have no non-patch descendants and
+            # are not on remote already. Filtering any changeset not
+            # pushed.
+            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 repo[node].phase() < phases.secret:
+                raise util.Abort(_('source has mq patches applied'))
+        # no non-secret patches pushed
+
 def reposetup(ui, repo):
     class mqrepo(repo.__class__):
         @localrepo.unfilteredpropertycache
         def mq(self):
@@ -3294,28 +3314,8 @@ def reposetup(ui, repo):
 
             return super(mqrepo, self).commit(text, user, date, match, force,
                                               editor, extra)
 
-        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 pushop.revs:
-                    # Assume applied patches have no non-patch descendants and
-                    # are not on remote already. Filtering any changeset not
-                    # pushed.
-                    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(pushop)
-
         def _findtags(self):
             '''augment tags from base class with patch tags'''
             result = super(mqrepo, self)._findtags()
 
@@ -3355,8 +3355,9 @@ def reposetup(ui, repo):
     if repo.local():
         repo.__class__ = mqrepo
 
         repo._phasedefaults.append(mqphasedefaults)
+        repo.addpyhook('beforepush', mqrepobeforepush)
 
 def mqimport(orig, ui, repo, *args, **kwargs):
     if (util.safehasattr(repo, 'abortifwdirpatched')
         and not kwargs.get('no_commit', False)):


More information about the Mercurial-devel mailing list