~ruther/guix-local

d9dbab18e2f5e1854f663bfe760765c29c11cbd9 — Ludovic Courtès 13 years ago 4fa697e
utils: Have `substitute' restore the file's permission bits.

* guix/build/utils.scm (substitute): Restore FILE's mode before renaming
  TEMPLATE.
1 files changed, 14 insertions(+), 11 deletions(-)

M guix/build/utils.scm
M guix/build/utils.scm => guix/build/utils.scm +14 -11
@@ 159,7 159,8 @@ as (PROC MATCH OUTPUT-PORT)."
                                proc)))
                        pattern+procs))
         (template (string-append file ".XXXXXX"))
         (out      (mkstemp! template)))
         (out      (mkstemp! template))
         (mode     (stat:mode (stat file))))
    (with-throw-handler #t
      (lambda ()
        (call-with-input-file file


@@ 168,18 169,20 @@ as (PROC MATCH OUTPUT-PORT)."
              (if (eof-object? line)
                  #t
                  (begin
                    (for-each (match-lambda
                               ((regexp . proc)
                                (cond ((regexp-exec regexp line)
                                       =>
                                       (lambda (m)
                                         (proc m out)))
                                      (else
                                       (display line out)
                                       (newline out)))))
                              rx+proc)
                    (or (any (match-lambda
                              ((regexp . proc)
                               (and=> (regexp-exec regexp line)
                                      (lambda (m)
                                        (proc m out)
                                        #t))))
                             rx+proc)
                        (begin
                          (display line out)
                          (newline out)
                          #t))
                    (loop (read-line in)))))))
        (close out)
        (chmod template mode)
        (rename-file template file))
      (lambda (key . args)
        (false-if-exception (delete-file template))))))