guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

04/06: services: etc: Detect and report duplicate entries.


From: guix-commits
Subject: 04/06: services: etc: Detect and report duplicate entries.
Date: Mon, 20 Apr 2020 18:06:53 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit a322e9d16b227484ce04721fee0f99618cb1007e
Author: Ludovic Courtès <address@hidden>
AuthorDate: Mon Apr 20 22:31:38 2020 +0200

    services: etc: Detect and report duplicate entries.
    
    Fixes <https://bugs.gnu.org/40729>.
    Reported by Christopher Baines <address@hidden>.
    
    * 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 832d698..126e081 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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]