mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-08-14 00:26:21 +00:00
Fix: zip exports not respecting the --delete option (#5245)
This commit is contained in:
@@ -5,6 +5,7 @@ import shutil
|
||||
import tempfile
|
||||
import time
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
import tqdm
|
||||
from django.conf import settings
|
||||
@@ -172,14 +173,14 @@ class Command(BaseCommand):
|
||||
self.delete: bool = options["delete"]
|
||||
self.no_archive: bool = options["no_archive"]
|
||||
self.no_thumbnail: bool = options["no_thumbnail"]
|
||||
zip_export: bool = options["zip"]
|
||||
self.zip_export: bool = options["zip"]
|
||||
|
||||
# If zipping, save the original target for later and
|
||||
# get a temporary directory for the target instead
|
||||
temp_dir = None
|
||||
original_target = None
|
||||
if zip_export:
|
||||
original_target = self.target
|
||||
self.original_target: Optional[Path] = None
|
||||
if self.zip_export:
|
||||
self.original_target = self.target
|
||||
|
||||
os.makedirs(settings.SCRATCH_DIR, exist_ok=True)
|
||||
temp_dir = tempfile.TemporaryDirectory(
|
||||
@@ -203,10 +204,10 @@ class Command(BaseCommand):
|
||||
|
||||
# We've written everything to the temporary directory in this case,
|
||||
# now make an archive in the original target, with all files stored
|
||||
if zip_export:
|
||||
if self.zip_export:
|
||||
shutil.make_archive(
|
||||
os.path.join(
|
||||
original_target,
|
||||
self.original_target,
|
||||
options["zip_name"],
|
||||
),
|
||||
format="zip",
|
||||
@@ -215,7 +216,7 @@ class Command(BaseCommand):
|
||||
|
||||
finally:
|
||||
# Always cleanup the temporary directory, if one was created
|
||||
if zip_export and temp_dir is not None:
|
||||
if self.zip_export and temp_dir is not None:
|
||||
temp_dir.cleanup()
|
||||
|
||||
def dump(self, progress_bar_disable=False):
|
||||
@@ -466,14 +467,21 @@ class Command(BaseCommand):
|
||||
|
||||
if self.delete:
|
||||
# 5. Remove files which we did not explicitly export in this run
|
||||
if not self.zip_export:
|
||||
for f in self.files_in_export_dir:
|
||||
f.unlink()
|
||||
|
||||
for f in self.files_in_export_dir:
|
||||
f.unlink()
|
||||
|
||||
delete_empty_directories(
|
||||
f.parent,
|
||||
self.target,
|
||||
)
|
||||
delete_empty_directories(
|
||||
f.parent,
|
||||
self.target,
|
||||
)
|
||||
else:
|
||||
# 5. Remove anything in the original location (before moving the zip)
|
||||
for item in self.original_target.glob("*"):
|
||||
if item.is_dir():
|
||||
shutil.rmtree(item)
|
||||
else:
|
||||
item.unlink()
|
||||
|
||||
def check_and_copy(self, source, source_checksum, target: Path):
|
||||
if target in self.files_in_export_dir:
|
||||
|
Reference in New Issue
Block a user