]> arthur.barton.de Git - bup.git/blob - t/test-ls.sh
ls: retrieve all of the available metadata when requested
[bup.git] / t / test-ls.sh
1 #!/usr/bin/env bash
2 . ./wvtest-bup.sh || exit $?
3 . t/lib.sh || exit $?
4
5 set -o pipefail
6
7 top="$(WVPASS pwd)" || exit $?
8 tmpdir="$(WVPASS wvmktempdir)" || exit $?
9
10 export BUP_DIR="$tmpdir/bup"
11 export GIT_DIR="$tmpdir/bup"
12
13 bup() { "$top/bup" "$@"; }
14
15 export TZ=UTC
16
17 WVPASS bup init
18 WVPASS cd "$tmpdir"
19
20 WVPASS mkdir src
21 WVPASS touch src/.dotfile src/executable
22 WVPASS mkfifo src/fifo
23 WVPASS "$top"/t/mksock src/socket
24 WVPASS bup random 1k > src/file
25 WVPASS chmod u+x src/executable
26 WVPASS chmod -R u=rwX,g-rwx,o-rwx .
27 WVPASS touch -t 200910032348 src/.dotfile src/*
28 (WVPASS cd src; WVPASS ln -s file symlink) || exit $?
29 (WVPASS cd src; WVPASS ln -s not-there bad-symlink) || exit $?
30 WVPASS touch -t 200910032348 src
31 WVPASS touch -t 200910032348 .
32 WVPASS bup index src
33 WVPASS bup save -n src -d 242312160 --strip src
34 WVPASS bup tag some-tag src
35
36 uid="$(WVPASS id -u)" || exit $?
37 gid="$(WVPASS bup-python -c 'import os; print os.stat("src").st_gid')" || exit $?
38 user="$(WVPASS id -un)" || exit $?
39 group="$(WVPASS bup-python -c 'import grp, os;
40 print grp.getgrgid(os.stat("src").st_gid)[0]')" || exit $?
41 src_commit_hash=$(git log --format=%H -n1 src)
42 src_tree_hash=$(git log --format=%T -n1 src)
43
44
45 WVSTART "ls (short)"
46
47 (export BUP_FORCE_TTY=1; WVPASSEQ "$(WVPASS bup ls | tr -d ' ')" src)
48
49 WVPASSEQ "$(WVPASS bup ls /)" "src"
50
51 WVPASSEQ "$(WVPASS bup ls -A /)" ".tag
52 src"
53
54 WVPASSEQ "$(WVPASS bup ls -AF /)" ".tag/
55 src/"
56
57 WVPASSEQ "$(WVPASS bup ls -a /)" ".
58 ..
59 .tag
60 src"
61
62 WVPASSEQ "$(WVPASS bup ls -aF /)" "./
63 ../
64 .tag/
65 src/"
66
67 WVPASSEQ "$(WVPASS bup ls /.tag)" "some-tag"
68
69 WVPASSEQ "$(WVPASS bup ls /src)" \
70 "1977-09-05-125600
71 latest"
72
73 WVPASSEQ "$(WVPASS bup ls src/latest)" "bad-symlink
74 executable
75 fifo
76 file
77 socket
78 symlink"
79
80 WVPASSEQ "$(WVPASS bup ls -A src/latest)" ".dotfile
81 bad-symlink
82 executable
83 fifo
84 file
85 socket
86 symlink"
87
88 WVPASSEQ "$(WVPASS bup ls -a src/latest)" ".
89 ..
90 .dotfile
91 bad-symlink
92 executable
93 fifo
94 file
95 socket
96 symlink"
97
98 WVPASSEQ "$(WVPASS bup ls -F src/latest)" "bad-symlink@
99 executable*
100 fifo|
101 file
102 socket=
103 symlink@"
104
105 WVPASSEQ "$(WVPASS bup ls --file-type src/latest)" "bad-symlink@
106 executable
107 fifo|
108 file
109 socket=
110 symlink@"
111
112 WVPASSEQ "$(WVPASS bup ls -d src/latest)" "src/latest"
113
114
115 WVSTART "ls (long)"
116
117 WVPASSEQ "$(WVPASS bup ls -l / | tr -s ' ' ' ')" \
118 "drwx------ $user/$group 0 2009-10-03 23:48 src"
119
120 WVPASSEQ "$(WVPASS bup ls -lA / | tr -s ' ' ' ')" \
121 "drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag
122 drwx------ $user/$group 0 2009-10-03 23:48 src"
123
124 WVPASSEQ "$(WVPASS bup ls -lAF / | tr -s ' ' ' ')" \
125 "drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag/
126 drwx------ $user/$group 0 2009-10-03 23:48 src/"
127
128 WVPASSEQ "$(WVPASS bup ls -la / | tr -s ' ' ' ')" \
129 "drwxr-xr-x 0/0 0 1970-01-01 00:00 .
130 drwxr-xr-x 0/0 0 1970-01-01 00:00 ..
131 drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag
132 drwx------ $user/$group 0 2009-10-03 23:48 src"
133
134 WVPASSEQ "$(WVPASS bup ls -laF / | tr -s ' ' ' ')" \
135 "drwxr-xr-x 0/0 0 1970-01-01 00:00 ./
136 drwxr-xr-x 0/0 0 1970-01-01 00:00 ../
137 drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag/
138 drwx------ $user/$group 0 2009-10-03 23:48 src/"
139
140 socket_mode="$(WVPASS ls -l src/socket | cut -b -10)" || exit $?
141
142
143 bad_symlink_mode="$(WVPASS ls -l src/bad-symlink | cut -b -10)" || exit $?
144
145 bad_symlink_bup_info="$(WVPASS bup ls -l src/latest | grep bad-symlink)" \
146     || exit $?
147 bad_symlink_date="$(WVPASS echo "$bad_symlink_bup_info" \
148   | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')" \
149     || exit $?
150
151 test "$bad_symlink_date" || exit 1
152
153 if test "$(uname -s)" != NetBSD; then
154     bad_symlink_size="$(WVPASS bup-python -c "import os
155 print os.lstat('src/bad-symlink').st_size")" || exit $?
156 else
157     # NetBSD appears to return varying sizes, so for now, just ignore it.
158     bad_symlink_size="$(WVPASS echo "$bad_symlink_bup_info" \
159       | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $1')" \
160         || exit $?
161 fi
162
163
164 symlink_mode="$(WVPASS ls -l src/symlink | cut -b -10)" || exit $?
165
166 symlink_bup_info="$(WVPASS bup ls -l src/latest | grep -E '[^-]symlink')" \
167     || exit $?
168 symlink_date="$(WVPASS echo "$symlink_bup_info" \
169   | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')" \
170     || exit $?
171
172 test "$symlink_date" || exit 1
173
174 if test "$(uname -s)" != NetBSD; then
175     symlink_size="$(WVPASS bup-python -c "import os
176 print os.lstat('src/symlink').st_size")" || exit $?
177 else
178     # NetBSD appears to return varying sizes, so for now, just ignore it.
179     symlink_size="$(WVPASS echo "$symlink_bup_info" \
180       | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $1')" \
181         || exit $?
182 fi
183
184 WVPASSEQ "$(bup ls -l src/latest | tr -s ' ' ' ')" \
185 "$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
186 -rwx------ $user/$group 0 2009-10-03 23:48 executable
187 prw------- $user/$group 0 2009-10-03 23:48 fifo
188 -rw------- $user/$group 1024 2009-10-03 23:48 file
189 $socket_mode $user/$group 0 2009-10-03 23:48 socket
190 $symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
191
192 WVPASSEQ "$(bup ls -la src/latest | tr -s ' ' ' ')" \
193 "drwx------ $user/$group 0 2009-10-03 23:48 .
194 drwx------ $user/$group 0 2009-10-03 23:48 ..
195 -rw------- $user/$group 0 2009-10-03 23:48 .dotfile
196 $bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
197 -rwx------ $user/$group 0 2009-10-03 23:48 executable
198 prw------- $user/$group 0 2009-10-03 23:48 fifo
199 -rw------- $user/$group 1024 2009-10-03 23:48 file
200 $socket_mode $user/$group 0 2009-10-03 23:48 socket
201 $symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
202
203 WVPASSEQ "$(bup ls -lA src/latest | tr -s ' ' ' ')" \
204 "-rw------- $user/$group 0 2009-10-03 23:48 .dotfile
205 $bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
206 -rwx------ $user/$group 0 2009-10-03 23:48 executable
207 prw------- $user/$group 0 2009-10-03 23:48 fifo
208 -rw------- $user/$group 1024 2009-10-03 23:48 file
209 $socket_mode $user/$group 0 2009-10-03 23:48 socket
210 $symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
211
212 WVPASSEQ "$(bup ls -lF src/latest | tr -s ' ' ' ')" \
213 "$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink@ -> not-there
214 -rwx------ $user/$group 0 2009-10-03 23:48 executable*
215 prw------- $user/$group 0 2009-10-03 23:48 fifo|
216 -rw------- $user/$group 1024 2009-10-03 23:48 file
217 $socket_mode $user/$group 0 2009-10-03 23:48 socket=
218 $symlink_mode $user/$group $symlink_size $symlink_date symlink@ -> file"
219
220 WVPASSEQ "$(bup ls -l --file-type src/latest | tr -s ' ' ' ')" \
221 "$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink@ -> not-there
222 -rwx------ $user/$group 0 2009-10-03 23:48 executable
223 prw------- $user/$group 0 2009-10-03 23:48 fifo|
224 -rw------- $user/$group 1024 2009-10-03 23:48 file
225 $socket_mode $user/$group 0 2009-10-03 23:48 socket=
226 $symlink_mode $user/$group $symlink_size $symlink_date symlink@ -> file"
227
228 WVPASSEQ "$(bup ls -ln src/latest | tr -s ' ' ' ')" \
229 "$bad_symlink_mode $uid/$gid $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
230 -rwx------ $uid/$gid 0 2009-10-03 23:48 executable
231 prw------- $uid/$gid 0 2009-10-03 23:48 fifo
232 -rw------- $uid/$gid 1024 2009-10-03 23:48 file
233 $socket_mode $uid/$gid 0 2009-10-03 23:48 socket
234 $symlink_mode $uid/$gid $symlink_size $symlink_date symlink -> file"
235
236 WVPASSEQ "$(bup ls -ld "src/latest" | tr -s ' ' ' ')" \
237 "drwx------ $user/$group 0 2009-10-03 23:48 src/latest"
238
239
240 WVSTART "ls (backup set - long)"
241 WVPASSEQ "$(bup ls -l --numeric-ids src | cut -d' ' -f 1-2)" \
242 "drwx------ $uid/$gid
243 drwx------ $uid/$gid"
244
245 WVPASSEQ "$(bup ls -ds "src/latest" | tr -s ' ' ' ')" \
246 "$src_tree_hash src/latest"
247
248 WVPASSEQ "$(bup ls -ds --commit-hash "src/latest" | tr -s ' ' ' ')" \
249 "$src_commit_hash src/latest"
250
251
252 WVSTART "ls (dates TZ != UTC)"
253 export TZ=America/Chicago
254 bad_symlink_date_central="$(bup ls -l src/latest | grep bad-symlink)"
255 bad_symlink_date_central="$(echo "$bad_symlink_date_central" \
256   | perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')"
257 symlink_date_central="$(bup ls -l src/latest | grep -E '[^-]symlink')"
258 symlink_date_central="$(echo "$symlink_date_central" \
259   | perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')"
260 WVPASSEQ "$(bup ls -ln src/latest | tr -s ' ' ' ')" \
261 "$bad_symlink_mode $uid/$gid $bad_symlink_size $bad_symlink_date_central bad-symlink -> not-there
262 -rwx------ $uid/$gid 0 2009-10-03 18:48 executable
263 prw------- $uid/$gid 0 2009-10-03 18:48 fifo
264 -rw------- $uid/$gid 1024 2009-10-03 18:48 file
265 $socket_mode $uid/$gid 0 2009-10-03 18:48 socket
266 $symlink_mode $uid/$gid $symlink_size $symlink_date_central symlink -> file"
267 export TZ=UTC
268
269
270 WVSTART "ls bad-symlink"
271 WVPASSEQ "$(bup ls "src/latest/bad-symlink")" "src/latest/bad-symlink"
272
273 WVSTART "ls -l bad-symlink"
274 WVPASSEQ "$(bup ls -l src/latest/bad-symlink | tr -s ' ' ' ')" \
275 "$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date src/latest/bad-symlink -> not-there"
276
277
278 WVPASS rm -rf "$tmpdir"