On Thu, 2011-02-17 at 12:15 +0200, Panu Matilainen wrote:
> At least hasattr() calls for _cache_prco_names_* and _prco_lookup
> were causing headers to be loaded when not wanted at all, causing
> headers for all to-be updated packages to be kept in memory throughout
> the entire transaction.
> 
> It'd probably make sense to only ever load the header if the requested
> attribute is a valid rpm tag, but leaving that for another patch...
> ---
>  yum/rpmsack.py |   11 ++++++++---
>  1 files changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/yum/rpmsack.py b/yum/rpmsack.py
> index 227ed89..e0798ce 100644
> --- a/yum/rpmsack.py
> +++ b/yum/rpmsack.py
> @@ -67,13 +67,18 @@ class RPMInstalledPackage(YumInstalledPackage):
>              raise Errors.PackageSackError, 'Rpmdb changed underneath us'
>  
>      def __getattr__(self, varname):
> -        self.hdr = val = self._get_hdr()
> -        self._has_hdr = True
>          # If these existed, then we wouldn't get here ... and nothing in the 
> DB
>          # starts and ends with __'s. So these are missing.
>          if varname.startswith('__') and varname.endswith('__'):
>              raise AttributeError, "%s has no attribute %s" % (self, varname)
> -            
> +
> +        # At least _cache_prco_names and _prco_lookup need the real attribute
> +        if varname.startswith('_'):
> +            return object.__getattr__(self, varname)

 Given that we got here, isn't this just the same as raising directly?
 If so it's probably easier to understand to just raise directly.

 Apart from that, ACK.

_______________________________________________
Yum-devel mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel

Reply via email to