#!/usr/bin/python3 import argparse import sys from bupper.repository import Repo from bupper.targets import TargetLocal # define the backup targets tgts = ( #TargetLocal('local', dirs = ['/usr/local/share']), ) def list_targets(tgts): for tgt in tgts: sys.stdout.write('%s\n' % tgt.name) # parse the commandline parser = argparse.ArgumentParser() parser.add_argument('-l', '--list-targets', action = 'store_true') parser.add_argument('targets', nargs = argparse.REMAINDER) args = parser.parse_args() if args.list_targets: list_targets(tgts) sys.exit(0) if len(args.targets) > 0: tgts_run = [] for requested in args.targets: try: tgts_run.append(next(filter(lambda tgt: tgt.name == requested, tgts))) except StopIteration: sys.stderr.write('Requested target "%s" not defined\n' % requested); sys.exit(1) else: tgts_run = tgts repo = Repo() res = repo.backup(tgts_run) if not res.all_ok: sys.stderr.write('Error while backing up:\n') for tgt, tgt_res in zip(tgts_run, res.target_results): if tgt_res.retcode == 0: continue sys.stderr.write('Backing up target "%s" failed with code %d, bup output:\n' % (tgt.name, tgt_res.retcode)) sys.stderr.write(tgt_res.output.decode('utf-8', errors = 'backslashreplace') + '\n') if res.par2_result.retcode != 0: sys.stderr.write('Generating par2 recovery information failed with code %d, bup output:\n' % (res.par2_result.retcode)) sys.stderr.write(res.par2_result.output.decode('utf-8', errors = 'backslashreplace') + '\n')