summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrançois Freitag <francois.freitag@polyconseil.fr>2016-08-26 17:54:06 -0700
committerTim Graham <timograham@gmail.com>2016-09-02 14:53:18 -0400
commit8c054ed71d579aef53e074fcdaea56f110f1764e (patch)
tree84539f811afb3f0e56d7d74c923b3ec9cb33a7dd
parentf02dbbe1ae02c3258fced7b7a75d35d7745cc02a (diff)
downloaddjango-8c054ed71d579aef53e074fcdaea56f110f1764e.tar.gz
Fixed #27108 -- Displayed collectstatic's delete/overwrite warnings only if some files exist in STATIC_ROOT.
-rw-r--r--django/contrib/staticfiles/management/commands/collectstatic.py28
-rw-r--r--tests/staticfiles_tests/test_management.py21
2 files changed, 38 insertions, 11 deletions
diff --git a/django/contrib/staticfiles/management/commands/collectstatic.py b/django/contrib/staticfiles/management/commands/collectstatic.py
index db29ff73cc..ef3bb67d7e 100644
--- a/django/contrib/staticfiles/management/commands/collectstatic.py
+++ b/django/contrib/staticfiles/management/commands/collectstatic.py
@@ -173,22 +173,28 @@ class Command(BaseCommand):
if self.is_local_storage() and self.storage.location:
destination_path = self.storage.location
message.append(':\n\n %s\n\n' % destination_path)
+ should_warn_user = (
+ self.storage.exists(destination_path) and
+ any(self.storage.listdir(destination_path))
+ )
else:
destination_path = None
message.append('.\n\n')
+ # Destination files existence not checked; play it safe and warn.
+ should_warn_user = True
- if self.clear:
- message.append('This will DELETE ALL FILES in this location!\n')
- else:
- message.append('This will overwrite existing files!\n')
-
- message.append(
- 'Are you sure you want to do this?\n\n'
- "Type 'yes' to continue, or 'no' to cancel: "
- )
+ if self.interactive and should_warn_user:
+ if self.clear:
+ message.append('This will DELETE ALL FILES in this location!\n')
+ else:
+ message.append('This will overwrite existing files!\n')
- if self.interactive and input(''.join(message)) != 'yes':
- raise CommandError("Collecting static files cancelled.")
+ message.append(
+ 'Are you sure you want to do this?\n\n'
+ "Type 'yes' to continue, or 'no' to cancel: "
+ )
+ if input(''.join(message)) != 'yes':
+ raise CommandError("Collecting static files cancelled.")
collected = self.collect()
modified_count = len(collected['modified'])
diff --git a/tests/staticfiles_tests/test_management.py b/tests/staticfiles_tests/test_management.py
index 4cca344490..6ac9794b34 100644
--- a/tests/staticfiles_tests/test_management.py
+++ b/tests/staticfiles_tests/test_management.py
@@ -179,6 +179,7 @@ class TestCollectionClear(CollectionTestCase):
class TestInteractiveMessages(CollectionTestCase):
overwrite_warning_msg = "This will overwrite existing files!"
delete_warning_msg = "This will DELETE ALL FILES in this location!"
+ files_copied_msg = "static files copied"
@staticmethod
def mock_input(stdout):
@@ -209,6 +210,26 @@ class TestInteractiveMessages(CollectionTestCase):
self.assertIn(self.overwrite_warning_msg, output)
self.assertNotIn(self.delete_warning_msg, output)
+ def test_no_warning_when_staticdir_does_not_exist(self):
+ stdout = six.StringIO()
+ shutil.rmtree(six.text_type(settings.STATIC_ROOT))
+ call_command('collectstatic', interactive=True, stdout=stdout)
+ output = force_text(stdout.getvalue())
+ self.assertNotIn(self.overwrite_warning_msg, output)
+ self.assertNotIn(self.delete_warning_msg, output)
+ self.assertIn(self.files_copied_msg, output)
+
+ def test_no_warning_for_empty_staticdir(self):
+ stdout = six.StringIO()
+ static_dir = tempfile.mkdtemp(prefix='collectstatic_empty_staticdir_test')
+ with override_settings(STATIC_ROOT=static_dir):
+ call_command('collectstatic', interactive=True, stdout=stdout)
+ shutil.rmtree(six.text_type(static_dir))
+ output = force_text(stdout.getvalue())
+ self.assertNotIn(self.overwrite_warning_msg, output)
+ self.assertNotIn(self.delete_warning_msg, output)
+ self.assertIn(self.files_copied_msg, output)
+
class TestCollectionExcludeNoDefaultIgnore(TestDefaults, CollectionTestCase):
"""