diff options
context:
space:
mode:
authorBryce Kwon <bryce@brycekwon.com>
committerBryce Kwon <bryce@brycekwon.com>
commit
parent
tree
download
Renumber the test scripts into themed ranges
t000x the ground the suite stands on: git version, html validity, the cache t01xx page content, one script per page t02xx features that cut across pages: filters, submodule links, dates, limits t03xx defence, the security regressions and the $HOME promise t04xx the helper tools under tools/
Diffstat (limited to 'tests/t0109-patch.sh')
-rwxr-xr-xtests/t0109-patch.sh82
1 file changed, 82 insertions, 0 deletions
diff --git a/tests/t0109-patch.sh b/tests/t0109-patch.sh
new file mode 100755
index 0000000..3d38e55
--- /dev/null
+++ b/tests/t0109-patch.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+# The patch page serves a commit as a mail ready patch, so that a change read
+# from cgit can be fed straight to git am. The checks compare that output
+# against git format-patch for a single commit and for a range of them, once
+# the CGI headers have been stripped, which means the two have to agree line
+# for line. The last one sets max-patch-count so a range wider than the limit
+# comes back cut short.
+
+test_description='Check content on patch page'
+. ./setup.sh
+
+test_expect_success 'generate foo/patch' '
+ cgit_query "url=foo/patch" >tmp
+'
+
+test_expect_success 'find `From:` line' '
+ grep "^From: " tmp
+'
+
+test_expect_success 'find `Date:` line' '
+ grep "^Date: " tmp
+'
+
+test_expect_success 'find `Subject:` line' '
+ grep "^Subject: commit 5" tmp
+'
+
+test_expect_success 'find `cgit` signature' '
+ tail -2 tmp | head -1 | grep "^cgit"
+'
+
+test_expect_success 'compare with output of git-format-patch(1)' '
+ CGIT_VERSION=$(sed -n "s/CGIT_VERSION = //p" ../../build/VERSION) &&
+ git --git-dir="$PWD/repos/foo/.git" format-patch --subject-prefix="" --signature="cgit $CGIT_VERSION" --stdout HEAD^ >tmp2 &&
+ strip_headers <tmp >tmp_ &&
+ test_cmp tmp_ tmp2
+'
+
+test_expect_success 'find initial commit' '
+ root=$(git --git-dir="$PWD/repos/foo/.git" rev-list --max-parents=0 HEAD)
+'
+
+test_expect_success 'generate patch for initial commit' '
+ cgit_query "url=foo/patch&id=$root" >tmp
+'
+
+test_expect_success 'find `cgit` signature' '
+ tail -2 tmp | head -1 | grep "^cgit"
+'
+
+test_expect_success 'generate patches for multiple commits' '
+ id=$(git --git-dir="$PWD/repos/foo/.git" rev-parse HEAD) &&
+ id2=$(git --git-dir="$PWD/repos/foo/.git" rev-parse HEAD~3) &&
+ cgit_query "url=foo/patch&id=$id&id2=$id2" >tmp
+'
+
+test_expect_success 'find `cgit` signature' '
+ tail -2 tmp | head -1 | grep "^cgit"
+'
+
+test_expect_success 'compare with output of git-format-patch(1)' '
+ CGIT_VERSION=$(sed -n "s/CGIT_VERSION = //p" ../../build/VERSION) &&
+ git --git-dir="$PWD/repos/foo/.git" format-patch -N --subject-prefix="" --signature="cgit $CGIT_VERSION" --stdout HEAD~3..HEAD >tmp2 &&
+ strip_headers <tmp >tmp_ &&
+ test_cmp tmp_ tmp2
+'
+
+test_expect_success 'max-patch-count bounds a patch range' '
+ {
+ echo "cache-size=0" &&
+ echo "max-patch-count=2" &&
+ echo "repo.url=foo" &&
+ echo "repo.path=$PWD/repos/foo/.git"
+ } >patchcountrc &&
+ id=$(git --git-dir="$PWD/repos/foo/.git" rev-parse HEAD) &&
+ root=$(git --git-dir="$PWD/repos/foo/.git" rev-list --max-parents=0 HEAD) &&
+ CGIT_CONFIG="$PWD/patchcountrc" QUERY_STRING="url=foo/patch&id=$id&id2=$root" cgit >tmp &&
+ test $(grep -c "^From " tmp) -eq 2
+'
+
+test_done