test-gpg: start gpg-agent by gpg-connect-agent only if GnuPG v2.1+ detected
authorYuya Nishihara <yuya@tcha.org>
Mon, 29 Aug 2016 22:59:39 +0900
changeset 29873 80ba176bad62
parent 29872 58db005d870e
child 29874 0099e29fc95c
test-gpg: start gpg-agent by gpg-connect-agent only if GnuPG v2.1+ detected Danek Duvall found that gpg-connect-agent of GnuPG 2.0 never starts gpg-agent daemon. The 2.1 way is documented as "gpg-coonect-agent /bye" [1], which appears to be different from the 2.0 way [2]. [1]: https://www.gnupg.org/documentation/manuals/gnupg/Invoking-GPG_002dAGENT.html [2]: https://www.gnupg.org/documentation/manuals/gnupg-2.0/Invoking-GPG_002dAGENT.html Since "gpg-agent --daemon" of GnuPG 2.1 never prints environment variables, "eval $(gpg-agent --daemon)" would be valid only for GnuPG < 2.1, and we'll need a different workaround for 2.0. I have no 2.0 environment, I won't implement it.
tests/hghave.py
tests/test-gpg.t
--- a/tests/hghave.py	Fri Aug 26 00:16:51 2016 +0000
+++ b/tests/hghave.py	Mon Aug 29 22:59:39 2016 +0900
@@ -357,6 +357,10 @@
 def has_gpg2():
     return matchoutput('gpg --version 2>&1', br'GnuPG[^0-9]+2\.')
 
+@check("gpg21", "gpg client v2.1+")
+def has_gpg21():
+    return matchoutput('gpg --version 2>&1', br'GnuPG[^0-9]+2\.(?!0)')
+
 @check("unix-permissions", "unix-style permissions")
 def has_unix_permissions():
     d = tempfile.mkdtemp(dir='.', prefix=tempprefix)
--- a/tests/test-gpg.t	Fri Aug 26 00:16:51 2016 +0000
+++ b/tests/test-gpg.t	Mon Aug 29 22:59:39 2016 +0900
@@ -12,11 +12,16 @@
   $ GNUPGHOME="$TESTTMP/gpg"; export GNUPGHOME
   $ cp -R "$TESTDIR/gpg" "$GNUPGHOME"
 
-Start gpg-agent, which is required by GnuPG v2, and migrate secret keys
+Start gpg-agent, which is required by GnuPG v2
+
+#if gpg21
+  $ gpg-connect-agent -q --subst /serverpid '/echo ${get serverpid}' /bye \
+  > >> $DAEMON_PIDS
+#endif
+
+and migrate secret keys
 
 #if gpg2
-  $ gpg-connect-agent -q --subst /serverpid '/echo ${get serverpid}' /bye \
-  > >> $DAEMON_PIDS
   $ gpg --no-permission-warning --no-secmem-warning --list-secret-keys \
   > > /dev/null 2>&1
 #endif