diff options
| author | Jannis Leidel <jannis@leidel.info> | 2012-05-10 18:29:34 +0200 |
|---|---|---|
| committer | Jannis Leidel <jannis@leidel.info> | 2012-05-10 18:31:48 +0200 |
| commit | 1c1a22963236c6015724bfbf43dd56dbe40a6cf9 (patch) | |
| tree | b696bf9c64208ca9b09be2d98f2c11c91d5b9b3e | |
| parent | c2e1ecb4b136016ab2996712aa0583fd91657bc9 (diff) | |
Set the post process cache when finished instead of one by one.
This should prevent a race condition if running collectstatic is
canceled or its cache is accessed from other processes, leaving the
cache in a corrupt state.
| -rw-r--r-- | django/contrib/staticfiles/storage.py | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/django/contrib/staticfiles/storage.py b/django/contrib/staticfiles/storage.py index ea18497d53..7b5866a699 100644 --- a/django/contrib/staticfiles/storage.py +++ b/django/contrib/staticfiles/storage.py @@ -189,8 +189,8 @@ class CachedFilesMixin(object): if dry_run: return - # delete cache of all handled paths - self.cache.delete_many([self.cache_key(path) for path in paths]) + # where to store the new paths + hashed_paths = {} # build a list of adjustable files matches = lambda path: matches_patterns(path, self._patterns.keys()) @@ -239,9 +239,12 @@ class CachedFilesMixin(object): hashed_name = force_unicode(saved_name.replace('\\', '/')) # and then set the cache accordingly - self.cache.set(self.cache_key(name), hashed_name) + hashed_paths[self.cache_key(name)] = hashed_name yield name, hashed_name, processed + # Finally set the cache + self.cache.set_many(hashed_paths) + class CachedStaticFilesStorage(CachedFilesMixin, StaticFilesStorage): """ |
