chiark / gitweb /
Merge remote-tracking branch 'dgit/dgit/sid' into experimental
[dgit.git] / tests / tstunt / gpg-withagent
1 #!/bin/sh
2 set -ex
3
4 retry_until_ok () {
5         sleeptime=0
6         while ! "$@"; do
7                 case $sleeptime in
8                 ??.*)
9                         echo >&2 "$0: GPG AGENT STARTP $@ TIMED OUT"
10                         exit 127
11                         ;;
12                 esac
13                 sleep $sleeptime
14                 sleeptime=$(echo "($sleeptime + 0.001) * 2" | bc -l)
15         done
16 }
17
18 echo >&2 'GPG-WITHAGENT...'
19
20 agent_is_running () {
21         gpg-connect-agent --no-autostart </dev/null \
22                 '/echo dgit-gpg-agent-ok' /bye 2>&1 \
23         | grep dgit-gpg-agent-ok >&2
24 }
25
26
27 $DGIT_STUNT_AGENT --daemon </dev/null >&2
28 retry_until_ok agent_is_running
29
30 echo >&2 'GPG-WITHAGENT... RUNNING'
31
32 set +e
33 $DGIT_TEST_REAL_GPG                                     \
34         --agent-program=$DGIT_STUNT_AGENT "$@"
35 rc=$?
36 set -e
37
38 echo >&2 'GPG-WITHAGENT... STOPPING'
39
40 kill_agent_not_running () {
41         LC_MESSAGES=C gpg-connect-agent --no-autostart </dev/null \
42                 KILLAGENT /bye 2>&1 \
43         | tee -a /dev/stderr \
44         | grep 'no gpg-agent running' >&2
45 }
46
47 retry_until_ok kill_agent_not_running
48
49 echo >&2 'GPG-WITHAGENT... DONE'
50
51 exit $rc