summaryrefslogtreecommitdiff
path: root/targets.py
diff options
context:
space:
mode:
Diffstat (limited to 'targets.py')
-rw-r--r--targets.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/targets.py b/targets.py
new file mode 100644
index 0000000..31964a1
--- /dev/null
+++ b/targets.py
@@ -0,0 +1,45 @@
+
+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