[1.7.x] Fixed #23583 -- More selectively ignored static/media roots
Fixed a regression introduced by28efafa24c
. Thanks Michal Čihař for the report and initial patch, and Collin Anderson and Tim Graham for the reviews. Backport of8b4cc9df9c
from master.
This commit is contained in:
parent
53bc81dca3
commit
d5a273eadb
|
@ -216,10 +216,6 @@ class Command(NoArgsCommand):
|
|||
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
|
||||
|
@ -359,9 +355,11 @@ class Command(NoArgsCommand):
|
|||
norm_patterns.append(p)
|
||||
|
||||
all_files = []
|
||||
ignored_roots = [os.path.normpath(p) for p in (settings.MEDIA_ROOT, settings.STATIC_ROOT)]
|
||||
for dirpath, dirnames, filenames in os.walk(force_text(root), topdown=True, followlinks=self.symlinks):
|
||||
for dirname in dirnames[:]:
|
||||
if is_ignored(os.path.normpath(os.path.join(dirpath, dirname)), norm_patterns):
|
||||
if (is_ignored(os.path.normpath(os.path.join(dirpath, dirname)), norm_patterns) or
|
||||
os.path.join(os.path.abspath(dirpath), dirname) in ignored_roots):
|
||||
dirnames.remove(dirname)
|
||||
if self.verbosity > 1:
|
||||
self.stdout.write('ignoring directory %s\n' % dirname)
|
||||
|
|
|
@ -131,3 +131,6 @@ Bugfixes
|
|||
|
||||
* Fixed a regression when feeding the Django test client with an empty data
|
||||
string (:ticket:`21740`).
|
||||
|
||||
* Fixed a regression in :djadmin:`makemessages` where static files were
|
||||
unexpectedly ignored (:ticket:`23583`).
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
gettext('Static content inside app should be included.')
|
|
@ -0,0 +1 @@
|
|||
gettext('Content from STATIC_ROOT should not be included.')
|
|
@ -51,6 +51,17 @@ class ExtractorTests(SimpleTestCase):
|
|||
pass
|
||||
os.chdir(self._cwd)
|
||||
|
||||
def _run_makemessages(self, **options):
|
||||
os.chdir(self.test_dir)
|
||||
stdout = StringIO()
|
||||
management.call_command('makemessages', locale=[LOCALE], verbosity=2,
|
||||
stdout=stdout, **options)
|
||||
output = stdout.getvalue()
|
||||
self.assertTrue(os.path.exists(self.PO_FILE))
|
||||
with open(self.PO_FILE, 'r') as fp:
|
||||
po_contents = fp.read()
|
||||
return output, po_contents
|
||||
|
||||
def assertMsgId(self, msgid, s, use_quotes=True):
|
||||
q = '"'
|
||||
if use_quotes:
|
||||
|
@ -321,38 +332,35 @@ class JavascriptExtractorTests(ExtractorTests):
|
|||
|
||||
def test_javascript_literals(self):
|
||||
os.chdir(self.test_dir)
|
||||
management.call_command('makemessages', domain='djangojs', locale=[LOCALE], verbosity=0)
|
||||
self.assertTrue(os.path.exists(self.PO_FILE))
|
||||
with open(self.PO_FILE, 'r') as fp:
|
||||
po_contents = fp.read()
|
||||
self.assertMsgId('This literal should be included.', po_contents)
|
||||
self.assertMsgId('This one as well.', po_contents)
|
||||
self.assertMsgId(r'He said, \"hello\".', po_contents)
|
||||
self.assertMsgId("okkkk", po_contents)
|
||||
self.assertMsgId("TEXT", po_contents)
|
||||
self.assertMsgId("It's at http://example.com", po_contents)
|
||||
self.assertMsgId("String", po_contents)
|
||||
self.assertMsgId("/* but this one will be too */ 'cause there is no way of telling...", po_contents)
|
||||
self.assertMsgId("foo", po_contents)
|
||||
self.assertMsgId("bar", po_contents)
|
||||
self.assertMsgId("baz", po_contents)
|
||||
self.assertMsgId("quz", po_contents)
|
||||
self.assertMsgId("foobar", po_contents)
|
||||
_, po_contents = self._run_makemessages(domain='djangojs')
|
||||
self.assertMsgId('This literal should be included.', po_contents)
|
||||
self.assertMsgId('This one as well.', po_contents)
|
||||
self.assertMsgId(r'He said, \"hello\".', po_contents)
|
||||
self.assertMsgId("okkkk", po_contents)
|
||||
self.assertMsgId("TEXT", po_contents)
|
||||
self.assertMsgId("It's at http://example.com", po_contents)
|
||||
self.assertMsgId("String", po_contents)
|
||||
self.assertMsgId("/* but this one will be too */ 'cause there is no way of telling...", po_contents)
|
||||
self.assertMsgId("foo", po_contents)
|
||||
self.assertMsgId("bar", po_contents)
|
||||
self.assertMsgId("baz", po_contents)
|
||||
self.assertMsgId("quz", po_contents)
|
||||
self.assertMsgId("foobar", po_contents)
|
||||
|
||||
@override_settings(
|
||||
STATIC_ROOT=os.path.join(this_directory, 'commands', 'static/'),
|
||||
MEDIA_ROOT=os.path.join(this_directory, 'commands', 'media_root/'))
|
||||
def test_media_static_dirs_ignored(self):
|
||||
"""
|
||||
Regression test for #23583.
|
||||
"""
|
||||
_, po_contents = self._run_makemessages(domain='djangojs')
|
||||
self.assertMsgId("Static content inside app should be included.", po_contents)
|
||||
self.assertNotMsgId("Content from STATIC_ROOT should not be included", po_contents)
|
||||
|
||||
|
||||
class IgnoredExtractorTests(ExtractorTests):
|
||||
|
||||
def _run_makemessages(self, **options):
|
||||
os.chdir(self.test_dir)
|
||||
stdout = StringIO()
|
||||
management.call_command('makemessages', locale=[LOCALE], verbosity=2,
|
||||
stdout=stdout, **options)
|
||||
data = stdout.getvalue()
|
||||
self.assertTrue(os.path.exists(self.PO_FILE))
|
||||
with open(self.PO_FILE, 'r') as fp:
|
||||
po_contents = fp.read()
|
||||
return data, po_contents
|
||||
|
||||
def test_ignore_directory(self):
|
||||
out, po_contents = self._run_makemessages(ignore_patterns=[
|
||||
os.path.join('ignore_dir', '*'),
|
||||
|
@ -377,11 +385,11 @@ class IgnoredExtractorTests(ExtractorTests):
|
|||
self.assertNotMsgId('This should be ignored too.', po_contents)
|
||||
|
||||
@override_settings(
|
||||
STATIC_ROOT=os.path.join(this_directory, 'commands', 'static_root/'),
|
||||
STATIC_ROOT=os.path.join(this_directory, 'commands', 'static/'),
|
||||
MEDIA_ROOT=os.path.join(this_directory, 'commands', 'media_root/'))
|
||||
def test_media_static_dirs_ignored(self):
|
||||
out, _ = self._run_makemessages()
|
||||
self.assertIn("ignoring directory static_root", out)
|
||||
self.assertIn("ignoring directory static", out)
|
||||
self.assertIn("ignoring directory media_root", out)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue