me
/
guix
Archived
1
0
Fork 0

utils: Add 'call-with-temporary-output-file'.

* guix/utils.scm: Re-export 'call-with-temporary-output-file'.
(call-with-temporary-output-file): Move to...
* guix/build/utils.scm (call-with-temporary-output-file): ... here.
master
Ludovic Courtès 2020-09-19 14:11:47 +02:00
parent a08cb3ca95
commit d845e3af7c
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 23 additions and 19 deletions

View File

@ -53,6 +53,7 @@
directory-exists? directory-exists?
executable-file? executable-file?
symbolic-link? symbolic-link?
call-with-temporary-output-file
call-with-ascii-input-file call-with-ascii-input-file
elf-file? elf-file?
ar-file? ar-file?
@ -198,6 +199,22 @@ introduce the version part."
"Return #t if FILE is a symbolic link (aka. \"symlink\".)" "Return #t if FILE is a symbolic link (aka. \"symlink\".)"
(eq? (stat:type (lstat file)) 'symlink)) (eq? (stat:type (lstat file)) 'symlink))
(define (call-with-temporary-output-file proc)
"Call PROC with a name of a temporary file and open output port to that
file; close the file and delete it when leaving the dynamic extent of this
call."
(let* ((directory (or (getenv "TMPDIR") "/tmp"))
(template (string-append directory "/guix-file.XXXXXX"))
(out (mkstemp! template)))
(dynamic-wind
(lambda ()
#t)
(lambda ()
(proc template out))
(lambda ()
(false-if-exception (close out))
(false-if-exception (delete-file template))))))
(define (call-with-ascii-input-file file proc) (define (call-with-ascii-input-file file proc)
"Open FILE as an ASCII or binary file, and pass the resulting port to "Open FILE as an ASCII or binary file, and pass the resulting port to
PROC. FILE is closed when PROC's dynamic extent is left. Return the PROC. FILE is closed when PROC's dynamic extent is left. Return the

View File

@ -35,7 +35,9 @@
#:use-module (rnrs io ports) ;need 'port-position' etc. #:use-module (rnrs io ports) ;need 'port-position' etc.
#:use-module ((rnrs bytevectors) #:select (bytevector-u8-set!)) #:use-module ((rnrs bytevectors) #:select (bytevector-u8-set!))
#:use-module (guix memoization) #:use-module (guix memoization)
#:use-module ((guix build utils) #:select (dump-port mkdir-p delete-file-recursively)) #:use-module ((guix build utils)
#:select (dump-port mkdir-p delete-file-recursively
call-with-temporary-output-file))
#:use-module ((guix build syscalls) #:select (mkdtemp! fdatasync)) #:use-module ((guix build syscalls) #:select (mkdtemp! fdatasync))
#:use-module (guix diagnostics) ;<location>, &error-location, etc. #:use-module (guix diagnostics) ;<location>, &error-location, etc.
#:use-module (ice-9 format) #:use-module (ice-9 format)
@ -59,7 +61,9 @@
&fix-hint &fix-hint
fix-hint? fix-hint?
condition-fix-hint) condition-fix-hint
call-with-temporary-output-file)
#:export (strip-keyword-arguments #:export (strip-keyword-arguments
default-keyword-arguments default-keyword-arguments
substitute-keyword-arguments substitute-keyword-arguments
@ -94,7 +98,6 @@
tarball-sans-extension tarball-sans-extension
compressed-file? compressed-file?
switch-symlinks switch-symlinks
call-with-temporary-output-file
call-with-temporary-directory call-with-temporary-directory
with-atomic-file-output with-atomic-file-output
@ -677,22 +680,6 @@ REPLACEMENT."
(substring str start index) (substring str start index)
pieces)))))))) pieces))))))))
(define (call-with-temporary-output-file proc)
"Call PROC with a name of a temporary file and open output port to that
file; close the file and delete it when leaving the dynamic extent of this
call."
(let* ((directory (or (getenv "TMPDIR") "/tmp"))
(template (string-append directory "/guix-file.XXXXXX"))
(out (mkstemp! template)))
(dynamic-wind
(lambda ()
#t)
(lambda ()
(proc template out))
(lambda ()
(false-if-exception (close out))
(false-if-exception (delete-file template))))))
(define (call-with-temporary-directory proc) (define (call-with-temporary-directory proc)
"Call PROC with a name of a temporary directory; close the directory and "Call PROC with a name of a temporary directory; close the directory and
delete it when leaving the dynamic extent of this call." delete it when leaving the dynamic extent of this call."