From c3055242c81812278ebdc93dd109f30d2cbd1610 Mon Sep 17 00:00:00 2001 From: David Foster Date: Sat, 7 Apr 2018 17:10:05 -0700 Subject: [PATCH] Fixed #29301 -- Made management command --help display command-specific arguments before common arguments. --- django/core/management/base.py | 4 +++- tests/admin_scripts/tests.py | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/django/core/management/base.py b/django/core/management/base.py index 41b6b0fa91f..9461f8654a5 100644 --- a/django/core/management/base.py +++ b/django/core/management/base.py @@ -228,6 +228,9 @@ class BaseCommand: self, prog="%s %s" % (os.path.basename(prog_name), subcommand), description=self.help or None, ) + # Add command-specific arguments first so that they appear in the + # --help output before arguments common to all commands. + self.add_arguments(parser) parser.add_argument('--version', action='version', version=self.get_version()) parser.add_argument( '-v', '--verbosity', action='store', dest='verbosity', default=1, @@ -251,7 +254,6 @@ class BaseCommand: '--no-color', action='store_true', dest='no_color', help="Don't colorize the command output.", ) - self.add_arguments(parser) return parser def add_arguments(self, parser): diff --git a/tests/admin_scripts/tests.py b/tests/admin_scripts/tests.py index d34f95ea403..3c4e01dfac5 100644 --- a/tests/admin_scripts/tests.py +++ b/tests/admin_scripts/tests.py @@ -1495,6 +1495,13 @@ class CommandTypes(AdminScriptTestCase): args = ['check', '--help'] out, err = self.run_manage(args) self.assertNoOutput(err) + # Command-specific options like --tag appear before options common to + # all commands like --version. + tag_location = out.find('--tag') + version_location = out.find('--version') + self.assertNotEqual(tag_location, -1) + self.assertNotEqual(version_location, -1) + self.assertLess(tag_location, version_location) self.assertOutput(out, "Checks the entire Django project for potential problems.") def test_color_style(self):