Fixed #28604 -- Prevented ManifestStaticFilesStorage from leaving intermediate files.

This commit is contained in:
Nathan Gaberel 2019-05-22 09:07:55 +01:00 committed by Mariusz Felisiak
parent 34ec52269a
commit b27c9c953b
2 changed files with 17 additions and 2 deletions

View File

@ -55,6 +55,7 @@ class HashedFilesMixin:
(r"""(@import\s*["']\s*(.*?)["'])""", """@import url("%s")"""), (r"""(@import\s*["']\s*(.*?)["'])""", """@import url("%s")"""),
)), )),
) )
keep_intermediate_files = True
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
@ -297,8 +298,9 @@ class HashedFilesMixin:
self.delete(hashed_name) self.delete(hashed_name)
# then save the processed result # then save the processed result
content_file = ContentFile(content.encode()) content_file = ContentFile(content.encode())
if self.keep_intermediate_files:
# Save intermediate file for reference # Save intermediate file for reference
saved_name = self._save(hashed_name, content_file) self._save(hashed_name, content_file)
hashed_name = self.hashed_name(name, content_file) hashed_name = self.hashed_name(name, content_file)
if self.exists(hashed_name): if self.exists(hashed_name):
@ -370,6 +372,7 @@ class ManifestFilesMixin(HashedFilesMixin):
manifest_version = '1.0' # the manifest format standard manifest_version = '1.0' # the manifest format standard
manifest_name = 'staticfiles.json' manifest_name = 'staticfiles.json'
manifest_strict = True manifest_strict = True
keep_intermediate_files = False
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)

View File

@ -445,6 +445,18 @@ class TestCollectionManifestStorage(TestHashedFiles, CollectionTestCase):
# File exists on disk # File exists on disk
self.hashed_file_path(missing_file_name) self.hashed_file_path(missing_file_name)
def test_intermediate_files(self):
cached_files = os.listdir(os.path.join(settings.STATIC_ROOT, 'cached'))
# Intermediate files shouldn't be created for reference.
self.assertEqual(
len([
cached_file
for cached_file in cached_files
if cached_file.startswith('relative.')
]),
2,
)
@override_settings(STATICFILES_STORAGE='staticfiles_tests.storage.SimpleStorage') @override_settings(STATICFILES_STORAGE='staticfiles_tests.storage.SimpleStorage')
class TestCollectionSimpleStorage(CollectionTestCase): class TestCollectionSimpleStorage(CollectionTestCase):