changeset 894:4f21a3279a60

evolve: add function to deprecate an alias When cleaning up the UI for evolve we will deprecate old aliases, but still want them to work for a while. This is a helper function that will be called during the extension setup and has the ability map an old alias to a new or canonical one.
author Olle Lundberg <geek@nerd.sh>
date Fri, 04 Apr 2014 00:30:56 +0200
parents 7de15cfd79f7
children 17ac69db9329
files hgext/evolve.py
diffstat 1 files changed, 32 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/evolve.py	Wed Mar 26 00:38:14 2014 +0100
+++ b/hgext/evolve.py	Fri Apr 04 00:30:56 2014 +0200
@@ -874,6 +874,38 @@
      _('record the specified user in metadata'), _('USER')),
 ]
 
+def _deprecatealias(oldalias, newalias):
+    '''Deprecates an alias for a command in favour of another
+
+    Creates a new entry in the command table for the old alias. It creates a
+    wrapper that has its synopsis set to show that is has been deprecated.
+    The documentation will be replace with a pointer to the new alias.
+    If a user invokes the command a deprecation warning will be printed and
+    the command of the *new* alias will be invoked.
+
+    This function is loosely based on the extensions.wrapcommand function.
+    '''
+    aliases, entry = cmdutil.findcmd(newalias, cmdtable)
+    for alias, e in cmdtable.iteritems():
+        if e is entry:
+            break
+
+    synopsis = '(DEPRECATED)'
+    if len(entry) > 2:
+        fn, opts, _syn = entry
+    else:
+        fn, opts, = entry
+    deprecationwarning = _('%s have been deprecated in favor of %s\n' % (
+        oldalias, newalias))
+    def newfn(*args, **kwargs):
+        ui = args[0]
+        ui.warn(deprecationwarning)
+        util.checksignature(fn)(*args, **kwargs)
+    newfn.__doc__  = deprecationwarning
+    cmdwrapper = command(oldalias, opts, synopsis)
+    cmdwrapper(newfn)
+
+
 @command('debugrecordpruneparents', [], '')
 def cmddebugrecordpruneparents(ui, repo):
     """add parents data to prune markers when possible