#!/bin/sh # The log page and its search. The searching checks use the repository whose # name contains a space and a term containing a space, so every link cgit # writes back has to escape the path and the query, which escape differently. test_description='Check content on log page' . ./setup.sh test_expect_success 'generate foo/log' 'cgit_url "foo/log" >tmp' test_expect_success 'find commit 1' 'grep "commit 1" tmp' test_expect_success 'find commit 5' 'grep "commit 5" tmp' test_expect_success 'generate bar/log' 'cgit_url "bar/log" >tmp' test_expect_success 'find commit 1' 'grep "commit 1" tmp' test_expect_success 'find commit 50' 'grep "commit 50" tmp' # The switch button submits the select as h, so whatever head the request # follows has to sit in the list selected, or submitting would quietly move # the visitor to the first branch. test_expect_success 'a detached head stays selected in the switcher' ' sha=$(git -C repos/foo rev-parse master~1) && cgit_url "foo/log&h=$sha" >tmp && grep "option value=.$sha. selected" tmp ' test_expect_success 'a tag head stays selected in the switcher' ' git -C repos/foo tag t-switch master~1 && cgit_url "foo/log&h=t-switch" >tmp && grep "option value=.t-switch. selected>t-switch (detached)" tmp && git -C repos/foo tag -d t-switch ' test_expect_success 'a branch head keeps its plain option' ' cgit_url "foo/log&h=master" >tmp && grep "option value=.master. selected>master<" tmp && ! grep "detached" tmp ' test_expect_success 'generate "with%20space/log?qt=grep&q=commit+1"' ' cgit_url "with+space/log&qt=grep&q=commit+1" >tmp ' test_expect_success 'find commit 1' 'grep "commit 1" tmp' test_expect_success 'find link with %20 in path' 'grep "/with%20space/log/?qt=grep" tmp' test_expect_success 'find link with + in arg' 'grep "/log/?qt=grep&q=commit+1" tmp' test_expect_success 'no links with space in path' '! grep "href=./with space/" tmp' test_expect_success 'no links with space in arg' '! grep "q=commit 1" tmp' test_expect_success 'commit 2 is not visible' '! grep "commit 2" tmp' # Following a file diffs each commit for the name the file had there, so the # root commit that created it has to be diffed too, and paging has to go on # asking about the name the visitor followed rather than the older one. test_expect_success 'set up a renamed file to follow' ' test_create_repo repos/fol && ( cd repos/fol && echo 1 >a.txt && git add a.txt && git commit -m "create a" && for i in 2 3 4 do echo $i >>a.txt && git commit -am "edit a $i" || return 1 done && git mv a.txt b.txt && git commit -m "rename to b" && for i in 6 7 8 do echo $i >>b.txt && git commit -am "edit b $i" || return 1 done ) && { echo "virtual-root=/" && echo "cache-size=0" && echo "enable-follow-links=1" && echo "max-commit-count=3" && echo "repo.url=fol" && echo "repo.path=$PWD/repos/fol/.git" } >folrc ' test_expect_success 'a followed log reaches the root commit' ' CGIT_CONFIG="$PWD/folrc" QUERY_STRING="url=fol/log/b.txt&follow=1&ofs=6" cgit >tmp && grep ">edit a 2<" tmp && grep ">create a<" tmp ' test_expect_success 'the pager of a followed log keeps the name followed' ' CGIT_CONFIG="$PWD/folrc" QUERY_STRING="url=fol/log/b.txt&follow=1&ofs=3" cgit >tmp && grep ">edit a 3<" tmp && grep "href=./fol/log/b.txt?follow=1.>\[prev\]" tmp && grep "href=./fol/log/b.txt?ofs=6&follow=1.>\[next\]" tmp ' test_expect_success 'a cut subject keeps whole characters' ' git -C repos/foo commit --allow-empty -m "日本語の説明文です日本語の説明文です" && { echo "max-message-length=20" && sed "s/^cache-size=.*/cache-size=0/" cgitrc } >subjectrc && CGIT_CONFIG="$PWD/subjectrc" QUERY_STRING="url=foo/log/" cgit >tmp && grep ">日本語の説\.\.\." tmp ' test_expect_success 'the log draws the commit graph when enabled' ' { echo "enable-commit-graph=1" && sed "s/^cache-size=.*/cache-size=0/" cgitrc } >graphrc && CGIT_CONFIG="$PWD/graphrc" QUERY_STRING="url=foo/log/" cgit >tmp && grep "class=.commitgraph." tmp ' # The search is literal, so text that is no valid regular expression still # finds the commit holding it. test_expect_success 'a search for brackets matches them literally' ' git -C repos/foo commit --allow-empty -m "fix [brackets] in docs" && cgit_url "foo/log&qt=grep&q=%5Bbrackets" >tmp && grep "^Status: 200" tmp && grep "fix \\[brackets\\] in docs" tmp ' test_done