Sun, 25 Dec 2022 13:26:18 +0200
Prune also needs --glob-archives instead of --prefix
#!/usr/local/bin/python3 # # Borgend by Tuomo Valkonen, 2018 # # Common modules import os import sys import argparse import platform import logging # Own modules needed at this stage import borgend.branding as branding import borgend.locations as locations # # Argument processing # epilog_format=""" Configuration file location: %s Log directory: %s/ """ parser=argparse.ArgumentParser( description=branding.appname_stylised + ": BorgBackup scheduler, queue, and tray icon.", epilog=epilog_format % (locations.cfgfile, locations.logs_dir), formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument( '--no-tray', dest='notray', action='store_true', help='Do not show the tray icon') parser.add_argument( '--debug', dest='debug', action='store_true', help='Set logging level to debug') def main(): args=parser.parse_args() # Done parsing args, import our own modules, and launch everything import borgend.config as config import borgend.dreamtime as dreamtime import borgend.loggers as loggers from borgend.scheduler import Scheduler from borgend.repository import Repository from borgend.backup import Backup logger=loggers.mainlogger if args.debug: logger.setLevel(logging.DEBUG) tray = None repos=[] backups=[] try: dreamtime.start_monitoring() scheduler = Scheduler() scheduler.start() repoconfigs=config.settings['repositories'] logger.info('Initialising repositories') for i in range(len(repoconfigs)): r=Repository(i, repoconfigs[i]) repos.append(r) backupconfigs=config.settings['backups'] logger.info('Initialising backups') for i in range(len(backupconfigs)): b=Backup(i, backupconfigs[i], scheduler) backups.append(b) if args.notray or platform.system()!='Darwin': # Wait for scheduler to finish run=scheduler.join else: # This is needed for Ctrl+C to work. # TODO: proper exit handler, which seems to require # ditching/forking/extending rumps to extend the NSApp class from PyObjCTools.AppHelper import installMachInterrupt installMachInterrupt() # Start UI, and let it handle exit control from borgend.ui import BorgendTray tray=BorgendTray(backups); run=tray.run for r in repos: r.start() for b in backups: b.start() run() except Exception as err: # TODO: Should write errors here to stderr; # perhaps add an extra stderr logger for error level messages logger.exception("Exception fell through: exiting") finally: logger.debug("Exiting") for b in backups: b.terminate() for r in repos: r.terminate() if tray: tray.quit() else: logging.shutdown() if __name__ == "__main__": sys.exit(main())