# Shell library to run git-daemon in tests. Ends the test early if # GIT_TEST_GIT_DAEMON is not set. # # Usage: # # . ./test-lib.sh # . "$TEST_DIRECTORY"/lib-git-daemon.sh # start_git_daemon # # test_expect_success '...' ' # ... # ' # # test_expect_success ... # # stop_git_daemon # test_done test_tristate GIT_TEST_GIT_DAEMON if test $GIT_TEST_GIT_DAEMON = false { setglobal skip_all = '"git-daemon testing disabled (unset GIT_TEST_GIT_DAEMON to enable)'" test_done } if test_have_prereq !PIPE { test_skip_or_die $GIT_TEST_GIT_DAEMON "file system does not support FIFOs" } setglobal LIB_GIT_DAEMON_PORT = $(LIB_GIT_DAEMON_PORT-${this_test#t}) setglobal GIT_DAEMON_PID = '' setglobal GIT_DAEMON_DOCUMENT_ROOT_PATH = ""$PWD"/repo" setglobal GIT_DAEMON_URL = "git://127.0.0.1:$LIB_GIT_DAEMON_PORT" proc start_git_daemon { if test -n $GIT_DAEMON_PID { error "start_git_daemon already called" } mkdir -p $GIT_DAEMON_DOCUMENT_ROOT_PATH trap 'code=$?; stop_git_daemon; (exit $code); die' EXIT say >&3 "Starting git daemon ...> !3 "Starting git daemon ..." mkfifo git_daemon_output git daemon --listen=127.0.0.1 --port="$LIB_GIT_DAEMON_PORT" \ --reuseaddr --verbose \ --base-path="$GIT_DAEMON_DOCUMENT_ROOT_PATH" \ @Argv $GIT_DAEMON_DOCUMENT_ROOT_PATH \ > !3 !2 >git_daemon_output & setglobal GIT_DAEMON_PID = $BgPid do { read line <&7 echo >&4 $line> !4 "$line" cat <&7 > !4 & } 7&3 "Stopping git daemon ...> !3 "Stopping git daemon ..." kill $GIT_DAEMON_PID wait $GIT_DAEMON_PID > !3 !2 > !4 setglobal ret = $Status if test_match_signal 15 $Status { error "git daemon exited with status: $ret" } setglobal GIT_DAEMON_PID = '' rm -f git_daemon_output }