浏览代码

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

Nathan Gaberel 5 年之前
父节点
当前提交
b27c9c953b
共有 2 个文件被更改,包括 17 次插入2 次删除
  1. 5 2
      django/contrib/staticfiles/storage.py
  2. 12 0
      tests/staticfiles_tests/test_storage.py

+ 5 - 2
django/contrib/staticfiles/storage.py

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

+ 12 - 0
tests/staticfiles_tests/test_storage.py

@@ -445,6 +445,18 @@ class TestCollectionManifestStorage(TestHashedFiles, CollectionTestCase):
         # File exists on disk
         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')
 class TestCollectionSimpleStorage(CollectionTestCase):