diff options
author | Ludovic Courtès <ludo@gnu.org> | 2023-01-13 23:38:18 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2023-01-16 00:06:56 +0100 |
commit | 99e255d04ba154cea19ab7b3c8dc3014fd03b007 (patch) | |
tree | 0c145b497307108f50488c935688bb912982fc78 /guix/scripts | |
parent | a4a35e123b7caac76271c9267ca19ae82ec1d028 (diff) |
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.
Diffstat (limited to 'guix/scripts')
-rw-r--r-- | guix/scripts/graph.scm | 12 |
1 files changed, 11 insertions, 1 deletions
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 \ |