--- /dev/null
+#!/bin/bash
+#
+# List and fetch backups.
+
+CONNSTR="9248@usw-s009.rsync.net"
+RESTORE_LOC=/vicepa/hcoop-backups/restored
+
+function get() {
+ if test -n "$3" || test -z "$2"; then
+ echo "Error: Invalid number of arguments for 'get' command."
+ echo
+ usage
+ fi
+ local date=$1
+ local file=$2
+ scp "$CONNSTR:$date/$file" "$RESTORE_LOC/$date-$file"
+ local stat=$?
+ echo
+ if test $stat -eq 0; then
+ echo "Get succeeded. You may now run:"
+ echo " backup-manager restore $date '$file' VOLUME-NAME"
+ echo "to restore the file into an AFS volume."
+ else
+ echo "Error: Get failed with status $stat."
+ exit 1
+ fi
+}
+
+function list() {
+ if test -n "$2"; then
+ echo "Error: Invalid number of arguments for 'list' command."
+ echo
+ usage
+ fi
+ local OUT=$(ssh $CONNSTR ls -l -h $@)
+ local view=
+ if test $(<<< "$OUT" wc -l) -ge $(tput lines); then
+ # if output takes up all the lines on the screen, use a pager
+ if test -n "$PAGER"; then
+ view=$PAGER
+ else
+ view=less
+ fi
+ else
+ view=cat
+ fi
+ <<< "$OUT" $view
+}
+
+function restore() {
+ if test -n "$4" || test -z "$3"; then
+ echo "Error: Invalid number of arguments for 'get' command."
+ echo
+ usage
+ fi
+ local date=$1
+ local file=$2
+ local volname=$3
+ file="$RESTORE_LOC/$date-$file"
+ if test ! -f "$file"; then
+ echo "Error: File '$file' does not exist."
+ exit 1
+ fi
+ vos examine "$volname" >/dev/null 2>&1
+ local stat=$?
+ if test $stat -eq 0; then
+ echo "Error: Volume '$volname' already exists."
+ exit 1
+ fi
+ < "$file" ccrypt -cdk /etc/backup-encryption-key \
+ | gunzip | vos restore deleuze /vicepa "$volname"
+ stat=$?
+ echo
+ if test $stat -eq 0; then
+ echo "Restore succeeded. You may now run:"
+ echo " fs mkm '/afs/hcoop.net/.old/$volname' '$volname'"
+ echo "to mount the restored AFS volume."
+ else
+ echo "Error: Restore failed with status $stat."
+ exit 1
+ fi
+}
+
+function quota() {
+ if test -n "$1"; then
+ echo "Error: Invalid number of arguments for 'quota' command."
+ echo
+ usage
+ fi
+ ssh $CONNSTR quota
+}
+
+function usage() {
+ echo "Usage: backup-manager [get|list|quota] [args...]"
+ echo "Commands:"
+ echo " get DATE FILE Fetch a file into $RESTORE_LOC"
+ echo " list [DATE] List dates available, or files with given date"
+ echo " quota Display info about the quota"
+ echo " restore DATE FILE VOLUME-NAME"
+ echo " Take a fetched file (referenced by DATE and" \
+ "FILE) and turn"
+ echo " it into a new AFS volume with the name" \
+ "VOLUME-NAME"
+ exit 1
+}
+
+# Dispatch
+if test -z "$1"; then
+ echo "Error: Incorrect number of arguments."
+ echo
+ usage
+fi
+
+cmd=$1
+shift
+case $cmd in
+ get) get $@ ;;
+ list) list $@ ;;
+ quota) quota $@ ;;
+ restore) restore $@ ;;
+ *)
+ echo "Error: Invalid command."
+ echo
+ usage
+ ;;
+esac