diff --git a/guix/profiles.scm b/guix/profiles.scm index dcb5186c7a..056406e303 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -96,6 +96,7 @@ manifest-transaction-install-entry manifest-transaction-remove-pattern manifest-transaction-null? + manifest-transaction-removal-candidate? manifest-perform-transaction manifest-transaction-effects @@ -564,6 +565,12 @@ remove software." (($ () ()) #t) (($ _ _) #f))) +(define (manifest-transaction-removal-candidate? entry transaction) + "Return true if ENTRY is a candidate for removal in TRANSACTION." + (any (lambda (pattern) + ((entry-predicate pattern) entry)) + (manifest-transaction-remove transaction))) + (define (manifest-transaction-effects manifest transaction) "Compute the effect of applying TRANSACTION to MANIFEST. Return 4 values: the list of packages that would be removed, installed, upgraded, or downgraded diff --git a/tests/profiles.scm b/tests/profiles.scm index f731807e8c..469dde2652 100644 --- a/tests/profiles.scm +++ b/tests/profiles.scm @@ -197,6 +197,13 @@ (test-assert "manifest-transaction-null?" (manifest-transaction-null? (manifest-transaction))) +(test-assert "manifest-transaction-removal-candidate?" + (let ((m (manifest (list guile-2.0.9))) + (t (manifest-transaction + (remove (list (manifest-pattern (name "guile"))))))) + (and (manifest-transaction-removal-candidate? guile-2.0.9 t) + (not (manifest-transaction-removal-candidate? glibc t))))) + (test-assertm "profile-derivation" (mlet* %store-monad ((entry -> (package->manifest-entry %bootstrap-guile))