diff options
| -rwxr-xr-x | repo | 61 | ||||
| -rw-r--r-- | tests/test_wrapper.py | 14 |
2 files changed, 47 insertions, 28 deletions
| @@ -253,26 +253,37 @@ home_dot_repo = os.path.expanduser('~/.repoconfig') | |||
| 253 | gpg_dir = os.path.join(home_dot_repo, 'gnupg') | 253 | gpg_dir = os.path.join(home_dot_repo, 'gnupg') |
| 254 | 254 | ||
| 255 | extra_args = [] | 255 | extra_args = [] |
| 256 | init_optparse = optparse.OptionParser(usage="repo init -u url [options]") | ||
| 257 | 256 | ||
| 258 | 257 | ||
| 259 | def _InitParser(): | 258 | def GetParser(gitc_init=False): |
| 260 | """Setup the init subcommand parser.""" | 259 | """Setup the CLI parser.""" |
| 260 | if gitc_init: | ||
| 261 | usage = 'repo gitc-init -u url -c client [options]' | ||
| 262 | else: | ||
| 263 | usage = 'repo init -u url [options]' | ||
| 264 | |||
| 265 | parser = optparse.OptionParser(usage=usage) | ||
| 266 | |||
| 261 | # Logging. | 267 | # Logging. |
| 262 | group = init_optparse.add_option_group('Logging options') | 268 | group = parser.add_option_group('Logging options') |
| 263 | group.add_option('-q', '--quiet', | 269 | group.add_option('-q', '--quiet', |
| 264 | action='store_true', default=False, | 270 | action='store_true', default=False, |
| 265 | help='be quiet') | 271 | help='be quiet') |
| 266 | 272 | ||
| 267 | # Manifest. | 273 | # Manifest. |
| 268 | group = init_optparse.add_option_group('Manifest options') | 274 | group = parser.add_option_group('Manifest options') |
| 269 | group.add_option('-u', '--manifest-url', | 275 | group.add_option('-u', '--manifest-url', |
| 270 | help='manifest repository location', metavar='URL') | 276 | help='manifest repository location', metavar='URL') |
| 271 | group.add_option('-b', '--manifest-branch', | 277 | group.add_option('-b', '--manifest-branch', |
| 272 | help='manifest branch or revision', metavar='REVISION') | 278 | help='manifest branch or revision', metavar='REVISION') |
| 273 | group.add_option('-m', '--manifest-name', | 279 | group.add_option('-m', '--manifest-name', |
| 274 | help='initial manifest file', metavar='NAME.xml') | 280 | help='initial manifest file', metavar='NAME.xml') |
| 275 | group.add_option('--current-branch', | 281 | cbr_opts = ['--current-branch'] |
| 282 | # The gitc-init subcommand allocates -c itself, but a lot of init users | ||
| 283 | # want -c, so try to satisfy both as best we can. | ||
| 284 | if not gitc_init: | ||
| 285 | cbr_opts += ['-c'] | ||
| 286 | group.add_option(*cbr_opts, | ||
| 276 | dest='current_branch_only', action='store_true', | 287 | dest='current_branch_only', action='store_true', |
| 277 | help='fetch only current manifest branch from server') | 288 | help='fetch only current manifest branch from server') |
| 278 | group.add_option('--mirror', action='store_true', | 289 | group.add_option('--mirror', action='store_true', |
| @@ -310,7 +321,7 @@ def _InitParser(): | |||
| 310 | help="don't fetch tags in the manifest") | 321 | help="don't fetch tags in the manifest") |
| 311 | 322 | ||
| 312 | # Tool. | 323 | # Tool. |
| 313 | group = init_optparse.add_option_group('repo Version options') | 324 | group = parser.add_option_group('repo Version options') |
| 314 | group.add_option('--repo-url', metavar='URL', | 325 | group.add_option('--repo-url', metavar='URL', |
| 315 | help='repo repository location ($REPO_URL)') | 326 | help='repo repository location ($REPO_URL)') |
| 316 | group.add_option('--repo-branch', metavar='REVISION', | 327 | group.add_option('--repo-branch', metavar='REVISION', |
| @@ -319,21 +330,20 @@ def _InitParser(): | |||
| 319 | help='do not verify repo source code') | 330 | help='do not verify repo source code') |
| 320 | 331 | ||
| 321 | # Other. | 332 | # Other. |
| 322 | group = init_optparse.add_option_group('Other options') | 333 | group = parser.add_option_group('Other options') |
| 323 | group.add_option('--config-name', | 334 | group.add_option('--config-name', |
| 324 | action='store_true', default=False, | 335 | action='store_true', default=False, |
| 325 | help='Always prompt for name/e-mail') | 336 | help='Always prompt for name/e-mail') |
| 326 | 337 | ||
| 338 | # gitc-init specific settings. | ||
| 339 | if gitc_init: | ||
| 340 | group = parser.add_option_group('GITC options') | ||
| 341 | group.add_option('-f', '--manifest-file', | ||
| 342 | help='Optional manifest file to use for this GITC client.') | ||
| 343 | group.add_option('-c', '--gitc-client', | ||
| 344 | help='Name of the gitc_client instance to create or modify.') | ||
| 327 | 345 | ||
| 328 | def _GitcInitOptions(init_optparse_arg): | 346 | return parser |
| 329 | init_optparse_arg.set_usage("repo gitc-init -u url -c client [options]") | ||
| 330 | g = init_optparse_arg.add_option_group('GITC options') | ||
| 331 | g.add_option('-f', '--manifest-file', | ||
| 332 | dest='manifest_file', | ||
| 333 | help='Optional manifest file to use for this GITC client.') | ||
| 334 | g.add_option('-c', '--gitc-client', | ||
| 335 | dest='gitc_client', | ||
| 336 | help='The name of the gitc_client instance to create or modify.') | ||
| 337 | 347 | ||
| 338 | 348 | ||
| 339 | # This is a poor replacement for subprocess.run until we require Python 3.6+. | 349 | # This is a poor replacement for subprocess.run until we require Python 3.6+. |
| @@ -432,11 +442,10 @@ class CloneFailure(Exception): | |||
| 432 | def _Init(args, gitc_init=False): | 442 | def _Init(args, gitc_init=False): |
| 433 | """Installs repo by cloning it over the network. | 443 | """Installs repo by cloning it over the network. |
| 434 | """ | 444 | """ |
| 435 | if gitc_init: | 445 | parser = GetParser(gitc_init=gitc_init) |
| 436 | _GitcInitOptions(init_optparse) | 446 | opt, args = parser.parse_args(args) |
| 437 | opt, args = init_optparse.parse_args(args) | ||
| 438 | if args: | 447 | if args: |
| 439 | init_optparse.print_usage() | 448 | parser.print_usage() |
| 440 | sys.exit(1) | 449 | sys.exit(1) |
| 441 | 450 | ||
| 442 | url = opt.repo_url | 451 | url = opt.repo_url |
| @@ -896,12 +905,9 @@ For access to the full online help, install repo ("repo init"). | |||
| 896 | 905 | ||
| 897 | def _Help(args): | 906 | def _Help(args): |
| 898 | if args: | 907 | if args: |
| 899 | if args[0] == 'init': | 908 | if args[0] in {'init', 'gitc-init'}: |
| 900 | init_optparse.print_help() | 909 | parser = GetParser(gitc_init=args[0] == 'gitc-init') |
| 901 | sys.exit(0) | 910 | parser.print_help() |
| 902 | elif args[0] == 'gitc-init': | ||
| 903 | _GitcInitOptions(init_optparse) | ||
| 904 | init_optparse.print_help() | ||
| 905 | sys.exit(0) | 911 | sys.exit(0) |
| 906 | else: | 912 | else: |
| 907 | print("error: '%s' is not a bootstrap command.\n" | 913 | print("error: '%s' is not a bootstrap command.\n" |
| @@ -983,7 +989,6 @@ def main(orig_args): | |||
| 983 | 'command from the corresponding client under /gitc/', | 989 | 'command from the corresponding client under /gitc/', |
| 984 | file=sys.stderr) | 990 | file=sys.stderr) |
| 985 | sys.exit(1) | 991 | sys.exit(1) |
| 986 | _InitParser() | ||
| 987 | if not repo_main: | 992 | if not repo_main: |
| 988 | if opt.help: | 993 | if opt.help: |
| 989 | _Usage() | 994 | _Usage() |
diff --git a/tests/test_wrapper.py b/tests/test_wrapper.py index 4d2cf3fb..a98c4130 100644 --- a/tests/test_wrapper.py +++ b/tests/test_wrapper.py | |||
| @@ -66,6 +66,20 @@ class RepoWrapperUnitTest(RepoWrapperTestCase): | |||
| 66 | self.assertEqual('', stderr.getvalue()) | 66 | self.assertEqual('', stderr.getvalue()) |
| 67 | self.assertIn('repo launcher version', stdout.getvalue()) | 67 | self.assertIn('repo launcher version', stdout.getvalue()) |
| 68 | 68 | ||
| 69 | def test_init_parser(self): | ||
| 70 | """Make sure 'init' GetParser works.""" | ||
| 71 | parser = self.wrapper.GetParser(gitc_init=False) | ||
| 72 | opts, args = parser.parse_args([]) | ||
| 73 | self.assertEqual([], args) | ||
| 74 | self.assertIsNone(opts.manifest_url) | ||
| 75 | |||
| 76 | def test_gitc_init_parser(self): | ||
| 77 | """Make sure 'gitc-init' GetParser works.""" | ||
| 78 | parser = self.wrapper.GetParser(gitc_init=True) | ||
| 79 | opts, args = parser.parse_args([]) | ||
| 80 | self.assertEqual([], args) | ||
| 81 | self.assertIsNone(opts.manifest_file) | ||
| 82 | |||
| 69 | def test_get_gitc_manifest_dir_no_gitc(self): | 83 | def test_get_gitc_manifest_dir_no_gitc(self): |
| 70 | """ | 84 | """ |
| 71 | Test reading a missing gitc config file | 85 | Test reading a missing gitc config file |
