From 4c8f997a7d6f4c9d7eae73804e9784b4562eb213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 2 Sep 2015 15:23:52 +0200 Subject: [PATCH] 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. --- doc/guix.texi | 10 ++++++++++ guix/scripts/graph.scm | 17 ++++++++++++----- tests/guix-graph.sh | 5 +++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 6defb0bda7..f943540ac8 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -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 diff --git a/guix/scripts/graph.scm b/guix/scripts/graph.scm index 1719ffce68..2b671be131 100644 --- a/guix/scripts/graph.scm +++ b/guix/scripts/graph.scm @@ -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 diff --git a/tests/guix-graph.sh b/tests/guix-graph.sh index 199258a9b8..e0cbebb753 100644 --- a/tests/guix-graph.sh +++ b/tests/guix-graph.sh @@ -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