Browse Source

Fixed #22194 -- Added --list-tags option to check command.

Thanks Elvard for the patch.
Tim Graham 11 years ago
parent
commit
395d75ea6b

+ 4 - 2
django/core/checks/registry.py

@@ -64,8 +64,10 @@ class CheckRegistry(object):
         return errors
 
     def tag_exists(self, tag):
-        tags = chain(*[check.tags for check in self.registered_checks if hasattr(check, 'tags')])
-        return tag in tags
+        return tag in self.tags_available()
+
+    def tags_available(self):
+        return set(chain(*[check.tags for check in self.registered_checks if hasattr(check, 'tags')]))
 
 
 registry = CheckRegistry()

+ 7 - 0
django/core/management/commands/check.py

@@ -5,6 +5,7 @@ from optparse import make_option
 
 from django.apps import apps
 from django.core import checks
+from django.core.checks.registry import registry
 from django.core.management.base import BaseCommand, CommandError
 
 
@@ -16,9 +17,15 @@ class Command(BaseCommand):
     option_list = BaseCommand.option_list + (
         make_option('--tag', '-t', action='append', dest='tags',
             help='Run only checks labeled with given tag.'),
+        make_option('--list-tags', action='store_true', dest='list_tags',
+            help='List available tags.'),
     )
 
     def handle(self, *app_labels, **options):
+        if options.get('list_tags'):
+            self.stdout.write('\n'.join(sorted(registry.tags_available())))
+            return
+
         if app_labels:
             app_configs = [apps.get_app_config(app_label) for app_label in app_labels]
         else:

+ 4 - 0
docs/ref/django-admin.txt

@@ -126,6 +126,10 @@ to perform only security and compatibility checks, you would run::
 
     python manage.py check --tag security --tag compatibility
 
+.. django-admin-option:: --list-tags
+
+List all available tags.
+
 compilemessages
 ---------------
 

+ 10 - 0
tests/check_framework/tests.py

@@ -194,6 +194,16 @@ class CheckCommandTests(TestCase):
     def test_invalid_tag(self):
         self.assertRaises(CommandError, call_command, 'check', tags=['missingtag'])
 
+    @override_system_checks([simple_system_check])
+    def test_list_tags_empty(self):
+        call_command('check', list_tags=True)
+        self.assertEqual('\n', sys.stdout.getvalue())
+
+    @override_system_checks([tagged_system_check])
+    def test_list_tags(self):
+        call_command('check', list_tags=True)
+        self.assertEqual('simpletag\n', sys.stdout.getvalue())
+
 
 def custom_error_system_check(app_configs, **kwargs):
     return [