summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2021-11-23 16:55:42 +0100
committerLudovic Courtès <ludo@gnu.org>2021-11-23 16:55:42 +0100
commit19dc16ce4b9c5fa885b4641a174afb0e1e653a9f (patch)
treefd40e5f8e8b23592659fba85663193c564940bca
parent0677443c45c89c64ee3a62849b76d8e8a6ddfb17 (diff)
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'.
-rw-r--r--doc/guix.texi4
-rw-r--r--guix/scripts/style.scm27
2 files changed, 28 insertions, 3 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index a503ed5ee0..1bb139e9b0 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -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
diff --git a/guix/scripts/style.scm b/guix/scripts/style.scm
index 8957c1d507..86a46f693c 100644
--- a/guix/scripts/style.scm
+++ b/guix/scripts/style.scm
@@ -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