From a88d2cdc2808f45ef012838abcfc56e1e062d2f5 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 26 Feb 2011 08:56:09 +0100 Subject: [PATCH] Search database faster for package files. --- pakfire/packages/base.py | 5 ++++- pakfire/packages/installed.py | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/pakfire/packages/base.py b/pakfire/packages/base.py index 4bdec60fc..d38b89f7c 100644 --- a/pakfire/packages/base.py +++ b/pakfire/packages/base.py @@ -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" diff --git a/pakfire/packages/installed.py b/pakfire/packages/installed.py index 60792c717..e55cba2e4 100644 --- a/pakfire/packages/installed.py +++ b/pakfire/packages/installed.py @@ -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 -- 2.39.5