1
0
mirror of https://git.savannah.gnu.org/git/guix.git synced 2026-04-06 21:20:33 +02:00

union: Don't traverse sub-directories only found in one element of the union.

This significantly reduces I/O when building profiles, especially with
lots of package-specific sub-directories (such as 'share/emacs/24.3',
'texmf', etc.)

* guix/build/union.scm (union-build)[file-tree](others-have-it?): New
  procedure.  Use it in the 'enter?' parameter of 'file-system-fold';
  change 'skip' parameter accordingly.
* tests/union.scm ("union-build"): Ensure that 'include' is a symlink
  and 'bin' is a directory.
This commit is contained in:
Ludovic Courtès
2013-09-02 23:03:03 +02:00
parent 165fd9d5e6
commit 43dd92024a
2 changed files with 36 additions and 5 deletions

View File

@@ -114,7 +114,17 @@
(file-exists? "bin/ld")
(file-exists? "lib/libc.so")
(directory-exists? "lib/gcc")
(file-exists? "include/unistd.h"))))))
(file-exists? "include/unistd.h")
;; The 'include' sub-directory is only found in
;; glibc-bootstrap, so it should be unified in a
;; straightforward way, without traversing it.
(eq? 'symlink (stat:type (lstat "include")))
;; Conversely, several inputs have a 'bin' sub-directory, so
;; unifying it requires traversing them all, and creating a
;; new 'bin' sub-directory in the profile.
(eq? 'directory (stat:type (lstat "bin"))))))))
(test-end)