Opened 8 years ago
Last modified 8 years ago
#27658 closed Bug
collectstatic overwrites newer files in remote storage — at Version 4
Reported by: | Paolo Dente | Owned by: | nobody |
---|---|---|---|
Component: | contrib.staticfiles | Version: | 1.10 |
Severity: | Release blocker | Keywords: | staticfiles |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
The change to django/contrib/staticfiles/management/commands/collectstatic.py in commit 2cd2d188516475ddf256e6267cd82c495fb5c430 causes the command to overwrite all static files in remote storage (eg. S3), instead of only updatable ones.
A quick workaround is to override the command and restore the previous Command.delete_file() in the subclass, but I suppose this should be fixed.
Change History (4)
comment:1 by , 8 years ago
Easy pickings: | unset |
---|
comment:2 by , 8 years ago
This line Github link
full_path for remote storages such as S3 is always None
The clause was improperly refactored
It should look like
... if (target_last_modified.replace(microsecond=0) >= source_last_modified.replace(microsecond=0) and not full_path or full_path and not (self.symlink ^ os.path.islink(full_path))): ...
comment:3 by , 8 years ago
Description: | modified (diff) |
---|
comment:4 by , 8 years ago
Description: | modified (diff) |
---|
@Tim: as far as I can tell, any non-local storage should be affected so a possible test would require mocking Storage or the management command so that Command.local() is False; I can try and write one. On the other hand, it looks like @Vitali spotted the problem with the refactoring, so I don't know how to proceed from here.
Could you be more specific about the steps to reproduce the issue (ideally without S3 involved since Django's test suite cannot rely on that)? If you could provide a test case for
tests/staticfiles_tests
that would be great.