From d6f293ad1b5179f027e2c62ba8e79612f0076b8a Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Tue, 15 Jul 2014 11:10:50 +0200 Subject: [PATCH] [1.7.x] 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. Backport of 28efafa24c from master. --- .../core/management/commands/makemessages.py | 21 +++++++++++-------- tests/i18n/test_extraction.py | 19 +++++++++++++---- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/django/core/management/commands/makemessages.py b/django/core/management/commands/makemessages.py index 3905666a77b..158545313b5 100644 --- a/django/core/management/commands/makemessages.py +++ b/django/core/management/commands/makemessages.py @@ -10,6 +10,7 @@ from itertools import dropwhile from optparse import make_option import django +from django.conf import settings from django.core.management.base import CommandError, NoArgsCommand from django.core.management.utils import (handle_extensions, find_command, popen_wrapper) @@ -57,8 +58,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: @@ -211,9 +210,20 @@ class Command(NoArgsCommand): 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 @@ -244,13 +254,6 @@ class Command(NoArgsCommand): 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 f0a7b35fae9..295388ec5e0 100644 --- a/tests/i18n/test_extraction.py +++ b/tests/i18n/test_extraction.py @@ -22,6 +22,7 @@ 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') @@ -31,8 +32,7 @@ class ExtractorTests(SimpleTestCase): def setUp(self): self._cwd = os.getcwd() - self.test_dir = os.path.abspath( - os.path.join(os.path.dirname(upath(__file__)), 'commands')) + self.test_dir = os.path.abspath(os.path.join(this_directory, 'commands')) def _rmrf(self, dname): if os.path.commonprefix([self.test_dir, os.path.abspath(dname)]) != self.test_dir: @@ -361,6 +361,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): @@ -530,7 +541,7 @@ class MultipleLocaleExtractionTests(ExtractorTests): 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) @@ -540,7 +551,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): """