guix-commits
[Top][All Lists]
Advanced

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

04/07: shepherd: Remove dependency on (guix utils).


From: guix-commits
Subject: 04/07: shepherd: Remove dependency on (guix utils).
Date: Thu, 5 Nov 2020 10:16:00 -0500 (EST)

civodul pushed a commit to branch master
in repository guix.

commit e6934c0429ed94c9d9e61f81520d11153bbb3f64
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Thu Nov 5 15:26:57 2020 +0100

    shepherd: Remove dependency on (guix utils).
    
    Since commit 8ce6f4dc2879919c12bc76a2f4b01200af97e019, importing this
    module in a gexp would pull in (guix config) from the host, thereby
    leading to non-reproducible derivations.  Users in (gnu services ...) do
    not expect that so simply remove the (guix utils) dependency for now.
    
    * gnu/build/shepherd.scm (fork+exec-command/container)[strip-pid]: New
    procedure.
    Use it instead of 'strip-keyword-arguments'.
---
 gnu/build/shepherd.scm | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/gnu/build/shepherd.scm b/gnu/build/shepherd.scm
index 9164628..d7b858d 100644
--- a/gnu/build/shepherd.scm
+++ b/gnu/build/shepherd.scm
@@ -21,7 +21,6 @@
   #:use-module (gnu system file-systems)
   #:use-module (gnu build linux-container)
   #:use-module (guix build utils)
-  #:use-module (guix utils)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:use-module (ice-9 match)
@@ -199,11 +198,24 @@ namespace, in addition to essential bind-mounts such 
/proc."
   "This is a variant of 'fork+exec-command' procedure, that joins the
 namespaces of process PID beforehand.  If there is no support for containers,
 on Hurd systems for instance, fallback to direct forking."
+  (define (strip-pid args)
+    ;; TODO: Replace with 'strip-keyword-arguments' when that no longer pulls
+    ;; in (guix config).
+    (let loop ((args args)
+               (result '()))
+      (match args
+        (()
+         (reverse result))
+        ((#:pid _ . rest)
+         (loop rest result))
+        ((head . rest)
+         (loop rest (cons head result))))))
+
   (let ((container-support?
          (file-exists? "/proc/self/ns"))
         (fork-proc (lambda ()
                      (apply fork+exec-command command
-                            (strip-keyword-arguments '(#:pid) args)))))
+                            (strip-pid args)))))
     (if container-support?
         (container-excursion* pid fork-proc)
         (fork-proc))))



reply via email to

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