[Yum-devel] [PATCH] Another returnLeafNodes speedup (roughly 10%).
Tim Lauridsen
tim.lauridsen at googlemail.com
Sun Oct 11 06:19:24 UTC 2009
On 10/10/2009 09:41 PM, Ville Skyttä wrote:
> Corresponds to commit 156db879ce62f8f974ea03d83cee575c4411820d for packageSack
> leaf nodes plus adds breaking req/prov lookup as early as possible, and avoids
> a few unnecessary pkgTupleFromHeader calls.
> ---
> rpmUtils/transaction.py | 18 ++++++++++++++----
> 1 files changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/rpmUtils/transaction.py b/rpmUtils/transaction.py
> index e0c6152..64a272f 100644
> --- a/rpmUtils/transaction.py
> +++ b/rpmUtils/transaction.py
> @@ -120,10 +120,11 @@ class TransactionWrapper:
> if mi is None: # this is REALLY unlikely but let's just say it for the moment
> return orphan
>
> + # prebuild the req dict
> for h in mi:
> - tup = miscutils.pkgTupleFromHeader(h)
> if not h[rpm.RPMTAG_REQUIRENAME]:
> continue
> + tup = miscutils.pkgTupleFromHeader(h)
> for r in h[rpm.RPMTAG_REQUIRENAME]:
> if not req.has_key(r):
> req[r] = set()
> @@ -133,17 +134,26 @@ class TransactionWrapper:
> mi = self.dbMatch()
> if mi is None:
> return orphan
> -
> +
> + def _return_all_provides(hdr):
> + """ Return all the provides, via yield. """
> + # These are done one by one, so that we get lazy loading
> + for prov in hdr[rpm.RPMTAG_PROVIDES]:
> + yield prov
> + for prov in hdr[rpm.RPMTAG_FILENAMES]:
> + yield prov
> +
> for h in mi:
> preq = 0
> tup = miscutils.pkgTupleFromHeader(h)
> - for p in h[rpm.RPMTAG_PROVIDES] + h[rpm.RPMTAG_FILENAMES]:
> + for p in _return_all_provides(h):
> if req.has_key(p):
> # Don't count a package that provides its require
> s = req[p]
> if len(s)> 1 or tup not in s:
> preq = preq + 1
> -
> + break
> +
> if preq == 0:
> if headers:
> orphan.append((h, mi.instance()))
>
Looks good to me
Tim
More information about the Yum-devel
mailing list