[Yum-devel] [PATCH] add a returnLeafNodes() to rpmsack

Tim Lauridsen tim.lauridsen at googlemail.com
Fri Oct 2 10:07:23 UTC 2009


On 10/02/2009 12:20 AM, Seth Vidal wrote:
> modifies transaction.returnLeafNodes() to take an optional argument
> that returns headers and indexes so we can convert it quickly
> to package objects. This makes self.rpmdb.returnLeafNodes() about 2x
> faster than it was with the PackageSackBase.returnLeafNodes()
> ---
>   rpmUtils/transaction.py |   11 ++++++++---
>   yum/rpmsack.py          |    6 +++++-
>   2 files changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/rpmUtils/transaction.py b/rpmUtils/transaction.py
> index 664643e..e0c6152 100644
> --- a/rpmUtils/transaction.py
> +++ b/rpmUtils/transaction.py
> @@ -107,9 +107,11 @@ class TransactionWrapper:
>           return reserrors
>
>
> -    def returnLeafNodes(self):
> +    def returnLeafNodes(self, headers=False):
>           """returns a list of package tuples (n,a,e,v,r) that are not required by
> -           any other package on the system"""
> +           any other package on the system
> +           If headers is True then it will return a list of (header, index) tuples
> +           """
>
>           req = {}
>           orphan = []
> @@ -143,7 +145,10 @@ class TransactionWrapper:
>                           preq = preq + 1
>
>               if preq == 0:
> -                orphan.append(tup)
> +                if headers:
> +                    orphan.append((h, mi.instance()))
> +                else:
> +                    orphan.append(tup)
>
>           return orphan
>
> diff --git a/yum/rpmsack.py b/yum/rpmsack.py
> index fd05f9b..93e14ec 100644
> --- a/yum/rpmsack.py
> +++ b/yum/rpmsack.py
> @@ -434,7 +434,11 @@ class RPMDBPackageSack(PackageSackBase):
>
>       def excludeArchs(self, archlist):
>           pass
> -
> +
> +    def returnLeafNodes(self, repoid=None):
> +        ts = self.readOnlyTS()
> +        return [ self._makePackageObject(h, mi) for (h, mi) in ts.returnLeafNodes(headers=True) ]
> +
>       # Helper functions
>       def _all_packages(self):
>           '''Generator that yield (header, index) for all packages
>    
Looks good to me

Tim


More information about the Yum-devel mailing list