]> arthur.barton.de Git - bup.git/blobdiff - t/test-gc.sh
test-restore-map-owner: accommodate python 3 and test there
[bup.git] / t / test-gc.sh
index face6e5421ed7ad7e950719025c3c9cabddc4f88..2739ae78ef9e6571d6e6be964063ddebb37b1a4e 100755 (executable)
@@ -13,6 +13,7 @@ GC_OPTS=--unsafe
 
 bup() { "$top/bup" "$@"; }
 compare-trees() { "$top/t/compare-trees" "$@"; }
+data-size() { "$top/t/data-size" "$@"; }
 
 WVPASS cd "$tmpdir"
 WVPASS bup init
@@ -51,13 +52,13 @@ WVPASS compare-trees src-2/ "$tmpdir/restore/latest/"
 
 WVSTART "gc (removed branch)"
 
-size_before=$(WVPASS du -k -s "$BUP_DIR" | WVPASS cut -f1) || exit $?
+size_before=$(WVPASS data-size "$BUP_DIR") || exit $?
 WVPASS rm "$BUP_DIR/refs/heads/src-2"
 WVPASS bup gc $GC_OPTS -v
-size_after=$(WVPASS du -k -s "$BUP_DIR" | WVPASS cut -f1) || exit $?
+size_after=$(WVPASS data-size "$BUP_DIR") || exit $?
 
-WVPASS [ "$size_before" -gt 5000 ]
-WVPASS [ "$size_after" -lt 500 ]
+WVPASS [ "$size_before" -gt 5000000 ]
+WVPASS [ "$size_after" -lt 50000 ]
 
 WVPASS rm -r "$tmpdir/restore"
 WVPASS bup restore -C "$tmpdir/restore" /src-1/latest
@@ -85,13 +86,13 @@ WVPASS bup index --clear
 WVPASS bup index src-ab
 WVPASS bup save -vvv --strip -n a src-ab/a
 
-size_before=$(WVPASS du -k -s "$BUP_DIR" | WVPASS cut -f1) || exit $?
+size_before=$(WVPASS data-size "$BUP_DIR") || exit $?
 WVPASS rm "$BUP_DIR/refs/heads/src-ab"
 WVPASS bup gc $GC_OPTS -v
-size_after=$(WVPASS du -k -s "$BUP_DIR" | WVPASS cut -f1) || exit $?
+size_after=$(WVPASS data-size "$BUP_DIR") || exit $?
 
-WVPASS [ "$size_before" -gt 5000 ]
-WVPASS [ "$size_after" -lt 500 ]
+WVPASS [ "$size_before" -gt 5000000 ]
+WVPASS [ "$size_after" -lt 100000 ]
 
 WVPASS rm -r "$tmpdir/restore"
 WVPASS bup restore -C "$tmpdir/restore" /a/latest
@@ -115,13 +116,13 @@ WVPASS bup index --clear
 WVPASS bup index src-ab
 WVPASS bup save -r :bup-remote -vvv --strip -n a src-ab/a
 
-size_before=$(WVPASS du -k -s bup-remote | WVPASS cut -f1) || exit $?
+size_before=$(WVPASS data-size bup-remote) || exit $?
 WVPASS rm bup-remote/refs/heads/src-ab
 WVPASS bup -d bup-remote gc $GC_OPTS -v
-size_after=$(WVPASS du -k -s bup-remote | WVPASS cut -f1) || exit $?
+size_after=$(WVPASS data-size bup-remote) || exit $?
 
-WVPASS [ "$size_before" -gt 5000 ]
-WVPASS [ "$size_after" -lt 500 ]
+WVPASS [ "$size_before" -gt 5000000 ]
+WVPASS [ "$size_after" -lt 100000 ]
 
 WVPASS rm -rf "$tmpdir/restore"
 WVPASS bup -d bup-remote restore -C "$tmpdir/restore" /a/latest
@@ -151,13 +152,13 @@ WVPASS bup index --clear
 WVPASS bup on - index src-ab
 WVPASS bup on - save -vvv --strip -n a src-ab/a
 
