Diffstat (limited to 'tests/setup.sh')
| -rwxr-xr-x | tests/setup.sh | 186 |
1 files changed, 129 insertions, 57 deletions
diff --git a/tests/setup.sh b/tests/setup.sh index 51d5a75..8db810f 100755 --- a/tests/setup.sh +++ b/tests/setup.sh @@ -15,94 +15,166 @@ # run_test 'repo index' 'cgit_url "/" | tidy -e' # run_test 'repo summary' 'cgit_url "/foo" | tidy -e' +# We don't want to run Git commands through Valgrind, so we filter out the +# --valgrind option here and handle it ourselves. We copy the arguments +# assuming that none contain a newline, although other whitespace is +# preserved. +LF=' +' +test_argv= + +while test $# != 0 +do + case "$1" in + --va|--val|--valg|--valgr|--valgri|--valgrin|--valgrind) + cgit_valgrind=t + test_argv="$test_argv${LF}--verbose" + ;; + *) + test_argv="$test_argv$LF$1" + ;; + esac + shift +done + +OLDIFS=$IFS +IFS=$LF +set -- $test_argv +IFS=$OLDIFS + +: ${TEST_DIRECTORY=$(pwd)/../git/t} +: ${TEST_OUTPUT_DIRECTORY=$(pwd)} +TEST_NO_CREATE_REPO=YesPlease +. "$TEST_DIRECTORY"/test-lib.sh + +# Prepend the directory containing cgit to PATH. +if test -n "$cgit_valgrind" +then + GIT_VALGRIND="$TEST_DIRECTORY/valgrind" + CGIT_VALGRIND=$(cd ../valgrind && pwd) + PATH="$CGIT_VALGRIND/bin:$PATH" + export GIT_VALGRIND CGIT_VALGRIND +else + PATH="$(pwd)/../..:$PATH" +fi + +FILTER_DIRECTORY=$(cd ../filters && pwd) + +if cgit --version | grep -F -q "[+] Lua scripting"; then + export CGIT_HAS_LUA=1 +else + export CGIT_HAS_LUA=0 +fi mkrepo() { name=$1 count=$2 - dir=$PWD - test -d $name && return - printf "Creating testrepo %s\n" $name - mkdir -p $name - cd $name - git init - for ((n=1; n<=count; n++)) - do - echo $n >file-$n - git add file-$n - git commit -m "commit $n" - done - cd $dir + test_create_repo "$name" + ( + cd "$name" + n=1 + while test $n -le $count + do + echo $n >file-$n + git add file-$n + git commit -m "commit $n" + n=$(expr $n + 1) + done + case "$3" in + testplus) + echo "hello" >a+b + git add a+b + git commit -m "add a+b" + git branch "1+2" + ;; + commit-graph) + git commit-graph write + ;; + esac + ) } setup_repos() { - rm -rf trash/cache - mkdir -p trash/cache - mkrepo trash/repos/foo 5 >/dev/null - mkrepo trash/repos/bar 50 >/dev/null - cat >trash/cgitrc <<EOF + rm -rf cache + mkdir -p cache + mkrepo repos/foo 5 >/dev/null + mkrepo repos/bar 50 commit-graph >/dev/null + mkrepo repos/foo+bar 10 testplus >/dev/null + mkrepo "repos/with space" 2 >/dev/null + mkrepo repos/filter 5 testplus >/dev/null + cat >cgitrc <<EOF virtual-root=/ -cache-root=$PWD/trash/cache +cache-root=$PWD/cache -nocache=0 -snapshots=tar.gz tar.bz zip +cache-size=1021 +snapshots=tar.gz tar.bz tar.lz tar.xz tar.zst zip enable-log-filecount=1 enable-log-linecount=1 summary-log=5 summary-branches=5 summary-tags=5 +clone-url=git://example.org/\$CGIT_REPO_URL.git +enable-filter-overrides=1 repo.url=foo -repo.path=$PWD/trash/repos/foo/.git -repo.desc=the foo repo +repo.path=$PWD/repos/foo/.git +# Do not specify a description for this repo, as it then will be assigned +# the constant value "[no description]" (which actually used to cause a +# segfault). repo.url=bar -repo.path=$PWD/trash/repos/bar/.git +repo.path=$PWD/repos/bar/.git repo.desc=the bar repo -EOF -} -prepare_tests() -{ - setup_repos - test_count=0 - test_failed=0 - echo "$@" "($0)" -} +repo.url=foo+bar +repo.path=$PWD/repos/foo+bar/.git +repo.desc=the foo+bar repo -tests_done() -{ - printf "\n" - if test $test_failed -gt 0 - then - printf "[%s of %s tests failed]\n" $test_failed $test_count - false - fi -} +repo.url=with space +repo.path=$PWD/repos/with space/.git +repo.desc=spaced repo -run_test() -{ - desc=$1 - script=$2 - ((test_count++)) - eval "$2" >test-output.log - res=$? - if test $res = 0 - then - printf " %s: ok - %s\n" $test_count "$desc" - else - ((test_failed++)) - printf " %s: fail - %s\n" $test_count "$desc" +repo.url=filter-exec +repo.path=$PWD/repos/filter/.git +repo.desc=filtered repo +repo.about-filter=exec:$FILTER_DIRECTORY/dump.sh +repo.commit-filter=exec:$FILTER_DIRECTORY/dump.sh +repo.email-filter=exec:$FILTER_DIRECTORY/dump.sh +repo.source-filter=exec:$FILTER_DIRECTORY/dump.sh +repo.readme=master:a+b +EOF + + if [ $CGIT_HAS_LUA -eq 1 ]; then + cat >>cgitrc <<EOF +repo.url=filter-lua +repo.path=$PWD/repos/filter/.git +repo.desc=filtered repo +repo.about-filter=lua:$FILTER_DIRECTORY/dump.lua +repo.commit-filter=lua:$FILTER_DIRECTORY/dump.lua +repo.email-filter=lua:$FILTER_DIRECTORY/dump.lua +repo.source-filter=lua:$FILTER_DIRECTORY/dump.lua +repo.readme=master:a+b +EOF fi } cgit_query() { - CGIT_CONFIG="$PWD/trash/cgitrc" QUERY_STRING="$1" "$PWD/../cgit" + CGIT_CONFIG="$PWD/cgitrc" QUERY_STRING="$1" cgit } cgit_url() { - CGIT_CONFIG="$PWD/trash/cgitrc" QUERY_STRING="url=$1" "$PWD/../cgit" + CGIT_CONFIG="$PWD/cgitrc" QUERY_STRING="url=$1" cgit +} + +strip_headers() { + while read -r line + do + test -z "$line" && break + done + cat } +test -z "$CGIT_TEST_NO_CREATE_REPOS" && setup_repos |