From d9dbab18e2f5e1854f663bfe760765c29c11cbd9 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sat, 7 Jul 2012 18:11:52 +0200 Subject: utils: Have `substitute' restore the file's permission bits. * guix/build/utils.scm (substitute): Restore FILE's mode before renaming TEMPLATE. --- guix/build/utils.scm | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/guix/build/utils.scm b/guix/build/utils.scm index 3dc7674043..e99afdfcf3 100644 --- a/guix/build/utils.scm +++ b/guix/build/utils.scm @@ -159,7 +159,8 @@ (define (substitute file pattern+procs) 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 @@ (define (substitute file pattern+procs) (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)))))) -- cgit v1.2.3