separate parse_args() from run()

parse_args concentrates on only processing arguments, including pre and post processing.
this needs to be called before run(), which is now receiving the return value of parse_args.

this was done so we can have the parsed args outside of the run function, e.g. in main().
This commit is contained in:
Thomas Waldmann 2015-11-01 00:40:32 +01:00
parent 7ea701f6f7
commit 4bf8c8a6f8
2 changed files with 19 additions and 16 deletions

View File

@ -985,7 +985,21 @@ Type "Yes I am sure" if you understand this and want to continue.\n""")
help='additional help on TOPIC')
return parser
def run(self, args=None):
def parse_args(self, args=None):
# We can't use argparse for "serve" since we don't want it to show up in "Available commands"
if args:
args = self.preprocess_args(args)
parser = self.build_parser(args)
args = parser.parse_args(args or ['-h'])
update_excludes(args)
return args
def run(self, args):
os.umask(args.umask) # early, before opening files
self.verbose = args.verbose
RemoteRepository.remote_path = args.remote_path
RemoteRepository.umask = args.umask
setup_logging()
check_extension_modules()
keys_dir = get_keys_dir()
if not os.path.exists(keys_dir):
@ -1002,19 +1016,6 @@ Type "Yes I am sure" if you understand this and want to continue.\n""")
# For information about cache directory tags, see:
# http://www.brynosaurus.com/cachedir/
""").lstrip())
# We can't use argparse for "serve" since we don't want it to show up in "Available commands"
if args:
args = self.preprocess_args(args)
parser = self.build_parser(args)
args = parser.parse_args(args or ['-h'])
self.verbose = args.verbose
setup_logging()
os.umask(args.umask)
RemoteRepository.remote_path = args.remote_path
RemoteRepository.umask = args.umask
update_excludes(args)
if is_slow_msgpack():
logger.warning("Using a pure-python msgpack! This will result in lower performance.")
return args.func(args)
@ -1062,7 +1063,8 @@ def main(): # pragma: no cover
archiver = Archiver()
try:
msg = None
exit_code = archiver.run(sys.argv[1:])
args = archiver.parse_args(sys.argv[1:])
exit_code = archiver.run(args)
except Error as e:
msg = e.get_message()
if e.traceback:

View File

@ -93,7 +93,8 @@ def exec_cmd(*args, archiver=None, fork=False, exe=None, **kw):
sys.stdout = sys.stderr = output = StringIO()
if archiver is None:
archiver = Archiver()
ret = archiver.run(list(args))
args = archiver.parse_args(list(args))
ret = archiver.run(args)
return ret, output.getvalue()
finally:
sys.stdin, sys.stdout, sys.stderr = stdin, stdout, stderr