~ruther/guix-local

19dc16ce4b9c5fa885b4641a174afb0e1e653a9f — Ludovic Courtès 4 years ago 0677443
style: Add '--dry-run'.

* guix/scripts/style.scm (edit-expression/dry-run): New procedure.
(simplify-package-inputs): Add #:edit-expression parameter.
(%options, show-help): Add '--dry-run'.
(guix-style): Honor '--dry-run'.
2 files changed, 28 insertions(+), 3 deletions(-)

M doc/guix.texi
M guix/scripts/style.scm
M doc/guix.texi => doc/guix.texi +4 -0
@@ 12725,6 12725,10 @@ comments and bailing out if it cannot make sense of the code that
appears in an inputs field.  The available options are listed below.

@table @code
@item --dry-run
@itemx -n
Show source file locations that would be edited but do not modify them.

@item --load-path=@var{directory}
@itemx -L @var{directory}
Add @var{directory} to the front of the package module search path

M guix/scripts/style.scm => guix/scripts/style.scm +24 -3
@@ 382,13 382,25 @@ bailing out~%")
              package)
     str)))

(define (edit-expression/dry-run properties rewrite-string)
  "Like 'edit-expression' but display what would be edited without actually
doing it."
  (edit-expression properties
                   (lambda (str)
                     (unless (string=? (rewrite-string str) str)
                       (info (source-properties->location properties)
                             (G_ "would be edited~%")))
                     str)))

(define* (simplify-package-inputs package
                                  #:key (policy 'silent))
                                  #:key (policy 'silent)
                                  (edit-expression edit-expression))
  "Edit the source code of PACKAGE to simplify its inputs field if needed.
POLICY is a symbol that defines whether to simplify inputs; it can one of
'silent (change only if the resulting derivation is the same), 'safe (change
only if semantics are known to be unaffected), and 'always (fearlessly
simplify inputs!)."
simplify inputs!).  Call EDIT-EXPRESSION to actually edit the source of
PACKAGE."
  (for-each (lambda (field-name field)
              (match (field package)
                (()


@@ 449,6 461,9 @@ simplify inputs!)."
                (member "load-path" (option-names option)))
              %standard-build-options)

        (option '(#\n "dry-run") #f #f
                (lambda (opt name arg result)
                  (alist-cons 'dry-run? #t result)))
        (option '(#\e "expression") #t #f
                (lambda (opt name arg result)
                  (alist-cons 'expression arg result)))


@@ 473,6 488,8 @@ simplify inputs!)."
  (display (G_ "Usage: guix style [OPTION]... [PACKAGE]...
Update package definitions to the latest style.\n"))
  (display (G_ "
  -n, --dry-run          display files that would be edited but do nothing"))
  (display (G_ "
  -L, --load-path=DIR    prepend DIR to the package module search path"))
  (display (G_ "
  -e, --expression=EXPR  consider the package EXPR evaluates to"))


@@ 514,9 531,13 @@ Update package definitions to the latest style.\n"))
                                  (read/eval str))
                                 (_ #f))
                               opts))
         (edit     (if (assoc-ref opts 'dry-run?)
                       edit-expression/dry-run
                       edit-expression))
         (policy   (assoc-ref opts 'input-simplification-policy)))
    (for-each (lambda (package)
                (simplify-package-inputs package #:policy policy))
                (simplify-package-inputs package #:policy policy
                                         #:edit-expression edit))
              ;; Sort package by source code location so that we start editing
              ;; files from the bottom and going upward.  That way, the
              ;; 'location' field of <package> records is not invalidated as