1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2024-12-22 07:43:06 +00:00

extend errorlist script to warnings, update docs

This commit is contained in:
Thomas Waldmann 2023-11-15 23:01:26 +01:00
parent 982aeb56a7
commit 5168a97782
No known key found for this signature in database
GPG key ID: 243ACFA951F78E01
3 changed files with 47 additions and 11 deletions

View file

@ -707,9 +707,20 @@ Errors
Warnings
BorgWarning rc: 1
Warning: {}
FileChangedWarning rc: 100
{}: file changed while we backed it up
IncludePatternNeverMatchedWarning rc: 101
BackupExcWarning rc: 102 (needs more work!)
Include pattern '{}' never matched.
BackupWarning rc: 102
{}: {}
BackupOSWarning rc: 104
{}: {}
PermissionWarning rc: 105
{}: {}
IOWarning rc: 106
{}: {}
Operations
- cache.begin_transaction

View file

@ -5,7 +5,8 @@
from textwrap import indent
import borg.archiver # noqa: F401 - need import to get Error subclasses.
from borg.helpers import Error
from borg.constants import * # NOQA
from borg.helpers import Error, BorgWarning
def subclasses(cls):
@ -17,26 +18,46 @@ def subclasses(cls):
# 3..99 are available for specific errors
# 100..127 are available for specific warnings
# 128+ are reserved for signals
free_rcs = set(range(3, 99 + 1)) # 3 .. 99 (we only deal with errors here)
free_error_rcs = set(range(EXIT_ERROR_BASE, EXIT_WARNING_BASE)) # 3 .. 99
free_warning_rcs = set(range(EXIT_WARNING_BASE, EXIT_SIGNAL_BASE)) # 100 .. 127
# these classes map to rc 2
generic_rc_classes = set()
generic_error_rc_classes = set()
generic_warning_rc_classes = set()
classes = {Error}.union(subclasses(Error))
error_classes = {Error}.union(subclasses(Error))
for cls in sorted(classes, key=lambda cls: (cls.__module__, cls.__qualname__)):
for cls in sorted(error_classes, key=lambda cls: (cls.__module__, cls.__qualname__)):
traceback = "yes" if cls.traceback else "no"
rc = cls.exit_mcode
print(" ", cls.__qualname__, "rc:", rc, "traceback:", traceback)
print(indent(cls.__doc__, " " * 8))
if rc in free_rcs:
free_rcs.remove(rc)
if rc in free_error_rcs:
free_error_rcs.remove(rc)
elif rc == 2:
generic_rc_classes.add(cls.__qualname__)
generic_error_rc_classes.add(cls.__qualname__)
else: # rc != 2
# if we did not intentionally map this to the generic error rc, this might be an issue:
print(f"ERROR: {rc} is not a free/available RC, but either duplicate or invalid")
print()
print("free RCs:", sorted(free_rcs))
print("generic errors:", sorted(generic_rc_classes))
print("free error RCs:", sorted(free_error_rcs))
print("generic errors:", sorted(generic_error_rc_classes))
warning_classes = {BorgWarning}.union(subclasses(BorgWarning))
for cls in sorted(warning_classes, key=lambda cls: (cls.__module__, cls.__qualname__)):
rc = cls.exit_mcode
print(" ", cls.__qualname__, "rc:", rc)
print(indent(cls.__doc__, " " * 8))
if rc in free_warning_rcs:
free_warning_rcs.remove(rc)
elif rc == 1:
generic_warning_rc_classes.add(cls.__qualname__)
else: # rc != 1
# if we did not intentionally map this to the generic warning rc, this might be an issue:
print(f"ERROR: {rc} is not a free/available RC, but either duplicate or invalid")
print("\n")
print("free warning RCs:", sorted(free_warning_rcs))
print("generic warnings:", sorted(generic_warning_rc_classes))

View file

@ -135,10 +135,14 @@ def exit_code(self):
class PermissionWarning(BorgWarning):
"""{}: {}"""
exit_mcode = 105
class IOWarning(BorgWarning):
"""{}: {}"""
exit_mcode = 106