[Yum-devel] [PATCH] patch for rh bug 503195 - fix double prefixing problem by being a little sneaky internally if we have an installroot defined that is not '/'

Tim Lauridsen tim.lauridsen at googlemail.com
Wed Sep 2 08:35:41 UTC 2009


On 09/01/2009 09:04 PM, Seth Vidal wrote:
> ---
>   yum/rpmtrans.py |   18 +++++++++++-------
>   1 files changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/yum/rpmtrans.py b/yum/rpmtrans.py
> index 053b272..77b06a2 100644
> --- a/yum/rpmtrans.py
> +++ b/yum/rpmtrans.py
> @@ -252,11 +252,10 @@ class RPMTransaction:
>           if self.test: return
>
>           if not hasattr(self, '_ts_done'):
> -            # need config variable to put this in a better path/name
> -            te_fn = '%s/transaction-done.%s' % (self.base.conf.persistdir, self._ts_time)
> -            self.ts_done_fn = te_fn
> +            self.ts_done_fn = '%s/transaction-done.%s' % (self.base.conf.persistdir, self._ts_time)
> +
>               try:
> -                self._ts_done = open(te_fn, 'w')
> +                self._ts_done = open(self.ts_done_fn, 'w')
>               except (IOError, OSError), e:
>                   self.display.errorlog('could not open ts_done file: %s' % e)
>                   return
> @@ -336,9 +335,14 @@ class RPMTransaction:
>           self._ts_time = time.strftime('%Y-%m-%d.%H:%M.%S')
>           tsfn = '%s/transaction-all.%s' % (self.base.conf.persistdir, self._ts_time)
>           self.ts_all_fn = tsfn
> -        if not os.path.exists(self.base.conf.persistdir):
> -            os.makedirs(self.base.conf.persistdir) # make the dir,
> +        # to handle us being inside a chroot at this point
> +        # we hand back the right path to those 'outside' of the chroot() calls
> +        # but we're using the right path inside.
> +        if self.base.conf.installroot != '/':
> +            tsfn = tsfn.replace(self.base.conf.installroot,'')
>           try:
> +            if not os.path.exists(os.path.dirname(tsfn)):
> +                os.makedirs(os.path.dirname(tsfn)) # make the dir,
>               fo = open(tsfn, 'w')
>           except (IOError, OSError), e:
>               self.display.errorlog('could not open ts_all file: %s' % e)
> @@ -353,7 +357,7 @@ class RPMTransaction:
>           except (IOError, OSError), e:
>               #  Having incomplete transactions is probably worse than having
>               # nothing.
> -            misc.unlink_f(self.ts_all_fn)
> +            misc.unlink_f(tsfn)
>
>       def callback( self, what, bytes, total, h, user ):
>           if what == rpm.RPMCALLBACK_TRANS_START:

SNEAKY !!, Look good to me :)

Tim


More information about the Yum-devel mailing list