-#!/bin/sh
+#!/usr/bin/env bash
-set -e
+set -o pipefail
+
+must() {
+ local file=${BASH_SOURCE[0]}
+ local line=${BASH_LINENO[0]}
+ "$@"
+ local rc=$?
+ if test $rc -ne 0; then
+ echo "Failed at line $line in $file" 1>&2
+ exit $rc
+ fi
+}
usage() {
echo "Usage: bup import-rdiff-backup [-n]" \
exit 128
}
-trap control_c INT
+must trap control_c INT
dry_run=
while [ "$1" = "-n" -o "$1" = "--dry-run" ]; do
$dry_run "${BUP_MAIN_EXE:=bup}" "$@"
}
-snapshot_root=$1
-branch=$2
+snapshot_root="$1"
+branch="$2"
[ -n "$snapshot_root" -a "$#" = 2 ] || usage
fi
-rdiff-backup --list-increments --parsable-output "$snapshot_root" |
+backups=$(must rdiff-backup --list-increments --parsable-output "$snapshot_root") \
+ || exit $?
+backups_count=$(echo "$backups" | must wc -l) || exit $?
+counter=1
+echo "$backups" |
while read timestamp type; do
- tmpdir=$(mktemp -d)
+ tmpdir=$(must mktemp -d import-rdiff-backup-XXXXXXX) || exit $?
+
+ echo "Importing backup from $(date -d @$timestamp +%c) " \
+ "($counter / $backups_count)" 1>&2
+ echo 1>&2
- rdiff-backup -r $timestamp "$snapshot_root" "$tmpdir"
+ echo "Restoring from rdiff-backup..." 1>&2
+ must rdiff-backup -r $timestamp "$snapshot_root" "$tmpdir"
+ echo 1>&2
- tmpidx=$(mktemp -u)
- bup index -ux -f "$tmpidx" "$tmpdir"
- bup save --strip --date="$timestamp" -f "$tmpidx" -n "$branch" "$tmpdir"
- rm -f "$tmpidx"
+ echo "Importing into bup..." 1>&2
+ TMPIDX=$(must mktemp -u import-rdiff-backup-idx-XXXXXXX) || exit $?
+ must bup index -ux -f "$tmpidx" "$tmpdir"
+ must bup save --strip --date="$timestamp" -f "$tmpidx" -n "$branch" "$tmpdir"
+ must rm -f "$tmpidx"
- rm -rf "$tmpdir"
+ must rm -rf "$tmpdir"
+ counter=$((counter+1))
+ echo 1>&2
+ echo 1>&2
done