Since DeletionIterator needs to stat the distfile and therefore find
one working path for it, pass it to DeletionTask instead of recomputing
it there.  This also fixes wrongly assuming that first layout will
always be correct.

Bug: https://bugs.gentoo.org/697890
Signed-off-by: Michał Górny <mgo...@gentoo.org>
---
 lib/portage/_emirrordist/DeletionIterator.py |  2 ++
 lib/portage/_emirrordist/DeletionTask.py     | 14 +++++---------
 2 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/lib/portage/_emirrordist/DeletionIterator.py 
b/lib/portage/_emirrordist/DeletionIterator.py
index 5c193911a..3cbff2c3a 100644
--- a/lib/portage/_emirrordist/DeletionIterator.py
+++ b/lib/portage/_emirrordist/DeletionIterator.py
@@ -72,6 +72,7 @@ class DeletionIterator(object):
 
                                        yield DeletionTask(background=True,
                                                distfile=filename,
+                                               distfile_path=path,
                                                config=self._config)
 
                                else:
@@ -85,6 +86,7 @@ class DeletionIterator(object):
 
                                                yield 
DeletionTask(background=True,
                                                        distfile=filename,
+                                                       distfile_path=path,
                                                        config=self._config)
 
                if deletion_db is not None:
diff --git a/lib/portage/_emirrordist/DeletionTask.py 
b/lib/portage/_emirrordist/DeletionTask.py
index a4bb29419..4e9c26ca2 100644
--- a/lib/portage/_emirrordist/DeletionTask.py
+++ b/lib/portage/_emirrordist/DeletionTask.py
@@ -10,14 +10,9 @@ from _emerge.CompositeTask import CompositeTask
 
 class DeletionTask(CompositeTask):
 
-       __slots__ = ('distfile', 'config')
+       __slots__ = ('distfile', 'distfile_path', 'config')
 
        def _start(self):
-
-               distfile_path = os.path.join(
-                       self.config.options.distfiles,
-                       self.config.layouts[0].get_path(self.distfile))
-
                if self.config.options.recycle_dir is not None:
                        recycle_path = os.path.join(
                                self.config.options.recycle_dir, self.distfile)
@@ -29,7 +24,8 @@ class DeletionTask(CompositeTask):
                                        "distfiles to recycle") % self.distfile)
                                try:
                                        # note: distfile_path can be a symlink 
here
-                                       
os.rename(os.path.realpath(distfile_path), recycle_path)
+                                       
os.rename(os.path.realpath(self.distfile_path),
+                                                       recycle_path)
                                except OSError as e:
                                        if e.errno != errno.EXDEV:
                                                logging.error(("rename %s from 
distfiles to "
@@ -40,7 +36,7 @@ class DeletionTask(CompositeTask):
                                        return
 
                                self._start_task(
-                                       FileCopier(src_path=distfile_path,
+                                       FileCopier(src_path=self.distfile_path,
                                                dest_path=recycle_path,
                                                background=False),
                                        self._recycle_copier_exit)
@@ -55,7 +51,7 @@ class DeletionTask(CompositeTask):
                        logging.debug(("delete '%s' from "
                                "distfiles") % self.distfile)
                        try:
-                               os.unlink(distfile_path)
+                               os.unlink(self.distfile_path)
                        except OSError as e:
                                if e.errno not in (errno.ENOENT, errno.ESTALE):
                                        logging.error("%s unlink failed in 
distfiles: %s" %
-- 
2.23.0


Reply via email to