Merge pull request #9033 from ThomasWaldmann/fix-9032

create: add exception handler for NODUMP excluded dirs, fixes #9032
This commit is contained in:
TW 2025-10-02 13:49:33 +02:00 committed by GitHub
commit 6176019550
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 1 deletions

View file

@ -510,7 +510,13 @@ class CreateMixIn:
return
if not recurse_excluded_dir:
if not dry_run:
status = fso.process_dir_with_fd(path=path, fd=child_fd, st=st, strip_prefix=strip_prefix)
try:
status = fso.process_dir_with_fd(
path=path, fd=child_fd, st=st, strip_prefix=strip_prefix
)
except BackupItemExcluded:
status = "-" # excluded (dir)
recurse = False
else:
status = "+" # included (dir)
if recurse:

View file

@ -1065,3 +1065,23 @@ def test_create_with_compression_algorithms(archivers, request):
for i in range(count):
os.unlink(os.path.join(archiver.input_path, f"zeros_{i}"))
os.unlink(os.path.join(archiver.input_path, f"random_{i}"))
def test_exclude_nodump_dir_with_file(archivers, request):
"""A directory flagged NODUMP and its contents must not be archived."""
archiver = request.getfixturevalue(archivers)
if not has_lchflags:
pytest.skip("platform does not support setting UF_NODUMP")
# Prepare input tree: input/nd directory (NODUMP) containing a file.
create_regular_file(archiver.input_path, "nd/file_in_ndir", contents=b"hello")
platform.set_flags(os.path.join(archiver.input_path, "nd"), stat.UF_NODUMP)
# Create repo and archive
cmd(archiver, "repo-create", RK_ENCRYPTION)
cmd(archiver, "create", "test", "input")
# Verify: neither the directory nor its contained file are present in the archive
list_output = cmd(archiver, "list", "test", "--short")
assert "input/nd\n" not in list_output
assert "input/nd/file_in_ndir\n" not in list_output