all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [bug#58824] [PATCH 0/1] scripts: refresh: Support --list-dependent=packages.
@ 2022-10-27 21:27 ( via Guix-patches via
  2022-10-27 21:28 ` [bug#58824] [PATCH 1/1] " ( via Guix-patches via
  2022-10-28 15:30 ` [bug#58824] [PATCH v2] " ( via Guix-patches via
  0 siblings, 2 replies; 6+ messages in thread
From: ( via Guix-patches via @ 2022-10-27 21:27 UTC (permalink / raw)
  To: 58824; +Cc: Vagrant Cascadian, (

Heya Guix,

This patch adds support for passing the string "packages" to
``guix refresh'''s ``--list-dependent'' argument, which displays only
the packages, with no "XXX packages will be rebuilt:" header. This
allows us to perform substitutions like this:

  guix build $(guix refresh --list-dependent=packages gtk)

to, for example, build all the dependents of ``gtk''.

( (1):
  scripts: refresh: Support --list-dependent=packages.

 guix/scripts/refresh.scm | 61 ++++++++++++++++++++++++----------------
 1 file changed, 37 insertions(+), 24 deletions(-)


base-commit: f928abac369f699f425ddee925d0d0c2dc0a635d
-- 
2.38.0





^ permalink raw reply	[flat|nested] 6+ messages in thread

* [bug#58824] [PATCH 1/1] scripts: refresh: Support --list-dependent=packages.
  2022-10-27 21:27 [bug#58824] [PATCH 0/1] scripts: refresh: Support --list-dependent=packages ( via Guix-patches via
@ 2022-10-27 21:28 ` ( via Guix-patches via
  2022-11-25  9:21   ` zimoun
  2022-10-28 15:30 ` [bug#58824] [PATCH v2] " ( via Guix-patches via
  1 sibling, 1 reply; 6+ messages in thread
From: ( via Guix-patches via @ 2022-10-27 21:28 UTC (permalink / raw)
  To: 58824; +Cc: (

* guix/scripts/refresh.scm (%options)[list-dependent]: Allow an
  optional argument.  Set 'LIST-DEPENDENT-MACHINE-READABLE? to
  #T in RESULT if the argument is "packages".
(list-dependents): Support #:MACHINE-READABLE?.
(guix-refresh): Pass #:MACHINE-READABLE? #T to LIST-DEPENDENTS if
'LIST-DEPENDENT-MACHINE-READABLE? is #T.
---
 guix/scripts/refresh.scm | 61 ++++++++++++++++++++++++----------------
 1 file changed, 37 insertions(+), 24 deletions(-)

diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm
index 14329751f8..9040f4d83d 100644
--- a/guix/scripts/refresh.scm
+++ b/guix/scripts/refresh.scm
@@ -93,9 +93,12 @@ (define %options
         (option '(#\e "expression") #t #f
                 (lambda (opt name arg result)
                   (alist-cons 'expression arg result)))
-        (option '(#\l "list-dependent") #f #f
+        (option '(#\l "list-dependent") #f #t
                 (lambda (opt name arg result)
-                  (alist-cons 'list-dependent? #t result)))
+                  (append `((list-dependent? . #t)
+                            (list-dependent-machine-readable?
+                             . ,(and arg (string=? arg "packages"))))
+                          result)))
         (option '(#\r "recursive") #f #f
                 (lambda (opt name arg result)
                   (alist-cons 'recursive? #t result)))
@@ -417,8 +420,10 @@ (define (all-packages)
                  '()
                  #:select? (const #t)))           ;include hidden packages
 
-(define (list-dependents packages)
-  "List all the things that would need to be rebuilt if PACKAGES are changed."
+(define* (list-dependents packages #:key (machine-readable? #f))
+  "List all the things that would need to be rebuilt if PACKAGES are
+changed.  If MACHINE-READABLE? is #T, display only a list of packages,
+with no human-friendly extra text."
   ;; Using %BAG-NODE-TYPE is more accurate than using %PACKAGE-NODE-TYPE
   ;; because it includes implicit dependencies.
   (define (full-name package)
@@ -431,27 +436,31 @@ (define (full-name package)
            (covering   (filter (lambda (node)
                                  (null? (edges node)))
                                dependents)))
-      (match dependents
-        (()
-         (format (current-output-port)
-                 (N_ "No dependents other than itself: ~{~a~}~%"
-                     "No dependents other than themselves: ~{~a~^ ~}~%"
-                     (length packages))
-                 (map full-name packages)))
-
-        ((x)
-         (format (current-output-port)
-                 (G_ "A single dependent package: ~a~%")
-                 (full-name x)))
-        (lst
-         (format (current-output-port)
-                 (N_ "Building the following ~d package would ensure ~d \
+      (if machine-readable?
+          (format (current-output-port)
+                  (G_ "~{~a~^ ~}~%")
+                  (map full-name covering))
+          (match dependents
+            (()
+             (format (current-output-port)
+                     (N_ "No dependents other than itself: ~{~a~}~%"
+                         "No dependents other than themselves: ~{~a~^ ~}~%"
+                         (length packages))
+                     (map full-name packages)))
+            ((x)
+             (format (current-output-port)
+                     (G_ "A single dependent package: ~a~%")
+                     (full-name x)))
+            (lst
+             (format (current-output-port)
+                     (N_ "Building the following ~d package would ensure ~d \
 dependent packages are rebuilt: ~{~a~^ ~}~%"
-                     "Building the following ~d packages would ensure ~d \
+                         "Building the following ~d packages would ensure ~d \
 dependent packages are rebuilt: ~{~a~^ ~}~%"
-                     (length covering))
-                 (length covering) (length dependents)
-                 (map full-name covering))))
+                         (length covering))
+                     (length covering) (length dependents)
+                     (map full-name covering)))))
+      
       (return #t))))
 
 (define (list-transitive packages)
@@ -528,6 +537,8 @@ (define (options->updaters opts)
          (updaters        (options->updaters opts))
          (recursive?      (assoc-ref opts 'recursive?))
          (list-dependent? (assoc-ref opts 'list-dependent?))
+         (list-dependent-machine-readable?
+          (assoc-ref opts 'list-dependent-machine-readable?))
          (list-transitive? (assoc-ref opts 'list-transitive?))
          (key-download    (assoc-ref opts 'key-download))
 
@@ -543,7 +554,9 @@ (define (options->updaters opts)
           (mlet %store-monad ((packages (options->packages opts)))
             (cond
              (list-dependent?
-              (list-dependents packages))
+              (list-dependents packages
+                               #:machine-readable?
+                               list-dependent-machine-readable?))
              (list-transitive?
               (list-transitive packages))
              (update?
-- 
2.38.0





^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [bug#58824] [PATCH v2] scripts: refresh: Support --list-dependent=packages.
  2022-10-27 21:27 [bug#58824] [PATCH 0/1] scripts: refresh: Support --list-dependent=packages ( via Guix-patches via
  2022-10-27 21:28 ` [bug#58824] [PATCH 1/1] " ( via Guix-patches via
@ 2022-10-28 15:30 ` ( via Guix-patches via
  1 sibling, 0 replies; 6+ messages in thread
From: ( via Guix-patches via @ 2022-10-28 15:30 UTC (permalink / raw)
  To: 58824; +Cc: (

* guix/scripts/refresh.scm (%options)[list-dependent]: Allow an
  optional argument.  Set 'LIST-DEPENDENT-MACHINE-READABLE? to
  #T in RESULT if the argument is "packages".
(list-dependents): Support #:MACHINE-READABLE?.
(guix-refresh): Pass #:MACHINE-READABLE? #T to LIST-DEPENDENTS if
'LIST-DEPENDENT-MACHINE-READABLE? is #T.
* doc/guix.texi: Document 'guix refresh --list-dependent=packages'.
---
 doc/guix.texi            | 13 +++++++--
 guix/scripts/refresh.scm | 62 ++++++++++++++++++++++++----------------
 2 files changed, 49 insertions(+), 26 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 3bfb89bc33..9800307888 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -14095,11 +14095,20 @@ be used when passing @command{guix refresh} one or more package names:
 
 @table @code
 
-@item --list-dependent
-@itemx -l
+@item --list-dependent[=packages]
+@itemx -l [packages]
 List top-level dependent packages that would need to be rebuilt as a
 result of upgrading one or more packages.
 
+If the option is called with the optional @code{packages} argument, it
+will display only the list of packages, without the header stating the
+number of packages that will be rebuilt.  This can be used to run
+commands such as this, which builds all the dependents of @code{gtk}:
+
+@example
+$ guix build $(guix refresh gtk -l packages)
+@end example
+
 @xref{Invoking guix graph, the @code{reverse-package} type of
 @command{guix graph}}, for information on how to visualize the list of
 dependents of a package.
diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm
index 14329751f8..7c3f392a96 100644
--- a/guix/scripts/refresh.scm
+++ b/guix/scripts/refresh.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
+;;; Copyright © 2022 ( <paren@disroot.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -93,9 +94,12 @@ (define %options
         (option '(#\e "expression") #t #f
                 (lambda (opt name arg result)
                   (alist-cons 'expression arg result)))
-        (option '(#\l "list-dependent") #f #f
+        (option '(#\l "list-dependent") #f #t
                 (lambda (opt name arg result)
-                  (alist-cons 'list-dependent? #t result)))
+                  (append `((list-dependent? . #t)
+                            (list-dependent-machine-readable?
+                             . ,(and arg (string=? arg "packages"))))
+                          result)))
         (option '(#\r "recursive") #f #f
                 (lambda (opt name arg result)
                   (alist-cons 'recursive? #t result)))
@@ -417,8 +421,10 @@ (define (all-packages)
                  '()
                  #:select? (const #t)))           ;include hidden packages
 
-(define (list-dependents packages)
-  "List all the things that would need to be rebuilt if PACKAGES are changed."
+(define* (list-dependents packages #:key (machine-readable? #f))
+  "List all the things that would need to be rebuilt if PACKAGES are
+changed.  If MACHINE-READABLE? is #T, display only a list of packages,
+with no human-friendly extra text."
   ;; Using %BAG-NODE-TYPE is more accurate than using %PACKAGE-NODE-TYPE
   ;; because it includes implicit dependencies.
   (define (full-name package)
@@ -431,27 +437,31 @@ (define (full-name package)
            (covering   (filter (lambda (node)
                                  (null? (edges node)))
                                dependents)))
-      (match dependents
-        (()
-         (format (current-output-port)
-                 (N_ "No dependents other than itself: ~{~a~}~%"
-                     "No dependents other than themselves: ~{~a~^ ~}~%"
-                     (length packages))
-                 (map full-name packages)))
-
-        ((x)
-         (format (current-output-port)
-                 (G_ "A single dependent package: ~a~%")
-                 (full-name x)))
-        (lst
-         (format (current-output-port)
-                 (N_ "Building the following ~d package would ensure ~d \
+      (if machine-readable?
+          (format (current-output-port)
+                  (G_ "~{~a~^ ~}~%")
+                  (map full-name covering))
+          (match dependents
+            (()
+             (format (current-output-port)
+                     (N_ "No dependents other than itself: ~{~a~}~%"
+                         "No dependents other than themselves: ~{~a~^ ~}~%"
+                         (length packages))
+                     (map full-name packages)))
+            ((x)
+             (format (current-output-port)
+                     (G_ "A single dependent package: ~a~%")
+                     (full-name x)))
+            (lst
+             (format (current-output-port)
+                     (N_ "Building the following ~d package would ensure ~d \
 dependent packages are rebuilt: ~{~a~^ ~}~%"
-                     "Building the following ~d packages would ensure ~d \
+                         "Building the following ~d packages would ensure ~d \
 dependent packages are rebuilt: ~{~a~^ ~}~%"
-                     (length covering))
-                 (length covering) (length dependents)
-                 (map full-name covering))))
+                         (length covering))
+                     (length covering) (length dependents)
+                     (map full-name covering)))))
+      
       (return #t))))
 
 (define (list-transitive packages)
@@ -528,6 +538,8 @@ (define (options->updaters opts)
          (updaters        (options->updaters opts))
          (recursive?      (assoc-ref opts 'recursive?))
          (list-dependent? (assoc-ref opts 'list-dependent?))
+         (list-dependent-machine-readable?
+          (assoc-ref opts 'list-dependent-machine-readable?))
          (list-transitive? (assoc-ref opts 'list-transitive?))
          (key-download    (assoc-ref opts 'key-download))
 
@@ -543,7 +555,9 @@ (define (options->updaters opts)
           (mlet %store-monad ((packages (options->packages opts)))
             (cond
              (list-dependent?
-              (list-dependents packages))
+              (list-dependents packages
+                               #:machine-readable?
+                               list-dependent-machine-readable?))
              (list-transitive?
               (list-transitive packages))
              (update?

base-commit: f928abac369f699f425ddee925d0d0c2dc0a635d
-- 
2.38.0





^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [bug#58824] [PATCH 1/1] scripts: refresh: Support --list-dependent=packages.
  2022-10-27 21:28 ` [bug#58824] [PATCH 1/1] " ( via Guix-patches via
@ 2022-11-25  9:21   ` zimoun
  2022-11-25 16:25     ` ( via Guix-patches via
  0 siblings, 1 reply; 6+ messages in thread
From: zimoun @ 2022-11-25  9:21 UTC (permalink / raw)
  To: 58824; +Cc: (

Hi,

On Thu, 27 Oct 2022 at 22:28, "\( via Guix-patches" via <guix-patches@gnu.org> wrote:

> -        (option '(#\l "list-dependent") #f #f
> +        (option '(#\l "list-dependent") #f #t

For what it is worth, I think it is a bad idea to have optional argument
with short-name, well IMHO; see [1].

1: <http://issues.guix.gnu.org/issue/50472>

Cheers,
simon




^ permalink raw reply	[flat|nested] 6+ messages in thread

* [bug#58824] [PATCH 1/1] scripts: refresh: Support --list-dependent=packages.
  2022-11-25  9:21   ` zimoun
@ 2022-11-25 16:25     ` ( via Guix-patches via
  2022-11-25 18:01       ` zimoun
  0 siblings, 1 reply; 6+ messages in thread
From: ( via Guix-patches via @ 2022-11-25 16:25 UTC (permalink / raw)
  To: zimon.toutoune, 58824

On Fri Nov 25, 2022 at 9:21 AM GMT, zimoun wrote:
> For what it is worth, I think it is a bad idea to have optional argument
> with short-name, well IMHO; see [1].
>
> 1: <http://issues.guix.gnu.org/issue/50472>

Hmm. Perhaps we could replace this with a whole new

  -D, --list-dependent-packages

flag?

    -- (




^ permalink raw reply	[flat|nested] 6+ messages in thread

* [bug#58824] [PATCH 1/1] scripts: refresh: Support --list-dependent=packages.
  2022-11-25 16:25     ` ( via Guix-patches via
@ 2022-11-25 18:01       ` zimoun
  0 siblings, 0 replies; 6+ messages in thread
From: zimoun @ 2022-11-25 18:01 UTC (permalink / raw)
  To: (, 58824

Hi,
On Fri, 25 Nov 2022 at 16:25, "\( via Guix-patches" via <guix-patches@gnu.org> wrote:

> Hmm. Perhaps we could replace this with a whole new
>
>   -D, --list-dependent-packages
>
> flag?

Vagrant proposed [1] to add a flag as --machine-readable, quoting:

        I vaguely recall discussing on irc not long ago the desire for "guix
        refresh --list-dependent --machine-readable" (e.g. drop the "Building
        the following X packages would ensure 10 dependent packages are
        rebuilt:") or something similar. Would save having to pipe to cut, awk,
        sed, perl, etc. ...

Well, there is also the annoyance that hidden packages are shown so it
becomes cumbersome for piping with “guix build” for instance.  Maybe,
this patch could be tweaked to have something like,

    guix refresh --list-build-dependent PACKAGE

returning a list accepted by “guix build”.


1: <https://yhetil.org/guix/87ilj69380.fsf@contorta>

Cheers,
simon




^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-11-28 12:54 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-27 21:27 [bug#58824] [PATCH 0/1] scripts: refresh: Support --list-dependent=packages ( via Guix-patches via
2022-10-27 21:28 ` [bug#58824] [PATCH 1/1] " ( via Guix-patches via
2022-11-25  9:21   ` zimoun
2022-11-25 16:25     ` ( via Guix-patches via
2022-11-25 18:01       ` zimoun
2022-10-28 15:30 ` [bug#58824] [PATCH v2] " ( via Guix-patches via

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.