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:
