commit: e536d2fd0a5a0ace16a215b6bc900d3bee623bc3 Author: Michał Górny <mgorny <AT> gentoo <DOT> org> AuthorDate: Sun May 9 20:20:23 2021 +0000 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org> CommitDate: Sun May 9 20:24:41 2021 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e536d2fd
sys-apps/pkgcore: Fix pmaint hang due to signal handler setup Signed-off-by: Michał Górny <mgorny <AT> gentoo.org> .../pkgcore/files/pkgcore-0.10.18-sighdlr-2.patch | 56 ++++++++++++++++++++++ sys-apps/pkgcore/pkgcore-0.11.8-r2.ebuild | 52 ++++++++++++++++++++ 2 files changed, 108 insertions(+) diff --git a/sys-apps/pkgcore/files/pkgcore-0.10.18-sighdlr-2.patch b/sys-apps/pkgcore/files/pkgcore-0.10.18-sighdlr-2.patch new file mode 100644 index 00000000000..d5ab23c4282 --- /dev/null +++ b/sys-apps/pkgcore/files/pkgcore-0.10.18-sighdlr-2.patch @@ -0,0 +1,56 @@ +From 9faa4288ce0b9f90292e9afc2777ce62317d861a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <[email protected]> +Date: Sun, 9 May 2021 21:36:32 +0200 +Subject: [PATCH] ebuild.processor: Ensure that signal handlers are set only + once + +Prevent the signal.signal() calls from being made more than once. This +was changed in 533f1edd70054a5479ee85719d3cbef0d15627fd when the calls +were moved to EbuildProcessor's __init__ method. However, it seems +to cause 'pmaint regen' to hang randomly which keeps blocking Gentoo +git repository mirrors. + +Fixes #307 +--- + src/pkgcore/ebuild/processor.py | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/src/pkgcore/ebuild/processor.py b/src/pkgcore/ebuild/processor.py +index 323e7e9a..384dc1f0 100644 +--- a/src/pkgcore/ebuild/processor.py ++++ b/src/pkgcore/ebuild/processor.py +@@ -24,7 +24,7 @@ import os + import signal + import threading + import traceback +-from functools import partial, wraps ++from functools import partial, wraps, lru_cache + from itertools import chain + + from snakeoil import bash, fileutils, klass +@@ -297,6 +297,12 @@ def chuck_StoppingCommand(ebp, line): + raise ProcessorError(args[1]) + + ++@lru_cache(maxsize=None) ++def set_signal_handlers(): ++ signal.signal(signal.SIGTERM, partial(chuck_TermInterrupt, None)) ++ signal.signal(signal.SIGINT, chuck_KeyboardInterrupt) ++ ++ + class EbuildProcessor: + """Abstraction of a running ebd instance. + +@@ -320,8 +326,7 @@ class EbuildProcessor: + self._outstanding_expects = [] + self._metadata_paths = None + +- signal.signal(signal.SIGTERM, partial(chuck_TermInterrupt, None)) +- signal.signal(signal.SIGINT, chuck_KeyboardInterrupt) ++ set_signal_handlers() + + spawn_opts = {'umask': 0o002} + if self.userpriv: +-- +2.31.1 + diff --git a/sys-apps/pkgcore/pkgcore-0.11.8-r2.ebuild b/sys-apps/pkgcore/pkgcore-0.11.8-r2.ebuild new file mode 100644 index 00000000000..37b799d4830 --- /dev/null +++ b/sys-apps/pkgcore/pkgcore-0.11.8-r2.ebuild @@ -0,0 +1,52 @@ +# Copyright 1999-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 +PYTHON_COMPAT=( python3_{8..9} ) +DISTUTILS_IN_SOURCE_BUILD=1 +inherit distutils-r1 + +if [[ ${PV} == *9999 ]] ; then + EGIT_REPO_URI="https://github.com/pkgcore/pkgcore.git" + inherit git-r3 +else + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos" + SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz" +fi + +DESCRIPTION="a framework for package management" +HOMEPAGE="https://github.com/pkgcore/pkgcore" + +LICENSE="BSD MIT" +SLOT="0" + +RDEPEND="dev-python/lxml[${PYTHON_USEDEP}]" +if [[ ${PV} == *9999 ]]; then + RDEPEND+=" ~dev-python/snakeoil-9999[${PYTHON_USEDEP}]" +else + RDEPEND+=" >=dev-python/snakeoil-0.9.6[${PYTHON_USEDEP}]" +fi +BDEPEND=" + test? ( + >=dev-python/pytest-6[${PYTHON_USEDEP}] + dev-vcs/git + ) +" + +PATCHES=( + "${FILESDIR}/pkgcore-0.10.18-sighdlr.patch" + "${FILESDIR}/pkgcore-0.10.18-sighdlr-2.patch" +) + +distutils_enable_tests setup.py + +src_test() { + local -x PYTHONDONTWRITEBYTECODE= + distutils-r1_src_test +} + +python_install_all() { + local DOCS=( NEWS.rst ) + [[ ${PV} == *9999 ]] || doman man/* + distutils-r1_python_install_all +}
