histedit: add verify() to histeditaction
authorMateusz Kwapich <mitrandir@fb.com>
Wed, 02 Dec 2015 12:19:01 -0800
changeset 27202 2226cd4f32ed
parent 27201 dcb536d2e138
child 27203 b6a0f0895a25
histedit: add verify() to histeditaction This commits splits the parsing of the histedit rule from its semantic analysis. It's necessary because sometimes we want to do first without doing the former (reading the histedit state).
hgext/histedit.py
--- a/hgext/histedit.py	Wed Dec 02 12:19:01 2015 -0800
+++ b/hgext/histedit.py	Wed Dec 02 12:19:01 2015 -0800
@@ -346,13 +346,18 @@
     def fromrule(cls, state, rule):
         """Parses the given rule, returning an instance of the histeditaction.
         """
-        repo = state.repo
         rulehash = rule.strip().split(' ', 1)[0]
+        return cls(state, node.bin(rulehash))
+
+    def verify(self):
+        """ Verifies semantic correctness of the rule"""
+        repo = self.repo
+        ha = node.hex(self.node)
         try:
-            node = repo[rulehash].node()
+            self.node = repo[ha].node()
         except error.RepoError:
-            raise error.Abort(_('unknown changeset %s listed') % rulehash[:12])
-        return cls(state, node)
+            raise error.Abort(_('unknown changeset %s listed')
+                              % ha[:12])
 
     def constraints(self):
         """Return a set of constrains that this action should be verified for
@@ -1175,6 +1180,7 @@
         if verb not in actiontable or verb.startswith('_'):
             raise error.Abort(_('unknown action "%s"') % verb)
         action = actiontable[verb].fromrule(state, rest)
+        action.verify()
         constraints = action.constraints()
         for constraint in constraints:
             if constraint not in _constraints.known():