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?
|
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
|
||||||
|
|
|
@ -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."
|
||||||
|
|
Reference in New Issue