]> arthur.barton.de Git - bup.git/blobdiff - cmd/import-rdiff-backup-cmd.sh
git: remove unused _git_capture()
[bup.git] / cmd / import-rdiff-backup-cmd.sh
index 8285e0f3ce5f173dd1376db122b8f4423b2108a4..bd324029db748d37208d4287baaa8c32c5e2a156 100755 (executable)
@@ -1,6 +1,19 @@
-#!/bin/sh
+#!/usr/bin/env bash
 
-set -e
+cmd_dir="$(cd "$(dirname "$0")" && pwd)" || exit $?
+
+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]" \
@@ -9,6 +22,13 @@ usage() {
     exit 1
 }
 
+control_c() {
+    echo "bup import-rdiff-backup: signal 2 received" 1>&2
+    exit 128
+}
+
+must trap control_c INT
+
 dry_run=
 while [ "$1" = "-n" -o "$1" = "--dry-run" ]; do
     dry_run=echo
@@ -17,11 +37,11 @@ done
 
 bup()
 {
-    $dry_run "${BUP_MAIN_EXE:=bup}" "$@"
+    $dry_run "$cmd_dir/bup" "$@"
 }
 
-snapshot_root=$1
-branch=$2
+snapshot_root="$1"
+branch="$2"
 
 [ -n "$snapshot_root" -a "$#" = 2 ] || usage
 
@@ -31,16 +51,30 @@ if [ ! -e "$snapshot_root/." ]; then
 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