1
0
Fork 0
forked from github/pelican

Change behavior of DELETE_OUTPUT_DIRECTORY to purge contents of the directory, not the directory itself.

Added Debug level logging for each deletion
Added error level logging when a delete has an exception
Built a test case for clean_output_directory in tests.utils.py
Updated `settings` in documentation to reflect new behavior
Removed the tip from the bottom of getting started since this setting should no longer break web servers pointing to the output directory.
This commit is contained in:
tBunnyMan 2012-07-04 12:32:20 -07:00
commit d589450200
4 changed files with 29 additions and 8 deletions

View file

@ -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.)

View file

@ -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

View file

@ -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):

View file

@ -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)