From c869fff3edaa12819947392991e4dd6ce4b8d609 Mon Sep 17 00:00:00 2001 From: Georgi Valkov Date: Sat, 9 Mar 2013 15:33:36 +0200 Subject: [PATCH] remove basecommand.merge_options() This patch removes the error prone step of merging the baseparsers' options (the 'Generic Options') with those of the subparser. In fact, commands are already capable of parsing all options present in the 'Generic Options' option group. The option parsing logic is as follows: Given a command line such as: '--timeout 5 install --user pkg' pip.parseopt() returns command 'install' with arguments: '--timeout 5 --user pkg' pip.main() executes the above as: commands['install'](parser).main('--timeout 5 --user pkg', options) --- pip/__init__.py | 19 ++++++++++++------- pip/basecommand.py | 14 -------------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/pip/__init__.py b/pip/__init__.py index 2f7475be8e6..05c01747ef7 100755 --- a/pip/__init__.py +++ b/pip/__init__.py @@ -100,7 +100,10 @@ def parseopts(args): description = [''] + ['%-27s %s' % (i, j) for i, j in command_summaries] parser.description = '\n'.join(description) - options, args = parser.parse_args(args) + options, cmd_args = parser.parse_args(args) + # args: ['--timeout=5', 'install', '--user', 'INITools'] + # cmd_args: ['install', '--user', 'INITools'] + # note: parser calls disable_interspersed_args() if options.version: sys.stdout.write(parser.version) @@ -108,16 +111,18 @@ def parseopts(args): sys.exit() # pip || pip help || pip --help -> print_help() - if not args or (args[0] == 'help' and len(args) == 1): + if not cmd_args or (cmd_args[0] == 'help' and len(cmd_args) == 1): parser.print_help() sys.exit() - if not args: + if not cmd_args: msg = ('You must give a command ' '(use "pip --help" to see a list of commands)') raise CommandError(msg) - command = args[0].lower() + command = cmd_args[0].lower() # install + args.remove(cmd_args[0]) + cmd_args = args # --timeout=5 --user INITools if command not in commands: guess = get_similar_commands(command) @@ -128,7 +133,7 @@ def parseopts(args): raise CommandError(' - '.join(msg)) - return command, options, args, parser + return command, options, cmd_args, parser def main(initial_args=None): @@ -138,7 +143,7 @@ def main(initial_args=None): autocomplete() try: - cmd_name, options, args, parser = parseopts(initial_args) + cmd_name, options, cmd_args, parser = parseopts(initial_args) except PipError: e = sys.exc_info()[1] sys.stderr.write("ERROR: %s" % e) @@ -146,7 +151,7 @@ def main(initial_args=None): sys.exit(1) command = commands[cmd_name](parser) # see baseparser.Command - return command.main(args[1:], options) + return command.main(cmd_args, options) def bootstrap(): diff --git a/pip/basecommand.py b/pip/basecommand.py index 1a22c47f234..aa37b221da3 100644 --- a/pip/basecommand.py +++ b/pip/basecommand.py @@ -67,25 +67,11 @@ def _copy_option_group(self, parser, group): parser.add_option_group(new_group) - def merge_options(self, initial_options, options): - # Make sure we have all global options carried over - attrs = ['log', 'proxy', 'require_venv', - 'log_explicit_levels', 'log_file', - 'timeout', 'default_vcs', - 'skip_requirements_regex', - 'no_input', 'exists_action', - 'cert'] - for attr in attrs: - setattr(options, attr, getattr(initial_options, attr) or getattr(options, attr)) - options.quiet += initial_options.quiet - options.verbose += initial_options.verbose - def setup_logging(self): pass def main(self, args, initial_options): options, args = self.parser.parse_args(args) - self.merge_options(initial_options, options) level = 1 # Notify level += options.verbose