Gentoo Archives: gentoo-commits

From: Fabian Groffen <grobian@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage-utils:master commit in: tests/qmerge/, /
Date: Tue, 22 Jun 2021 19:01:19
Message-Id: 1624388448.a46be5455a621fd243297b7b1e238cc859d87678.grobian@gentoo
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 && \