]> arthur.barton.de Git - bup.git/commitdiff
Support remote listings: bup ls -r ...
authorRob Browning <rlb@defaultvalue.org>
Sun, 8 Oct 2017 14:54:39 +0000 (09:54 -0500)
committerRob Browning <rlb@defaultvalue.org>
Mon, 18 Dec 2017 00:59:12 +0000 (18:59 -0600)
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Makefile
README.md
lib/bup/ls.py
t/test-ls [new file with mode: 0755]
t/test-ls-remote [new file with mode: 0755]
t/test-ls.sh [deleted file]

index 5c6ef899964558cf6df6ec88f80f0161c4fe33d8..66475695e97fb6d1929df2a52401a8f6297700f1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -165,7 +165,8 @@ cmdline_tests := \
   t/test-fsck.sh \
   t/test-index-clear.sh \
   t/test-index-check-device.sh \
-  t/test-ls.sh \
+  t/test-ls \
+  t/test-ls-remote \
   t/test-tz.sh \
   t/test-meta.sh \
   t/test-on.sh \
index dd5455096e5ace64e8919c713af87358d583b012..e5d0f7315392d02b8e8545885fa39be3e8e24af2 100644 (file)
--- a/README.md
+++ b/README.md
@@ -251,6 +251,10 @@ Using bup
         bup index /etc
         bup save -r SERVER: -n local-etc /etc
 
+ - See what saves are available in ~/.bup on SERVER:
+
+        bup ls -r SERVER:
+
  - Restore the remote backup to ./dest:
 
         bup restore -r SERVER: -C ./dest local-etc/latest/etc
index b59f43fb91bee3378d497faa5c224a38d3d417d2..8968d1fddfaca62b091d7af29f5695b7ec4c6ef3 100644 (file)
@@ -6,7 +6,7 @@ from stat import S_ISDIR, S_ISLNK
 import copy, locale, os.path, stat, sys, xstat
 
 from bup import metadata, options, vfs2 as vfs
-from bup.repo import LocalRepo
+from bup.repo import LocalRepo, RemoteRepo
 from helpers import columnate, istty1, last, log
 
 def item_hash(item, tree_for_commit):
