Browse Source

Fixed #29301 -- Made management command --help display command-specific arguments before common arguments.

David Foster 7 years ago
parent
commit
c3055242c8
2 changed files with 10 additions and 1 deletions
  1. 3 1
      django/core/management/base.py
  2. 7 0
      tests/admin_scripts/tests.py

+ 3 - 1
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):

+ 7 - 0
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):