Implement handle and hook for external callers
authorChristian Ebert <blacktrash@gmx.net>
Wed, 23 Jan 2008 12:31:41 +0100
changeset 349 c78c74451bac
parent 347 c912b8c3f3ff
child 351 19d5f328a979
Implement handle and hook for external callers Allows external callers that do not use the command line to pass current hg command to keyword extension. This implementation might change in the future, if wrapping of patch.diff is possible to the effect of avoiding external handles.
hgkw/keyword.py
--- a/hgkw/keyword.py	Wed Jan 23 11:36:37 2008 +0100
+++ b/hgkw/keyword.py	Wed Jan 23 12:31:41 2008 +0100
@@ -88,6 +88,14 @@
 
 commands.optionalrepo += ' kwdemo'
 
+# handle for external callers
+externalcall = None, None, {}
+
+# hook for external callers
+def externalcmdhook(hgcmd, *args, **opts):
+    global externalcall
+    externalcall = hgcmd.__name__, args, opts
+
 # hg commands that trigger expansion only when writing to working dir,
 # not when reading filelog, and unexpand when reading from working dir
 restricted = ('diff1', 'record',
@@ -416,7 +424,12 @@
                     'log', 'outgoing', 'push', 'remove', 'rename',
                     'rollback', 'tip',
                     'convert')
-    hgcmd, func, args, opts, cmdopts = dispatch._parse(ui, sys.argv[1:])
+    try:
+        hgcmd, func, args, opts, cmdopts = dispatch._parse(ui, sys.argv[1:])
+    except cmdutil.UnknownCommand:
+        hgcmd, args, cmdopts = externalcall
+        if hgcmd is None:  # no command was specified from outside
+            raise
     if hgcmd in nokwcommands:
         return