Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(344)

Unified Diff: recipes.py

Issue 2840283002: [recipes.py] refactor common argument parsing, directly validate --package (Closed)
Patch Set: rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: recipes.py
diff --git a/recipes.py b/recipes.py
index dca618c3c9d2bd9cc1d4a25de47cd5c205fd5784..914904b7682e2b89b9a8d3b67acab811e58ba00d 100755
--- a/recipes.py
+++ b/recipes.py
@@ -344,13 +344,18 @@ def _op_properties_to_dict(pmap):
return dict((k, _op_property_value(pmap[k])) for k in pmap)
-def main():
- parser = argparse.ArgumentParser(
- description='Interact with the recipe system.')
+def add_common_args(parser):
+ from recipe_engine import package_io
+
+ def package_type(value):
+ if not os.path.isfile(value):
+ raise argparse.ArgumentTypeError(
+ 'Given recipes config file %r does not exist.' % (value,))
+ return package_io.PackageFile(value)
parser.add_argument(
'--package',
- type=os.path.abspath,
+ type=package_type,
help='Path to recipes.cfg of the recipe package to operate on'
', usually in infra/config/recipes.cfg')
parser.add_argument(
@@ -385,6 +390,24 @@ def main():
'must contain a JSONPB-encoded Arguments protobuf message, and will '
'be integrated into the runtime parameters.')
+
+def post_process_common_args(parser, args):
+ if args.command == "remote":
+ # TODO(iannucci): this is a hack; remote doesn't behave like ANY other
+ # commands. A way to solve this will be to allow --package to take a remote
+ # repo and then simply remove the remote subcommand entirely.
+ return
+
+ if not args.package:
+ parser.error('%s requires --package' % args.command)
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ description='Interact with the recipe system.')
+
+ add_common_args(parser)
+
subp = parser.add_subparsers()
fetch_p = subp.add_parser(
@@ -571,6 +594,7 @@ def main():
doc_p.set_defaults(command='doc')
args = parser.parse_args()
+ post_process_common_args(parser, args)
# Load/parse operational arguments.
op_args = arguments_pb2.Arguments()
@@ -674,11 +698,8 @@ def _real_main(args, op_args):
if args.command == 'remote':
return remote(args)
- assert args.package, 'No recipe config (--package) given.'
- assert os.path.isfile(args.package), (
- 'Given recipes config file %r does not exist.' % (args.package,))
- repo_root = package.InfraRepoConfig().from_recipes_cfg(args.package)
- config_file = package_io.PackageFile(args.package)
+ config_file = args.package
+ repo_root = package.InfraRepoConfig().from_recipes_cfg(args.package.path)
try:
# TODO(phajdan.jr): gracefully handle inconsistent deps when rolling.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698