use tempfile to delete collection

This commit is contained in:
Unrud 2016-08-02 07:01:18 +02:00
parent 5a9d956b49
commit f4eb143ba8

View File

@ -580,21 +580,17 @@ class Collection(BaseCollection):
if href is None: if href is None:
# Delete the collection # Delete the collection
if os.path.isdir(self._filesystem_path): if os.path.isdir(self._filesystem_path):
parent_dir = os.path.dirname(self._filesystem_path)
try: try:
os.rmdir(self._filesystem_path) os.rmdir(self._filesystem_path)
except OSError: except OSError:
while True: with TemporaryDirectory(prefix=".Radicale.tmp-",
tmp_filesystem_path = os.path.join( dir=parent_dir) as tmp_dir:
os.path.dirname(self._filesystem_path), os.rename(self._filesystem_path, os.path.join(
".Radicale.tmp-" + hex(getrandbits(32))[2:]) tmp_dir, os.path.basename(self._filesystem_path)))
if not os.path.exists(tmp_filesystem_path): sync_directory(parent_dir)
break
os.rename(self._filesystem_path, tmp_filesystem_path)
sync_directory(os.path.dirname(self._filesystem_path))
# Deferred because it might take a long time
shutil.rmtree(tmp_filesystem_path)
else: else:
sync_directory(os.path.dirname(self._filesystem_path)) sync_directory(parent_dir)
else: else:
# Delete an item # Delete an item
if not is_safe_filesystem_path_component(href): if not is_safe_filesystem_path_component(href):