Modify the occluded package check to unidirectionally check for additional files in installed package directory. This eliminates false positives when the source directory contains additional files, in particular C sources.
This change also eliminates the dependency on diff(1), in favor of comm(1). As a side effect, we no longer compare .py files for equality but that shouldn't be such a big deal. Signed-off-by: Michał Górny <mgo...@gentoo.org> --- eclass/python-utils-r1.eclass | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/eclass/python-utils-r1.eclass b/eclass/python-utils-r1.eclass index 27157a003ab2..b67cbb7db298 100644 --- a/eclass/python-utils-r1.eclass +++ b/eclass/python-utils-r1.eclass @@ -1244,14 +1244,13 @@ _python_check_occluded_packages() { # positives before filing bugs. [[ ! ${PYTHON_EXPERIMENTAL_QA} ]] && return - type -P diff &>/dev/null || return [[ -z ${BUILD_DIR} || ! -d ${BUILD_DIR}/install ]] && return local sitedir="${BUILD_DIR}/install$(python_get_sitedir)" # avoid unnecessarily checking if we are inside install dir [[ ${sitedir} -ef . ]] && return - local f fn diff + local f fn diff l for f in "${sitedir}"/*/; do f=${f%/} fn=${f##*/} @@ -1260,17 +1259,26 @@ _python_check_occluded_packages() { [[ ${fn} == *.dist-info || ${fn} == *.egg-info ]] && continue if [[ -d ${fn} ]]; then - diff=$(diff -dupr -x "__pycache__" "${fn}" "${sitedir}/${fn}") + ( + cd "${sitedir}" && find "${fn}" -type f | + grep -v /__pycache__/ | sort + ) > "${T}"/py-installed || die + ( + find "${fn}" -type f | + grep -v /__pycache__/ | sort + ) > "${T}"/py-source || die + + diff=$(comm -1 -3 "${T}"/py-source "${T}"/py-installed || die) if [[ -n ${diff} ]]; then eqawarn "The directory ${fn} occludes package installed for ${EPYTHON}." - echo - echo ">>> Diff:" - echo "${diff}" - echo "<<< End-of-diff" - echo + eqawarn "The installed package includes additional files:" + eqawarn + while IFS= read -r l; do + eqawarn " ${l}" + done <<<"${diff}" + eqawarn if [[ ! ${_PYTHON_WARNED_OCCLUDED_PACKAGES} ]]; then - eqawarn "The complete build log includes diffs." eqawarn "For more information on occluded packages, please see:" eqawarn "https://projects.gentoo.org/python/guide/test.html#importerrors-for-c-extensions" _PYTHON_WARNED_OCCLUDED_PACKAGES=1 -- 2.41.0