@@ -51,8 +51,9 @@ def item_info(item, name,
 
 
 optspec = """
-%sls [-a] [path...]
+%sls [-r host:path] [-l] [-d] [-F] [-a] [-A] [-s] [-n] [path...]
 --
+r,remote=   remote repository path
 s,hash   show hash for each file
 commit-hash show commit hash instead of tree for commits (implies -s)
 a,all    show hidden files
@@ -106,7 +107,7 @@ def do_ls(args, default='.', onabort=None, spec_prefix=''):
                          numeric_ids = opt.numeric_ids,
                          human_readable = opt.human_readable)
 
-    repo = LocalRepo()
+    repo = RemoteRepo(opt.remote) if opt.remote else LocalRepo()
     ret = 0
     pending = []
     for path in (extra or [default]):
diff --git a/t/test-ls b/t/test-ls
new file mode 100755 (executable)
index 0000000..7fb05cf
--- /dev/null
+++ b/t/test-ls
@@ -0,0 +1,293 @@
+#!/usr/bin/env bash
+. ./wvtest-bup.sh || exit $?
+. t/lib.sh || exit $?
+
+set -o pipefail
+
+top="$(WVPASS pwd)" || exit $?
+tmpdir="$(WVPASS wvmktempdir)" || exit $?
+
+export BUP_DIR="$tmpdir/bup"
+export GIT_DIR="$tmpdir/bup"
+
+if test "$BUP_TEST_REMOTE_REPO"; then
+    ls_cmd_desc='ls -r'
+else
+    ls_cmd_desc='ls'
+fi
+    
+bup() { "$top/bup" "$@"; }
+
+bup-ls() {
+    if test "$BUP_TEST_REMOTE_REPO"; then
+        "$top/bup" ls -r "$BUP_DIR" "$@"
+    else
+        "$top/bup" ls "$@"
+    fi
+}
+
+
+export TZ=UTC
+
+WVPASS bup init
+WVPASS cd "$tmpdir"
+
+WVPASS mkdir src
+WVPASS touch src/.dotfile src/executable
+WVPASS mkfifo src/fifo
+WVPASS "$top"/t/mksock src/socket
+WVPASS bup random 1k > src/file
+WVPASS chmod u+x src/executable
+WVPASS chmod -R u=rwX,g-rwx,o-rwx .
+WVPASS touch -t 200910032348 src/.dotfile src/*
+(WVPASS cd src; WVPASS ln -s file symlink) || exit $?
+(WVPASS cd src; WVPASS ln -s not-there bad-symlink) || exit $?
+WVPASS touch -t 200910032348 src
+WVPASS touch -t 200910032348 .
+WVPASS bup index src
+WVPASS bup save -n src -d 242312160 --strip src
+WVPASS bup tag some-tag src
+
+uid="$(WVPASS id -u)" || exit $?
+gid="$(WVPASS bup-python -c 'import os; print os.stat("src").st_gid')" || exit $?
+user="$(WVPASS id -un)" || exit $?
+group="$(WVPASS bup-python -c 'import grp, os;
+print grp.getgrgid(os.stat("src").st_gid)[0]')" || exit $?
+src_commit_hash=$(git log --format=%H -n1 src)
+src_tree_hash=$(git log --format=%T -n1 src)
+
+
+WVSTART "$ls_cmd_desc (short)"
+
+(export BUP_FORCE_TTY=1; WVPASSEQ "$(WVPASS bup-ls | tr -d ' ')" src)
+
+WVPASSEQ "$(WVPASS bup-ls /)" "src"
+
+WVPASSEQ "$(WVPASS bup-ls -A /)" ".tag
+src"
+
+WVPASSEQ "$(WVPASS bup-ls -AF /)" ".tag/
+src/"
+
+WVPASSEQ "$(WVPASS bup-ls -a /)" ".
+..
+.tag
+src"
+
+WVPASSEQ "$(WVPASS bup-ls -aF /)" "./
+../
+.tag/
+src/"
+
+WVPASSEQ "$(WVPASS bup-ls /.tag)" "some-tag"
+
+WVPASSEQ "$(WVPASS bup-ls /src)" \
+"1977-09-05-125600
+latest"
+
+WVPASSEQ "$(WVPASS bup-ls src/latest)" "bad-symlink
+executable
+fifo
+file
+socket
+symlink"
+
+WVPASSEQ "$(WVPASS bup-ls -A src/latest)" ".dotfile
+bad-symlink
+executable
+fifo
+file
+socket
+symlink"
+
+WVPASSEQ "$(WVPASS bup-ls -a src/latest)" ".
+..
+.dotfile
+bad-symlink
+executable
+fifo
+file
+socket
+symlink"
+
+WVPASSEQ "$(WVPASS bup-ls -F src/latest)" "bad-symlink@
+executable*
+fifo|
+file
+socket=
+symlink@"
+
+WVPASSEQ "$(WVPASS bup-ls --file-type src/latest)" "bad-symlink@
+executable
+fifo|
+file
+socket=
+symlink@"
+
+WVPASSEQ "$(WVPASS bup-ls -d src/latest)" "src/latest"
+
+
+WVSTART "$ls_cmd_desc (long)"
+
+WVPASSEQ "$(WVPASS bup-ls -l / | tr -s ' ' ' ')" \
+"drwx------ $user/$group 0 2009-10-03 23:48 src"
+
+WVPASSEQ "$(WVPASS bup-ls -lA / | tr -s ' ' ' ')" \
+"drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag
+drwx------ $user/$group 0 2009-10-03 23:48 src"
+
+WVPASSEQ "$(WVPASS bup-ls -lAF / | tr -s ' ' ' ')" \
+"drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag/
+drwx------ $user/$group 0 2009-10-03 23:48 src/"
+
+WVPASSEQ "$(WVPASS bup-ls -la / | tr -s ' ' ' ')" \
+"drwxr-xr-x 0/0 0 1970-01-01 00:00 .
+drwxr-xr-x 0/0 0 1970-01-01 00:00 ..
+drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag
+drwx------ $user/$group 0 2009-10-03 23:48 src"
+
+WVPASSEQ "$(WVPASS bup-ls -laF / | tr -s ' ' ' ')" \
+"drwxr-xr-x 0/0 0 1970-01-01 00:00 ./
+drwxr-xr-x 0/0 0 1970-01-01 00:00 ../
+drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag/
+drwx------ $user/$group 0 2009-10-03 23:48 src/"
+
+socket_mode="$(WVPASS ls -l src/socket | cut -b -10)" || exit $?
+
+
+bad_symlink_mode="$(WVPASS ls -l src/bad-symlink | cut -b -10)" || exit $?
+
+bad_symlink_bup_info="$(WVPASS bup-ls -l src/latest | grep bad-symlink)" \
+    || exit $?
+bad_symlink_date="$(WVPASS echo "$bad_symlink_bup_info" \
+  | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')" \
+    || exit $?
+
+test "$bad_symlink_date" || exit 1
+
+if test "$(uname -s)" != NetBSD; then
+    bad_symlink_size="$(WVPASS bup-python -c "import os
+print os.lstat('src/bad-symlink').st_size")" || exit $?
+else
+    # NetBSD appears to return varying sizes, so for now, just ignore it.
+    bad_symlink_size="$(WVPASS echo "$bad_symlink_bup_info" \
+      | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $1')" \
+        || exit $?
+fi
+
+
+symlink_mode="$(WVPASS ls -l src/symlink | cut -b -10)" || exit $?
+
+symlink_bup_info="$(WVPASS bup-ls -l src/latest | grep -E '[^-]symlink')" \
+    || exit $?
+symlink_date="$(WVPASS echo "$symlink_bup_info" \
+  | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')" \
+    || exit $?
+
+test "$symlink_date" || exit 1
+
+if test "$(uname -s)" != NetBSD; then
+    symlink_size="$(WVPASS bup-python -c "import os
+print os.lstat('src/symlink').st_size")" || exit $?
+else
+    # NetBSD appears to return varying sizes, so for now, just ignore it.
+    symlink_size="$(WVPASS echo "$symlink_bup_info" \
+      | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $1')" \
+        || exit $?
+fi
+
+WVPASSEQ "$(bup-ls -l src/latest | tr -s ' ' ' ')" \
+"$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
+-rwx------ $user/$group 0 2009-10-03 23:48 executable
+prw------- $user/$group 0 2009-10-03 23:48 fifo
+-rw------- $user/$group 1024 2009-10-03 23:48 file
+$socket_mode $user/$group 0 2009-10-03 23:48 socket
+$symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
+
+WVPASSEQ "$(bup-ls -la src/latest | tr -s ' ' ' ')" \
+"drwx------ $user/$group 0 2009-10-03 23:48 .
+drwx------ $user/$group 0 2009-10-03 23:48 ..
+-rw------- $user/$group 0 2009-10-03 23:48 .dotfile
+$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
+-rwx------ $user/$group 0 2009-10-03 23:48 executable
+prw------- $user/$group 0 2009-10-03 23:48 fifo
+-rw------- $user/$group 1024 2009-10-03 23:48 file
+$socket_mode $user/$group 0 2009-10-03 23:48 socket
+$symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
+
+WVPASSEQ "$(bup-ls -lA src/latest | tr -s ' ' ' ')" \
+"-rw------- $user/$group 0 2009-10-03 23:48 .dotfile
+$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
+-rwx------ $user/$group 0 2009-10-03 23:48 executable
+prw------- $user/$group 0 2009-10-03 23:48 fifo
+-rw------- $user/$group 1024 2009-10-03 23:48 file
+$socket_mode $user/$group 0 2009-10-03 23:48 socket
+$symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
+
+WVPASSEQ "$(bup-ls -lF src/latest | tr -s ' ' ' ')" \
+"$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink@ -> not-there
+-rwx------ $user/$group 0 2009-10-03 23:48 executable*
+prw------- $user/$group 0 2009-10-03 23:48 fifo|
+-rw------- $user/$group 1024 2009-10-03 23:48 file
+$socket_mode $user/$group 0 2009-10-03 23:48 socket=
+$symlink_mode $user/$group $symlink_size $symlink_date symlink@ -> file"
+
+WVPASSEQ "$(bup-ls -l --file-type src/latest | tr -s ' ' ' ')" \
+"$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink@ -> not-there
+-rwx------ $user/$group 0 2009-10-03 23:48 executable
+prw------- $user/$group 0 2009-10-03 23:48 fifo|
+-rw------- $user/$group 1024 2009-10-03 23:48 file
+$socket_mode $user/$group 0 2009-10-03 23:48 socket=
+$symlink_mode $user/$group $symlink_size $symlink_date symlink@ -> file"
+
+WVPASSEQ "$(bup-ls -ln src/latest | tr -s ' ' ' ')" \
+"$bad_symlink_mode $uid/$gid $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
+-rwx------ $uid/$gid 0 2009-10-03 23:48 executable
+prw------- $uid/$gid 0 2009-10-03 23:48 fifo
+-rw------- $uid/$gid 1024 2009-10-03 23:48 file
+$socket_mode $uid/$gid 0 2009-10-03 23:48 socket
+$symlink_mode $uid/$gid $symlink_size $symlink_date symlink -> file"
+
+WVPASSEQ "$(bup-ls -ld "src/latest" | tr -s ' ' ' ')" \
+"drwx------ $user/$group 0 2009-10-03 23:48 src/latest"
+
+
+WVSTART "$ls_cmd_desc (backup set - long)"
+WVPASSEQ "$(bup-ls -l --numeric-ids src | cut -d' ' -f 1-2)" \
+"drwx------ $uid/$gid
+drwx------ $uid/$gid"
+
+WVPASSEQ "$(bup-ls -ds "src/latest" | tr -s ' ' ' ')" \
+"$src_tree_hash src/latest"
+
+WVPASSEQ "$(bup-ls -ds --commit-hash "src/latest" | tr -s ' ' ' ')" \
+"$src_commit_hash src/latest"
+
+
+WVSTART "$ls_cmd_desc (dates TZ != UTC)"
+export TZ=America/Chicago
+bad_symlink_date_central="$(bup-ls -l src/latest | grep bad-symlink)"
+bad_symlink_date_central="$(echo "$bad_symlink_date_central" \
+  | perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')"
+symlink_date_central="$(bup-ls -l src/latest | grep -E '[^-]symlink')"
+symlink_date_central="$(echo "$symlink_date_central" \
+  | perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')"
+WVPASSEQ "$(bup-ls -ln src/latest | tr -s ' ' ' ')" \
+"$bad_symlink_mode $uid/$gid $bad_symlink_size $bad_symlink_date_central bad-symlink -> not-there
+-rwx------ $uid/$gid 0 2009-10-03 18:48 executable
+prw------- $uid/$gid 0 2009-10-03 18:48 fifo
+-rw------- $uid/$gid 1024 2009-10-03 18:48 file
+$socket_mode $uid/$gid 0 2009-10-03 18:48 socket
+$symlink_mode $uid/$gid $symlink_size $symlink_date_central symlink -> file"
+export TZ=UTC
+
+
+WVSTART "$ls_cmd_desc bad-symlink"
+WVPASSEQ "$(bup-ls "src/latest/bad-symlink")" "src/latest/bad-symlink"
+
+WVSTART "$ls_cmd_desc -l bad-symlink"
+WVPASSEQ "$(bup-ls -l src/latest/bad-symlink | tr -s ' ' ' ')" \
+"$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date src/latest/bad-symlink -> not-there"
+
+
+WVPASS rm -rf "$tmpdir"
diff --git a/t/test-ls-remote b/t/test-ls-remote
new file mode 100755 (executable)
index 0000000..8b34caf
--- /dev/null
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+
+BUP_TEST_REMOTE_REPO=t t/test-ls
diff --git a/t/test-ls.sh b/t/test-ls.sh
deleted file mode 100755 (executable)
index ef71c19..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-#!/usr/bin/env bash
-. ./wvtest-bup.sh || exit $?
-. t/lib.sh || exit $?
-
-set -o pipefail
-
-top="$(WVPASS pwd)" || exit $?
-tmpdir="$(WVPASS wvmktempdir)" || exit $?
-
-export BUP_DIR="$tmpdir/bup"
-export GIT_DIR="$tmpdir/bup"
-
-bup() { "$top/bup" "$@"; }
-
-export TZ=UTC
-
-WVPASS bup init
-WVPASS cd "$tmpdir"
-
-WVPASS mkdir src
-WVPASS touch src/.dotfile src/executable
-WVPASS mkfifo src/fifo
-WVPASS "$top"/t/mksock src/socket
-WVPASS bup random 1k > src/file
-WVPASS chmod u+x src/executable
-WVPASS chmod -R u=rwX,g-rwx,o-rwx .
-WVPASS touch -t 200910032348 src/.dotfile src/*
-(WVPASS cd src; WVPASS ln -s file symlink) || exit $?
-(WVPASS cd src; WVPASS ln -s not-there bad-symlink) || exit $?
-WVPASS touch -t 200910032348 src
-WVPASS touch -t 200910032348 .
-WVPASS bup index src
-WVPASS bup save -n src -d 242312160 --strip src
-WVPASS bup tag some-tag src
-
-uid="$(WVPASS id -u)" || exit $?
-gid="$(WVPASS bup-python -c 'import os; print os.stat("src").st_gid')" || exit $?
-user="$(WVPASS id -un)" || exit $?
-group="$(WVPASS bup-python -c 'import grp, os;
-print grp.getgrgid(os.stat("src").st_gid)[0]')" || exit $?
-src_commit_hash=$(git log --format=%H -n1 src)
-src_tree_hash=$(git log --format=%T -n1 src)
-
-
-WVSTART "ls (short)"
-
-(export BUP_FORCE_TTY=1; WVPASSEQ "$(WVPASS bup ls | tr -d ' ')" src)
-
-WVPASSEQ "$(WVPASS bup ls /)" "src"
-
-WVPASSEQ "$(WVPASS bup ls -A /)" ".tag
-src"
-
-WVPASSEQ "$(WVPASS bup ls -AF /)" ".tag/
-src/"
-
-WVPASSEQ "$(WVPASS bup ls -a /)" ".
-..
-.tag
-src"
-
-WVPASSEQ "$(WVPASS bup ls -aF /)" "./
-../
-.tag/
-src/"
-
-WVPASSEQ "$(WVPASS bup ls /.tag)" "some-tag"
-
-WVPASSEQ "$(WVPASS bup ls /src)" \
-"1977-09-05-125600
-latest"
-
-WVPASSEQ "$(WVPASS bup ls src/latest)" "bad-symlink
-executable
-fifo
-file
-socket
-symlink"
-
-WVPASSEQ "$(WVPASS bup ls -A src/latest)" ".dotfile
-bad-symlink
-executable
-fifo
-file
-socket
-symlink"
-
-WVPASSEQ "$(WVPASS bup ls -a src/latest)" ".
-..
-.dotfile
-bad-symlink
-executable
-fifo
-file
-socket
-symlink"
-
-WVPASSEQ "$(WVPASS bup ls -F src/latest)" "bad-symlink@
-executable*
-fifo|
-file
-socket=
-symlink@"
-
-WVPASSEQ "$(WVPASS bup ls --file-type src/latest)" "bad-symlink@
-executable
-fifo|
-file
-socket=
-symlink@"
-
-WVPASSEQ "$(WVPASS bup ls -d src/latest)" "src/latest"
-
-
-WVSTART "ls (long)"
-
-WVPASSEQ "$(WVPASS bup ls -l / | tr -s ' ' ' ')" \
-"drwx------ $user/$group 0 2009-10-03 23:48 src"
-
-WVPASSEQ "$(WVPASS bup ls -lA / | tr -s ' ' ' ')" \
-"drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag
-drwx------ $user/$group 0 2009-10-03 23:48 src"
-
-WVPASSEQ "$(WVPASS bup ls -lAF / | tr -s ' ' ' ')" \
-"drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag/
-drwx------ $user/$group 0 2009-10-03 23:48 src/"
-
-WVPASSEQ "$(WVPASS bup ls -la / | tr -s ' ' ' ')" \
-"drwxr-xr-x 0/0 0 1970-01-01 00:00 .
-drwxr-xr-x 0/0 0 1970-01-01 00:00 ..
-drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag
-drwx------ $user/$group 0 2009-10-03 23:48 src"
-
-WVPASSEQ "$(WVPASS bup ls -laF / | tr -s ' ' ' ')" \
-"drwxr-xr-x 0/0 0 1970-01-01 00:00 ./
-drwxr-xr-x 0/0 0 1970-01-01 00:00 ../
-drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag/
-drwx------ $user/$group 0 2009-10-03 23:48 src/"
-
-socket_mode="$(WVPASS ls -l src/socket | cut -b -10)" || exit $?
-
-
-bad_symlink_mode="$(WVPASS ls -l src/bad-symlink | cut -b -10)" || exit $?
-
-bad_symlink_bup_info="$(WVPASS bup ls -l src/latest | grep bad-symlink)" \
-    || exit $?
-bad_symlink_date="$(WVPASS echo "$bad_symlink_bup_info" \
-  | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')" \
-    || exit $?
-
-test "$bad_symlink_date" || exit 1
-
-if test "$(uname -s)" != NetBSD; then
-    bad_symlink_size="$(WVPASS bup-python -c "import os
-print os.lstat('src/bad-symlink').st_size")" || exit $?
-else
-    # NetBSD appears to return varying sizes, so for now, just ignore it.
-    bad_symlink_size="$(WVPASS echo "$bad_symlink_bup_info" \
-      | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $1')" \
-        || exit $?
-fi
-
-
-symlink_mode="$(WVPASS ls -l src/symlink | cut -b -10)" || exit $?
-
-symlink_bup_info="$(WVPASS bup ls -l src/latest | grep -E '[^-]symlink')" \
-    || exit $?
-symlink_date="$(WVPASS echo "$symlink_bup_info" \
-  | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')" \
-    || exit $?
-
-test "$symlink_date" || exit 1
-
-if test "$(uname -s)" != NetBSD; then
-    symlink_size="$(WVPASS bup-python -c "import os
-print os.lstat('src/symlink').st_size")" || exit $?
-else
-    # NetBSD appears to return varying sizes, so for now, just ignore it.
-    symlink_size="$(WVPASS echo "$symlink_bup_info" \
-      | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $1')" \
-        || exit $?
-fi
-
-WVPASSEQ "$(bup ls -l src/latest | tr -s ' ' ' ')" \
-"$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
--rwx------ $user/$group 0 2009-10-03 23:48 executable
-prw------- $user/$group 0 2009-10-03 23:48 fifo
--rw------- $user/$group 1024 2009-10-03 23:48 file
-$socket_mode $user/$group 0 2009-10-03 23:48 socket
-$symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
-
-WVPASSEQ "$(bup ls -la src/latest | tr -s ' ' ' ')" \
-"drwx------ $user/$group 0 2009-10-03 23:48 .
-drwx------ $user/$group 0 2009-10-03 23:48 ..
--rw------- $user/$group 0 2009-10-03 23:48 .dotfile
-$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
--rwx------ $user/$group 0 2009-10-03 23:48 executable
-prw------- $user/$group 0 2009-10-03 23:48 fifo
--rw------- $user/$group 1024 2009-10-03 23:48 file
-$socket_mode $user/$group 0 2009-10-03 23:48 socket
-$symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
-
-WVPASSEQ "$(bup ls -lA src/latest | tr -s ' ' ' ')" \
-"-rw------- $user/$group 0 2009-10-03 23:48 .dotfile
-$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
--rwx------ $user/$group 0 2009-10-03 23:48 executable
-prw------- $user/$group 0 2009-10-03 23:48 fifo
--rw------- $user/$group 1024 2009-10-03 23:48 file
-$socket_mode $user/$group 0 2009-10-03 23:48 socket
-$symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
-
-WVPASSEQ "$(bup ls -lF src/latest | tr -s ' ' ' ')" \
-"$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink@ -> not-there
--rwx------ $user/$group 0 2009-10-03 23:48 executable*
-prw------- $user/$group 0 2009-10-03 23:48 fifo|
--rw------- $user/$group 1024 2009-10-03 23:48 file
-$socket_mode $user/$group 0 2009-10-03 23:48 socket=
-$symlink_mode $user/$group $symlink_size $symlink_date symlink@ -> file"
-
-WVPASSEQ "$(bup ls -l --file-type src/latest | tr -s ' ' ' ')" \
-"$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink@ -> not-there
--rwx------ $user/$group 0 2009-10-03 23:48 executable
-prw------- $user/$group 0 2009-10-03 23:48 fifo|
--rw------- $user/$group 1024 2009-10-03 23:48 file
-$socket_mode $user/$group 0 2009-10-03 23:48 socket=
-$symlink_mode $user/$group $symlink_size $symlink_date symlink@ -> file"
-
-WVPASSEQ "$(bup ls -ln src/latest | tr -s ' ' ' ')" \
-"$bad_symlink_mode $uid/$gid $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
--rwx------ $uid/$gid 0 2009-10-03 23:48 executable
-prw------- $uid/$gid 0 2009-10-03 23:48 fifo
--rw------- $uid/$gid 1024 2009-10-03 23:48 file
-$socket_mode $uid/$gid 0 2009-10-03 23:48 socket
-$symlink_mode $uid/$gid $symlink_size $symlink_date symlink -> file"
-
-WVPASSEQ "$(bup ls -ld "src/latest" | tr -s ' ' ' ')" \
-"drwx------ $user/$group 0 2009-10-03 23:48 src/latest"
-
-
-WVSTART "ls (backup set - long)"
-WVPASSEQ "$(bup ls -l --numeric-ids src | cut -d' ' -f 1-2)" \
-"drwx------ $uid/$gid
-drwx------ $uid/$gid"
-
-WVPASSEQ "$(bup ls -ds "src/latest" | tr -s ' ' ' ')" \
-"$src_tree_hash src/latest"
-
-WVPASSEQ "$(bup ls -ds --commit-hash "src/latest" | tr -s ' ' ' ')" \
-"$src_commit_hash src/latest"
-
-
-WVSTART "ls (dates TZ != UTC)"
-export TZ=America/Chicago
-bad_symlink_date_central="$(bup ls -l src/latest | grep bad-symlink)"
-bad_symlink_date_central="$(echo "$bad_symlink_date_central" \
-  | perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')"
-symlink_date_central="$(bup ls -l src/latest | grep -E '[^-]symlink')"
-symlink_date_central="$(echo "$symlink_date_central" \
-  | perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')"
-WVPASSEQ "$(bup ls -ln src/latest | tr -s ' ' ' ')" \
-"$bad_symlink_mode $uid/$gid $bad_symlink_size $bad_symlink_date_central bad-symlink -> not-there
--rwx------ $uid/$gid 0 2009-10-03 18:48 executable
-prw------- $uid/$gid 0 2009-10-03 18:48 fifo
--rw------- $uid/$gid 1024 2009-10-03 18:48 file
-$socket_mode $uid/$gid 0 2009-10-03 18:48 socket
-$symlink_mode $uid/$gid $symlink_size $symlink_date_central symlink -> file"
-export TZ=UTC
-
-
-WVSTART "ls bad-symlink"
-WVPASSEQ "$(bup ls "src/latest/bad-symlink")" "src/latest/bad-symlink"
-
-WVSTART "ls -l bad-symlink"
-WVPASSEQ "$(bup ls -l src/latest/bad-symlink | tr -s ' ' ' ')" \
-"$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date src/latest/bad-symlink -> not-there"
-
-
-WVPASS rm -rf "$tmpdir"