commit:     9e2ed58e4695b3030e7ab2824b690bda8ed5d180
Author:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
AuthorDate: Tue Oct  4 08:21:41 2022 +0000
Commit:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Tue Oct  4 08:21:41 2022 +0000
URL:        
https://gitweb.gentoo.org/proj/pkgcore/pkgcore.git/commit/?id=9e2ed58e

repository: check issues with distdir only if fetch failed

Perform the checks for distdir (so we have more informative output) only
if a fetch failed. As a result, if it doesn't need to fetch, it won't
check the distdir.

Follows: 97d53b0ca18c9581a054e930f3496768ae923b18
Resolves: https://github.com/pkgcore/pkgdev/issues/99
Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>

 src/pkgcore/ebuild/repository.py | 32 ++++++++++++++++++--------------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/src/pkgcore/ebuild/repository.py b/src/pkgcore/ebuild/repository.py
index 47eaaea0b..3a8f20b35 100644
--- a/src/pkgcore/ebuild/repository.py
+++ b/src/pkgcore/ebuild/repository.py
@@ -25,7 +25,7 @@ from snakeoil.strings import pluralism
 from .. import fetch
 from ..config.hint import ConfigHint, configurable
 from ..log import logger
-from ..operations import repo as _repo_ops
+from ..operations import OperationError, repo as _repo_ops
 from ..package import errors as pkg_errors
 from ..repository import configured, errors, prototype, util
 from ..repository.virtual import RestrictionRepo
@@ -51,16 +51,6 @@ class repo_operations(_repo_ops.operations):
         if distdir is None:
             distdir = domain.distdir
 
-        try:
-            os.makedirs(distdir, exist_ok=True)
-        except OSError as exc:
-            observer.error(f'failed to create distdir {distdir!r}: 
{exc.strerror}')
-            return ('failed to create distdir', )
-
-        if not os.access(distdir, os.W_OK):
-            observer.error(f'no write access to distdir: {distdir!r}')
-            return ('no write access to distdir', )
-
         ret = set()
 
         matches = self.repo.itermatch(restriction, sorter=sorted)
@@ -115,9 +105,23 @@ class repo_operations(_repo_ops.operations):
 
             # fetch distfiles
             pkg_ops = domain.pkg_operations(pkg, observer=observer)
-            if not pkg_ops.fetch(list(fetchables.values()), observer, 
distdir=distdir):
-                ret.add(key)
-                continue
+            try:
+                if not pkg_ops.fetch(list(fetchables.values()), observer, 
distdir=distdir):
+                    ret.add(key)
+                    continue
+            except OperationError:
+                # check for special cases of fetch failures
+                try:
+                    os.makedirs(distdir, exist_ok=True)
+                except OSError as exc:
+                    observer.error(f'failed to create distdir {distdir!r}: 
{exc.strerror}')
+                    return ('failed to create distdir', )
+
+                if not os.access(distdir, os.W_OK):
+                    observer.error(f'no write access to distdir: {distdir!r}')
+                    return ('no write access to distdir', )
+
+                raise
 
             # calculate checksums for fetched distfiles
             try:

Reply via email to