commit:     a46be5455a621fd243297b7b1e238cc859d87678
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Tue Jun 22 19:00:48 2021 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Tue Jun 22 19:00:48 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=a46be545

qmerge: run pkg_* phases according to PMS 9.2 Call Order

Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 qmerge.c            | 41 +++++++++++++++++++++--------------------
 tests/qmerge/dotest |  3 ++-
 2 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/qmerge.c b/qmerge.c
index 1f1bb1e..e3be6a2 100644
--- a/qmerge.c
+++ b/qmerge.c
@@ -723,10 +723,11 @@ pkg_run_func_at(
                "keepdir() { dodir \"$@\" && touch 
\"$@\"/.keep_${CATEGORY}_${PN}-${SLOT%%/*}; }\n"
                /* TODO: This should be fatal upon error */
                "emake() { ${MAKE:-make} ${MAKEOPTS} \"$@\"; }\n"
-               /* Unpack the env if need be */
-               "[ -e '%1$s/environment' ] || { bzip2 -dc 
'%1$s/environment.bz2' > '%1$s/environment' || exit 1; }\n"
+               /* Unpack the env */
+               "{ bzip2 -dc '%1$s/environment.bz2' > \"%6$s/environment\" "
+                 "|| exit 1; }\n"
                /* Load the main env */
-               ". '%1$s/environment'\n"
+               ". \"%6$s/environment\"\n"
                /* Reload env vars that matter to us */
                "export FILESDIR=/.does/not/exist/anywhere\n"
                "export MERGE_TYPE=binary\n"
@@ -741,7 +742,7 @@ pkg_run_func_at(
                "export T=\"%6$s\"\n"
                /* we do not support preserve-libs yet, so force
                 * preserve_old_lib instead */
-               "export FEATURES=\"${FEATURES/preserve-libs/disabled}\"\n"
+               "export FEATURES=\"${FEATURES/preserve-libs/}\"\n"
                /* Finally run the func */
                "%7$s%2$s\n"
                /* Ignore func return values (not exit values) */
@@ -1340,7 +1341,10 @@ pkg_merge(int level, const depend_atom *qatom, const 
tree_match_ctx *mpkg)
 
        fflush(stdout);
 
-       eat_file("vdb/EPREFIX", &eprefix, &eprefix_len);
+       /* we won't realloc, so we can loose the alloc size */
+       eprefix_len = eat_file("vdb/EPREFIX", &eprefix, &eprefix_len) ?
+               strlen(eprefix) : 0;
+       /* don't care/use the string lengths on these */
        eat_file("vdb/EAPI", &eapi, &eapi_len);
        eat_file("vdb/DEFINED_PHASES", &pm_phases, &pm_phases_len);
 
@@ -1393,9 +1397,6 @@ pkg_merge(int level, const depend_atom *qatom, const 
tree_match_ctx *mpkg)
                close(imagefd);
        }
 
-       if (eprefix != NULL)
-               free(eprefix);
-
        makeargv(config_protect, &cp_argc, &cp_argv);
        makeargv(config_protect_mask, &cpm_argc, &cpm_argv);
 
@@ -1420,18 +1421,6 @@ pkg_merge(int level, const depend_atom *qatom, const 
tree_match_ctx *mpkg)
                fclose(contents);
        }
 
-       /* run postinst */
-       if (!pretend)
-               pkg_run_func("vdb", pm_phases, PKG_POSTINST, D, T, eapi);
-
-       if (eapi != NULL)
-               free(eapi);
-       if (pm_phases != NULL)
-               free(pm_phases);
-
-       /* XXX: hmm, maybe we'll want to strip more ? */
-       unlink("vdb/environment");
-
        /* Unmerge any stray pieces from the older version which we didn't
         * replace */
        switch (replacing) {
@@ -1450,6 +1439,17 @@ pkg_merge(int level, const depend_atom *qatom, const 
tree_match_ctx *mpkg)
                        break;
        }
 
+       /* run postinst */
+       if (!pretend)
+               pkg_run_func("vdb", pm_phases, PKG_POSTINST, D, T, eapi);
+
+       if (eprefix != NULL)
+               free(eprefix);
+       if (eapi != NULL)
+               free(eapi);
+       if (pm_phases != NULL)
+               free(pm_phases);
+
        tree_match_close(previnst);
 
        freeargv(cp_argc, cp_argv);
@@ -1521,6 +1521,7 @@ pkg_unmerge(tree_pkg_ctx *pkg_ctx, set *keep,
        if (!pretend) {
                buf = tree_pkg_meta_get(pkg_ctx, EAPI);
                phases = tree_pkg_meta_get(pkg_ctx, DEFINED_PHASES);
+               buf = tree_pkg_meta_get(pkg_ctx, EAPI);  /* when phases caused 
ralloc */
                if (phases != NULL) {
                        mkdirat(pkg_ctx->fd, "temp", 0755);
                        pkg_run_func_at(pkg_ctx->fd, ".", phases, PKG_PRERM, T, 
T, buf);

diff --git a/tests/qmerge/dotest b/tests/qmerge/dotest
index 0f870ef..f715ee5 100755
--- a/tests/qmerge/dotest
+++ b/tests/qmerge/dotest
@@ -53,7 +53,8 @@ tend $? "qmerge-test: [R] re-emerge" || die "${out}"
 tend $? "qmerge-test: [R] installed expected files" || die "$(treedir 
"${ROOT}")"
 
 order=$(echo "${out}" | awk '$1 == "@@@" && $2 ~ /^pkg_/ { printf "%s ", $NF 
}')
-[[ ${order} == "pkg_pretend pkg_setup pkg_preinst pkg_postinst pkg_prerm 
pkg_postrm " ]]
+# PMS 9.2
+[[ ${order} == "pkg_pretend pkg_setup pkg_preinst pkg_prerm pkg_postrm 
pkg_postinst " ]]
 tend $? "qmerge-test: [R] pkg_* order of execution" || die "$(printf '%s\n' 
"${order}" "${out}")"
 
 [[ -x ${ROOT}/usr/bin/qmerge-test && \

Reply via email to