From 9e364c12ca7f27b028e4e82ceb719d05893e2c33 Mon Sep 17 00:00:00 2001
From: Arun Isaac
Date: Mon, 4 Jul 2022 18:21:36 +0530
Subject: utils: Add call-with-temporary-directory utility.

* tissue/utils.scm: Import (ice-9 filesystem).
(call-with-temporary-directory): New function.
---
 tissue/utils.scm | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/tissue/utils.scm b/tissue/utils.scm
index 2eccc4f..7fac814 100644
--- a/tissue/utils.scm
+++ b/tissue/utils.scm
@@ -20,10 +20,12 @@
   #:use-module (rnrs io ports)
   #:use-module (srfi srfi-19)
   #:use-module (srfi srfi-26)
+  #:use-module (ice-9 filesystem)
   #:use-module (ice-9 popen)
   #:export (string-remove-prefix
             human-date-string
             call-with-current-directory
+            call-with-temporary-directory
             call-with-output-pipe
             get-line-dos-or-unix
             memoize-thunk))
@@ -60,6 +62,16 @@ directory after THUNK returns."
                   thunk
                   (cut chdir original-current-directory))))
 
+(define (call-with-temporary-directory proc)
+  "Call PROC with a new temporary directory, and delete it when PROC
+returns or exits non-locally."
+  (let ((temporary-directory (mkdtemp "XXXXXX")))
+    (dynamic-wind (const #t)
+                  (cut proc temporary-directory)
+                  (lambda ()
+                    (when (file-exists? temporary-directory)
+                      (delete-file-recursively temporary-directory))))))
+
 (define (call-with-output-pipe proc program . args)
   "Execute PROGRAM ARGS ... in a subprocess with a pipe to it. Call PROC
 with an output port to that pipe. Close the pipe once PROC exits, even
-- 
cgit v1.2.3