me
/
guix
Archived
1
0
Fork 0

utils: Have `substitute' restore the file's permission bits.

* guix/build/utils.scm (substitute): Restore FILE's mode before renaming
  TEMPLATE.
master
Ludovic Courtès 2012-07-07 18:11:52 +02:00
parent 4fa697e932
commit d9dbab18e2
1 changed files with 14 additions and 11 deletions

View File

@ -159,7 +159,8 @@ as (PROC MATCH OUTPUT-PORT)."
proc))) proc)))
pattern+procs)) pattern+procs))
(template (string-append file ".XXXXXX")) (template (string-append file ".XXXXXX"))
(out (mkstemp! template))) (out (mkstemp! template))
(mode (stat:mode (stat file))))
(with-throw-handler #t (with-throw-handler #t
(lambda () (lambda ()
(call-with-input-file file (call-with-input-file file
@ -168,18 +169,20 @@ as (PROC MATCH OUTPUT-PORT)."
(if (eof-object? line) (if (eof-object? line)
#t #t
(begin (begin
(for-each (match-lambda (or (any (match-lambda
((regexp . proc) ((regexp . proc)
(cond ((regexp-exec regexp line) (and=> (regexp-exec regexp line)
=>
(lambda (m) (lambda (m)
(proc m out))) (proc m out)
(else #t))))
(display line out)
(newline out)))))
rx+proc) rx+proc)
(begin
(display line out)
(newline out)
#t))
(loop (read-line in))))))) (loop (read-line in)))))))
(close out) (close out)
(chmod template mode)
(rename-file template file)) (rename-file template file))
(lambda (key . args) (lambda (key . args)
(false-if-exception (delete-file template)))))) (false-if-exception (delete-file template))))))