File tree Expand file tree Collapse file tree 3 files changed +29
-7
lines changed Expand file tree Collapse file tree 3 files changed +29
-7
lines changed Original file line number Diff line number Diff line change @@ -767,16 +767,16 @@ the given NAME."
767
767
768
768
(defmethod install ((release release))
769
769
(let ((archive (ensure-local-archive-file release))
770
- (tar (qmerge " tmp/release-install.tar" ))
771
770
(output (relative-to (dist release)
772
771
(make-pathname :directory
773
772
(list :relative " software" ))))
774
773
(tracking (install-metadata-file release)))
775
- (ensure-directories-exist tar)
776
- (ensure-directories-exist output)
777
- (ensure-directories-exist tracking)
778
- (gunzip archive tar)
779
- (unpack-tarball tar :directory output)
774
+ (with-temporary-file (tar " release-install.tar" )
775
+ (ensure-directories-exist tar)
776
+ (ensure-directories-exist output)
777
+ (ensure-directories-exist tracking)
778
+ (gunzip archive tar)
779
+ (unpack-tarball tar :directory output))
780
780
(ensure-directories-exist tracking)
781
781
(with-open-file (stream tracking
782
782
:direction :output
Original file line number Diff line number Diff line change 16
16
# :file-size
17
17
# :safely-read
18
18
# :safely-read-file
19
- # :make-versions-url))
19
+ # :make-versions-url
20
+ # :with-temporary-file))
20
21
21
22
(defpackage #:ql-setup
22
23
(:documentation
Original file line number Diff line number Diff line change @@ -122,3 +122,24 @@ http://foo/bar-versions.txt."
122
122
(subseq url 0 suffix-pos)
123
123
" -versions"
124
124
extension))))
125
+
126
+ (defun call-with-temporary-file (fun template-pathname)
127
+ (assert (null (pathname-directory template-pathname)))
128
+ (let* ((relative-file (merge-pathnames template-pathname
129
+ #p " tmp/" ))
130
+ (absolute-file (ql-setup :qmerge relative-file))
131
+ (randomized-file (make-pathname :name (format nil " ~A -~ 36,5,'0 R "
132
+ (pathname-name template-pathname)
133
+ (random #xFFFFFF ))
134
+ :defaults absolute-file)))
135
+ (unwind-protect
136
+ (funcall fun randomized-file)
137
+ (delete-file-if-exists randomized-file))))
138
+
139
+ ; ;; TODO: Use this where (qmerge "tmp/...") is used, when possible
140
+ (defmacro with-temporary-file ((var template) &body body)
141
+ " Evaluate BODY with VAR bound to a temporary pathname created by
142
+ adding random data to the pathname-name of TEMPLATE, which should be a
143
+ pathname without a directory component. After evaluation, the
144
+ temporary pathname is deleted if it exists."
145
+ ` (call-with-temporary-file (lambda (, var) ,@ body) , template))
You can’t perform that action at this time.
0 commit comments