The commit moves all cache set to the end of the post-processing phase of the CachedStaticFilesStorage class. We do that by keeping a dictionary of what needs to be stored to the cache and store that after all static files have been post-processed. Additionally, existing cache keys are never deleted; instead, we rely on the cache expiration to remove not-recently-used keys. This is convenient for deployments. Ususally, one first does a collectstatic and then restarts his application servers. But since the cache is (normally) shared with the currently running application processes, any change to the static files will be immediately used for existing requests. This results in having a previous codebase serving newer static files, which might lead to issues. The commit moves all cache handling to the end, so that the above window of serving wrong versions of the static files is minimized. This has the added benefit, that one can safely stop the collectstatic command in the middle of the execution, without any impact on the existing application processes (the old files are always there, anyway). Signed-off-by: Jannis Leidel <firstname.lastname@example.org>
… few default values of iterable settings.
Instead of a private method which is called twice (once in handle_noargs and once in collect), process options once in handle_noargs. Tests which call collect() will have to manually call set_options() beforehand to configure their desired options.