guix package: 'transaction-upgrade-entry' swallows build requests.
Fixes a regression introduced in
131f50cdc9
whereby the install/upgrade
message would not be displayed:
$ guix upgrade -n
2.1 MB would be downloaded:
/gnu/store/…-something-1.2
/gnu/store/…-its-dependency-2.3
This is because we'd directly abort from 'transaction-upgrade-entry' to
the build handler of 'build-notifier'.
* guix/scripts/package.scm (transaction-upgrade-entry): Call 'string=?'
expression in 'with-build-handler'.
* tests/packages.scm ("transaction-upgrade-entry, grafts"): New test.
master
parent
190ddfe21e
commit
a187cc5628
|
@ -234,11 +234,19 @@ non-zero relevance score."
|
||||||
transaction)
|
transaction)
|
||||||
((=)
|
((=)
|
||||||
(let* ((new (package->manifest-entry* pkg output)))
|
(let* ((new (package->manifest-entry* pkg output)))
|
||||||
|
;; Here we want to determine whether the NEW actually
|
||||||
|
;; differs from ENTRY, but we need to intercept
|
||||||
|
;; 'build-things' calls because they would prevent us from
|
||||||
|
;; displaying the list of packages to install/upgrade
|
||||||
|
;; upfront. Thus, if lowering NEW triggers a build (due
|
||||||
|
;; to grafts), assume NEW differs from ENTRY.
|
||||||
|
|
||||||
;; XXX: When there are propagated inputs, assume we need to
|
;; XXX: When there are propagated inputs, assume we need to
|
||||||
;; upgrade the whole entry.
|
;; upgrade the whole entry.
|
||||||
(if (and (string=? (manifest-entry-item
|
(if (and (with-build-handler (const #f)
|
||||||
|
(string=? (manifest-entry-item
|
||||||
(lower-manifest-entry* new))
|
(lower-manifest-entry* new))
|
||||||
(manifest-entry-item entry))
|
(manifest-entry-item entry)))
|
||||||
(null? (package-propagated-inputs pkg)))
|
(null? (package-propagated-inputs pkg)))
|
||||||
transaction
|
transaction
|
||||||
(manifest-transaction-install-entry
|
(manifest-transaction-install-entry
|
||||||
|
|
|
@ -148,6 +148,30 @@
|
||||||
(string=? (manifest-pattern-version pattern) "1")
|
(string=? (manifest-pattern-version pattern) "1")
|
||||||
(string=? (manifest-pattern-output pattern) "out")))))))
|
(string=? (manifest-pattern-output pattern) "out")))))))
|
||||||
|
|
||||||
|
(test-assert "transaction-upgrade-entry, grafts"
|
||||||
|
;; Ensure that, when grafts are enabled, 'transaction-upgrade-entry' doesn't
|
||||||
|
;; try to build stuff.
|
||||||
|
(with-build-handler (const 'failed!)
|
||||||
|
(parameterize ((%graft? #t))
|
||||||
|
(let* ((old (dummy-package "foo" (version "1")))
|
||||||
|
(bar (dummy-package "bar" (version "0")
|
||||||
|
(replacement old)))
|
||||||
|
(new (dummy-package "foo" (version "1")
|
||||||
|
(inputs `(("bar" ,bar)))))
|
||||||
|
(tx (mock ((gnu packages) find-best-packages-by-name
|
||||||
|
(const (list new)))
|
||||||
|
(transaction-upgrade-entry
|
||||||
|
%store
|
||||||
|
(manifest-entry
|
||||||
|
(inherit (package->manifest-entry old))
|
||||||
|
(item (string-append (%store-prefix) "/"
|
||||||
|
(make-string 32 #\e) "-foo-1")))
|
||||||
|
(manifest-transaction)))))
|
||||||
|
(and (match (manifest-transaction-install tx)
|
||||||
|
((($ <manifest-entry> "foo" "1" "out" item))
|
||||||
|
(eq? item new)))
|
||||||
|
(null? (manifest-transaction-remove tx)))))))
|
||||||
|
|
||||||
(test-assert "package-field-location"
|
(test-assert "package-field-location"
|
||||||
(let ()
|
(let ()
|
||||||
(define (goto port line column)
|
(define (goto port line column)
|
||||||
|
|
Reference in New Issue