from abc import ABC, abstractmethod import re import subprocess from . import repository class Target(ABC): name = None dirs = None excludes = None def __init__(self, name, dirs, excludes = None): if excludes is None: excludes = [] self.name = name self.dirs = dirs self.excludes = excludes @abstractmethod def save(self, data_dir): pass class TargetLocal(Target): def save(self, data_dir): cmd = ['bup', 'index', '--update', '--one-file-system'] cmd.extend(['--exclude=%s' % e for e in self.excludes]) cmd.extend(self.dirs) res_idx = subprocess.run(cmd, capture_output = True) cmd = ['bup', 'save', '-n', self.name] + self.dirs res_save = subprocess.run(cmd, capture_output = True) retcode = 0 output = b'' if res_idx.returncode != 0: retcode = res_idx.returncode output += res_idx.stderr + res_idx.stdout if res_save.returncode != 0: retcode = res_save.returncode output += res_save.stderr + res_save.stdout result = repository.StepResult(retcode, output) return result