. ./wvtest-bup.sh || exit $?
. ./t/lib.sh || exit $?
-set -o pipefail
-
-# Perhaps this should check the rsync version instead, and not sure if
-# it's just darwin, or all of these.
-case "$(uname)" in
- CYGWIN*|NetBSD)
- rsx=''
- ;;
- Darwin)
- rsx=.
- ;;
- *)
- rsx=...
- ;;
-esac
-
-if test "$(uname)" = Darwin; then
- deleting=deleting
-else
- deleting="deleting "
- plusx=++
-fi
-
top="$(WVPASS pwd)" || exit $?
tmpdir="$(WVPASS wvmktempdir)" || exit $?
bup() { "$top/bup" "$@"; }
compare-trees() { "$top/t/compare-trees" "$@"; }
+wv_matches_rx()
+{
+ local caller_file=${BASH_SOURCE[0]}
+ local caller_line=${BASH_LINENO[0]}
+ local src="$caller_file:$caller_line"
+ if test $# -ne 2; then
+ echo "! $src wv_matches_rx requires 2 arguments FAILED" 1>&2
+ return
+ fi
+ local str="$1"
+ local rx="$2"
+ echo "Matching:" 1>&2 || exit $?
+ echo "$str" | sed 's/^\(.*\)/ \1/' 1>&2 || exit $?
+ echo "Against:" 1>&2 || exit $?
+ echo "$rx" | sed 's/^\(.*\)/ \1/' 1>&2 || exit $?
+ if [[ "$str" =~ ^${rx}$ ]]; then
+ echo "! $src regex matches ok" 1>&2 || exit $?
+ else
+ echo "! $src regex doesn't match FAILED" 1>&2 || exit $?
+ fi
+}
+
WVPASS bup init
WVPASS cd "$tmpdir"
# FIXME: test -n
WVPASS bup tick # Make sure we always get the timestamp changes below
WVPASS bup rm --unsafe /src
-WVPASSEQ "$(compare-trees bup/ bup-baseline/)" \
-"*$deleting logs/refs/heads/src
-*$deleting refs/heads/src
-.d..t...${rsx} logs/refs/heads/
-.d..t...${rsx} refs/heads/"
+observed="$(compare-trees bup/ bup-baseline/ | LC_ALL=C sort)" || exit $?
+wv_matches_rx "$observed" \
+'\*deleting[ ]+logs/refs/heads/src
+\*deleting[ ]+refs/heads/src(
+\.d\.\.t\.\.\.[.]*[ ]+\./)?
+\.d\.\.t\.\.\.[.]*[ ]+logs/refs/heads/
+\.d\.\.t\.\.\.[.]*[ ]+refs/heads/(
+>f\+\+\+\+\+\+\+\+\+[ ]+packed-refs)?'
WVSTART "rm /foo (one of many)"
WVPASS "$top"/t/sync-tree bup/ bup-baseline/
WVPASS bup tick # Make sure we always get the timestamp changes below
WVPASS bup rm --unsafe /src
-WVPASSEQ "$(compare-trees bup/ bup-baseline/)" \
-"*$deleting logs/refs/heads/src
-*$deleting refs/heads/src
-.d..t...${rsx} logs/refs/heads/
-.d..t...${rsx} refs/heads/"
+observed="$(compare-trees bup/ bup-baseline/ | LC_ALL=C sort)" || exit $?
+wv_matches_rx "$observed" \
+"\*deleting[ ]+logs/refs/heads/src
+\*deleting[ ]+refs/heads/src(
+\.d\.\.t\.\.\.[.]*[ ]+\./)?
+\.d\.\.t\.\.\.[.]*[ ]+logs/refs/heads/
+\.d\.\.t\.\.\.[.]*[ ]+refs/heads/(
+>f\+\+\+\+\+\+\+\+\+[ ]+packed-refs)?"
WVSTART "rm /foo /bar (multiple of many)"
WVPASS "$top"/t/sync-tree bup/ bup-baseline/
WVPASS bup tick # Make sure we always get the timestamp changes below
WVPASS bup rm --unsafe /src-2 /src-4
-WVPASSEQ "$(compare-trees bup/ bup-baseline/)" \
-"*$deleting logs/refs/heads/src-4
-*$deleting logs/refs/heads/src-2
-*$deleting refs/heads/src-4
-*$deleting refs/heads/src-2
-.d..t...${rsx} logs/refs/heads/
-.d..t...${rsx} refs/heads/"
+observed="$(compare-trees bup/ bup-baseline/ | LC_ALL=C sort)" || exit $?
+wv_matches_rx "$observed" \
+"\*deleting[ ]+logs/refs/heads/src-2
+\*deleting[ ]+logs/refs/heads/src-4
+\*deleting[ ]+refs/heads/src-2
+\*deleting[ ]+refs/heads/src-4(
+\.d\.\.t\.\.\.[.]*[ ]+\./)?
+\.d\.\.t\.\.\.[.]*[ ]+logs/refs/heads/
+\.d\.\.t\.\.\.[.]*[ ]+refs/heads/(
+>f\+\+\+\+\+\+\+\+\+[ ]+packed-refs)?"
WVSTART "rm /foo /bar (all)"
WVPASS "$top"/t/sync-tree bup/ bup-baseline/
WVPASS bup tick # Make sure we always get the timestamp changes below
WVPASS bup rm --unsafe /src /src-2 /src-3 /src-4 /src-5
-WVPASSEQ "$(compare-trees bup/ bup-baseline/)" \
-"*$deleting logs/refs/heads/src-5
-*$deleting logs/refs/heads/src-4
-*$deleting logs/refs/heads/src-3
-*$deleting logs/refs/heads/src-2
-*$deleting logs/refs/heads/src
-*$deleting refs/heads/src-5
-*$deleting refs/heads/src-4
-*$deleting refs/heads/src-3
-*$deleting refs/heads/src-2
-*$deleting refs/heads/src
-.d..t...${rsx} logs/refs/heads/
-.d..t...${rsx} refs/heads/"
+observed="$(compare-trees bup/ bup-baseline/ | LC_ALL=C sort)" || exit $?
+wv_matches_rx "$observed" \
+"\*deleting[ ]+logs/refs/heads/src
+\*deleting[ ]+logs/refs/heads/src-2
+\*deleting[ ]+logs/refs/heads/src-3
+\*deleting[ ]+logs/refs/heads/src-4
+\*deleting[ ]+logs/refs/heads/src-5
+\*deleting[ ]+refs/heads/src
+\*deleting[ ]+refs/heads/src-2
+\*deleting[ ]+refs/heads/src-3
+\*deleting[ ]+refs/heads/src-4
+\*deleting[ ]+refs/heads/src-5(
+\.d\.\.t\.\.\.[.]*[ ]+\./)?
+\.d\.\.t\.\.\.[.]*[ ]+logs/refs/heads/
+\.d\.\.t\.\.\.[.]*[ ]+refs/heads/(
+>f\+\+\+\+\+\+\+\+\+[ ]+packed-refs)?"
WVSTART "rm /foo/bar (lone save - equivalent to rm /foo)"
WVPASS echo twisty-maze > src/1
WVPASS bup index src
WVPASS bup save -n src src
-save1="$(WVPASS bup ls src | head -n 1)" || exit $?
+WVPASS bup ls src > tmp-ls
+save1="$(WVPASS head -n 1 tmp-ls)" || exit $?
WVPASS "$top"/t/sync-tree bup/ bup-baseline/
WVPASS bup tick # Make sure we always get the timestamp changes below
WVFAIL bup rm --unsafe /src/latest
WVPASS bup rm --unsafe /src/"$save1"
-WVPASSEQ "$(compare-trees bup/ bup-baseline/)" \
-"*$deleting logs/refs/heads/src
-*$deleting refs/heads/src
-.d..t...${rsx} logs/refs/heads/
-.d..t...${rsx} refs/heads/"
+observed="$(compare-trees bup/ bup-baseline/ | LC_ALL=C sort)" || exit $?
+wv_matches_rx "$observed" \
+"\*deleting[ ]+logs/refs/heads/src
+\*deleting[ ]+refs/heads/src(
+\.d\.\.t\.\.\.[.]*[ ]+\./)?
+\.d\.\.t\.\.\.[.]*[ ]+logs/refs/heads/
+\.d\.\.t\.\.\.[.]*[ ]+refs/heads/(
+>f\+\+\+\+\+\+\+\+\+[ ]+packed-refs)?"
verify-changes-caused-by-rewriting-save()
-(
- local before="$1"
- local after="$2"
- local tmpdir="$(WVPASS wvmktempdir)" || exit $?
- (WVPASS cd "$before" && WVPASS find . | WVPASS sort) > "$tmpdir/before"
- (WVPASS cd "$after" && WVPASS find . | WVPASS sort) > "$tmpdir/after"
+{
+ local before="$1" after="$2" tmpdir
+ tmpdir="$(WVPASS wvmktempdir)" || exit $?
+ (WVPASS cd "$before" && WVPASS find . | WVPASS sort) \
+ > "$tmpdir/before" || exit $?
+ (WVPASS cd "$after" && WVPASS find . | WVPASS sort) \
+ > "$tmpdir/after" || exit $?
+ local new_paths new_idx new_pack observed
new_paths="$(WVPASS comm -13 "$tmpdir/before" "$tmpdir/after")" || exit $?
- new_idx="$(echo "$new_paths" | WVPASS grep -E '^\./objects/pack/pack-.*\.idx$' | cut -b 3-)"
- new_pack="$(echo "$new_paths" | WVPASS grep -E '^\./objects/pack/pack-.*\.pack$' | cut -b 3-)"
- WVPASSEQ "$(compare-trees "$after/" "$before/")" \
-">fcst...${rsx} logs/refs/heads/src
-.d..t...${rsx} objects/
-.d..t...${rsx} objects/pack/
->fcst...${rsx} objects/pack/bup.bloom
->f+++++++${plusx} $new_idx
->f+++++++${plusx} $new_pack
-.d..t...${rsx} refs/heads/
->fc.t...${rsx} refs/heads/src"
+ new_idx="$(echo "$new_paths" | WVPASS grep -E '^\./objects/pack/pack-.*\.idx$' | cut -b 3-)" || exit $?
+ new_pack="$(echo "$new_paths" | WVPASS grep -E '^\./objects/pack/pack-.*\.pack$' | cut -b 3-)" || exit $?
+ wv_matches_rx "$(compare-trees "$after/" "$before/")" \
+">fcst\.\.\.[.]*[ ]+logs/refs/heads/src
+\.d\.\.t\.\.\.[.]*[ ]+objects/
+\.d\.\.t\.\.\.[.]*[ ]+objects/pack/
+>fcst\.\.\.[.]*[ ]+objects/pack/bup\.bloom
+>f\+\+\+\+\+\+\+[+]*[ ]+$new_idx
+>f\+\+\+\+\+\+\+[+]*[ ]+$new_pack
+\.d\.\.t\.\.\.[.]*[ ]+refs/heads/
+>fc\.t\.\.\.[.]*[ ]+refs/heads/src"
WVPASS rm -rf "$tmpdir"
-)
+}
commit-hash-n()
{
WVSTART "rm /foo/BAR (first of many)"
WVPASS "$top"/t/sync-tree bup-baseline/ bup/
-victim="$(WVPASS bup ls src | head -n 1)" || exit $?
+WVPASS bup ls src > tmp-ls
+victim="$(WVPASS head -n 1 tmp-ls)" || exit $?
WVPASS bup rm --unsafe /src/"$victim"
verify-changes-caused-by-rewriting-save bup-baseline bup
-WVPASSEQ 2 $(git rev-list src | wc -l)
+observed=$(WVPASS git rev-list src | WVPASS wc -l) || exit $?
+WVPASSEQ 2 $observed
WVPASSEQ "$(rm-safe-cinfo 1 bup src)" "$(rm-safe-cinfo 2 bup-baseline src)"
WVPASSEQ "$(rm-safe-cinfo 2 bup src)" "$(rm-safe-cinfo 3 bup-baseline src)"
victim="$(WVPASS bup ls src | tail -n +2 | head -n 1)" || exit $?
WVPASS bup rm --unsafe /src/"$victim"
verify-changes-caused-by-rewriting-save bup-baseline bup
-WVPASSEQ 2 $(git rev-list src | wc -l)
+observed=$(git rev-list src | wc -l) || exit $?
+WVPASSEQ 2 $observed
WVPASSEQ "$(commit-hash-n 1 bup src)" "$(commit-hash-n 1 bup-baseline src)"
WVPASSEQ "$(rm-safe-cinfo 2 bup src)" "$(rm-safe-cinfo 3 bup-baseline src)"
WVPASS "$top"/t/sync-tree bup-baseline/ bup/
victim="$(WVPASS bup ls src | tail -n 2 | head -n 1)" || exit $?
WVPASS bup rm --unsafe -vv /src/"$victim"
-WVPASSEQ "$(compare-trees bup/ bup-baseline/)" \
-">fcst...${rsx} logs/refs/heads/src
-.d..t...${rsx} refs/heads/
->fc.t...${rsx} refs/heads/src"
-WVPASSEQ 2 $(git rev-list src | wc -l)
+observed="$(compare-trees bup/ bup-baseline/ | LC_ALL=C sort)" || exit $?
+wv_matches_rx "$observed" \
+"\.d\.\.t\.\.\.[.]*[ ]+refs/heads/
+>fc\.t\.\.\.[.]*[ ]+refs/heads/src
+>fcst\.\.\.[.]*[ ]+logs/refs/heads/src"
+observed=$(git rev-list src | wc -l) || exit $?
+WVPASSEQ 2 $observed
WVPASSEQ "$(commit-hash-n 1 bup src)" "$(commit-hash-n 1 bup-baseline src)"
WVPASSEQ "$(commit-hash-n 2 bup src)" "$(commit-hash-n 2 bup-baseline src)"
-# FIXME: test that committer changes when rewriting, when appropriate.
+# FIXME: test that committer changes when rewriting, when appropriate
WVPASS rm -rf "$tmpdir"