summaryrefslogtreecommitdiff
path: root/gpgscm/gnupg.scm
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2017-10-05 17:27:09 +0200
committerWerner Koch <wk@gnupg.org>2017-10-05 17:27:35 +0200
commit09984557106ba52ff8889effd811282dca389a99 (patch)
tree58174f452b9190d7e7654ea606deb74745a77b3c /gpgscm/gnupg.scm
parentdda5fb3474a81047e5bd52a194640fb44e1d60ab (diff)
downloadlibgpg-error-09984557106ba52ff8889effd811282dca389a99.tar.gz
gpgscm: Move files to a gpgscm subdirectory.
-- Note that we used git filter-branch --subdirectory-filter tests/gpgscm in gnupg master to filter out the gpgscm part. This commit merely moves these files to a subdirectory which will be used in libgpg-error for gpgscm. Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'gpgscm/gnupg.scm')
-rw-r--r--gpgscm/gnupg.scm44
1 files changed, 44 insertions, 0 deletions
diff --git a/gpgscm/gnupg.scm b/gpgscm/gnupg.scm
new file mode 100644
index 0000000..5fcf9fd
--- /dev/null
+++ b/gpgscm/gnupg.scm
@@ -0,0 +1,44 @@
+;; Common definitions for executing gpg and related tools.
+;;
+;; Copyright (C) 2016, 2017 g10 Code GmbH
+;;
+;; This file is part of GnuPG.
+;;
+;; GnuPG is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GnuPG is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+;; Evaluate a sequence of expressions with the given home directory.
+(define-macro (with-home-directory gnupghome . expressions)
+ (let ((original-home-directory (gensym)))
+ `(let ((,original-home-directory (getenv "GNUPGHOME")))
+ (dynamic-wind
+ (lambda () (setenv "GNUPGHOME" ,gnupghome #t))
+ (lambda () ,@expressions)
+ (lambda () (setenv "GNUPGHOME" ,original-home-directory #t))))))
+
+;; Evaluate a sequence of expressions with an ephemeral home
+;; directory.
+(define-macro (with-ephemeral-home-directory setup-fn . expressions)
+ (let ((original-home-directory (gensym))
+ (ephemeral-home-directory (gensym))
+ (setup (gensym)))
+ `(let ((,original-home-directory (getenv "GNUPGHOME"))
+ (,ephemeral-home-directory (mkdtemp))
+ (,setup (delay (,setup-fn))))
+ (finally (unlink-recursively ,ephemeral-home-directory)
+ (dynamic-wind
+ (lambda ()
+ (setenv "GNUPGHOME" ,ephemeral-home-directory #t)
+ (with-working-directory ,ephemeral-home-directory (force ,setup)))
+ (lambda () ,@expressions)
+ (lambda () (setenv "GNUPGHOME" ,original-home-directory #t)))))))