Gentoo Archives: gentoo-portage-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-portage-dev@l.g.o
Cc: Zac Medico <zmedico@g.o>
Subject: [gentoo-portage-dev] [PATCH] repoman: report error for unknown arguments (bug 686074)
Date: Sat, 25 May 2019 22:54:22
Message-Id: 20190525224744.24601-1-zmedico@gentoo.org
1 Bug: https://bugs.gentoo.org/686074
2 Signed-off-by: Zac Medico <zmedico@g.o>
3 ---
4 repoman/lib/repoman/argparser.py | 33 ++++++++++++++++++++------------
5 1 file changed, 21 insertions(+), 12 deletions(-)
6
7 diff --git a/repoman/lib/repoman/argparser.py b/repoman/lib/repoman/argparser.py
8 index b87df95cd..fa0e6ff90 100644
9 --- a/repoman/lib/repoman/argparser.py
10 +++ b/repoman/lib/repoman/argparser.py
11 @@ -1,5 +1,5 @@
12 # repoman: Argument parser
13 -# Copyright 2007-2017 Gentoo Foundation
14 +# Copyright 2007-2019 Gentoo Authors
15 # Distributed under the terms of the GNU General Public License v2
16
17 """This module contains functions used in Repoman to parse CLI arguments."""
18 @@ -196,23 +196,32 @@ def parse_args(argv, repoman_default_opts):
19 '--mode', dest='mode', choices=mode_keys,
20 help='specify which mode repoman will run in (default=full)')
21
22 - opts, args = parser.parse_known_args(argv[1:])
23 + # Modes help is included earlier, in the parser description.
24 + parser.add_argument(
25 + 'mode_positional', nargs='?', metavar='mode', choices=mode_keys,
26 + help=argparse.SUPPRESS)
27 +
28 + opts = parser.parse_args(argv[1:])
29
30 if not opts.ignore_default_opts:
31 default_opts = util.shlex_split(repoman_default_opts)
32 if default_opts:
33 - opts, args = parser.parse_known_args(default_opts + sys.argv[1:])
34 + opts = parser.parse_args(default_opts + sys.argv[1:])
35 +
36 + args = []
37 + if opts.mode is not None:
38 + args.append(opts.mode)
39 + if opts.mode_positional is not None:
40 + args.append(opts.mode_positional)
41 +
42 + if len(set(args)) > 1:
43 + parser.error("multiple modes specified: %s" % " ".join(args))
44 +
45 + opts.mode = args[0] if args else None
46
47 if opts.mode == 'help':
48 - parser.print_help(short=False)
49 -
50 - for arg in args:
51 - if arg in modes:
52 - if not opts.mode:
53 - opts.mode = arg
54 - break
55 - else:
56 - parser.error("invalid mode: %s" % arg)
57 + parser.print_help()
58 + parser.exit()
59
60 if not opts.mode:
61 opts.mode = 'full'
62 --
63 2.21.0