mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2025-01-31 06:46:50 +01:00
graph: Support package transformation options.
* guix/scripts/graph.scm (%options): Append %TRANSFORMATION-OPTIONS. (show-help): Call 'show-transformation-options-help'. (guix-graph): Call 'options->transformation' and use it. * tests/guix-graph.sh: Add test. * doc/guix.texi (Invoking guix graph): Document it.
This commit is contained in:
parent
7de9471707
commit
3e962e59d8
3 changed files with 78 additions and 46 deletions
|
@ -9907,7 +9907,18 @@ The package dependency graph is largely architecture-independent, but there
|
||||||
are some architecture-dependent bits that this option allows you to visualize.
|
are some architecture-dependent bits that this option allows you to visualize.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
On top of that, @command{guix graph} supports all the usual package
|
||||||
|
transformation options (@pxref{Package Transformation Options}). This
|
||||||
|
makes it easy to view the effect of a graph-rewriting transformation
|
||||||
|
such as @option{--with-input}. For example, the command below outputs
|
||||||
|
the graph of @code{git} once @code{openssl} has been replaced by
|
||||||
|
@code{libressl} everywhere in the graph:
|
||||||
|
|
||||||
|
@example
|
||||||
|
guix graph git --with-input=openssl=libressl
|
||||||
|
@end example
|
||||||
|
|
||||||
|
So many possibilities, so much fun!
|
||||||
|
|
||||||
@node Invoking guix publish
|
@node Invoking guix publish
|
||||||
@section Invoking @command{guix publish}
|
@section Invoking @command{guix publish}
|
||||||
|
|
|
@ -32,6 +32,10 @@ (define-module (guix scripts graph)
|
||||||
#:use-module (gnu packages)
|
#:use-module (gnu packages)
|
||||||
#:use-module (guix sets)
|
#:use-module (guix sets)
|
||||||
#:use-module ((guix utils) #:select (location-file))
|
#:use-module ((guix utils) #:select (location-file))
|
||||||
|
#:use-module ((guix scripts build)
|
||||||
|
#:select (show-transformation-options-help
|
||||||
|
options->transformation
|
||||||
|
%transformation-options))
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-26)
|
#:use-module (srfi srfi-26)
|
||||||
#:use-module (srfi srfi-34)
|
#:use-module (srfi srfi-34)
|
||||||
|
@ -446,36 +450,38 @@ (define (list-backends)
|
||||||
;;;
|
;;;
|
||||||
|
|
||||||
(define %options
|
(define %options
|
||||||
(list (option '(#\t "type") #t #f
|
(cons* (option '(#\t "type") #t #f
|
||||||
(lambda (opt name arg result)
|
(lambda (opt name arg result)
|
||||||
(alist-cons 'node-type (lookup-node-type arg)
|
(alist-cons 'node-type (lookup-node-type arg)
|
||||||
result)))
|
result)))
|
||||||
(option '("list-types") #f #f
|
(option '("list-types") #f #f
|
||||||
(lambda (opt name arg result)
|
(lambda (opt name arg result)
|
||||||
(list-node-types)
|
(list-node-types)
|
||||||
(exit 0)))
|
(exit 0)))
|
||||||
(option '(#\b "backend") #t #f
|
(option '(#\b "backend") #t #f
|
||||||
(lambda (opt name arg result)
|
(lambda (opt name arg result)
|
||||||
(alist-cons 'backend (lookup-backend arg)
|
(alist-cons 'backend (lookup-backend arg)
|
||||||
result)))
|
result)))
|
||||||
(option '("list-backends") #f #f
|
(option '("list-backends") #f #f
|
||||||
(lambda (opt name arg result)
|
(lambda (opt name arg result)
|
||||||
(list-backends)
|
(list-backends)
|
||||||
(exit 0)))
|
(exit 0)))
|
||||||
(option '(#\e "expression") #t #f
|
(option '(#\e "expression") #t #f
|
||||||
(lambda (opt name arg result)
|
(lambda (opt name arg result)
|
||||||
(alist-cons 'expression arg result)))
|
(alist-cons 'expression arg result)))
|
||||||
(option '(#\s "system") #t #f
|
(option '(#\s "system") #t #f
|
||||||
(lambda (opt name arg result)
|
(lambda (opt name arg result)
|
||||||
(alist-cons 'system arg
|
(alist-cons 'system arg
|
||||||
(alist-delete 'system result eq?))))
|
(alist-delete 'system result eq?))))
|
||||||
(option '(#\h "help") #f #f
|
(option '(#\h "help") #f #f
|
||||||
(lambda args
|
(lambda args
|
||||||
(show-help)
|
(show-help)
|
||||||
(exit 0)))
|
(exit 0)))
|
||||||
(option '(#\V "version") #f #f
|
(option '(#\V "version") #f #f
|
||||||
(lambda args
|
(lambda args
|
||||||
(show-version-and-exit "guix edit")))))
|
(show-version-and-exit "guix graph")))
|
||||||
|
|
||||||
|
%transformation-options))
|
||||||
|
|
||||||
(define (show-help)
|
(define (show-help)
|
||||||
;; TRANSLATORS: Here 'dot' is the name of a program; it must not be
|
;; TRANSLATORS: Here 'dot' is the name of a program; it must not be
|
||||||
|
@ -495,6 +501,8 @@ (define (show-help)
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
-s, --system=SYSTEM consider the graph for SYSTEM--e.g., \"i686-linux\""))
|
-s, --system=SYSTEM consider the graph for SYSTEM--e.g., \"i686-linux\""))
|
||||||
(newline)
|
(newline)
|
||||||
|
(show-transformation-options-help)
|
||||||
|
(newline)
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
-h, --help display this help and exit"))
|
-h, --help display this help and exit"))
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
|
@ -514,21 +522,28 @@ (define %default-options
|
||||||
|
|
||||||
(define (guix-graph . args)
|
(define (guix-graph . args)
|
||||||
(with-error-handling
|
(with-error-handling
|
||||||
(let* ((opts (parse-command-line args %options
|
(define opts
|
||||||
(list %default-options)
|
(parse-command-line args %options
|
||||||
#:build-options? #f))
|
(list %default-options)
|
||||||
(backend (assoc-ref opts 'backend))
|
#:build-options? #f))
|
||||||
(type (assoc-ref opts 'node-type))
|
(define backend
|
||||||
(items (filter-map (match-lambda
|
(assoc-ref opts 'backend))
|
||||||
(('argument . (? store-path? item))
|
(define type
|
||||||
item)
|
(assoc-ref opts 'node-type))
|
||||||
(('argument . spec)
|
|
||||||
(specification->package spec))
|
(with-store store
|
||||||
(('expression . exp)
|
(let* ((transform (options->transformation opts))
|
||||||
(read/eval-package-expression exp))
|
(items (filter-map (match-lambda
|
||||||
(_ #f))
|
(('argument . (? store-path? item))
|
||||||
opts)))
|
item)
|
||||||
(with-store store
|
(('argument . spec)
|
||||||
|
(transform store
|
||||||
|
(specification->package spec)))
|
||||||
|
(('expression . exp)
|
||||||
|
(transform store
|
||||||
|
(read/eval-package-expression exp)))
|
||||||
|
(_ #f))
|
||||||
|
opts)))
|
||||||
;; Ask for absolute file names so that .drv file names passed from the
|
;; Ask for absolute file names so that .drv file names passed from the
|
||||||
;; user to 'read-derivation' are absolute when it returns.
|
;; user to 'read-derivation' are absolute when it returns.
|
||||||
(with-fluids ((%file-port-name-canonicalization 'absolute))
|
(with-fluids ((%file-port-name-canonicalization 'absolute))
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# GNU Guix --- Functional package management for GNU
|
# GNU Guix --- Functional package management for GNU
|
||||||
# Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org>
|
# Copyright © 2015, 2016, 2019 Ludovic Courtès <ludo@gnu.org>
|
||||||
#
|
#
|
||||||
# This file is part of GNU Guix.
|
# This file is part of GNU Guix.
|
||||||
#
|
#
|
||||||
|
@ -53,3 +53,9 @@ cmp "$tmpfile1" "$tmpfile2"
|
||||||
guix graph -t derivation coreutils > "$tmpfile1"
|
guix graph -t derivation coreutils > "$tmpfile1"
|
||||||
guix graph -t derivation `guix build -d coreutils` > "$tmpfile2"
|
guix graph -t derivation `guix build -d coreutils` > "$tmpfile2"
|
||||||
cmp "$tmpfile1" "$tmpfile2"
|
cmp "$tmpfile1" "$tmpfile2"
|
||||||
|
|
||||||
|
# Try package transformation options.
|
||||||
|
guix graph git | grep 'label = "openssl'
|
||||||
|
guix graph git --with-input=openssl=libressl | grep 'label = "libressl'
|
||||||
|
if guix graph git --with-input=openssl=libressl | grep 'label = "openssl'
|
||||||
|
then false; else true; fi
|
||||||
|
|
Loading…
Reference in a new issue