diff --git a/src/borg/helpers/errors.py b/src/borg/helpers/errors.py index 0aca4729..931d6daf 100644 --- a/src/borg/helpers/errors.py +++ b/src/borg/helpers/errors.py @@ -1,3 +1,4 @@ +import errno import os from ..constants import * # NOQA @@ -119,6 +120,27 @@ class BackupOSWarning(BorgWarning): exit_mcode = 104 + @property + def exit_code(self): + if not modern_ec: + return EXIT_WARNING + exc = self.args[1] + assert isinstance(exc, BackupOSError) + if exc.errno in (errno.EPERM, errno.EACCES): + return PermissionWarning.exit_mcode + elif exc.errno in (errno.EIO,): + return IOWarning.exit_mcode + else: + return self.exit_mcode + + +class PermissionWarning(BorgWarning): + exit_mcode = 105 + + +class IOWarning(BorgWarning): + exit_mcode = 106 + class BackupError(Exception): """