-size_before=$(WVPASS du -k -s "$BUP_DIR" | WVPASS cut -f1) || exit $?
+size_before=$(WVPASS data-size "$BUP_DIR") || exit $?
 WVPASS rm "$BUP_DIR/refs/heads/src-ab"
 WVPASS bup gc $GC_OPTS -v
-size_after=$(WVPASS du -k -s "$BUP_DIR" | WVPASS cut -f1) || exit $?
+size_after=$(WVPASS data-size "$BUP_DIR") || exit $?
 
-WVPASS [ "$size_before" -gt 5000 ]
-WVPASS [ "$size_after" -lt 500 ]
+WVPASS [ "$size_before" -gt 5000000 ]
+WVPASS [ "$size_after" -lt 100000 ]
 
 WVPASS rm -r "$tmpdir/restore"
 WVPASS bup restore -C "$tmpdir/restore" /a/latest
@@ -174,4 +175,67 @@ WVPASS bup restore -C "$tmpdir/restore" /src-ab/latest
 WVPASS compare-trees src-ab/ "$tmpdir/restore/latest/"
 
 
+WVSTART "gc (threshold)"
+
+WVPASS rm -rf "$BUP_DIR"
+WVPASS bup init
+WVPASS rm -rf src && mkdir src
+WVPASS echo 0 > src/0
+WVPASS echo 1 > src/1
+
+WVPASS bup index src
+WVPASS bup save -n src-1 src
+WVPASS rm src/0
+WVPASS bup index src
+WVPASS bup save -n src-2 src
+
+WVPASS bup rm --unsafe src-1
+packs_before="$(ls "$BUP_DIR/objects/pack/"*.pack)" || exit $?
+WVPASS bup gc -v $GC_OPTS --threshold 99 2>&1 | tee gc.log
+packs_after="$(ls "$BUP_DIR/objects/pack/"*.pack)" || exit $?
+WVPASSEQ 0 "$(grep -cE '^rewriting ' gc.log)"
+WVPASSEQ "$packs_before" "$packs_after"
+
+WVPASS bup gc -v $GC_OPTS --threshold 1 2>&1 | tee gc.log
+packs_after="$(ls "$BUP_DIR/objects/pack/"*.pack)" || exit $?
+WVPASSEQ 1 "$(grep -cE '^rewriting ' gc.log)"
+
+# Check that only one pack was rewritten
+
+# Accommodate some systems that apparently used to change the default
+# ls sort order which must match LC_COLLATE for comm to work.
+packs_before="$(sort <(echo "$packs_before"))" || die $?
+packs_after="$(sort <(echo "$packs_after"))" || die $?
+
+only_in_before="$(comm -2 -3 <(echo "$packs_before") <(echo "$packs_after"))" \
+    || die $?
+
+only_in_after="$(comm -1 -3 <(echo "$packs_before") <(echo "$packs_after"))" \
+    || die $?
+
+in_both="$(comm -1 -2 <(echo "$packs_before") <(echo "$packs_after"))" || die $?
+
+WVPASSEQ 1 $(echo "$only_in_before" | wc -l)
+WVPASSEQ 1 $(echo "$only_in_after" | wc -l)
+WVPASSEQ 1 $(echo "$in_both" | wc -l)
+
+WVSTART "gc (threshold 0)"
+
+WVPASS rm -rf "$BUP_DIR"
+WVPASS bup init
+WVPASS rm -rf src && mkdir src
+WVPASS echo 0 > src/0
+WVPASS echo 1 > src/1
+
+WVPASS bup index src
+WVPASS bup save -n src-1 src
+
+packs_before="$(ls "$BUP_DIR/objects/pack/"*.pack)" || exit $?
+WVPASS bup gc -v $GC_OPTS --threshold 0 2>&1 | tee gc.log
+packs_after="$(ls "$BUP_DIR/objects/pack/"*.pack)" || exit $?
+# Check that the pack was rewritten, but not removed (since the
+# result-pack is equal to the source pack)
+WVPASSEQ 1 "$(grep -cE '^rewriting ' gc.log)"
+WVPASSEQ "$packs_before" "$packs_after"
+
 WVPASS rm -rf "$tmpdir"