style: Make 'safe' policy less conservative.
Previously, a mere (arguments '(#:tests? #f)) would lead guix style -S inputs --input-simplification=safe to bail out. It now recognizes such trivial argument lists and proceeds. * guix/scripts/style.scm (trivial-package-arguments?): New procedure. (simplify-package-inputs): Use it in the 'safe case instead of 'null?'. * tests/style.scm ("input labels, 'safe' policy, trivial arguments"): New test.
This commit is contained in:
parent
f0a51a2bda
commit
68fa28b3c3
2 changed files with 34 additions and 3 deletions
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2021-2022 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2021-2023 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -242,6 +242,17 @@ doing it."
|
||||||
(location-line loc)
|
(location-line loc)
|
||||||
(location-column loc)))
|
(location-column loc)))
|
||||||
|
|
||||||
|
(define (trivial-package-arguments? package)
|
||||||
|
"Return true if PACKAGE has zero arguments or only \"trivial\" arguments
|
||||||
|
guaranteed not to refer to input labels."
|
||||||
|
(let loop ((arguments (package-arguments package)))
|
||||||
|
(match arguments
|
||||||
|
(()
|
||||||
|
#t)
|
||||||
|
(((? keyword?) value rest ...)
|
||||||
|
(and (or (boolean? value) (number? value) (string? value))
|
||||||
|
(loop rest))))))
|
||||||
|
|
||||||
(define* (simplify-package-inputs package
|
(define* (simplify-package-inputs package
|
||||||
#:key (policy 'silent)
|
#:key (policy 'silent)
|
||||||
(edit-expression edit-expression))
|
(edit-expression edit-expression))
|
||||||
|
@ -276,7 +287,7 @@ PACKAGE."
|
||||||
;; If PACKAGE has no arguments, labels are known
|
;; If PACKAGE has no arguments, labels are known
|
||||||
;; to have no effect: this is a "safe" change, but
|
;; to have no effect: this is a "safe" change, but
|
||||||
;; it may change the derivation.
|
;; it may change the derivation.
|
||||||
(if (null? (package-arguments package))
|
(if (trivial-package-arguments? package)
|
||||||
(const #t)
|
(const #t)
|
||||||
label-matches?))
|
label-matches?))
|
||||||
('always
|
('always
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2021-2022 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2021-2023 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -234,6 +234,26 @@
|
||||||
(list (package-inputs (@ (my-packages) my-coreutils))
|
(list (package-inputs (@ (my-packages) my-coreutils))
|
||||||
(read-package-field (@ (my-packages) my-coreutils) 'inputs)))))
|
(read-package-field (@ (my-packages) my-coreutils) 'inputs)))))
|
||||||
|
|
||||||
|
(test-equal "input labels, 'safe' policy, trivial arguments"
|
||||||
|
(list `(("gmp" ,gmp) ("mpfr" ,mpfr))
|
||||||
|
"\
|
||||||
|
(inputs (list gmp mpfr))\n")
|
||||||
|
(call-with-test-package '((inputs `(("GMP" ,gmp) ("Mpfr" ,mpfr)))
|
||||||
|
(arguments ;"trivial" arguments
|
||||||
|
'(#:tests? #f
|
||||||
|
#:test-target "whatever")))
|
||||||
|
(lambda (directory)
|
||||||
|
(define file
|
||||||
|
(string-append directory "/my-packages.scm"))
|
||||||
|
|
||||||
|
(system* "guix" "style" "-L" directory "my-coreutils"
|
||||||
|
"-S" "inputs"
|
||||||
|
"--input-simplification=safe")
|
||||||
|
|
||||||
|
(load file)
|
||||||
|
(list (package-inputs (@ (my-packages) my-coreutils))
|
||||||
|
(read-package-field (@ (my-packages) my-coreutils) 'inputs)))))
|
||||||
|
|
||||||
(test-equal "input labels, 'safe' policy, nothing changed"
|
(test-equal "input labels, 'safe' policy, nothing changed"
|
||||||
(list `(("GMP" ,gmp) ("ACL" ,acl))
|
(list `(("GMP" ,gmp) ("ACL" ,acl))
|
||||||
"\
|
"\
|
||||||
|
|
Reference in a new issue