git p4 test: wait longer for p4d to start and test its pid
[gitweb.git] / t / lib-git-p4.sh
index b90986c2c98dcf34390d06bd149b62097771e39b..eea46a454f44a7fc4282dfe7f788337b5b61217a 100644 (file)
@@ -24,6 +24,7 @@ P4DPORT=$((10669 + ($testid - $git_p4_test_start)))
 
 export P4PORT=localhost:$P4DPORT
 export P4CLIENT=client
+export P4EDITOR=:
 
 db="$TRASH_DIRECTORY/db"
 cli="$TRASH_DIRECTORY/cli"
@@ -32,17 +33,42 @@ pidfile="$TRASH_DIRECTORY/p4d.pid"
 
 start_p4d() {
        mkdir -p "$db" "$cli" "$git" &&
+       rm -f "$pidfile" &&
        (
                p4d -q -r "$db" -p $P4DPORT &
                echo $! >"$pidfile"
        ) &&
-       for i in 1 2 3 4 5 ; do
-               p4 info >/dev/null 2>&1 && break || true &&
-               echo waiting for p4d to start &&
+
+       # This gives p4d a long time to start up, as it can be
+       # quite slow depending on the machine.  Set this environment
+       # variable to something smaller to fail faster in, say,
+       # an automated test setup.  If the p4d process dies, that
+       # will be caught with the "kill -0" check below.
+       i=${P4D_START_PATIENCE:-300}
+       pid=$(cat "$pidfile")
+       ready=
+       while test $i -gt 0
+       do
+               # succeed when p4 client commands start to work
+               if p4 info >/dev/null 2>&1
+               then
+                       ready=true
+                       break
+               fi
+               # fail if p4d died
+               kill -0 $pid 2>/dev/null || break
+               echo waiting for p4d to start
                sleep 1
-       done &&
-       # complain if it never started
-       p4 info >/dev/null &&
+               i=$(( $i - 1 ))
+       done
+
+       if test -z "$ready"
+       then
+               # p4d failed to start
+               return 1
+       fi
+
+       # build a client
        (
                cd "$cli" &&
                p4 client -i <<-EOF
@@ -52,6 +78,7 @@ start_p4d() {
                View: //depot/... //client/...
                EOF
        )
+       return 0
 }
 
 kill_p4d() {