diff --git a/cliff/lister.py b/cliff/lister.py index 93a6b860..e0fab012 100644 --- a/cliff/lister.py +++ b/cliff/lister.py @@ -50,7 +50,7 @@ class Lister(display.DisplayCommandBase): parser = super(Lister, self).get_parser(prog_name) group = self._formatter_group group.add_argument( - '-s', '--sort-column', + '--sort-column', action='append', default=[], dest='sort_columns', diff --git a/cliff/tests/test_command.py b/cliff/tests/test_command.py index 8e1a0f3f..6aecff35 100644 --- a/cliff/tests/test_command.py +++ b/cliff/tests/test_command.py @@ -10,6 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. +import argparse import functools from cliff import command @@ -42,6 +43,10 @@ class TestCommand(command.Command): help="The quick brown fox jumps " "over the lazy dog.", ) + parser.add_argument( + '-z', + help='used in TestArgumentParser', + ) return parser def take_action(self, parsed_args): @@ -128,3 +133,18 @@ class TestHelp(base.TestBase): width=78, ) self.assertIn(expected_help_message, parser.format_help()) + + +class TestArgumentParser(base.TestBase): + + def test_option_name_collision(self): + cmd = TestCommand(None, None) + parser = cmd.get_parser('NAME') + # We should have an exception registering an option with a + # name that already exists because we do not want commands to + # override global options. + self.assertRaises( + argparse.ArgumentError, + parser.add_argument, + '-z', + )