summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Mayer <entroP@gmail.com>2020-04-15 14:55:41 +0200
committerJustin Mayer <entroP@gmail.com>2020-04-15 15:19:41 +0200
commit9d10abaed4c3fd208dee98ed431ab6ddfbb0d6fa (patch)
treeb218044927f47b76664a0eba1d936aa698ec9a88
parent7e52b61934b0fd2fa830125bfb1fedbddf08f11d (diff)
downloadpelican-9d10abaed4c3fd208dee98ed431ab6ddfbb0d6fa.tar.gz
Fix output directory deletion logicfix-delete-output-logic
The intention was to prevent accidental source content data loss by skipping output directory deletion if the output directory is a parent of the source content directory. But the previous implementation did so by checking path *strings*, resulting in scenarios where the following settings would erroneously skip deletion of the output directory: PATH = "/repo/docs-src/content" OUTPUT_PATH = "/repo/docs" The output directory should have been deleted but wasn't because the PATH string contains "/repo/docs". This change eschews string comparison and instead compares actual paths to ensure that the output path is not a parent of the source content directory.
-rw-r--r--pelican/__init__.py9
1 files changed, 5 insertions, 4 deletions
diff --git a/pelican/__init__.py b/pelican/__init__.py
index 97135a62..e19644e0 100644
--- a/pelican/__init__.py
+++ b/pelican/__init__.py
@@ -99,10 +99,11 @@ class Pelican(object):
) for cls in self.get_generator_classes()
]
- # erase the directory if it is not the source and if that's
- # explicitly asked
- if (self.delete_outputdir and not
- os.path.realpath(self.path).startswith(self.output_path)):
+ # Delete the output directory if (1) the appropriate setting is True
+ # and (2) that directory is not the parent of the source directory
+ if (self.delete_outputdir
+ and os.path.commonpath([self.output_path]) !=
+ os.path.commonpath([self.output_path, self.path])):
clean_output_dir(self.output_path, self.output_retention)
for p in generators: