From: Michael Tremer Date: Fri, 4 Mar 2011 13:34:55 +0000 (+0100) Subject: Make files searchable by glob patterns. X-Git-Tag: 0.9.3~99 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=311ce792123b2b5d197f40018d72f4c83d15592c;p=pakfire.git Make files searchable by glob patterns. --- diff --git a/pakfire/packages/base.py b/pakfire/packages/base.py index fc6d95ae5..c963039fd 100644 --- a/pakfire/packages/base.py +++ b/pakfire/packages/base.py @@ -1,5 +1,7 @@ #!/usr/bin/python + +import fnmatch import logging import re @@ -254,7 +256,11 @@ class Package(object): ### methods ### def _does_provide_file(self, requires): - return requires.requires in self.filelist + for file in self.filelist: + if fnmatch.fnmatch(file, requires.requires): + return True + + return False def does_provide(self, requires): if not isinstance(requires, pakfire.depsolve.Requires): diff --git a/pakfire/packages/installed.py b/pakfire/packages/installed.py index 4d99f5f80..8e9c97922 100644 --- a/pakfire/packages/installed.py +++ b/pakfire/packages/installed.py @@ -167,7 +167,7 @@ class DatabasePackage(Package): A faster version to find a file in the database. """ c = self.db.cursor() - c.execute("SELECT * FROM files WHERE name = ? AND pkg = ?", + c.execute("SELECT * FROM files WHERE name GLOB ? AND pkg = ?", (requires.requires, self.id)) ret = False diff --git a/pakfire/repository/base.py b/pakfire/repository/base.py index c4b589a64..1cd57e604 100644 --- a/pakfire/repository/base.py +++ b/pakfire/repository/base.py @@ -79,7 +79,13 @@ class RepositoryFactory(object): def get_by_file(self, filename): for pkg in self.packages: - if filename in pkg.filelist: + match = False + for pkg_filename in pkg.filelist: + if fnmatch.fnmatch(pkg_filename, filename): + match = True + break + + if match: yield pkg def search(self, pattern): diff --git a/pakfire/repository/index.py b/pakfire/repository/index.py index 9d38c6479..a0c68b7e9 100644 --- a/pakfire/repository/index.py +++ b/pakfire/repository/index.py @@ -1,5 +1,6 @@ #!/usr/bin/python +import fnmatch import json import logging import lzma @@ -37,7 +38,13 @@ class Index(object): def get_by_file(self, filename): for pkg in self.packages: - if filename in pkg.filelist: + match = False + for pkg_filename in pkg.filelist: + if fnmatch.fnmatch(pkg_filename, filename): + match = True + break + + if match: yield pkg def get_by_id(self, id): @@ -157,7 +164,7 @@ class DatabaseIndexFactory(Index): def get_by_file(self, filename): c = self.db.cursor() - c.execute("SELECT pkg FROM files WHERE name = ?", (filename,)) + c.execute("SELECT pkg FROM files WHERE name GLOB ?", (filename,)) for pkg in c: yield self.get_by_id(pkg["pkg"]) diff --git a/po/pakfire.pot b/po/pakfire.pot index 00df40d7d..badbddd30 100644 --- a/po/pakfire.pot +++ b/po/pakfire.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-04 13:23+0100\n" +"POT-Creation-Date: 2011-03-04 14:33+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -158,11 +158,11 @@ msgstr "" msgid "Package" msgstr "" -#: ../pakfire/depsolve.py:220 ../pakfire/packages/base.py:55 +#: ../pakfire/depsolve.py:220 ../pakfire/packages/base.py:57 msgid "Arch" msgstr "" -#: ../pakfire/depsolve.py:220 ../pakfire/packages/base.py:56 +#: ../pakfire/depsolve.py:220 ../pakfire/packages/base.py:58 msgid "Version" msgstr "" @@ -170,7 +170,7 @@ msgstr "" msgid "Repository" msgstr "" -#: ../pakfire/depsolve.py:220 ../pakfire/packages/base.py:58 +#: ../pakfire/depsolve.py:220 ../pakfire/packages/base.py:60 msgid "Size" msgstr "" @@ -228,47 +228,47 @@ msgstr "" msgid "Is this okay?" msgstr "" -#: ../pakfire/packages/base.py:54 +#: ../pakfire/packages/base.py:56 msgid "Name" msgstr "" -#: ../pakfire/packages/base.py:57 +#: ../pakfire/packages/base.py:59 msgid "Release" msgstr "" -#: ../pakfire/packages/base.py:59 +#: ../pakfire/packages/base.py:61 msgid "Repo" msgstr "" -#: ../pakfire/packages/base.py:60 +#: ../pakfire/packages/base.py:62 msgid "Summary" msgstr "" -#: ../pakfire/packages/base.py:61 +#: ../pakfire/packages/base.py:63 msgid "URL" msgstr "" -#: ../pakfire/packages/base.py:62 +#: ../pakfire/packages/base.py:64 msgid "License" msgstr "" -#: ../pakfire/packages/base.py:65 +#: ../pakfire/packages/base.py:67 msgid "Description" msgstr "" -#: ../pakfire/packages/base.py:71 +#: ../pakfire/packages/base.py:73 msgid "UUID" msgstr "" -#: ../pakfire/packages/base.py:72 +#: ../pakfire/packages/base.py:74 msgid "Build ID" msgstr "" -#: ../pakfire/packages/base.py:73 +#: ../pakfire/packages/base.py:75 msgid "Build date" msgstr "" -#: ../pakfire/packages/base.py:74 +#: ../pakfire/packages/base.py:76 msgid "Build host" msgstr "" @@ -280,7 +280,7 @@ msgstr "" msgid "Extracting:" msgstr "" -#: ../pakfire/repository/index.py:314 +#: ../pakfire/repository/index.py:321 #, python-format msgid "%s: package database" msgstr ""