On Fri, 11 Dec 2009, James Antill wrote:



ACK.
-sv


---
yum/rpmsack.py |   64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 64 insertions(+), 0 deletions(-)

diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index ee63c6e..23ebd3e 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -21,6 +21,7 @@ import os
import os.path

from rpmUtils import miscutils
+from rpmUtils import arch
from rpmUtils.transaction import initReadOnlyTransaction
import misc
import Errors
@@ -34,6 +35,8 @@ import re
from yum.i18n import to_unicode
import constants

+import yum.depsolve
+
class RPMInstalledPackage(YumInstalledPackage):

    def __init__(self, rpmhdr, index, rpmdb):
@@ -1043,6 +1046,67 @@ class RPMDBPackageSack(PackageSackBase):

        return sorted(pkgs.keys())

+    def check_dependencies(self, pkgs=None):
+        """ Checks for any missing dependencies. """
+
+        if pkgs is None:
+            pkgs = self.returnPackages()
+
+        providers = set() # Speedup, as usual :)
+        problems = []
+        for pkg in sorted(pkgs): # The sort here is mainly for "UI"
+            for rreq in pkg.requires:
+                if rreq[0].startswith('rpmlib'): continue
+                if rreq in providers:            continue
+
+                (req, flags, ver) = rreq
+                if self.getProvides(req, flags, ver):
+                    providers.add(rreq)
+                    continue
+                flags = yum.depsolve.flags.get(flags, flags)
+                missing = miscutils.formatRequire(req, ver, flags)
+                problems.append((pkg, "requires", missing, []))
+
+            for creq in pkg.conflicts:
+                if creq[0].startswith('rpmlib'): continue
+
+                (req, flags, ver) = creq
+                res = self.getProvides(req, flags, ver)
+                if not res:
+                    continue
+                flags = yum.depsolve.flags.get(flags, flags)
+                found = miscutils.formatRequire(req, ver, flags)
+                problems.append((pkg, "conflicts", found, res))
+        return problems
+
+    def _iter_two_pkgs(self, ignore):
+        last = None
+        for pkg in sorted(self.returnPackages()):
+            if pkg.name in ignore:
+                continue
+            if last is None:
+                last = pkg
+                continue
+            yield last, pkg
+            last = pkg
+
+    def check_duplicates(self, ignore=[]):
+        """ Checks for any missing dependencies. """
+
+        problems = []
+        for last, pkg in self._iter_two_pkgs(ignore):
+            if pkg.name != last.name:
+                continue
+            if pkg.verEQ(last) and pkg != last:
+                if arch.isMultiLibArch(pkg.arch) and last.arch != 'noarch':
+                    continue
+                if arch.isMultiLibArch(last.arch) and pkg.arch != 'noarch':
+                    continue
+
+            # More than one pkg, they aren't version equal, or aren't multiarch
+            problems.append((pkg, "dup", last))
+        return problems
+

def _sanitize(path):
    return path.replace('/', '').replace('~', '')
--
1.6.5.2

_______________________________________________
Yum-devel mailing list
Yum-devel@lists.baseurl.org
http://lists.baseurl.org/mailman/listinfo/yum-devel

_______________________________________________
Yum-devel mailing list
Yum-devel@lists.baseurl.org
http://lists.baseurl.org/mailman/listinfo/yum-devel

Reply via email to