[Yum-devel] [PATCH] Add primary_only arg. to returnFileTypes(), use it from transactioninfo sack so that we don't require filelists to be downloaded.
Tim Lauridsen
tim.lauridsen at googlemail.com
Mon Apr 19 09:08:41 UTC 2010
On Thu, Apr 15, 2010 at 6:55 PM, James Antill <james at and.org> wrote:
> ---
> yum/packages.py | 23 ++++++++++++++++++++---
> yum/sqlitesack.py | 11 ++++++++++-
> yum/transactioninfo.py | 2 +-
> 3 files changed, 31 insertions(+), 5 deletions(-)
>
> diff --git a/yum/packages.py b/yum/packages.py
> index 731d217..c1a14d0 100644
> --- a/yum/packages.py
> +++ b/yum/packages.py
> @@ -514,9 +514,26 @@ class RpmBase(object):
> return self.files[ftype]
> return []
>
> - def returnFileTypes(self):
> - """return list of types of files in the package"""
> - # maybe should die - use direct access to attribute
> + def returnFileTypes(self, primary_only=False):
> + """return list of types of files in the package, you can pass
> + primary_only=True to limit to those files in the primary
> repodata"""
> + if primary_only:
> + ret = [] # We only return the types for the primary files.
> + for ftype in self.files.keys():
> + if ftype == 'dir':
> + match = misc.re_primary_dirname
> + else:
> + match = misc.re_primary_filename
> + # As soon as we find a primary file of this type, we can
> + # return it.
> + for fn in self.files[ftype]:
> + if match(fn):
> + break
> + else:
> + continue
> + ret.append(ftype)
> + return ret
> +
> return self.files.keys()
>
> def returnPrcoNames(self, prcotype):
> diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
> index 1885d57..43f60cd 100644
> --- a/yum/sqlitesack.py
> +++ b/yum/sqlitesack.py
> @@ -353,6 +353,8 @@ class YumAvailablePackageSqlite(YumAvailablePackage,
> PackageObject, RpmBase):
> return self._changelog
>
> def returnFileEntries(self, ftype='file', primary_only=False):
> + """return list of files based on type, you can pass
> primary_only=True
> + to limit to those files in the primary repodata"""
> if primary_only and not self._loadedfiles:
> sql = "SELECT name as fname FROM files WHERE pkgKey = ? and
> type = ?"
> cur = self._sql_MD('primary', sql, (self.pkgKey, ftype))
> @@ -361,7 +363,14 @@ class YumAvailablePackageSqlite(YumAvailablePackage,
> PackageObject, RpmBase):
> self._loadFiles()
> return RpmBase.returnFileEntries(self,ftype,primary_only)
>
> - def returnFileTypes(self):
> + def returnFileTypes(self, primary_only=False):
> + """return list of types of files in the package, you can pass
> + primary_only=True to limit to those files in the primary
> repodata"""
> + if primary_only and not self._loadedfiles:
> + sql = "SELECT DISTINCT type as ftype FROM files WHERE pkgKey =
> ?"
> + cur = self._sql_MD('primary', sql, (self.pkgKey,))
> + return map(lambda x: x['ftype'], cur)
> +
> self._loadFiles()
> return RpmBase.returnFileTypes(self)
>
> diff --git a/yum/transactioninfo.py b/yum/transactioninfo.py
> index d7d8859..dfa34b3 100644
> --- a/yum/transactioninfo.py
> +++ b/yum/transactioninfo.py
> @@ -39,7 +39,7 @@ class GetProvReqOnlyPackageSack(PackageSack):
> self._need_index_files = need_files
>
> def __addPackageToIndex_primary_files(self, obj):
> - for ftype in obj.returnFileTypes():
> + for ftype in obj.returnFileTypes(primary_only=True):
> for file in obj.returnFileEntries(ftype, primary_only=True):
> self._addToDictAsList(self.filenames, file, obj)
> def __addPackageToIndex_files(self, obj):
> --
> 1.6.6.1
>
> _______________________________________________
> Yum-devel mailing list
> Yum-devel at lists.baseurl.org
> http://lists.baseurl.org/mailman/listinfo/yum-devel
>
ACK to the patch.
Just as usage question, when is the the diffence in the result returned
between primary_only= True an not ?
(what files are not included in primary ?)
Tim
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.baseurl.org/pipermail/yum-devel/attachments/20100419/2aec4017/attachment.htm>
More information about the Yum-devel
mailing list