From b2798ecd3a1ece3ee3d693c5f9d1a74c9a5ebe9d Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Tue, 30 Sep 2025 18:20:32 +0200 Subject: [PATCH] create: add exception handler for NODUMP excluded dirs, fixes #9032 --- src/borg/archiver/create_cmd.py | 8 +++++++- src/borg/testsuite/archiver/create_cmd_test.py | 11 +++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/borg/archiver/create_cmd.py b/src/borg/archiver/create_cmd.py index 82d009148..c5616f04e 100644 --- a/src/borg/archiver/create_cmd.py +++ b/src/borg/archiver/create_cmd.py @@ -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: diff --git a/src/borg/testsuite/archiver/create_cmd_test.py b/src/borg/testsuite/archiver/create_cmd_test.py index 5b55fda11..c0543ad78 100644 --- a/src/borg/testsuite/archiver/create_cmd_test.py +++ b/src/borg/testsuite/archiver/create_cmd_test.py @@ -1073,14 +1073,9 @@ def test_exclude_nodump_dir_with_file(archivers, request): if not has_lchflags: pytest.skip("platform does not support setting UF_NODUMP") - # Prepare input tree: input/nd (NODUMP) containing a file. - ndir = os.path.join(archiver.input_path, "nd") - os.mkdir(ndir) - with open(os.path.join(ndir, "file_in_ndir"), "wb") as f: - f.write(b"hello") - - # Set NODUMP flag on the directory (Linux: chattr +d, BSD: chflags nodump) - platform.set_flags(ndir, stat.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)