]> arthur.barton.de Git - bup.git/blob - t/test-gc.sh
Add probabilistic "bup gc", but require --unsafe
[bup.git] / t / test-gc.sh
1 #!/usr/bin/env bash
2 . ./wvtest-bup.sh
3
4 set -o pipefail
5
6 top="$(WVPASS pwd)" || exit $?
7 tmpdir="$(WVPASS wvmktempdir)" || exit $?
8
9 export BUP_DIR="$tmpdir/bup"
10 export GIT_DIR="$tmpdir/bup"
11
12 GC_OPTS=--unsafe
13
14 bup() { "$top/bup" "$@"; }
15 compare-trees() { "$top/t/compare-trees" "$@"; }
16
17 WVPASS cd "$tmpdir"
18 WVPASS bup init
19
20
21 WVSTART "gc (unchanged repo)"
22
23 WVPASS mkdir src-1
24 WVPASS bup random 1k > src-1/1
25 WVPASS bup index src-1
26 WVPASS bup save --strip -n src-1 src-1
27
28 WVPASS bup gc $GC_OPTS -v
29
30 WVPASS bup restore -C "$tmpdir/restore" /src-1/latest
31 WVPASS compare-trees src-1/ "$tmpdir/restore/latest/"
32
33
34 WVSTART "gc (unchanged, new branch)"
35
36 WVPASS mkdir src-2
37 WVPASS bup random 10M > src-2/1
38 WVPASS bup index src-2
39 WVPASS bup save --strip -n src-2 src-2
40
41 WVPASS bup gc $GC_OPTS -v
42
43 WVPASS rm -r "$tmpdir/restore"
44 WVPASS bup restore -C "$tmpdir/restore" /src-1/latest
45 WVPASS compare-trees src-1/ "$tmpdir/restore/latest/"
46
47 WVPASS rm -r "$tmpdir/restore"
48 WVPASS bup restore -C "$tmpdir/restore" /src-2/latest
49 WVPASS compare-trees src-2/ "$tmpdir/restore/latest/"
50
51
52 WVSTART "gc (removed branch)"
53
54 size_before=$(WVPASS du -k -s "$BUP_DIR" | WVPASS cut -f1) || exit $?
55 WVPASS rm "$BUP_DIR/refs/heads/src-2"
56 WVPASS bup gc $GC_OPTS -v
57 size_after=$(WVPASS du -k -s "$BUP_DIR" | WVPASS cut -f1) || exit $?
58
59 WVPASS [ "$size_before" -gt 5000 ]
60 WVPASS [ "$size_after" -lt 500 ]
61
62 WVPASS rm -r "$tmpdir/restore"
63 WVPASS bup restore -C "$tmpdir/restore" /src-1/latest
64 WVPASS compare-trees src-1/ "$tmpdir/restore/latest/"
65
66 WVPASS rm -r "$tmpdir/restore"
67 WVFAIL bup restore -C "$tmpdir/restore" /src-2/latest
68  
69
70 WVPASS mkdir src-ab-clean src-ab-clean/a src-ab-clean/b
71 WVPASS bup random 1k > src-ab-clean/a/1
72 WVPASS bup random 10M > src-ab-clean/b/1
73
74
75 WVSTART "gc (rewriting)"
76
77 WVPASS rm -rf "$BUP_DIR"
78 WVPASS bup init
79 WVPASS rm -rf src-ab
80 WVPASS cp -pPR src-ab-clean src-ab
81
82 WVPASS bup index src-ab
83 WVPASS bup save --strip -n src-ab src-ab
84 WVPASS bup index --clear
85 WVPASS bup index src-ab
86 WVPASS bup save -vvv --strip -n a src-ab/a
87
88 size_before=$(WVPASS du -k -s "$BUP_DIR" | WVPASS cut -f1) || exit $?
89 WVPASS rm "$BUP_DIR/refs/heads/src-ab"
90 WVPASS bup gc $GC_OPTS -v
91 size_after=$(WVPASS du -k -s "$BUP_DIR" | WVPASS cut -f1) || exit $?
92
93 WVPASS [ "$size_before" -gt 5000 ]
94 WVPASS [ "$size_after" -lt 500 ]
95
96 WVPASS rm -r "$tmpdir/restore"
97 WVPASS bup restore -C "$tmpdir/restore" /a/latest
98 WVPASS compare-trees src-ab/a/ "$tmpdir/restore/latest/"
99
100 WVPASS rm -r "$tmpdir/restore"
101 WVFAIL bup restore -C "$tmpdir/restore" /src-ab/latest
102
103
104 WVSTART "gc (save -r after repo rewriting)"
105
106 WVPASS rm -rf "$BUP_DIR"
107 WVPASS bup init
108 WVPASS bup -d bup-remote init
109 WVPASS rm -rf src-ab
110 WVPASS cp -pPR src-ab-clean src-ab
111
112 WVPASS bup index src-ab
113 WVPASS bup save -r :bup-remote --strip -n src-ab src-ab
114 WVPASS bup index --clear
115 WVPASS bup index src-ab
116 WVPASS bup save -r :bup-remote -vvv --strip -n a src-ab/a
117
118 size_before=$(WVPASS du -k -s bup-remote | WVPASS cut -f1) || exit $?
119 WVPASS rm bup-remote/refs/heads/src-ab
120 WVPASS bup -d bup-remote gc $GC_OPTS -v
121 size_after=$(WVPASS du -k -s bup-remote | WVPASS cut -f1) || exit $?
122
123 WVPASS [ "$size_before" -gt 5000 ]
124 WVPASS [ "$size_after" -lt 500 ]
125
126 WVPASS rm -rf "$tmpdir/restore"
127 WVPASS bup -d bup-remote restore -C "$tmpdir/restore" /a/latest
128 WVPASS compare-trees src-ab/a/ "$tmpdir/restore/latest/"
129
130 WVPASS rm -r "$tmpdir/restore"
131 WVFAIL bup -d bup-remote restore -C "$tmpdir/restore" /src-ab/latest
132
133 # Make sure a post-gc index/save that includes gc-ed data works
134 WVPASS bup index src-ab
135 WVPASS bup save -r :bup-remote --strip -n src-ab src-ab
136 WVPASS rm -r "$tmpdir/restore"
137 WVPASS bup -d bup-remote restore -C "$tmpdir/restore" /src-ab/latest
138 WVPASS compare-trees src-ab/ "$tmpdir/restore/latest/"
139
140
141 WVSTART "gc (bup on after repo rewriting)"
142
143 WVPASS rm -rf "$BUP_DIR"
144 WVPASS bup init
145 WVPASS rm -rf src-ab
146 WVPASS cp -pPR src-ab-clean src-ab
147
148 WVPASS bup on - index src-ab
149 WVPASS bup on - save --strip -n src-ab src-ab
150 WVPASS bup index --clear
151 WVPASS bup on - index src-ab
152 WVPASS bup on - save -vvv --strip -n a src-ab/a
153
154 size_before=$(WVPASS du -k -s "$BUP_DIR" | WVPASS cut -f1) || exit $?
155 WVPASS rm "$BUP_DIR/refs/heads/src-ab"
156 WVPASS bup gc $GC_OPTS -v
157 size_after=$(WVPASS du -k -s "$BUP_DIR" | WVPASS cut -f1) || exit $?
158
159 WVPASS [ "$size_before" -gt 5000 ]
160 WVPASS [ "$size_after" -lt 500 ]
161
162 WVPASS rm -r "$tmpdir/restore"
163 WVPASS bup restore -C "$tmpdir/restore" /a/latest
164 WVPASS compare-trees src-ab/a/ "$tmpdir/restore/latest/"
165
166 WVPASS rm -r "$tmpdir/restore"
167 WVFAIL bup restore -C "$tmpdir/restore" /src-ab/latest
168
169 # Make sure a post-gc index/save that includes gc-ed data works
170 WVPASS bup on - index src-ab
171 WVPASS bup on - save --strip -n src-ab src-ab
172 WVPASS rm -r "$tmpdir/restore"
173 WVPASS bup restore -C "$tmpdir/restore" /src-ab/latest
174 WVPASS compare-trees src-ab/ "$tmpdir/restore/latest/"
175
176
177 WVPASS rm -rf "$tmpdir"