From 8790371ac83507aff7be0d34e0a7015c675bfe7c Mon Sep 17 00:00:00 2001 From: Thomas Waldmann <tw@waldmann-edv.de> Date: Mon, 16 Sep 2024 12:01:41 +0200 Subject: [PATCH] map EISDIR to BackupPermissionError class also macOS and Linux give EISDIR, while Windows gives EPERM when trying to open a file for writing, if the filename is already taken by an existing directory. now all OSes should give the same RC in this case. --- src/borg/archive.py | 1 + src/borg/testsuite/archiver/extract_cmd.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/borg/archive.py b/src/borg/archive.py index c8a739911..9265a2e62 100644 --- a/src/borg/archive.py +++ b/src/borg/archive.py @@ -196,6 +196,7 @@ class BackupIO: if exc_type and issubclass(exc_type, OSError): E_MAP = { errno.EPERM: BackupPermissionError, + errno.EISDIR: BackupPermissionError, errno.EACCES: BackupPermissionError, errno.EBUSY: BackupPermissionError, errno.ENOENT: BackupFileNotFoundError, diff --git a/src/borg/testsuite/archiver/extract_cmd.py b/src/borg/testsuite/archiver/extract_cmd.py index b3be4d1ca..b4f8d3175 100644 --- a/src/borg/testsuite/archiver/extract_cmd.py +++ b/src/borg/testsuite/archiver/extract_cmd.py @@ -9,7 +9,7 @@ import pytest from ... import xattr from ...chunker import has_seek_hole from ...constants import * # NOQA -from ...helpers import EXIT_WARNING, BackupOSError +from ...helpers import EXIT_WARNING, BackupPermissionError from ...helpers import flags_noatime, flags_normal from .. import changedir, same_ts_ns from .. import are_symlinks_supported, are_hardlinks_supported, is_utime_fully_supported, is_birthtime_fully_supported @@ -621,7 +621,7 @@ def test_overwrite(archivers, request): os.unlink("output/input/file1") os.mkdir("output/input/file1") os.mkdir("output/input/file1/dir") - expected_ec = BackupOSError("open", OSError(21, "is a directory")).exit_code # WARNING code + expected_ec = BackupPermissionError("open", OSError(21, "is a directory")).exit_code # WARNING code if expected_ec == EXIT_ERROR: # workaround, TODO: fix it expected_ec = EXIT_WARNING with changedir("output"):