aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Groffen <grobian@gentoo.org>2021-06-22 21:00:48 +0200
committerFabian Groffen <grobian@gentoo.org>2021-06-22 21:00:48 +0200
commita46be5455a621fd243297b7b1e238cc859d87678 (patch)
tree8c90377814e2ad4716fe8a19a2c99d693ad29f6d /qmerge.c
parentqmerge: check phase funcs against PMS whether they should be run (diff)
downloadportage-utils-a46be5455a621fd243297b7b1e238cc859d87678.tar.gz
portage-utils-a46be5455a621fd243297b7b1e238cc859d87678.tar.bz2
portage-utils-a46be5455a621fd243297b7b1e238cc859d87678.zip
qmerge: run pkg_* phases according to PMS 9.2 Call Order
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Diffstat (limited to 'qmerge.c')
-rw-r--r--qmerge.c41
1 files changed, 21 insertions, 20 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);