t / lib-git-daemon.shon commit xread/xwrite: clip MAX_IO_SIZE to SSIZE_MAX (a983e6a)
   1#!/bin/sh
   2
   3if test -z "$GIT_TEST_GIT_DAEMON"
   4then
   5        skip_all="git-daemon testing disabled (define GIT_TEST_GIT_DAEMON to enable)"
   6        test_done
   7fi
   8
   9LIB_GIT_DAEMON_PORT=${LIB_GIT_DAEMON_PORT-'8121'}
  10
  11GIT_DAEMON_PID=
  12GIT_DAEMON_DOCUMENT_ROOT_PATH="$PWD"/repo
  13GIT_DAEMON_URL=git://127.0.0.1:$LIB_GIT_DAEMON_PORT
  14
  15start_git_daemon() {
  16        if test -n "$GIT_DAEMON_PID"
  17        then
  18                error "start_git_daemon already called"
  19        fi
  20
  21        mkdir -p "$GIT_DAEMON_DOCUMENT_ROOT_PATH"
  22
  23        trap 'code=$?; stop_git_daemon; (exit $code); die' EXIT
  24
  25        say >&3 "Starting git daemon ..."
  26        mkfifo git_daemon_output
  27        git daemon --listen=127.0.0.1 --port="$LIB_GIT_DAEMON_PORT" \
  28                --reuseaddr --verbose \
  29                --base-path="$GIT_DAEMON_DOCUMENT_ROOT_PATH" \
  30                "$@" "$GIT_DAEMON_DOCUMENT_ROOT_PATH" \
  31                >&3 2>git_daemon_output &
  32        GIT_DAEMON_PID=$!
  33        {
  34                read line <&7
  35                echo >&4 "$line"
  36                cat <&7 >&4 &
  37        } 7<git_daemon_output &&
  38
  39        # Check expected output
  40        if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble"
  41        then
  42                kill "$GIT_DAEMON_PID"
  43                wait "$GIT_DAEMON_PID"
  44                trap 'die' EXIT
  45                error "git daemon failed to start"
  46        fi
  47}
  48
  49stop_git_daemon() {
  50        if test -z "$GIT_DAEMON_PID"
  51        then
  52                return
  53        fi
  54
  55        trap 'die' EXIT
  56
  57        # kill git-daemon child of git
  58        say >&3 "Stopping git daemon ..."
  59        kill "$GIT_DAEMON_PID"
  60        wait "$GIT_DAEMON_PID" >&3 2>&4
  61        ret=$?
  62        # expect exit with status 143 = 128+15 for signal TERM=15
  63        if test $ret -ne 143
  64        then
  65                error "git daemon exited with status: $ret"
  66        fi
  67        GIT_DAEMON_PID=
  68        rm -f git_daemon_output
  69}