diff --git a/docs/getting_started.rst b/docs/getting_started.rst index cd186a1c..a0975bd5 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started.rst @@ -234,5 +234,3 @@ Or run a simple web server using Python:: cd output && python -m SimpleHTTPServer -(Tip: If using the latter method in conjunction with the auto-reload feature, -ensure that ``DELETE_OUTPUT_DIRECTORY`` is set to ``False`` in your settings file.) diff --git a/docs/settings.rst b/docs/settings.rst index 65561d5d..c5aa7f4e 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -37,8 +37,8 @@ Setting name (default value) What doe timestamp information (mtime) if it can't get date information from the metadata. `JINJA_EXTENSIONS` (``[]``) A list of any Jinja2 extensions you want to use. -`DELETE_OUTPUT_DIRECTORY` (``False``) Delete the output directory as well as - the generated files. +`DELETE_OUTPUT_DIRECTORY` (``False``) Delete the contents of the output directory before + generating new files. `LOCALE` (''[#]_) Change the locale. A list of locales can be provided here or a single string representing one locale. When providing a list, all the locales will be tried diff --git a/pelican/utils.py b/pelican/utils.py index 0940bf72..a1c40077 100644 --- a/pelican/utils.py +++ b/pelican/utils.py @@ -92,10 +92,22 @@ def clean_output_dir(path): """Remove all the files from the output directory""" # remove all the existing content from the output folder - try: - shutil.rmtree(path) - except Exception: - pass + for filename in os.listdir(path): + file = os.path.join(path, filename) + if os.path.isdir(file): + logger.debug("Deleting directory %s" % file) + try: + shutil.rmtree(file) + except Exception, e: + logger.error("Unable to delete directory %s; %e" % file, e) + elif os.path.isfile(file) or os.path.islink(file): + logger.debug("Deleting file/link %s" % file) + try: + os.remove(file) + except Exception, e: + logger.error("Unable to delete file %s; %e" % file, e) + else: + logger.error("Unable to delete %s, file type unknown" % file) def get_relative_path(filename): diff --git a/tests/test_utils.py b/tests/test_utils.py index e738e295..d2f44131 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import shutil import os import datetime import time @@ -86,3 +87,13 @@ class TestUtils(unittest.TestCase): changed = utils.files_changed(path, 'rst') self.assertEquals(changed, True) self.assertAlmostEqual(utils.LAST_MTIME, t, delta=1) + + def test_clean_output_dir(self): + test_directory = os.path.join(os.path.dirname(__file__), 'clean_output') + content = os.path.join(os.path.dirname(__file__), 'content') + shutil.copytree(content, test_directory) + utils.clean_output_dir(test_directory) + self.assertTrue(os.path.isdir(test_directory)) + self.assertListEqual([], os.listdir(test_directory)) + shutil.rmtree(test_directory) +