diff --git a/django/contrib/staticfiles/management/commands/collectstatic.py b/django/contrib/staticfiles/management/commands/collectstatic.py index aae6bee10e..daf7ab26f0 100644 --- a/django/contrib/staticfiles/management/commands/collectstatic.py +++ b/django/contrib/staticfiles/management/commands/collectstatic.py @@ -39,9 +39,9 @@ class Command(NoArgsCommand): if options['use_default_ignore_patterns']: ignore_patterns += ['CVS', '.*', '*~'] ignore_patterns = list(set(ignore_patterns)) - self.copied_files = [] - self.symlinked_files = [] - self.unmodified_files = [] + self.copied_files = set() + self.symlinked_files = set() + self.unmodified_files = set() self.destination_storage = get_storage_class(settings.STATICFILES_STORAGE)() try: @@ -124,14 +124,14 @@ Type 'yes' to continue, or 'no' to cancel: """) # storage doesn't support ``modified_time`` or failed. pass else: - destination_is_link= os.path.islink( + destination_is_link = os.path.islink( self.destination_storage.path(destination)) if destination_last_modified == source_last_modified: if (not symlink and not destination_is_link): if verbosity >= 2: self.stdout.write("Skipping '%s' (not modified)\n" % destination) - self.unmodified_files.append(destination) + self.unmodified_files.add(destination) return False if dry_run: if verbosity >= 2: @@ -157,7 +157,7 @@ Type 'yes' to continue, or 'no' to cancel: """) except OSError: pass os.symlink(source_path, destination_path) - self.symlinked_files.append(destination) + self.symlinked_files.add(destination) else: if dry_run: if verbosity >= 1: @@ -180,5 +180,5 @@ Type 'yes' to continue, or 'no' to cancel: """) if verbosity >= 1: self.stdout.write("Copying %s to %s\n" % (source_path, destination)) - self.copied_files.append(destination) + self.copied_files.add(destination) return True diff --git a/tests/regressiontests/staticfiles_tests/tests.py b/tests/regressiontests/staticfiles_tests/tests.py index 6999b7af30..0a6c060664 100644 --- a/tests/regressiontests/staticfiles_tests/tests.py +++ b/tests/regressiontests/staticfiles_tests/tests.py @@ -7,12 +7,13 @@ from StringIO import StringIO from django.test import TestCase from django.conf import settings +from django.contrib.staticfiles import finders, storage +from django.core.files.storage import default_storage from django.core.exceptions import ImproperlyConfigured from django.core.management import call_command from django.db.models.loading import load_app from django.template import Template, Context -from django.contrib.staticfiles import finders, storage TEST_ROOT = os.path.dirname(__file__) @@ -54,6 +55,11 @@ class StaticFilesTestCase(TestCase): "regressiontests.staticfiles_tests", ] + # Clear the cached default_storage out, this is because when it first + # gets accessed (by some other test), it evaluates settings.MEDIA_ROOT, + # since we're planning on changing that we need to clear out the cache. + default_storage._wrapped = None + def tearDown(self): settings.DEBUG = self.old_debug settings.MEDIA_ROOT = self.old_media_root