---
t/t9502-gitweb-standalone-parse-output.sh | 156 ++++++++++++++++++++++++++++--
1 file changed, 148 insertions(+), 8 deletions(-)
diff --git a/t/t9502-gitweb-standalone-parse-output.sh
b/t/t9502-gitweb-standalone-parse-output.sh
index 0796a43..11a116f 100755
--- a/t/t9502-gitweb-standalone-parse-output.sh
+++ b/t/t9502-gitweb-standalone-parse-output.sh
@@ -27,25 +27,46 @@ $known_snapshot_formats{'tar'} = {
$feature{'snapshot'}{'default'} = ['tar'];
EOF
-# Call check_snapshot with the arguments "<basename> [<prefix>]"
+# Call list_snapshot with the argument "<basename>"
#
# This will check that gitweb HTTP header contains proposed filename
-# as <basename> with '.tar' suffix added, and that generated tarfile
-# (gitweb message body) has <prefix> as prefix for al files in tarfile
+# as <basename> with '.tar' suffix added, and lists its content to
+# stdout of this routine (in "tar test" default listing format)
#
-# <prefix> default to <basename>
-check_snapshot () {
- basename=$1
- prefix=${2:-"$1"}
+# <prefix> defaults to <basename>
+#
+list_snapshot () {
+ basename="`echo "$1" | sed 's,\/,\.,g'`"
echo "basename=$basename"
grep "filename=.*$basename.tar" gitweb.headers >/dev/null 2>&1 &&
- "$TAR" tf gitweb.body >file_list &&
+ "$TAR" tf gitweb.body >file_list
+}
+
+#
+# Call check_snapshot with the arguments "<basename> [<prefix>]"
+#
+# This uses list_snapshot() above to list the tarfile <basename>.tar received
+# from gitweb, and that this generated tarfile (gitweb message body) has
+# <prefix> prepended as prefix for all objects in the tarfile
+# The tarfile listing is exchanged via the "file_list" temporary file
+#
+# <prefix> defaults to <basename>
+#
+check_snapshot () {
+ basename="$1"
+ prefix=${2:-"$1"}
+ list_snapshot "$basename" &&
! grep -v -e "^$prefix$" -e "^$prefix/" -e "^pax_global_header$"
file_list
}
+# Note: the "xx/test" branch only contains file "foo"; others land in "master"
+# Call test_commit with the arguments "<message> [<file> [<contents> [<tag>]]]"
test_expect_success setup '
test_commit first foo &&
+ mkdir -p dir1 && test_commit bar dir1/second bar second &&
git branch xx/test &&
+ mkdir -p dir2 && test_commit pif dir2/third pif third &&
+ test_commit wow dir2/"fourth file" wow wow &&
FULL_ID=$(git rev-parse --verify HEAD) &&
SHORT_ID=$(git rev-parse --verify --short=7 HEAD)
'
@@ -112,6 +133,125 @@ test_expect_success 'snapshot: hierarchical branch name
(xx/test)' '
'
test_debug 'cat gitweb.headers'
+test_expect_success 'snapshot sanity: have expected content in xx/test branch
- do not have /first file in full snapshot' '
+ rm -f gitweb.body file_list &&
+ BRANCH=xx/test &&
+ gitweb_run "p=.git;a=snapshot;h=$BRANCH;sf=tar" &&
+ ID=$(git rev-parse --verify --short=7 "$BRANCH") &&
+ list_snapshot ".git-$BRANCH-$ID" &&
+ ! grep "first" file_list
+'
+test_debug 'cat gitweb.headers && cat file_list'
+
+test_expect_success 'snapshot certain objects: have expected content in master
branch - only those under subdir dir2/ and not others' '
+ rm -f gitweb.body file_list &&
+ BRANCH=master &&
+ gitweb_run "p=.git;a=snapshot;h=$BRANCH;sf=tar;f=dir2" &&
+ ID=$(git rev-parse --verify --short=7 "$BRANCH") &&
+ list_snapshot ".git-$BRANCH-$ID" &&
+ ! grep "foo" file_list &&
+ ! grep "dir1/second" file_list &&
+ grep "dir2/third" file_list &&
+ grep "dir2/fourth file" file_list
+'
+test_debug 'cat gitweb.headers && cat file_list'
+
+test_expect_success 'snapshot certain objects: have expected content in master
branch - subdir name is required in requested nested path (bad path - empty
output)' '
+ rm -f gitweb.body file_list &&
+ BRANCH=master &&
+ gitweb_run "p=.git;a=snapshot;h=$BRANCH;sf=tar;f=third" &&
+ [ ! -s gitweb.body ]
+'
+test_debug 'cat gitweb.headers && cat file_list'
+
+test_expect_success 'snapshot certain objects: have expected content in master
branch - correct subdir name is required in requested nested path (bad path -
empty output)' '
+ rm -f gitweb.body file_list &&
+ BRANCH=master &&
+ gitweb_run "p=.git;a=snapshot;h=$BRANCH;sf=tar;f=dir1/third" &&
+ [ ! -s gitweb.body ]
+'
+test_debug 'cat gitweb.headers && cat file_list'
+
+test_expect_success 'snapshot certain objects: have expected content in master
branch - can request filenames with spaces (backslash + HTML-escape)' '
+ rm -f gitweb.body file_list &&
+ BRANCH=master &&
+ gitweb_run "p=.git;a=snapshot;h=$BRANCH;sf=tar;f=dir2/fourth\%20file" &&
+ ID=$(git rev-parse --verify --short=7 "$BRANCH") &&
+ list_snapshot ".git-$BRANCH-$ID" &&
+ ! grep "foo" file_list &&
+ ! grep "dir1/second" file_list &&
+ ! grep "dir2/third" file_list &&
+ grep "dir2/fourth file" file_list
+'
+test_debug 'cat gitweb.headers && cat file_list'
+
+test_expect_success 'snapshot certain objects: have expected content in master
branch - can request list of filenames separated by HTML-escaped spaces' '
+ rm -f gitweb.body file_list &&
+ BRANCH=master &&
+ gitweb_run
"p=.git;a=snapshot;h=$BRANCH;sf=tar;f=dir1/second%20dir2/third" &&
+ ID=$(git rev-parse --verify --short=7 "$BRANCH") &&
+ list_snapshot ".git-$BRANCH-$ID" &&
+ ! grep "foo" file_list &&
+ grep "dir1/second" file_list &&
+ grep "dir2/third" file_list &&
+ ! grep "dir2/fourth file" file_list
+'
+test_debug 'cat gitweb.headers && cat file_list'
+
+test_expect_success 'snapshot certain objects: have expected content in master
branch - can request list of filenames separated by HTML-escaped spaces
including a filename with spaces (backslash + HTML-escape)' '
+ rm -f gitweb.body file_list &&
+ BRANCH=master &&
+ gitweb_run
"p=.git;a=snapshot;h=$BRANCH;sf=tar;f=foo%20dir2/fourth\%20file%20dir1/second"
&&
+ ID=$(git rev-parse --verify --short=7 "$BRANCH") &&
+ list_snapshot ".git-$BRANCH-$ID" &&
+ grep "foo" file_list &&
+ grep "dir1/second" file_list &&
+ ! grep "dir2/third" file_list &&
+ grep "dir2/fourth file" file_list
+'
+test_debug 'cat gitweb.headers && cat file_list'
+
+test_expect_success 'snapshot certain objects: have only expected content in
refs/tags/second full tag' '
+ rm -f gitweb.body file_list &&
+ BRANCH=second &&
+ gitweb_run "p=.git;a=snapshot;h=refs/tags/$BRANCH;sf=tar;f=dir1/second"
&&
+ list_snapshot ".git-$BRANCH" &&
+ ! grep "foo" file_list &&
+ grep "dir1/second" file_list &&
+ ! grep "dir2/third" file_list &&
+ ! grep "dir2/fourth file" file_list
+'
+test_debug 'cat gitweb.headers && cat file_list'
+
+test_expect_success 'snapshot certain objects: have expected content in
xx/test branch - request for only absent subdir dir2/ fails (empty output)' '
+ rm -f gitweb.body file_list &&
+ BRANCH=xx/test &&
+ gitweb_run "p=.git;a=snapshot;h=$BRANCH;sf=tar;f=dir2" &&
+ [ ! -s "gitweb.body" ]
+'
+test_debug 'cat gitweb.headers'
+
+test_expect_success 'snapshot certain objects: have expected content in
xx/test branch - request for file /foo and absent subdir dir2/ also fails
(empty output)' '
+ rm -f gitweb.body file_list &&
+ BRANCH=xx/test &&
+ gitweb_run "p=.git;a=snapshot;h=$BRANCH;sf=tar;f=dir2%20foo" &&
+ [ ! -s "gitweb.body" ]
+'
+test_debug 'cat gitweb.headers'
+
+test_expect_success 'snapshot certain objects: have expected content in
xx/test branch - have /foo file (and only it)' '
+ rm -f gitweb.body file_list &&
+ BRANCH=xx/test &&
+ gitweb_run "p=.git;a=snapshot;h=$BRANCH;sf=tar;f=foo" &&
+ ID=$(git rev-parse --verify --short=7 "$BRANCH") &&
+ list_snapshot ".git-$BRANCH-$ID" &&
+ grep "foo" file_list &&
+ ! grep "dir1/second" file_list &&
+ ! grep "dir2/third" file_list &&
+ ! grep "dir2/fourth file" file_list
+'
+test_debug 'cat gitweb.headers && cat file_list'
+
# ----------------------------------------------------------------------
# forks of projects
--
2.1.4
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html