[MERGE] Re: [api breakage] alias merge regression.
Robert Collins
robertc at robertcollins.net
Tue Feb 28 04:06:29 GMT 2006
On Mon, 2006-02-27 at 21:43 -0600, John A Meinel wrote:
> Robert Collins wrote:
> > The alias merge broke the 0.7 run_argv for plugin commands.
> >
> > Just a heads up, I'm going to prepare a bugfix for this, it should be
> > trivial to provide compatibility.
> >
> > Rob
> >
>
> I think we just need to define 'alias_argv=[]' or 'alias_argv=None' as
> the default.
>
> I thought about it after it got merged. And then promptly forgot. :)
> Thanks for noticing and remembering.
Its quite easy when it makes bzrtools blow up ;).
And its deeper than that: a plugin command that defines run_argv only
has the two signature form.
We could define a replacement method - run_argv_aliases, and delegate
run_argv to that but that means that plugins that define run_argv will
have their code not executed. So we also need to detect when an old
run_argv exists and if it exists run it instead:
=== modified file 'bzrlib/commands.py'
--- bzrlib/commands.py
+++ bzrlib/commands.py
@@ -34,15 +34,16 @@
import errno
import bzrlib
-import bzrlib.trace
-from bzrlib.trace import mutter, note, log_error, warning, be_quiet
from bzrlib.errors import (BzrError,
BzrCheckError,
BzrCommandError,
BzrOptionError,
NotBranchError)
+from bzrlib.option import Option
from bzrlib.revisionspec import RevisionSpec
-from bzrlib.option import Option
+from bzrlib.symbol_versioning import *
+import bzrlib.trace
+from bzrlib.trace import mutter, note, log_error, warning, be_quiet
plugin_cmds = {}
@@ -207,8 +208,16 @@
r[o.name] = o
return r
- def run_argv(self, argv, alias_argv=None):
- """Parse command line and run."""
+ @deprecated_method(zero_eight)
+ def run_argv(self, argv):
+ """Parse command line and run.
+
+ See run_argv_aliases for the 0.8 and beyond api.
+ """
+ return self.run_argv_aliases(argv)
+
+ def run_argv_aliases(self, argv, alias_argv=None):
+ """Parse the command line and run with extra aliases in
alias_argv."""
args, opts = parse_args(self, argv, alias_argv)
if 'help' in opts: # e.g. bzr add --help
from bzrlib.help import help_on_command
@@ -584,15 +593,21 @@
cmd = str(argv.pop(0))
cmd_obj = get_cmd_object(cmd, plugins_override=not opt_builtin)
+ if not getattr(cmd_obj.run_argv, 'is_deprecated', False):
+ run = cmd_obj.run_argv
+ run_argv = [argv]
+ else:
+ run = cmd_obj.run_argv_aliases
+ run_argv = [argv, alias_argv]
try:
if opt_lsprof:
- ret = apply_lsprofiled(opt_lsprof_file, cmd_obj.run_argv,
argv,
- alias_argv)
+ ret = apply_lsprofiled(opt_lsprof_file, run, *run_argv)
elif opt_profile:
- ret = apply_profiled(cmd_obj.run_argv, argv, alias_argv)
+ ret = apply_profiled(run, *run_argv)
else:
- ret = cmd_obj.run_argv(argv, alias_argv)
+ ret = run(*run_argv)
return ret or 0
finally:
# reset, in case we may do other commands later within the same
process
=== modified file 'bzrlib/symbol_versioning.py'
--- bzrlib/symbol_versioning.py
+++ bzrlib/symbol_versioning.py
@@ -139,3 +139,4 @@
decorated_callable)
decorated_callable.__module__ = callable.__module__
decorated_callable.__name__ = callable.__name__
+ decorated_callable.is_deprecated = True
=== modified file 'bzrlib/tests/test_symbol_versioning.py'
--- bzrlib/tests/test_symbol_versioning.py
+++ bzrlib/tests/test_symbol_versioning.py
@@ -87,6 +87,7 @@
self.assertEqualDiff(expected_docstring,
deprecated_callable.__doc__)
self.assertEqualDiff(expected_name,
deprecated_callable.__name__)
self.assertEqualDiff(expected_module,
deprecated_callable.__module__)
+ self.assertTrue(deprecated_callable.is_deprecated)
finally:
symbol_versioning.set_warning_method(old_warning_method)
Rob
--
GPG key available at: <http://www.robertcollins.net/keys.txt>.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 191 bytes
Desc: This is a digitally signed message part
Url : https://lists.ubuntu.com/archives/bazaar/attachments/20060228/9f381ce2/attachment.pgp
More information about the bazaar
mailing list