]> git.ipfire.org Git - pakfire.git/commitdiff
Search database faster for package files.
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 26 Feb 2011 07:56:09 +0000 (08:56 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 26 Feb 2011 07:56:09 +0000 (08:56 +0100)
pakfire/packages/base.py
pakfire/packages/installed.py

index 4bdec60fc2203f85429e176fac8927098e47a23b..d38b89f7c156dcbfcab79cee62cbea42bdd9ea74 100644 (file)
@@ -249,6 +249,9 @@ class Package(object):
 
        ### methods ###
 
+       def _does_provide_file(self, requires):
+               return requires.requires in self.filelist
+
        def does_provide(self, requires):
                if not isinstance(requires, pakfire.depsolve.Requires):
                        requires = pakfire.depsolve.Requires(self, requires)
@@ -264,7 +267,7 @@ class Package(object):
                        return True
 
                if requires.type == "file":
-                       return requires.requires in self.filelist
+                       return self._does_provide_file(requires)
 
                elif requires.type == "expr":
                        # Handle all expressions like "gcc>=4.0.0-1"
index 60792c717e2473b3e7b0914a4a322b8b2bf3daf4..e55cba2e41083132b1c7972061a21119c6e0f759 100644 (file)
@@ -154,6 +154,23 @@ class DatabasePackage(Package):
 
                c.close()
 
+       def _does_provide_file(self, requires):
+               """
+                       A faster version to find a file in the database.
+               """
+               c = self.db.cursor()
+               c.execute("SELECT pkg FROM files WHERE name = ?", (requires.requires,))
+
+               ret = False
+               for pkg in c:
+                       if self.id == pkg[0]:
+                               ret = True
+                               break
+
+               c.close()
+
+               return ret
+
        def download(self, text=""):
                """
                        Downloads the package from repository and returns a new instance