On Thu, Apr 15, 2010 at 6:55 PM, James Antill <[email protected]> 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 > [email protected] > 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
_______________________________________________ Yum-devel mailing list [email protected] http://lists.baseurl.org/mailman/listinfo/yum-devel
