build-system/gnu: Reset timestamps on build tree when source is a directory.

* guix/build/utils.scm (copy-recursively): Add #:keep-mtime? parameter
  and honor it.
* guix/build/gnu-build-system.scm (unpack): Use #:keep-mtime? #t.
* gnu/packages/admin.scm (shadow)[arguments]: Remove 'reset-timestamps'
  phase.
This commit is contained in:
Ludovic Courtès 2014-04-14 00:08:54 +02:00
parent 4eb202a3d8
commit 8d846470f2
3 changed files with 19 additions and 16 deletions

@ -201,16 +201,7 @@ client and server, a telnet client and server, and an rsh client and server.")
(delete-file (string-append bin "/groups"))
(for-each delete-file (find-files man "^groups\\."))
#t))
(alist-cons-after
'unpack 'reset-timestamps
(lambda _
;; FIXME: Reset the file timestamps here, until the
;; 'unpack' phase does it for us. See
;; <https://lists.gnu.org/archive/html/guix-devel/2014-04/msg00098.html>.
(for-each (lambda (file)
(utime file 0 0 0))
(find-files "." "")))
%standard-phases)))))
%standard-phases))))
(inputs (if (string-suffix? "-linux"
(or (%current-target-system)

@ -97,7 +97,11 @@ working directory."
(begin
(mkdir "source")
(chdir "source")
(copy-recursively source ".")
;; Preserve timestamps (set to the Epoch) on the copied tree so that
;; things work deterministically.
(copy-recursively source "."
#:keep-mtime? #t)
#t)
(and (zero? (system* "tar" "xvf" source))
(chdir (first-subdirectory ".")))))

@ -134,9 +134,12 @@ return values of applying PROC to the port."
(define* (copy-recursively source destination
#:key
(log (current-output-port))
(follow-symlinks? #f))
(follow-symlinks? #f)
keep-mtime?)
"Copy SOURCE directory to DESTINATION. Follow symlinks if FOLLOW-SYMLINKS?
is true; otherwise, just preserve them. Write verbose output to the LOG port."
is true; otherwise, just preserve them. When KEEP-MTIME? is true, keep the
modification time of the files in SOURCE on those of DESTINATION. Write
verbose output to the LOG port."
(define strip-source
(let ((len (string-length source)))
(lambda (file)
@ -152,10 +155,15 @@ is true; otherwise, just preserve them. Write verbose output to the LOG port."
(let ((target (readlink file)))
(symlink target dest)))
(else
(copy-file file dest)))))
(copy-file file dest)
(when keep-mtime?
(set-file-time dest stat))))))
(lambda (dir stat result) ; down
(mkdir-p (string-append destination
(strip-source dir))))
(let ((target (string-append destination
(strip-source dir))))
(mkdir-p target)
(when keep-mtime?
(set-file-time target stat))))
(lambda (dir stat result) ; up
result)
(const #t) ; skip