From a322e9d16b227484ce04721fee0f99618cb1007e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Mon, 20 Apr 2020 22:31:38 +0200 Subject: services: etc: Detect and report duplicate entries. Fixes . Reported by Christopher Baines . * gnu/services.scm (files->etc-directory)[assert-no-duplicates]: New procedure. Use it. --- gnu/services.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/services.scm b/gnu/services.scm index 832d6984d8..126e0814eb 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -632,6 +632,23 @@ and FILE could be \"/usr/bin/env\"." (files->etc-directory (service-value service))) (define (files->etc-directory files) + (define (assert-no-duplicates files) + (let loop ((files files) + (seen (set))) + (match files + (() #t) + (((file _) rest ...) + (when (set-contains? seen file) + (raise (condition + (&message + (message (format #f (G_ "duplicate '~a' entry for /etc") + file)))))) + (loop rest (set-insert file seen)))))) + + ;; Detect duplicates early instead of letting them through, eventually + ;; leading to a build failure of "etc.drv". + (assert-no-duplicates files) + (file-union "etc" files)) (define (etc-entry files) -- cgit v1.2.3