~ruther/guix-local

4c8f997a7d6f4c9d7eae73804e9784b4562eb213 — Ludovic Courtès 10 years ago 4650a77
graph: Add '--expression'.

* guix/scripts/graph.scm (%options, show-help): Add '--expression'.
  (guix-graph): Call 'read/eval-package-expression' for 'expression'
  pairs in OPTS.
* tests/guix-graph.sh: Add tests.
* doc/guix.texi (Invoking guix graph): Document it.
3 files changed, 27 insertions(+), 5 deletions(-)

M doc/guix.texi
M guix/scripts/graph.scm
M tests/guix-graph.sh
M doc/guix.texi => doc/guix.texi +10 -0
@@ 4417,6 4417,16 @@ the values listed above.

@item --list-types
List the supported graph types.

@item --expression=@var{expr}
@itemx -e @var{expr}
Consider the package @var{expr} evaluates to.

This is useful to precisely refer to a package, as in this example:

@example
guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
@end example
@end table



M guix/scripts/graph.scm => guix/scripts/graph.scm +12 -5
@@ 380,6 380,9 @@ given BACKEND.  Use NODE-TYPE to traverse the DAG."
                (lambda (opt name arg result)
                  (list-node-types)
                  (exit 0)))
        (option '(#\e "expression") #t #f
                (lambda (opt name arg result)
                  (alist-cons 'expression arg result)))
        (option '(#\h "help") #f #f
                (lambda args
                  (show-help)


@@ 397,6 400,8 @@ Emit a Graphviz (dot) representation of the dependencies of PACKAGE...\n"))
  -t, --type=TYPE        represent nodes of the given TYPE"))
  (display (_ "
      --list-types       list the available graph types"))
  (display (_ "
  -e, --expression=EXPR  consider the package EXPR evaluates to"))
  (newline)
  (display (_ "
  -h, --help             display this help and exit"))


@@ 417,12 422,14 @@ Emit a Graphviz (dot) representation of the dependencies of PACKAGE...\n"))
  (with-error-handling
    (let* ((opts     (parse-command-line args %options
                                         (list %default-options)))
           (specs    (filter-map (match-lambda
                                   (('argument . spec) spec)
                                   (_ #f))
                                 opts))
           (type     (assoc-ref opts 'node-type))
           (packages (map specification->package specs)))
           (packages (filter-map (match-lambda
                                   (('argument . spec)
                                    (specification->package spec))
                                   (('expression . exp)
                                    (read/eval-package-expression exp))
                                   (_ #f))
                                 opts)))
      (with-store store
        (run-with-store store
          (mlet %store-monad ((nodes (mapm %store-monad

M tests/guix-graph.sh => tests/guix-graph.sh +5 -0
@@ 32,3 32,8 @@ done

guix build guile-bootstrap
guix graph -t references guile-bootstrap | grep guile-bootstrap

guix graph -e '(@ (gnu packages bootstrap) %bootstrap-guile)' \
    | grep guile-bootstrap

if guix graph -e +; then false; else true; fi