Restore legacy parsing style of optional parameters to cros_workon
This is important to keep developers from having to change their
workflows.
This patch was contributed by U. Artie Eoff <ullysses.a.eoff@intel.com>.
BUG=chromium:485805
TEST=`cros_workon start buffet --board=gizmo`
TEST=`cros_workon --board=gizmo start buffet`
TEST=`cros_workon start --board=gizmo buffet`
TEST=`cros_workon start --board=gizmo buffet chromeos-chrome`
TEST=`cros_workon start buffet chromeos-chrome --board=gizmo`
TEST=`cros_workon-gizmo start buffet chromeos-chrome`
TEST=`cros_workon list-all`
TEST=`cros_workon iterate --command='git status' buffet`
Change-Id: I69146a6b11ee53a63b023c541c806b21d48931d0
Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/270107
Reviewed-by: Chris Sosa <sosa@chromium.org>
diff --git a/scripts/cros_workon.py b/scripts/cros_workon.py
index 5e9462f..5ca6f09 100644
--- a/scripts/cros_workon.py
+++ b/scripts/cros_workon.py
@@ -29,30 +29,52 @@
def main(argv):
- parser = commandline.ArgumentParser(description=__doc__)
- parser.add_argument(
- 'command',
- choices=('start', 'stop', 'info', 'list', 'list-all', 'iterate'),
- help='cros_workon command to run.')
- parser.add_argument('--board', default=cros_build_lib.GetDefaultBoard(),
+ shared = commandline.SharedParser()
+ shared.add_argument('--board', default=cros_build_lib.GetDefaultBoard(),
help='The board to set package keywords for.')
- parser.add_argument('--brick', help='The brick to set package keywords for.')
- parser.add_argument('--host', default=False, action='store_true',
+ shared.add_argument('--brick', help='The brick to set package keywords for.')
+ shared.add_argument('--host', default=False, action='store_true',
help='Uses the host instead of board')
- parser.add_argument('--remote', default='',
+ shared.add_argument('--remote', default='',
help='For non-workon projects, the git remote to use.')
- parser.add_argument('--revision', default='',
+ shared.add_argument('--revision', default='',
help='Use to override the manifest defined default '
'revision used for a project')
- parser.add_argument('--command', default='git status', dest='iterate_command',
+ shared.add_argument('--command', default='git status', dest='iterate_command',
help='The command to be run by forall.')
- parser.add_argument('--workon_only', default=False, action='store_true',
+ shared.add_argument('--workon_only', default=False, action='store_true',
help='Apply to packages that have a workon ebuild only')
- parser.add_argument('--all', default=False, action='store_true',
+ shared.add_argument('--all', default=False, action='store_true',
help='Apply to all possible packages for the '
'given command (overrides workon_only)')
- parser.add_argument('packages', nargs='*',
+
+ parser = commandline.ArgumentParser(description=__doc__, parents=[shared,])
+
+ # Add the shared 'packages' argument after creating the main parser so that
+ # it is only bound/shared with the subcommands and doesn't confuse argparse.
+ shared.add_argument('packages', nargs='*',
help='The packages to run command against.')
+
+ commands = parser.add_subparsers(dest='command', title='commands')
+ commands.add_parser(
+ 'start', parents=[shared,],
+ help='Moves an ebuild to live (intended to support development)')
+ commands.add_parser(
+ 'stop', parents=[shared,],
+ help='Moves an ebuild to stable (use last known good)')
+ commands.add_parser(
+ 'info', parents=[shared,],
+ help='Print package name, repo name, and source directory.')
+ commands.add_parser(
+ 'list', parents=[shared,],
+ help='List of live ebuilds (workon ebuilds if --all)')
+ commands.add_parser(
+ 'list-all', parents=[shared,],
+ help='List all of the live ebuilds for all setup boards')
+ commands.add_parser(
+ 'iterate', parents=[shared,],
+ help='For each ebuild, cd to the source dir and run a command')
+
options = parser.parse_args(argv)
options.Freeze()