TMPDIR="$(test_tmp)" t/test-rm-between-index-and-save.sh
TMPDIR="$(test_tmp)" t/test-command-without-init-fails.sh
TMPDIR="$(test_tmp)" t/test-redundant-saves.sh
- TMPDIR="$(test_tmp)" t/test-save-restore-exclude-rx.sh
+ TMPDIR="$(test_tmp)" t/test-save-restore-excludes.sh
TMPDIR="$(test_tmp)" t/test-save-strip-graft.sh
TMPDIR="$(test_tmp)" t/test-import-rdiff-backup.sh
TMPDIR="$(test_tmp)" t/test.sh
+++ /dev/null
-#!/usr/bin/env bash
-. ./wvtest-bup.sh
-
-set -o pipefail
-
-top="$(WVPASS pwd)" || exit $?
-tmpdir="$(WVPASS wvmktempdir)" || exit $?
-
-export BUP_DIR="$tmpdir/bup"
-export GIT_DIR="$tmpdir/bup"
-
-bup() { "$top/bup" "$@"; }
-
-WVPASS bup init
-WVPASS cd "$tmpdir"
-
-
-# bup index --exclude-rx ...
-# ==========================
-
-WVSTART "index --exclude-rx '^/foo' (root anchor)"
-WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
-WVPASS bup init
-WVPASS mkdir src
-WVPASS touch src/a
-WVPASS touch src/b
-WVPASS mkdir src/sub1
-WVPASS mkdir src/sub2
-WVPASS touch src/sub1/a
-WVPASS touch src/sub2/b
-WVPASS bup index -u src --exclude-rx "^$(pwd)/src/sub1/"
-WVPASS bup save --strip -n bupdir src
-WVPASS bup restore -C buprestore.tmp /bupdir/latest/
-actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
-WVPASSEQ "$actual" ".
-./a
-./b
-./sub2
-./sub2/b"
-
-WVSTART "index --exclude-rx '/foo$' (non-dir, tail anchor)"
-WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
-WVPASS bup init
-WVPASS mkdir src
-WVPASS touch src/a
-WVPASS touch src/b
-WVPASS touch src/foo
-WVPASS mkdir src/sub
-WVPASS mkdir src/sub/foo
-WVPASS touch src/sub/foo/a
-WVPASS bup index -u src --exclude-rx '/foo$'
-WVPASS bup save --strip -n bupdir src
-WVPASS bup restore -C buprestore.tmp /bupdir/latest/
-actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
-WVPASSEQ "$actual" ".
-./a
-./b
-./sub
-./sub/foo
-./sub/foo/a"
-
-WVSTART "index --exclude-rx '/foo/$' (dir, tail anchor)"
-WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
-WVPASS bup init
-WVPASS mkdir src
-WVPASS touch src/a
-WVPASS touch src/b
-WVPASS touch src/foo
-WVPASS mkdir src/sub
-WVPASS mkdir src/sub/foo
-WVPASS touch src/sub/foo/a
-WVPASS bup index -u src --exclude-rx '/foo/$'
-WVPASS bup save --strip -n bupdir src
-WVPASS bup restore -C buprestore.tmp /bupdir/latest/
-actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
-WVPASSEQ "$actual" ".
-./a
-./b
-./foo
-./sub"
-
-WVSTART "index --exclude-rx '/foo/.' (dir content)"
-WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
-WVPASS bup init
-WVPASS mkdir src
-WVPASS touch src/a
-WVPASS touch src/b
-WVPASS touch src/foo
-WVPASS mkdir src/sub
-WVPASS mkdir src/sub/foo
-WVPASS touch src/sub/foo/a
-WVPASS bup index -u src --exclude-rx '/foo/.'
-WVPASS bup save --strip -n bupdir src
-WVPASS bup restore -C buprestore.tmp /bupdir/latest/
-actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
-WVPASSEQ "$actual" ".
-./a
-./b
-./foo
-./sub
-./sub/foo"
-
-
-# bup index --exclude-rx-from ...
-# ===============================
-WVSTART "index --exclude-rx-from"
-WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
-WVPASS bup init
-WVPASS mkdir src
-WVPASS touch src/a
-WVPASS touch src/b
-WVPASS mkdir src/sub1
-WVPASS mkdir src/sub2
-WVPASS touch src/sub1/a
-WVPASS touch src/sub2/b
-WVPASS echo "^$(pwd)/src/sub1/" > exclude-rx-file
-WVPASS bup index -u src --exclude-rx-from exclude-rx-file
-WVPASS bup save --strip -n bupdir src
-WVPASS bup restore -C buprestore.tmp /bupdir/latest/
-actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
-WVPASSEQ "$actual" ".
-./a
-./b
-./sub2
-./sub2/b"
-
-
-# bup restore --exclude-rx ...
-# ============================
-
-WVSTART "restore --exclude-rx '^/foo' (root anchor)"
-WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
-WVPASS bup init
-WVPASS mkdir src
-WVPASS touch src/a
-WVPASS touch src/b
-WVPASS mkdir src/sub1
-WVPASS mkdir src/sub2
-WVPASS touch src/sub1/a
-WVPASS touch src/sub2/b
-WVPASS bup index -u src
-WVPASS bup save --strip -n bupdir src
-WVPASS bup restore -C buprestore.tmp --exclude-rx "^/sub1/" /bupdir/latest/
-actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
-WVPASSEQ "$actual" ".
-./a
-./b
-./sub2
-./sub2/b"
-
-WVSTART "restore --exclude-rx '/foo$' (non-dir, tail anchor)"
-WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
-WVPASS bup init
-WVPASS mkdir src
-WVPASS touch src/a
-WVPASS touch src/b
-WVPASS touch src/foo
-WVPASS mkdir src/sub
-WVPASS mkdir src/sub/foo
-WVPASS touch src/sub/foo/a
-WVPASS bup index -u src
-WVPASS bup save --strip -n bupdir src
-WVPASS bup restore -C buprestore.tmp --exclude-rx '/foo$' /bupdir/latest/
-actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
-WVPASSEQ "$actual" ".
-./a
-./b
-./sub
-./sub/foo
-./sub/foo/a"
-
-WVSTART "restore --exclude-rx '/foo/$' (dir, tail anchor)"
-WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
-WVPASS bup init
-WVPASS mkdir src
-WVPASS touch src/a
-WVPASS touch src/b
-WVPASS touch src/foo
-WVPASS mkdir src/sub
-WVPASS mkdir src/sub/foo
-WVPASS touch src/sub/foo/a
-WVPASS bup index -u src
-WVPASS bup save --strip -n bupdir src
-WVPASS bup restore -C buprestore.tmp --exclude-rx '/foo/$' /bupdir/latest/
-actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
-WVPASSEQ "$actual" ".
-./a
-./b
-./foo
-./sub"
-
-WVSTART "restore --exclude-rx '/foo/.' (dir content)"
-WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
-WVPASS bup init
-WVPASS mkdir src
-WVPASS touch src/a
-WVPASS touch src/b
-WVPASS touch src/foo
-WVPASS mkdir src/sub
-WVPASS mkdir src/sub/foo
-WVPASS touch src/sub/foo/a
-WVPASS bup index -u src
-WVPASS bup save --strip -n bupdir src
-WVPASS bup restore -C buprestore.tmp --exclude-rx '/foo/.' /bupdir/latest/
-actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
-WVPASSEQ "$actual" ".
-./a
-./b
-./foo
-./sub
-./sub/foo"
-
-
-# bup restore --exclude-rx-from ...
-# =================================
-
-WVSTART "restore --exclude-rx-from"
-WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
-WVPASS bup init
-WVPASS mkdir src
-WVPASS touch src/a
-WVPASS touch src/b
-WVPASS mkdir src/sub1
-WVPASS mkdir src/sub2
-WVPASS touch src/sub1/a
-WVPASS touch src/sub2/b
-WVPASS bup index -u src
-WVPASS bup save --strip -n bupdir src
-WVPASS echo "^/sub1/" > exclude-rx-file
-WVPASS bup restore -C buprestore.tmp \
- --exclude-rx-from exclude-rx-file /bupdir/latest/
-actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
-WVPASSEQ "$actual" ".
-./a
-./b
-./sub2
-./sub2/b"
-
-WVPASS rm -rf "$tmpdir"
--- /dev/null
+#!/usr/bin/env bash
+. ./wvtest-bup.sh
+. t/lib.sh
+
+set -o pipefail
+
+top="$(WVPASS pwd)" || exit $?
+tmpdir="$(WVPASS wvmktempdir)" || exit $?
+
+export BUP_DIR="$tmpdir/bup"
+export GIT_DIR="$tmpdir/bup"
+
+bup() { "$top/bup" "$@"; }
+
+WVPASS cd "$tmpdir"
+
+
+WVSTART "index excludes bupdir"
+WVPASS force-delete src "$BUP_DIR"
+WVPASS bup init
+WVPASS mkdir src
+WVPASS touch src/a
+WVPASS bup random 128k >src/b
+WVPASS mkdir src/d src/d/e
+WVPASS bup random 512 >src/f
+WVPASS bup index -ux src
+WVPASS bup save -n exclude-bupdir src
+WVPASSEQ "$(bup ls -AF "exclude-bupdir/latest/$tmpdir/src/")" "a
+b
+d/
+f"
+
+
+WVSTART "index --exclude"
+WVPASS force-delete src "$BUP_DIR"
+WVPASS bup init
+WVPASS mkdir src
+WVPASS touch src/a
+WVPASS bup random 128k >src/b
+WVPASS mkdir src/d src/d/e
+WVPASS bup random 512 >src/f
+WVPASS bup random 512 >src/j
+WVPASS bup index -ux --exclude src/d --exclude src/j src
+WVPASS bup save -n exclude src
+WVPASSEQ "$(bup ls "exclude/latest/$tmpdir/src/")" "a
+b
+f"
+WVPASS mkdir src/g src/h
+WVPASS bup index -ux --exclude src/d --exclude $tmpdir/src/g --exclude src/h \
+ --exclude "$tmpdir/src/j" src
+WVPASS bup save -n exclude src
+WVPASSEQ "$(bup ls "exclude/latest/$tmpdir/src/")" "a
+b
+f"
+
+
+WVSTART "index --exclude-from"
+WVPASS force-delete src "$BUP_DIR"
+WVPASS bup init
+WVPASS mkdir src
+WVPASS echo "src/d
+ $tmpdir/src/g
+src/h
+src/i" > exclude-list
+WVPASS touch src/a
+WVPASS bup random 128k >src/b
+WVPASS mkdir src/d src/d/e
+WVPASS bup random 512 >src/f
+WVPASS mkdir src/g src/h
+WVPASS bup random 128k > src/i
+WVPASS bup index -ux --exclude-from exclude-list src
+WVPASS bup save -n exclude-from src
+WVPASSEQ "$(bup ls "exclude-from/latest/$tmpdir/src/")" "a
+b
+f"
+WVPASS rm exclude-list
+
+
+# bup index --exclude-rx ...
+# ==========================
+
+WVSTART "index --exclude-rx '^/foo' (root anchor)"
+WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
+WVPASS bup init
+WVPASS mkdir src
+WVPASS touch src/a
+WVPASS touch src/b
+WVPASS mkdir src/sub1
+WVPASS mkdir src/sub2
+WVPASS touch src/sub1/a
+WVPASS touch src/sub2/b
+WVPASS bup index -u src --exclude-rx "^$(pwd)/src/sub1/"
+WVPASS bup save --strip -n bupdir src
+WVPASS bup restore -C buprestore.tmp /bupdir/latest/
+actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
+WVPASSEQ "$actual" ".
+./a
+./b
+./sub2
+./sub2/b"
+
+WVSTART "index --exclude-rx '/foo$' (non-dir, tail anchor)"
+WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
+WVPASS bup init
+WVPASS mkdir src
+WVPASS touch src/a
+WVPASS touch src/b
+WVPASS touch src/foo
+WVPASS mkdir src/sub
+WVPASS mkdir src/sub/foo
+WVPASS touch src/sub/foo/a
+WVPASS bup index -u src --exclude-rx '/foo$'
+WVPASS bup save --strip -n bupdir src
+WVPASS bup restore -C buprestore.tmp /bupdir/latest/
+actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
+WVPASSEQ "$actual" ".
+./a
+./b
+./sub
+./sub/foo
+./sub/foo/a"
+
+WVSTART "index --exclude-rx '/foo/$' (dir, tail anchor)"
+WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
+WVPASS bup init
+WVPASS mkdir src
+WVPASS touch src/a
+WVPASS touch src/b
+WVPASS touch src/foo
+WVPASS mkdir src/sub
+WVPASS mkdir src/sub/foo
+WVPASS touch src/sub/foo/a
+WVPASS bup index -u src --exclude-rx '/foo/$'
+WVPASS bup save --strip -n bupdir src
+WVPASS bup restore -C buprestore.tmp /bupdir/latest/
+actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
+WVPASSEQ "$actual" ".
+./a
+./b
+./foo
+./sub"
+
+WVSTART "index --exclude-rx '/foo/.' (dir content)"
+WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
+WVPASS bup init
+WVPASS mkdir src
+WVPASS touch src/a
+WVPASS touch src/b
+WVPASS touch src/foo
+WVPASS mkdir src/sub
+WVPASS mkdir src/sub/foo
+WVPASS touch src/sub/foo/a
+WVPASS bup index -u src --exclude-rx '/foo/.'
+WVPASS bup save --strip -n bupdir src
+WVPASS bup restore -C buprestore.tmp /bupdir/latest/
+actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
+WVPASSEQ "$actual" ".
+./a
+./b
+./foo
+./sub
+./sub/foo"
+
+
+# bup index --exclude-rx-from ...
+# ===============================
+WVSTART "index --exclude-rx-from"
+WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
+WVPASS bup init
+WVPASS mkdir src
+WVPASS touch src/a
+WVPASS touch src/b
+WVPASS mkdir src/sub1
+WVPASS mkdir src/sub2
+WVPASS touch src/sub1/a
+WVPASS touch src/sub2/b
+WVPASS echo "^$(pwd)/src/sub1/" > exclude-rx-file
+WVPASS bup index -u src --exclude-rx-from exclude-rx-file
+WVPASS bup save --strip -n bupdir src
+WVPASS bup restore -C buprestore.tmp /bupdir/latest/
+actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
+WVPASSEQ "$actual" ".
+./a
+./b
+./sub2
+./sub2/b"
+
+
+# bup restore --exclude-rx ...
+# ============================
+
+WVSTART "restore --exclude-rx '^/foo' (root anchor)"
+WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
+WVPASS bup init
+WVPASS mkdir src
+WVPASS touch src/a
+WVPASS touch src/b
+WVPASS mkdir src/sub1
+WVPASS mkdir src/sub2
+WVPASS touch src/sub1/a
+WVPASS touch src/sub2/b
+WVPASS bup index -u src
+WVPASS bup save --strip -n bupdir src
+WVPASS bup restore -C buprestore.tmp --exclude-rx "^/sub1/" /bupdir/latest/
+actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
+WVPASSEQ "$actual" ".
+./a
+./b
+./sub2
+./sub2/b"
+
+WVSTART "restore --exclude-rx '/foo$' (non-dir, tail anchor)"
+WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
+WVPASS bup init
+WVPASS mkdir src
+WVPASS touch src/a
+WVPASS touch src/b
+WVPASS touch src/foo
+WVPASS mkdir src/sub
+WVPASS mkdir src/sub/foo
+WVPASS touch src/sub/foo/a
+WVPASS bup index -u src
+WVPASS bup save --strip -n bupdir src
+WVPASS bup restore -C buprestore.tmp --exclude-rx '/foo$' /bupdir/latest/
+actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
+WVPASSEQ "$actual" ".
+./a
+./b
+./sub
+./sub/foo
+./sub/foo/a"
+
+WVSTART "restore --exclude-rx '/foo/$' (dir, tail anchor)"
+WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
+WVPASS bup init
+WVPASS mkdir src
+WVPASS touch src/a
+WVPASS touch src/b
+WVPASS touch src/foo
+WVPASS mkdir src/sub
+WVPASS mkdir src/sub/foo
+WVPASS touch src/sub/foo/a
+WVPASS bup index -u src
+WVPASS bup save --strip -n bupdir src
+WVPASS bup restore -C buprestore.tmp --exclude-rx '/foo/$' /bupdir/latest/
+actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
+WVPASSEQ "$actual" ".
+./a
+./b
+./foo
+./sub"
+
+WVSTART "restore --exclude-rx '/foo/.' (dir content)"
+WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
+WVPASS bup init
+WVPASS mkdir src
+WVPASS touch src/a
+WVPASS touch src/b
+WVPASS touch src/foo
+WVPASS mkdir src/sub
+WVPASS mkdir src/sub/foo
+WVPASS touch src/sub/foo/a
+WVPASS bup index -u src
+WVPASS bup save --strip -n bupdir src
+WVPASS bup restore -C buprestore.tmp --exclude-rx '/foo/.' /bupdir/latest/
+actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
+WVPASSEQ "$actual" ".
+./a
+./b
+./foo
+./sub
+./sub/foo"
+
+
+# bup restore --exclude-rx-from ...
+# =================================
+
+WVSTART "restore --exclude-rx-from"
+WVPASS rm -rf src "$BUP_DIR" buprestore.tmp
+WVPASS bup init
+WVPASS mkdir src
+WVPASS touch src/a
+WVPASS touch src/b
+WVPASS mkdir src/sub1
+WVPASS mkdir src/sub2
+WVPASS touch src/sub1/a
+WVPASS touch src/sub2/b
+WVPASS bup index -u src
+WVPASS bup save --strip -n bupdir src
+WVPASS echo "^/sub1/" > exclude-rx-file
+WVPASS bup restore -C buprestore.tmp \
+ --exclude-rx-from exclude-rx-file /bupdir/latest/
+actual="$(WVPASS cd buprestore.tmp; WVPASS find . | WVPASS sort)" || exit $?
+WVPASSEQ "$actual" ".
+./a
+./b
+./sub2
+./sub2/b"
+
+WVPASS rm -rf "$tmpdir"
WVFAIL bup fsck --quick -r # still fails because par2 was missing
fi
-WVSTART "exclude-bupdir"
-D=exclude-bupdir.tmp
-WVPASS force-delete $D
-WVPASS mkdir $D
-export BUP_DIR="$D/.bup"
-WVPASS bup init
-WVPASS touch $D/a
-WVPASS bup random 128k >$D/b
-WVPASS mkdir $D/d $D/d/e
-WVPASS bup random 512 >$D/f
-WVPASS bup index -ux $D
-WVPASS bup save -n exclude-bupdir $D
-WVPASSEQ "$(bup ls -AF exclude-bupdir/latest/$TOP/$D/)" "a
-b
-d/
-f"
-
-WVSTART "exclude"
-(
- D=exclude.tmp
- WVPASS force-delete $D
- WVPASS mkdir $D
- export BUP_DIR="$D/.bup"
- WVPASS bup init
- WVPASS touch $D/a
- WVPASS bup random 128k >$D/b
- WVPASS mkdir $D/d $D/d/e
- WVPASS bup random 512 >$D/f
- WVPASS bup random 512 >$D/j
- WVPASS bup index -ux --exclude $D/d --exclude $D/j $D
- WVPASS bup save -n exclude $D
- WVPASSEQ "$(bup ls exclude/latest/$TOP/$D/)" "a
-b
-f"
- WVPASS mkdir $D/g $D/h
- WVPASS bup index -ux --exclude $D/d --exclude $TOP/$D/g --exclude $D/h \
- --exclude $TOP/$D/j $D
- WVPASS bup save -n exclude $D
- WVPASSEQ "$(bup ls exclude/latest/$TOP/$D/)" "a
-b
-f"
-) || exit $?
-
-WVSTART "exclude-from"
-(
- D=exclude-fromdir.tmp
- EXCLUDE_FILE=exclude-from.tmp
- WVPASS echo "$D/d
- $TOP/$D/g
-$D/h
-$D/i" > $EXCLUDE_FILE
- WVPASS force-delete $D
- WVPASS mkdir $D
- export BUP_DIR="$D/.bup"
- WVPASS bup init
- WVPASS touch $D/a
- WVPASS bup random 128k >$D/b
- WVPASS mkdir $D/d $D/d/e
- WVPASS bup random 512 >$D/f
- WVPASS mkdir $D/g $D/h
- WVPASS bup random 128k > $D/i
- WVPASS bup index -ux --exclude-from $EXCLUDE_FILE $D
- WVPASS bup save -n exclude-from $D
- WVPASSEQ "$(bup ls exclude-from/latest/$TOP/$D/)" "a
-b
-f"
- WVPASS rm $EXCLUDE_FILE
-) || exit $?
WVSTART "save (no index)"
(