t / lib-git-daemon.shon commit Merge branch 'pt/gitk' (ca2b71a)
   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
  35                echo >&4 "$line"
  36                cat >&4 &
  37
  38                # Check expected output
  39                if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble"
  40                then
  41                        kill "$GIT_DAEMON_PID"
  42                        wait "$GIT_DAEMON_PID"
  43                        trap 'die' EXIT
  44                        error "git daemon failed to start"
  45                fi
  46        } <git_daemon_output
  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}