#!/bin/sh # Checks the post-receive hooks under custom/hooks. The cache hook runs from a # copy pointed at a cache in the trash directory, since the shipped one names # the system's cache root, and the age hook runs inside bare repositories the # way git runs it after a push. test_description='Check the shipped post-receive hooks' CGIT_TEST_NO_CREATE_REPOS=YesPlease . ./setup.sh HOOK_DIRECTORY="$TEST_OUTPUT_DIRECTORY/../custom/hooks" test_expect_success 'the cache hook clears the slots and keeps the locks' ' mkdir cache && echo page >cache/0123abcd && echo writer >cache/0123abcd.lock && sed "s|^cache_root=.*|cache_root='\''$PWD/cache'\''|" \ "$HOOK_DIRECTORY/post-receive.cgit-cache" >cache-hook && sh cache-hook && test_path_is_missing cache/0123abcd && test_path_is_file cache/0123abcd.lock ' test_expect_success SANITY 'the cache hook shows a pusher no error' ' echo page >cache/89abcdef && test_when_finished "chmod 755 cache" && chmod 555 cache && sh cache-hook 2>err && test_path_is_file cache/89abcdef && test_must_be_empty err ' test_expect_success 'the age hook writes the newest branch date' ' test_create_repo work && test_commit -C work first && git init -q --bare plain.git && git -C work push -q ../plain.git HEAD:refs/heads/main && (cd plain.git && sh "$HOOK_DIRECTORY/post-receive.cgit-age") && git -C plain.git for-each-ref --format="%(committerdate:iso8601)" refs/heads/main >expect && test_cmp expect plain.git/info/web/last-modified ' # git keeps a shared repository group writable whatever the pusher's umask, # and the next member to push has to be able to replace the file. test_expect_success SANITY 'the age hook keeps a shared directory group writable' ' git init -q --bare --shared=group shared.git && git -C work push -q ../shared.git HEAD:refs/heads/main && (cd shared.git && umask 022 && sh "$HOOK_DIRECTORY/post-receive.cgit-age") && ls -ld shared.git/info/web >mode && grep "^drwxrw[xs]" mode ' test_done