guix-commits
[Top][All Lists]
Advanced

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

02/05: guix graph: '--path' defaults to "out" in the case of multiple ou


From: guix-commits
Subject: 02/05: guix graph: '--path' defaults to "out" in the case of multiple outputs.
Date: Sun, 15 Jan 2023 18:09:43 -0500 (EST)

civodul pushed a commit to branch master
in repository guix.

commit 99e255d04ba154cea19ab7b3c8dc3014fd03b007
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Fri Jan 13 23:38:18 2023 +0100

    guix graph: '--path' defaults to "out" in the case of multiple outputs.
    
    Previously, "guix graph -t references --graph guix guile" would fail
    with:
    
      no path from '/gnu/store/…-guix-1.4.0-1.9fe5b49' to 
'/gnu/store/…-guile-3.0.8-debug'
    
    simply because the "debug" happened to be the first one, getting bound
    to NODE2.  With this change it will instead pick the "out" output of
    each.
    
    * guix/scripts/graph.scm (guix-graph)[shorter?, length-sorted]: New
    procedures.
    In the 'path?' case, use the latter to store node lists.
---
 guix/scripts/graph.scm | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/guix/scripts/graph.scm b/guix/scripts/graph.scm
index b31cc0014d..6847dd1962 100644
--- a/guix/scripts/graph.scm
+++ b/guix/scripts/graph.scm
@@ -569,6 +569,12 @@ Emit a representation of the dependency graph of 
PACKAGE...\n"))
   (category packaging)
   (synopsis "view and query package dependency graphs")
 
+  (define (shorter? str1 str2)
+    (< (string-length str1) (string-length str2)))
+
+  (define length-sorted
+    (cut sort <> shorter?))
+
   (with-error-handling
     (define opts
       (parse-command-line args %options
@@ -603,8 +609,12 @@ Emit a representation of the dependency graph of 
PACKAGE...\n"))
                                            (node-type-convert type)
                                            (reverse items))))
             (if (assoc-ref opts 'path?)
+                ;; Sort by string length such that, in case of multiple
+                ;; outputs, the shortest one (which corresponds to "out") is
+                ;; picked (yup, a hack).
                 (match nodes
-                  (((node1 _ ...) (node2 _ ...))
+                  (((= length-sorted (node1 _ ...))
+                    (= length-sorted (node2 _ ...)))
                    (display-path node1 node2 type))
                   (_
                    (leave (G_ "'--path' option requires exactly two \



reply via email to

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