1 |
commit: a46be5455a621fd243297b7b1e238cc859d87678 |
2 |
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org> |
3 |
AuthorDate: Tue Jun 22 19:00:48 2021 +0000 |
4 |
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org> |
5 |
CommitDate: Tue Jun 22 19:00:48 2021 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=a46be545 |
7 |
|
8 |
qmerge: run pkg_* phases according to PMS 9.2 Call Order |
9 |
|
10 |
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org> |
11 |
|
12 |
qmerge.c | 41 +++++++++++++++++++++-------------------- |
13 |
tests/qmerge/dotest | 3 ++- |
14 |
2 files changed, 23 insertions(+), 21 deletions(-) |
15 |
|
16 |
diff --git a/qmerge.c b/qmerge.c |
17 |
index 1f1bb1e..e3be6a2 100644 |
18 |
--- a/qmerge.c |
19 |
+++ b/qmerge.c |
20 |
@@ -723,10 +723,11 @@ pkg_run_func_at( |
21 |
"keepdir() { dodir \"$@\" && touch \"$@\"/.keep_${CATEGORY}_${PN}-${SLOT%%/*}; }\n" |
22 |
/* TODO: This should be fatal upon error */ |
23 |
"emake() { ${MAKE:-make} ${MAKEOPTS} \"$@\"; }\n" |
24 |
- /* Unpack the env if need be */ |
25 |
- "[ -e '%1$s/environment' ] || { bzip2 -dc '%1$s/environment.bz2' > '%1$s/environment' || exit 1; }\n" |
26 |
+ /* Unpack the env */ |
27 |
+ "{ bzip2 -dc '%1$s/environment.bz2' > \"%6$s/environment\" " |
28 |
+ "|| exit 1; }\n" |
29 |
/* Load the main env */ |
30 |
- ". '%1$s/environment'\n" |
31 |
+ ". \"%6$s/environment\"\n" |
32 |
/* Reload env vars that matter to us */ |
33 |
"export FILESDIR=/.does/not/exist/anywhere\n" |
34 |
"export MERGE_TYPE=binary\n" |
35 |
@@ -741,7 +742,7 @@ pkg_run_func_at( |
36 |
"export T=\"%6$s\"\n" |
37 |
/* we do not support preserve-libs yet, so force |
38 |
* preserve_old_lib instead */ |
39 |
- "export FEATURES=\"${FEATURES/preserve-libs/disabled}\"\n" |
40 |
+ "export FEATURES=\"${FEATURES/preserve-libs/}\"\n" |
41 |
/* Finally run the func */ |
42 |
"%7$s%2$s\n" |
43 |
/* Ignore func return values (not exit values) */ |
44 |
@@ -1340,7 +1341,10 @@ pkg_merge(int level, const depend_atom *qatom, const tree_match_ctx *mpkg) |
45 |
|
46 |
fflush(stdout); |
47 |
|
48 |
- eat_file("vdb/EPREFIX", &eprefix, &eprefix_len); |
49 |
+ /* we won't realloc, so we can loose the alloc size */ |
50 |
+ eprefix_len = eat_file("vdb/EPREFIX", &eprefix, &eprefix_len) ? |
51 |
+ strlen(eprefix) : 0; |
52 |
+ /* don't care/use the string lengths on these */ |
53 |
eat_file("vdb/EAPI", &eapi, &eapi_len); |
54 |
eat_file("vdb/DEFINED_PHASES", &pm_phases, &pm_phases_len); |
55 |
|
56 |
@@ -1393,9 +1397,6 @@ pkg_merge(int level, const depend_atom *qatom, const tree_match_ctx *mpkg) |
57 |
close(imagefd); |
58 |
} |
59 |
|
60 |
- if (eprefix != NULL) |
61 |
- free(eprefix); |
62 |
- |
63 |
makeargv(config_protect, &cp_argc, &cp_argv); |
64 |
makeargv(config_protect_mask, &cpm_argc, &cpm_argv); |
65 |
|
66 |
@@ -1420,18 +1421,6 @@ pkg_merge(int level, const depend_atom *qatom, const tree_match_ctx *mpkg) |
67 |
fclose(contents); |
68 |
} |
69 |
|
70 |
- /* run postinst */ |
71 |
- if (!pretend) |
72 |
- pkg_run_func("vdb", pm_phases, PKG_POSTINST, D, T, eapi); |
73 |
- |
74 |
- if (eapi != NULL) |
75 |
- free(eapi); |
76 |
- if (pm_phases != NULL) |
77 |
- free(pm_phases); |
78 |
- |
79 |
- /* XXX: hmm, maybe we'll want to strip more ? */ |
80 |
- unlink("vdb/environment"); |
81 |
- |
82 |
/* Unmerge any stray pieces from the older version which we didn't |
83 |
* replace */ |
84 |
switch (replacing) { |
85 |
@@ -1450,6 +1439,17 @@ pkg_merge(int level, const depend_atom *qatom, const tree_match_ctx *mpkg) |
86 |
break; |
87 |
} |
88 |
|
89 |
+ /* run postinst */ |
90 |
+ if (!pretend) |
91 |
+ pkg_run_func("vdb", pm_phases, PKG_POSTINST, D, T, eapi); |
92 |
+ |
93 |
+ if (eprefix != NULL) |
94 |
+ free(eprefix); |
95 |
+ if (eapi != NULL) |
96 |
+ free(eapi); |
97 |
+ if (pm_phases != NULL) |
98 |
+ free(pm_phases); |
99 |
+ |
100 |
tree_match_close(previnst); |
101 |
|
102 |
freeargv(cp_argc, cp_argv); |
103 |
@@ -1521,6 +1521,7 @@ pkg_unmerge(tree_pkg_ctx *pkg_ctx, set *keep, |
104 |
if (!pretend) { |
105 |
buf = tree_pkg_meta_get(pkg_ctx, EAPI); |
106 |
phases = tree_pkg_meta_get(pkg_ctx, DEFINED_PHASES); |
107 |
+ buf = tree_pkg_meta_get(pkg_ctx, EAPI); /* when phases caused ralloc */ |
108 |
if (phases != NULL) { |
109 |
mkdirat(pkg_ctx->fd, "temp", 0755); |
110 |
pkg_run_func_at(pkg_ctx->fd, ".", phases, PKG_PRERM, T, T, buf); |
111 |
|
112 |
diff --git a/tests/qmerge/dotest b/tests/qmerge/dotest |
113 |
index 0f870ef..f715ee5 100755 |
114 |
--- a/tests/qmerge/dotest |
115 |
+++ b/tests/qmerge/dotest |
116 |
@@ -53,7 +53,8 @@ tend $? "qmerge-test: [R] re-emerge" || die "${out}" |
117 |
tend $? "qmerge-test: [R] installed expected files" || die "$(treedir "${ROOT}")" |
118 |
|
119 |
order=$(echo "${out}" | awk '$1 == "@@@" && $2 ~ /^pkg_/ { printf "%s ", $NF }') |
120 |
-[[ ${order} == "pkg_pretend pkg_setup pkg_preinst pkg_postinst pkg_prerm pkg_postrm " ]] |
121 |
+# PMS 9.2 |
122 |
+[[ ${order} == "pkg_pretend pkg_setup pkg_preinst pkg_prerm pkg_postrm pkg_postinst " ]] |
123 |
tend $? "qmerge-test: [R] pkg_* order of execution" || die "$(printf '%s\n' "${order}" "${out}")" |
124 |
|
125 |
[[ -x ${ROOT}/usr/bin/qmerge-test && \ |