summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--guix/profiles.scm7
-rw-r--r--tests/profiles.scm7
2 files changed, 14 insertions, 0 deletions
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."
     (($ <manifest-transaction> () ()) #t)
     (($ <manifest-transaction> _ _)   #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))