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
parent
a08cb3ca95
commit
d845e3af7c
|
@ -53,6 +53,7 @@
|
|||
directory-exists?
|
||||
executable-file?
|
||||
symbolic-link?
|
||||
call-with-temporary-output-file
|
||||
call-with-ascii-input-file
|
||||
elf-file?
|
||||
ar-file?
|
||||
|
@ -198,6 +199,22 @@ introduce the version part."
|
|||
"Return #t if FILE is a symbolic link (aka. \"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)
|
||||
"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
|
||||
|
|
|
@ -35,7 +35,9 @@
|
|||
#:use-module (rnrs io ports) ;need 'port-position' etc.
|
||||
#:use-module ((rnrs bytevectors) #:select (bytevector-u8-set!))
|
||||
#: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 diagnostics) ;<location>, &error-location, etc.
|
||||
#:use-module (ice-9 format)
|
||||
|
@ -59,7 +61,9 @@
|
|||
|
||||
&fix-hint
|
||||
fix-hint?
|
||||
condition-fix-hint)
|
||||
condition-fix-hint
|
||||
|
||||
call-with-temporary-output-file)
|
||||
#:export (strip-keyword-arguments
|
||||
default-keyword-arguments
|
||||
substitute-keyword-arguments
|
||||
|
@ -94,7 +98,6 @@
|
|||
tarball-sans-extension
|
||||
compressed-file?
|
||||
switch-symlinks
|
||||
call-with-temporary-output-file
|
||||
call-with-temporary-directory
|
||||
with-atomic-file-output
|
||||
|
||||
|
@ -677,22 +680,6 @@ REPLACEMENT."
|
|||
(substring str start index)
|
||||
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)
|
||||
"Call PROC with a name of a temporary directory; close the directory and
|
||||
delete it when leaving the dynamic extent of this call."
|
||||
|
|
Reference in New Issue