union: Do not warn about harmless collisions.

Until now we'd get pointless messages like:

  warning: collision encountered:
    /gnu/store/…-gtk-icon-themes/share/icons/hicolor/icon-theme.cache
    /gnu/store/…-inkscape-0.92.3/share/icons/hicolor/icon-theme.cache
  warning: choosing /gnu/store/…-gtk-icon-themes/share/icons/hicolor/icon-theme.cache

* guix/build/union.scm (%harmless-collisions): New variable.
(warn-about-collision): Honor it.
This commit is contained in:
Ludovic Courtès 2018-05-15 09:40:23 +02:00
parent 7376ba4cd4
commit 827c56515e
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5

View File

@ -81,14 +81,23 @@ identical, #f otherwise."
(or (eof-object? n1) (or (eof-object? n1)
(loop)))))))))))))) (loop))))))))))))))
(define %harmless-collisions
;; This is a list of files that are known to collide, but for which emitting
;; a warning doesn't make sense. For example, "icon-theme.cache" is
;; regenerated by a profile hook which shadows the file provided by
;; individual packages, and "gschemas.compiled" is made available to
;; applications via 'glib-or-gtk-build-system'.
'("icon-theme.cache" "gschemas.compiled"))
(define (warn-about-collision files) (define (warn-about-collision files)
"Handle the collision among FILES by emitting a warning and choosing the "Handle the collision among FILES by emitting a warning and choosing the
first one of THEM." first one of THEM."
(format (current-error-port)
"~%warning: collision encountered:~%~{ ~a~%~}"
files)
(let ((file (first files))) (let ((file (first files)))
(format (current-error-port) "warning: choosing ~a~%" file) (unless (member (basename file) %harmless-collisions)
(format (current-error-port)
"~%warning: collision encountered:~%~{ ~a~%~}"
files)
(format (current-error-port) "warning: choosing ~a~%" file))
file)) file))
(define* (union-build output inputs (define* (union-build output inputs