W dniu śro, 16.08.2017 o godzinie 20∶09 +0200, użytkownik Michał Górny napisał: > Extend the QA check mechanics in Portage to support post-postinst QA > checks. They are like post-install QA checks, except they are run after > pkg_postinst(), and so they can be used to verify that necessary > postinst actions were performed (e.g. regenerating caches). > --- > bin/misc-functions.sh | 57 > ++++++++++++++++++++++++++++++++++ > pym/portage/package/ebuild/doebuild.py | 5 ++- > 2 files changed, 61 insertions(+), 1 deletion(-) > > diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh > index 079369313..18cddea21 100755 > --- a/bin/misc-functions.sh > +++ b/bin/misc-functions.sh > @@ -256,6 +256,63 @@ install_qa_check() { > rm -f "${ED}"/usr/share/info/dir{,.gz,.bz2} || die "rm failed!" > } > > +postinst_qa_check() { > + local d f paths qa_checks=() > + if ! ___eapi_has_prefix_variables; then > + local EPREFIX= EROOT=${ROOT} > + fi > + > + cd "${EROOT}" || die "cd failed" > + > + # Collect the paths for QA checks, highest prio first. > + paths=( > + # sysadmin overrides > + "${PORTAGE_OVERRIDE_EPREFIX}"/usr/local/lib/postinst-qa-check.d > + # system-wide package installs > + "${PORTAGE_OVERRIDE_EPREFIX}"/usr/lib/postinst-qa-check.d > + ) > + > + # Now repo-specific checks. > + # (yes, PORTAGE_ECLASS_LOCATIONS contains repo paths...) > + for d in "${PORTAGE_ECLASS_LOCATIONS[@]}"; do > + paths+=( > + "${d}"/metadata/postinst-qa-check.d > + ) > + done > + > + paths+=( > + # Portage built-in checks > + > "${PORTAGE_OVERRIDE_EPREFIX}"/usr/lib/portage/postinst-qa-check.d > + "${PORTAGE_BIN_PATH}"/postinst-qa-check.d > + ) > + > + # Collect file names of QA checks. We need them early to support > + # overrides properly. > + for d in "${paths[@]}"; do > + for f in "${d}"/*; do > + [[ -f ${f} ]] && qa_checks+=( "${f##*/}" ) > + done > + done > + > + # Now we need to sort the filenames lexically, and process > + # them in order. > + while read -r -d '' f; do > + # Find highest priority file matching the basename. > + for d in "${paths[@]}"; do > + [[ -f ${d}/${f} ]] && break > + done > + > + # Run in a subshell to treat it like external script, > + # but use 'source' to pass all variables through. > + ( > + # Allow inheriting eclasses. > + # XXX: we want this only in repository-wide checks. > + _IN_INSTALL_QA_CHECK=1 > + source "${d}/${f}" || eerror "Post-postinst QA check > ${f} failed to run" > + ) > + done < <(printf "%s\0" "${qa_checks[@]}" | LC_ALL=C sort -u -z) > +} > + > install_mask() { > local root="$1" > shift > diff --git a/pym/portage/package/ebuild/doebuild.py > b/pym/portage/package/ebuild/doebuild.py > index 14d96f57c..ac697a763 100644 > --- a/pym/portage/package/ebuild/doebuild.py > +++ b/pym/portage/package/ebuild/doebuild.py > @@ -1738,7 +1738,10 @@ _post_phase_cmds = { > "preinst_sfperms", > "preinst_selinux_labels", > "preinst_suid_scan", > - ] > + ], > + > + "postinst" : [ > + "postinst_qa_check"], > } > > def _post_phase_userpriv_perms(mysettings):
Merged now. -- Best regards, Michał Górny