aboutsummaryrefslogtreecommitdiff
path: root/backends/bup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'backends/bup.sh')
-rw-r--r--backends/bup.sh71
1 files changed, 71 insertions, 0 deletions
diff --git a/backends/bup.sh b/backends/bup.sh
new file mode 100644
index 0000000..6aa92b6
--- /dev/null
+++ b/backends/bup.sh
@@ -0,0 +1,71 @@
+# use first not-remote backup directory as bup's local repository
+# defaults to ".bup"
+function bup_local() {
+ for backup_dir in ${BACKUP_DIRS[*]}
+ do
+ if [[ $backup_dir != *:* ]]; then
+ echo "$backup_dir"
+ return
+ fi
+ done
+ echo ".bup"
+}
+
+function bup_init() {
+ bup -d "$(bup_local)" index "$WORLD_NAME"
+ local status=$?
+ if [ $status -ne 0 ]; then
+ log_debug "bup: no local repo found, creating..."
+ bup -d "$(bup_local)" init -r "$(bup_local)"
+ log_debug "bup: created local repo at $(bup_local)"
+ fi
+}
+
+function bup_create_backup() {
+ log_debug "bup: backup started"
+
+ bup -d "$(bup_local)" index "$WORLD_NAME"
+
+ # 0 if saved to at least one non-local repository
+ # TODO make more strict?
+ local retcode=1
+ for backup_dir in ${BACKUP_DIRS[*]}
+ do
+ log_info "bup: backing up to \"$backup_dir\""
+ # try to save to remote
+ bup -d "$(bup_local)" save -r "$backup_dir" -n "$BACKUP_NAME" "$WORLD_NAME"
+ local status=$?
+ # if failed - reinit remote and try again
+ if [ $status -ne 0 ]; then
+ log_debug "bup: failed backing up to \"$backup_dir\", reinitializing remote..."
+ bup -d "$(bup_local)" init -r "$backup_dir"
+ status=$?
+ if [ $status -eq 0 ]; then
+ log_debug "bup: created remote at \"$backup_dir\""
+ bup -d "$(bup_local)" save -r "$backup_dir" -n "$BACKUP_NAME" "$WORLD_NAME"
+ else
+ log_error "bup: failed to make remote at \"$backup_dir\", moving on"
+ fi
+ else
+ if [ ! "$backup_dir" = "$(bup_local)" ]; then
+ retcode=0
+ fi
+ fi
+ done
+
+ log_debug "bup: backup finished"
+ return $retcode
+}
+
+# server_restore relies on output format of this function
+function bup_ls() {
+ local backup_dir="$1"
+ bup -d "$(bup_local)" ls -r "$backup_dir" "$BACKUP_NAME" | sort -r
+}
+
+function bup_restore() {
+ local remote="$1"
+ local snapshot="$2"
+ local dest="$3"
+ bup -d "$(bup_local)" restore -r "$remote" --outdir "$dest" "$BACKUP_NAME/$snapshot/$PWD/."
+}