From 28efafa24c8304f2553a0d00f90ed05e7e66318c Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Tue, 15 Jul 2014 11:10:50 +0200 Subject: [PATCH] Ignored STATIC_ROOT and MEDIA_ROOT in makemessages Also alleviate issues with weird file names typically found in MEDIA_ROOT directories (#23010). Thanks Tim Graham for the review. --- .../core/management/commands/makemessages.py | 21 +++++++++++-------- tests/i18n/test_extraction.py | 20 ++++++++++++++---- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/django/core/management/commands/makemessages.py b/django/core/management/commands/makemessages.py index 120847bd5d7..ae6a834b999 100644 --- a/django/core/management/commands/makemessages.py +++ b/django/core/management/commands/makemessages.py @@ -9,6 +9,7 @@ import sys from itertools import dropwhile import django +from django.conf import settings from django.core.management.base import CommandError, BaseCommand from django.core.management.utils import (handle_extensions, find_command, popen_wrapper) @@ -56,8 +57,6 @@ class TranslatableFile(object): Uses the xgettext GNU gettext utility. """ - - from django.conf import settings from django.utils.translation import templatize if command.verbosity > 1: @@ -218,9 +217,20 @@ class Command(BaseCommand): process_all = options.get('all') extensions = options.get('extensions') self.symlinks = options.get('symlinks') + + # Need to ensure that the i18n framework is enabled + if settings.configured: + settings.USE_I18N = True + else: + settings.configure(USE_I18N=True) + ignore_patterns = options.get('ignore_patterns') if options.get('use_default_ignore_patterns'): ignore_patterns += ['CVS', '.*', '*~', '*.pyc'] + base_path = os.path.abspath('.') + for path in (settings.MEDIA_ROOT, settings.STATIC_ROOT): + if path and path.startswith(base_path): + ignore_patterns.append('%s*' % path[len(base_path) + 1:]) self.ignore_patterns = list(set(ignore_patterns)) # Avoid messing with mutable class variables @@ -251,13 +261,6 @@ class Command(BaseCommand): raise CommandError("Type '%s help %s' for usage information." % ( os.path.basename(sys.argv[0]), sys.argv[1])) - # Need to ensure that the i18n framework is enabled - from django.conf import settings - if settings.configured: - settings.USE_I18N = True - else: - settings.configure(USE_I18N=True) - if self.verbosity > 1: self.stdout.write('examining files with the extensions: %s\n' % get_text_list(list(self.extensions), 'and')) diff --git a/tests/i18n/test_extraction.py b/tests/i18n/test_extraction.py index 3e004acb9bf..c4cb56e65e5 100644 --- a/tests/i18n/test_extraction.py +++ b/tests/i18n/test_extraction.py @@ -25,12 +25,13 @@ from django.utils.translation import TranslatorCommentWarning LOCALE = 'de' has_xgettext = find_command('xgettext') +this_directory = os.path.dirname(upath(__file__)) @skipUnless(has_xgettext, 'xgettext is mandatory for extraction tests') class ExtractorTests(SimpleTestCase): - test_dir = os.path.abspath(os.path.join(os.path.dirname(upath(__file__)), 'commands')) + test_dir = os.path.abspath(os.path.join(this_directory, 'commands')) PO_FILE = 'locale/%s/LC_MESSAGES/django.po' % LOCALE @@ -378,6 +379,17 @@ class IgnoredExtractorTests(ExtractorTests): self.assertNotMsgId('This should be ignored.', po_contents) self.assertNotMsgId('This should be ignored too.', po_contents) + @override_settings( + STATIC_ROOT=os.path.join(this_directory, 'commands', 'static_root/'), + MEDIA_ROOT=os.path.join(this_directory, 'commands', 'media_root/')) + def test_media_static_dirs_ignored(self): + os.chdir(self.test_dir) + stdout = StringIO() + management.call_command('makemessages', locale=[LOCALE], verbosity=2, stdout=stdout) + data = stdout.getvalue() + self.assertIn("ignoring directory static_root", data) + self.assertIn("ignoring directory media_root", data) + class SymlinkExtractorTests(ExtractorTests): @@ -550,7 +562,7 @@ class ExcludedLocaleExtractionTests(ExtractorTests): LOCALES = ['en', 'fr', 'it'] PO_FILE = 'locale/%s/LC_MESSAGES/django.po' - test_dir = os.path.abspath(os.path.join(os.path.dirname(upath(__file__)), 'exclude')) + test_dir = os.path.abspath(os.path.join(this_directory, 'exclude')) def _set_times_for_all_po_files(self): """ @@ -608,7 +620,7 @@ class CustomLayoutExtractionTests(ExtractorTests): def setUp(self): self._cwd = os.getcwd() - self.test_dir = os.path.join(os.path.dirname(upath(__file__)), 'project_dir') + self.test_dir = os.path.join(this_directory, 'project_dir') def test_no_locale_raises(self): os.chdir(self.test_dir) @@ -618,7 +630,7 @@ class CustomLayoutExtractionTests(ExtractorTests): @override_settings( LOCALE_PATHS=(os.path.join( - os.path.dirname(upath(__file__)), 'project_dir', 'project_locale'),) + this_directory, 'project_dir', 'project_locale'),) ) def test_project_locale_paths(self): """