| 123456789101112131415161718192021222324252627282930313233343536373839404142 | 
							- #!/usr/bin/env python3
 
- # this script automatically generates the error list for the docs by
 
- # looking at the "Error" class and its subclasses.
 
- from textwrap import indent
 
- import borg.archiver  # noqa: F401 - need import to get Error subclasses.
 
- from borg.helpers import Error
 
- def subclasses(cls):
 
-     direct_subclasses = cls.__subclasses__()
 
-     return set(direct_subclasses).union([s for c in direct_subclasses for s in subclasses(c)])
 
- # 0, 1, 2 are used for success, generic warning, generic error
 
- # 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)
 
- # these classes map to rc 2
 
- generic_rc_classes = set()
 
- classes = {Error}.union(subclasses(Error))
 
- for cls in sorted(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)
 
-     elif rc == 2:
 
-         generic_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))
 
 
  |