commit: e5dfd95c6425ff55b59803eeb13dbcad3af140fb
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Mon May 31 19:12:05 2021 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Mon May 31 19:12:05 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=e5dfd95c
qmerge: some silencing
- create root/vdb if it doesn't exist (instead of barking up random trees)
- avoid some duplicate slashes
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
qmerge.c | 27 ++++++++++++++++++---------
1 file changed, 18 insertions(+), 9 deletions(-)
diff --git a/qmerge.c b/qmerge.c
index 08ce812..8f1ca3d 100644
--- a/qmerge.c
+++ b/qmerge.c
@@ -684,9 +684,9 @@ pkg_run_func_at(int dirfd, const char *vdb_path, const char
*phases, const char
"FILESDIR=/.does/not/exist/anywhere\n"
"MERGE_TYPE=binary\n"
"ROOT='%4$s'\n"
- "EROOT=\"/${ROOT#/}/${EPREFIX%%/}/\"\n"
+ "EROOT=\"${ROOT%%/}${EPREFIX%%/}/\"\n"
"D=\"%5$s\"\n"
- "ED=\"${D%%/}/${EPREFIX%%/}/\"\n"
+ "ED=\"${D%%/}${EPREFIX%%/}/\"\n"
"T=\"%6$s\"\n"
/* we do not support preserve-libs yet, so force
* preserve_old_lib instead */
@@ -1092,8 +1092,17 @@ pkg_merge(int level, const depend_atom *atom, const
struct pkg_t *pkg)
/* Get a handle on the main vdb repo */
vdb = tree_open_vdb(portroot, portvdb);
- if (!vdb)
- return;
+ if (vdb == NULL) {
+ if (pretend)
+ return;
+ /* try to create a vdb if none exists yet */
+ xasprintf(&p, "%s/%s", portroot, portvdb);
+ mkdir_p(p, 0755);
+ free(p);
+ vdb = tree_open_vdb(portroot, portvdb);
+ }
+ if (vdb == NULL)
+ errf("need access to root, check permissions to access %s",
portroot);
cat_ctx = tree_open_cat(vdb, pkg->CATEGORY);
if (!cat_ctx) {
if (errno != ENOENT) {
@@ -1347,11 +1356,10 @@ pkg_merge(int level, const depend_atom *atom, const
struct pkg_t *pkg)
makeargv(config_protect, &cp_argc, &cp_argv);
makeargv(config_protect_mask, &cpm_argc, &cpm_argv);
- if ((contents = fopen("vdb/CONTENTS", "w")) == NULL)
- errf("come on wtf?");
-
objs = NULL;
- {
+ if ((contents = fopen("vdb/CONTENTS", "w")) == NULL) {
+ errf("could not open vdb/CONTENTS for writing");
+ } else {
char *cpath;
int ret;
@@ -1365,8 +1373,9 @@ pkg_merge(int level, const depend_atom *atom, const
struct pkg_t *pkg)
if (ret != 0)
errp("failed to merge to %s", portroot);
+
+ fclose(contents);
}
- fclose(contents);
/* run postinst */
if (!pretend)