1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
#!/bin/sh
set -ex
d () {
date --iso-8601=ns >&2
ps -ef | grep gpg-agent >&2 ||:
}
d
retry_until_ok () {
sleeptime=0
d
while ! "$@"; do
d
case $sleeptime in
??.*)
echo >&2 "$0: GPG AGENT STARTP $@ TIMED OUT"
exit 127
;;
esac
sleep $sleeptime
sleeptime=$(echo "($sleeptime + 0.001) * 2" | bc -l)
done
}
kill_agent_not_running () {
LC_MESSAGES=C gpg-connect-agent --no-autostart </dev/null \
KILLAGENT /bye 2>&1 \
| tee -a /dev/stderr \
| grep 'no gpg-agent running' >&2
}
echo >&2 'GPG-WITHAGENT... PRE-STOPPING'
retry_until_ok kill_agent_not_running
agent_is_running () {
gpg-connect-agent --no-autostart </dev/null \
'/echo dgit-gpg-agent-ok' /bye 2>&1 \
| grep dgit-gpg-agent-ok >&2
}
$DGIT_STUNT_AGENT --daemon </dev/null >&2
retry_until_ok agent_is_running
echo >&2 'GPG-WITHAGENT... RUNNING'
d
set +e
$DGIT_TEST_REAL_GPG \
--agent-program=$DGIT_STUNT_AGENT "$@" 2>&9
rc=$?
set -e
d
echo >&2 'GPG-WITHAGENT... STOPPING'
retry_until_ok kill_agent_not_running
echo >&2 'GPG-WITHAGENT... DONE'
d
exit $rc
|