aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/gpgscm/tests.scm31
1 files changed, 17 insertions, 14 deletions
diff --git a/tests/gpgscm/tests.scm b/tests/gpgscm/tests.scm
index a4339caf2..592b36f93 100644
--- a/tests/gpgscm/tests.scm
+++ b/tests/gpgscm/tests.scm
@@ -278,6 +278,15 @@
"-XXXXXX"))
(apply path-join components)))))
+;; Make a temporary directory and remove it at interpreter shutdown.
+;; Note that there are macros that limit the lifetime of temporary
+;; directories and files to a lexical scope. Use those if possible.
+;; Otherwise this works like mkdtemp.
+(define (mkdtemp-autoremove . components)
+ (let ((dir (apply mkdtemp components)))
+ (atexit (lambda () (unlink-recursively dir)))
+ dir))
+
(define-macro (with-temporary-working-directory . expressions)
(let ((tmp-sym (gensym)))
`(let* ((,tmp-sym (mkdtemp)))
@@ -621,12 +630,9 @@
(let loop ((pool (test-pool::new '())) (tests' tests))
(if (null? tests')
(let ((results (pool::wait)))
- (for-each (lambda (t)
- (catch (echo "Removing" t::directory "failed:" *error*)
- (unlink-recursively t::directory))
- (t::report)) (reverse results::procs))
+ (for-each (lambda (t) (t::report)) (reverse results::procs))
(exit (results::report)))
- (let* ((wd (mkdtemp))
+ (let* ((wd (mkdtemp-autoremove))
(test (car tests'))
(test' (test::set-directory wd)))
(loop (pool::add (test'::run-async))
@@ -638,12 +644,8 @@
(let loop ((pool (test-pool::new '())) (tests' tests))
(if (null? tests')
(let ((results (pool::wait)))
- (for-each (lambda (t)
- (catch (echo "Removing" t::directory "failed:" *error*)
- (unlink-recursively t::directory)))
- results::procs)
(exit (results::report)))
- (let* ((wd (mkdtemp))
+ (let* ((wd (mkdtemp-autoremove))
(test (car tests'))
(test' (test::set-directory wd)))
(loop (pool::add (test'::run-sync))
@@ -654,10 +656,11 @@
;; Returns a promise containing the arguments that must be passed to a
;; test implementing the consumer side of the cache protocol.
(define (make-environment-cache setup)
- (delay (let* ((tarball (make-temporary-file "environment-cache")))
- (atexit (lambda () (remove-temporary-file tarball)))
- (setup::run-sync '--create-tarball tarball)
- `(--unpack-tarball ,tarball))))
+ (delay (with-temporary-working-directory
+ (let ((tarball (make-temporary-file "environment-cache")))
+ (atexit (lambda () (remove-temporary-file tarball)))
+ (setup::run-sync '--create-tarball tarball)
+ `(--unpack-tarball ,tarball)))))
;; Command line flag handling. Returns the elements following KEY in
;; ARGUMENTS up to the next argument, or #f if KEY is not in