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


Reply via email to