]> arthur.barton.de Git - bup.git/blobdiff - t/test-ls.sh
ls: retrieve all of the available metadata when requested
[bup.git] / t / test-ls.sh
index 5d8fda86b4c8face2b6248d38d3c943e0a89684e..ef71c195ffae6fc02ec91ccbd14ad60c23d91e65 100755 (executable)
@@ -24,14 +24,23 @@ WVPASS "$top"/t/mksock src/socket
 WVPASS bup random 1k > src/file
 WVPASS chmod u+x src/executable
 WVPASS chmod -R u=rwX,g-rwx,o-rwx .
-WVPASS touch -t 196907202018 src/.dotfile src/*
+WVPASS touch -t 200910032348 src/.dotfile src/*
 (WVPASS cd src; WVPASS ln -s file symlink) || exit $?
-WVPASS touch -t 196907202018 src
-WVPASS touch -t 196907202018 .
+(WVPASS cd src; WVPASS ln -s not-there bad-symlink) || exit $?
+WVPASS touch -t 200910032348 src
+WVPASS touch -t 200910032348 .
 WVPASS bup index src
-WVPASS bup save -n src -d 242312160 src
+WVPASS bup save -n src -d 242312160 --strip src
 WVPASS bup tag some-tag src
 
+uid="$(WVPASS id -u)" || exit $?
+gid="$(WVPASS bup-python -c 'import os; print os.stat("src").st_gid')" || exit $?
+user="$(WVPASS id -un)" || exit $?
+group="$(WVPASS bup-python -c 'import grp, os;
+print grp.getgrgid(os.stat("src").st_gid)[0]')" || exit $?
+src_commit_hash=$(git log --format=%H -n1 src)
+src_tree_hash=$(git log --format=%T -n1 src)
+
 
 WVSTART "ls (short)"
 
@@ -39,23 +48,19 @@ WVSTART "ls (short)"
 
 WVPASSEQ "$(WVPASS bup ls /)" "src"
 
-WVPASSEQ "$(WVPASS bup ls -A /)" ".commit
-.tag
+WVPASSEQ "$(WVPASS bup ls -A /)" ".tag
 src"
 
-WVPASSEQ "$(WVPASS bup ls -AF /)" ".commit/
-.tag/
+WVPASSEQ "$(WVPASS bup ls -AF /)" ".tag/
 src/"
 
 WVPASSEQ "$(WVPASS bup ls -a /)" ".
 ..
-.commit
 .tag
 src"
 
 WVPASSEQ "$(WVPASS bup ls -aF /)" "./
 ../
-.commit/
 .tag/
 src/"
 
@@ -65,80 +70,107 @@ WVPASSEQ "$(WVPASS bup ls /src)" \
 "1977-09-05-125600
 latest"
 
-WVPASSEQ "$(WVPASS bup ls src/latest/"$tmpdir"/src)" "executable
+WVPASSEQ "$(WVPASS bup ls src/latest)" "bad-symlink
+executable
 fifo
 file
 socket
 symlink"
 
-WVPASSEQ "$(WVPASS bup ls -A src/latest/"$tmpdir"/src)" ".dotfile
+WVPASSEQ "$(WVPASS bup ls -A src/latest)" ".dotfile
+bad-symlink
 executable
 fifo
 file
 socket
 symlink"
 
-WVPASSEQ "$(WVPASS bup ls -a src/latest/"$tmpdir"/src)" ".
+WVPASSEQ "$(WVPASS bup ls -a src/latest)" ".
 ..
 .dotfile
+bad-symlink
 executable
 fifo
 file
 socket
 symlink"
 
-WVPASSEQ "$(WVPASS bup ls -F src/latest/"$tmpdir"/src)" "executable*
+WVPASSEQ "$(WVPASS bup ls -F src/latest)" "bad-symlink@
+executable*
 fifo|
 file
 socket=
 symlink@"
 
-WVPASSEQ "$(WVPASS bup ls --file-type src/latest/"$tmpdir"/src)" "executable
+WVPASSEQ "$(WVPASS bup ls --file-type src/latest)" "bad-symlink@
+executable
 fifo|
 file
 socket=
 symlink@"
 
-WVPASSEQ "$(WVPASS bup ls -d src/latest/"$tmpdir"/src)" "src/latest$tmpdir/src"
+WVPASSEQ "$(WVPASS bup ls -d src/latest)" "src/latest"
 
 
 WVSTART "ls (long)"
 
 WVPASSEQ "$(WVPASS bup ls -l / | tr -s ' ' ' ')" \
-"d--------- ?/? 0 1970-01-01 00:00 src"
+"drwx------ $user/$group 0 2009-10-03 23:48 src"
 
 WVPASSEQ "$(WVPASS bup ls -lA / | tr -s ' ' ' ')" \
-"d--------- ?/? 0 1970-01-01 00:00 .commit
-d--------- ?/? 0 1970-01-01 00:00 .tag
-d--------- ?/? 0 1970-01-01 00:00 src"
+"drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag
+drwx------ $user/$group 0 2009-10-03 23:48 src"
 
 WVPASSEQ "$(WVPASS bup ls -lAF / | tr -s ' ' ' ')" \
-"d--------- ?/? 0 1970-01-01 00:00 .commit/
-d--------- ?/? 0 1970-01-01 00:00 .tag/
-d--------- ?/? 0 1970-01-01 00:00 src/"
+"drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag/
+drwx------ $user/$group 0 2009-10-03 23:48 src/"
 
 WVPASSEQ "$(WVPASS bup ls -la / | tr -s ' ' ' ')" \
-"d--------- ?/? 0 1970-01-01 00:00 .
-d--------- ?/? 0 1970-01-01 00:00 ..
-d--------- ?/? 0 1970-01-01 00:00 .commit
-d--------- ?/? 0 1970-01-01 00:00 .tag
-d--------- ?/? 0 1970-01-01 00:00 src"
+"drwxr-xr-x 0/0 0 1970-01-01 00:00 .
+drwxr-xr-x 0/0 0 1970-01-01 00:00 ..
+drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag
+drwx------ $user/$group 0 2009-10-03 23:48 src"
 
 WVPASSEQ "$(WVPASS bup ls -laF / | tr -s ' ' ' ')" \
-"d--------- ?/? 0 1970-01-01 00:00 ./
-d--------- ?/? 0 1970-01-01 00:00 ../
-d--------- ?/? 0 1970-01-01 00:00 .commit/
-d--------- ?/? 0 1970-01-01 00:00 .tag/
-d--------- ?/? 0 1970-01-01 00:00 src/"
+"drwxr-xr-x 0/0 0 1970-01-01 00:00 ./
+drwxr-xr-x 0/0 0 1970-01-01 00:00 ../
+drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag/
+drwx------ $user/$group 0 2009-10-03 23:48 src/"
+
+socket_mode="$(WVPASS ls -l src/socket | cut -b -10)" || exit $?
+
+
+bad_symlink_mode="$(WVPASS ls -l src/bad-symlink | cut -b -10)" || exit $?
+
+bad_symlink_bup_info="$(WVPASS bup ls -l src/latest | grep bad-symlink)" \
+    || exit $?
+bad_symlink_date="$(WVPASS echo "$bad_symlink_bup_info" \
+  | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')" \
+    || exit $?
+
+test "$bad_symlink_date" || exit 1
+
+if test "$(uname -s)" != NetBSD; then
+    bad_symlink_size="$(WVPASS bup-python -c "import os
+print os.lstat('src/bad-symlink').st_size")" || exit $?
+else
+    # NetBSD appears to return varying sizes, so for now, just ignore it.
+    bad_symlink_size="$(WVPASS echo "$bad_symlink_bup_info" \
+      | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $1')" \
+        || exit $?
+fi
+
 
 symlink_mode="$(WVPASS ls -l src/symlink | cut -b -10)" || exit $?
 
-symlink_bup_info="$(WVPASS bup ls -l src/latest"$tmpdir"/src | grep symlink)" \
+symlink_bup_info="$(WVPASS bup ls -l src/latest | grep -E '[^-]symlink')" \
     || exit $?
 symlink_date="$(WVPASS echo "$symlink_bup_info" \
   | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')" \
     || exit $?
 
+test "$symlink_date" || exit 1
+
 if test "$(uname -s)" != NetBSD; then
     symlink_size="$(WVPASS bup-python -c "import os
 print os.lstat('src/symlink').st_size")" || exit $?
@@ -149,80 +181,98 @@ else
         || exit $?
 fi
 
-uid="$(WVPASS id -u)" || exit $?
-gid="$(WVPASS bup-python -c 'import os; print os.stat("src").st_gid')" || exit $?
-user="$(WVPASS id -un)" || exit $?
-group="$(WVPASS bup-python -c 'import grp, os;
-print grp.getgrgid(os.stat("src").st_gid)[0]')" || exit $?
-
-WVPASSEQ "$(bup ls -l src/latest"$tmpdir"/src | tr -s ' ' ' ')" \
-"-rwx------ $user/$group 0 1969-07-20 20:18 executable
-prw------- $user/$group 0 1969-07-20 20:18 fifo
--rw------- $user/$group 1024 1969-07-20 20:18 file
-srwx------ $user/$group 0 1969-07-20 20:18 socket
+WVPASSEQ "$(bup ls -l src/latest | tr -s ' ' ' ')" \
+"$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
+-rwx------ $user/$group 0 2009-10-03 23:48 executable
+prw------- $user/$group 0 2009-10-03 23:48 fifo
+-rw------- $user/$group 1024 2009-10-03 23:48 file
+$socket_mode $user/$group 0 2009-10-03 23:48 socket
 $symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
 
-WVPASSEQ "$(bup ls -la src/latest"$tmpdir"/src | tr -s ' ' ' ')" \
-"drwx------ $user/$group 0 1969-07-20 20:18 .
-drwx------ $user/$group 0 1969-07-20 20:18 ..
--rw------- $user/$group 0 1969-07-20 20:18 .dotfile
--rwx------ $user/$group 0 1969-07-20 20:18 executable
-prw------- $user/$group 0 1969-07-20 20:18 fifo
--rw------- $user/$group 1024 1969-07-20 20:18 file
-srwx------ $user/$group 0 1969-07-20 20:18 socket
+WVPASSEQ "$(bup ls -la src/latest | tr -s ' ' ' ')" \
+"drwx------ $user/$group 0 2009-10-03 23:48 .
+drwx------ $user/$group 0 2009-10-03 23:48 ..
+-rw------- $user/$group 0 2009-10-03 23:48 .dotfile
+$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
+-rwx------ $user/$group 0 2009-10-03 23:48 executable
+prw------- $user/$group 0 2009-10-03 23:48 fifo
+-rw------- $user/$group 1024 2009-10-03 23:48 file
+$socket_mode $user/$group 0 2009-10-03 23:48 socket
 $symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
 
-WVPASSEQ "$(bup ls -lA src/latest"$tmpdir"/src | tr -s ' ' ' ')" \
-"-rw------- $user/$group 0 1969-07-20 20:18 .dotfile
--rwx------ $user/$group 0 1969-07-20 20:18 executable
-prw------- $user/$group 0 1969-07-20 20:18 fifo
--rw------- $user/$group 1024 1969-07-20 20:18 file
-srwx------ $user/$group 0 1969-07-20 20:18 socket
+WVPASSEQ "$(bup ls -lA src/latest | tr -s ' ' ' ')" \
+"-rw------- $user/$group 0 2009-10-03 23:48 .dotfile
+$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
+-rwx------ $user/$group 0 2009-10-03 23:48 executable
+prw------- $user/$group 0 2009-10-03 23:48 fifo
+-rw------- $user/$group 1024 2009-10-03 23:48 file
+$socket_mode $user/$group 0 2009-10-03 23:48 socket
 $symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
 
-WVPASSEQ "$(bup ls -lF src/latest"$tmpdir"/src | tr -s ' ' ' ')" \
-"-rwx------ $user/$group 0 1969-07-20 20:18 executable*
-prw------- $user/$group 0 1969-07-20 20:18 fifo|
--rw------- $user/$group 1024 1969-07-20 20:18 file
-srwx------ $user/$group 0 1969-07-20 20:18 socket=
+WVPASSEQ "$(bup ls -lF src/latest | tr -s ' ' ' ')" \
+"$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink@ -> not-there
+-rwx------ $user/$group 0 2009-10-03 23:48 executable*
+prw------- $user/$group 0 2009-10-03 23:48 fifo|
+-rw------- $user/$group 1024 2009-10-03 23:48 file
+$socket_mode $user/$group 0 2009-10-03 23:48 socket=
 $symlink_mode $user/$group $symlink_size $symlink_date symlink@ -> file"
 
-WVPASSEQ "$(bup ls -l --file-type src/latest"$tmpdir"/src | tr -s ' ' ' ')" \
-"-rwx------ $user/$group 0 1969-07-20 20:18 executable
-prw------- $user/$group 0 1969-07-20 20:18 fifo|
--rw------- $user/$group 1024 1969-07-20 20:18 file
-srwx------ $user/$group 0 1969-07-20 20:18 socket=
+WVPASSEQ "$(bup ls -l --file-type src/latest | tr -s ' ' ' ')" \
+"$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink@ -> not-there
+-rwx------ $user/$group 0 2009-10-03 23:48 executable
+prw------- $user/$group 0 2009-10-03 23:48 fifo|
+-rw------- $user/$group 1024 2009-10-03 23:48 file
+$socket_mode $user/$group 0 2009-10-03 23:48 socket=
 $symlink_mode $user/$group $symlink_size $symlink_date symlink@ -> file"
 
-WVPASSEQ "$(bup ls -ln src/latest"$tmpdir"/src | tr -s ' ' ' ')" \
-"-rwx------ $uid/$gid 0 1969-07-20 20:18 executable
-prw------- $uid/$gid 0 1969-07-20 20:18 fifo
--rw------- $uid/$gid 1024 1969-07-20 20:18 file
-srwx------ $uid/$gid 0 1969-07-20 20:18 socket
+WVPASSEQ "$(bup ls -ln src/latest | tr -s ' ' ' ')" \
+"$bad_symlink_mode $uid/$gid $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
+-rwx------ $uid/$gid 0 2009-10-03 23:48 executable
+prw------- $uid/$gid 0 2009-10-03 23:48 fifo
+-rw------- $uid/$gid 1024 2009-10-03 23:48 file
+$socket_mode $uid/$gid 0 2009-10-03 23:48 socket
 $symlink_mode $uid/$gid $symlink_size $symlink_date symlink -> file"
 
-WVPASSEQ "$(bup ls -ld "src/latest$tmpdir/src" | tr -s ' ' ' ')" \
-"drwx------ $user/$group 0 1969-07-20 20:18 src/latest$tmpdir/src"
+WVPASSEQ "$(bup ls -ld "src/latest" | tr -s ' ' ' ')" \
+"drwx------ $user/$group 0 2009-10-03 23:48 src/latest"
 
 
 WVSTART "ls (backup set - long)"
-WVPASSEQ "$(bup ls -l src | cut -d' ' -f 1-2)" \
-"l--------- ?/?
-l--------- ?/?"
+WVPASSEQ "$(bup ls -l --numeric-ids src | cut -d' ' -f 1-2)" \
+"drwx------ $uid/$gid
+drwx------ $uid/$gid"
+
+WVPASSEQ "$(bup ls -ds "src/latest" | tr -s ' ' ' ')" \
+"$src_tree_hash src/latest"
+
+WVPASSEQ "$(bup ls -ds --commit-hash "src/latest" | tr -s ' ' ' ')" \
+"$src_commit_hash src/latest"
 
 
 WVSTART "ls (dates TZ != UTC)"
 export TZ=America/Chicago
-symlink_date_central="$(bup ls -l src/latest"$tmpdir"/src | grep symlink)"
+bad_symlink_date_central="$(bup ls -l src/latest | grep bad-symlink)"
+bad_symlink_date_central="$(echo "$bad_symlink_date_central" \
+  | perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')"
+symlink_date_central="$(bup ls -l src/latest | grep -E '[^-]symlink')"
 symlink_date_central="$(echo "$symlink_date_central" \
   | perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')"
-WVPASSEQ "$(bup ls -ln src/latest"$tmpdir"/src | tr -s ' ' ' ')" \
-"-rwx------ $uid/$gid 0 1969-07-20 15:18 executable
-prw------- $uid/$gid 0 1969-07-20 15:18 fifo
--rw------- $uid/$gid 1024 1969-07-20 15:18 file
-srwx------ $uid/$gid 0 1969-07-20 15:18 socket
+WVPASSEQ "$(bup ls -ln src/latest | tr -s ' ' ' ')" \
+"$bad_symlink_mode $uid/$gid $bad_symlink_size $bad_symlink_date_central bad-symlink -> not-there
+-rwx------ $uid/$gid 0 2009-10-03 18:48 executable
+prw------- $uid/$gid 0 2009-10-03 18:48 fifo
+-rw------- $uid/$gid 1024 2009-10-03 18:48 file
+$socket_mode $uid/$gid 0 2009-10-03 18:48 socket
 $symlink_mode $uid/$gid $symlink_size $symlink_date_central symlink -> file"
-unset TZ
+export TZ=UTC
+
+
+WVSTART "ls bad-symlink"
+WVPASSEQ "$(bup ls "src/latest/bad-symlink")" "src/latest/bad-symlink"
+
+WVSTART "ls -l bad-symlink"
+WVPASSEQ "$(bup ls -l src/latest/bad-symlink | tr -s ' ' ' ')" \
+"$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date src/latest/bad-symlink -> not-there"
 
 
 WVPASS rm -rf "$tmpdir"