aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Groffen <grobian@gentoo.org>2019-11-27 13:32:12 +0100
committerFabian Groffen <grobian@gentoo.org>2019-11-27 13:32:12 +0100
commit042a38c90aa010f05ecf7222f9be929f109c581e (patch)
tree992c404aec9ec2910881598352c8f84b6b3f70f2
parentread_portage_profile: process in order as specified by PMS 5.2.1 (diff)
downloadportage-utils-042a38c9.tar.gz
portage-utils-042a38c9.tar.bz2
portage-utils-042a38c9.zip
set_portage_env_var: don't include built-in value for incremental varsv0.82
discard the built-in value when any other value is found from the profiles Signed-off-by: Fabian Groffen <grobian@gentoo.org>
-rw-r--r--main.c17
-rwxr-xr-xtests/profile/dotest16
-rwxr-xr-xtests/qmerge/dotest2
3 files changed, 16 insertions, 19 deletions
diff --git a/main.c b/main.c
index 5ffe0ba..056e09c 100644
--- a/main.c
+++ b/main.c
@@ -51,6 +51,8 @@ static char *portedb;
static char *eprefix;
static char *accept_license;
+#define STR_DEFAULT "built-in default"
+
/* helper functions for showing errors */
const char *argv0;
@@ -333,15 +335,18 @@ set_portage_env_var(env_vars *var, const char *value, const char *src)
var->src = xstrdup(src);
break;
case _Q_ISTR:
- if (*var->value.s == NULL) {
- free(var->src);
- var->src = xstrdup(src);
- } else {
+ if (strcmp(var->src, STR_DEFAULT) != 0) {
size_t l = strlen(var->src) + 2 + strlen(src) + 1;
char *p = xmalloc(sizeof(char) * l);
snprintf(p, l, "%s, %s", var->src, src);
free(var->src);
var->src = p;
+ } else {
+ free(*var->value.s);
+ *var->value.s = NULL;
+ var->value_len = 0;
+ free(var->src);
+ var->src = xstrdup(src);
}
strincr_var(var->name, value, var->value.s, &var->value_len);
break;
@@ -718,7 +723,7 @@ initialize_portage_env(void)
var = &vars_to_read[i];
if (var->type != _Q_BOOL)
*var->value.s = xstrdup(var->default_value);
- var->src = xstrdup("built-in default");
+ var->src = xstrdup(STR_DEFAULT);
}
/* figure out where to find our config files */
@@ -740,7 +745,7 @@ initialize_portage_env(void)
if (array_cnt(overlays) == 0) {
xarraypush_ptr(overlays, main_overlay);
xarraypush_str(overlay_names, "<PORTDIR>");
- xarraypush_str(overlay_src, "built-in default");
+ xarraypush_str(overlay_src, STR_DEFAULT);
} else if (orig_main_overlay == main_overlay) {
/* if no explicit overlay was flagged as main, take the first one */
main_overlay = array_get_elem(overlays, 0);
diff --git a/tests/profile/dotest b/tests/profile/dotest
index 2b77ee9..02c9fc4 100755
--- a/tests/profile/dotest
+++ b/tests/profile/dotest
@@ -2,32 +2,22 @@
. ../init.sh || exit 1
-qenv() {
- # get q to dump its processed env so we can check
- DEBUG= q -V 2>&1 >/dev/null
-}
-
# Usage: <profile dir suffix> <variable> <value>
tenv() {
local profile=$1 var=$2 exp=$3
export PORTAGE_CONFIGROOT=${as}/profile${profile}
- local e=$(qenv)
-
- res=$(echo "${e}" | sed -n "/^${var} = /{s:^${var} = ::;p}")
+ res=$(q -e "${var}")
[[ ${res} == "${exp}" ]]
if ! tend $? "(${profile}) ${var} = ${exp}" ; then
echo "we got: {${res}}"
- echo "full env:"
- echo "${e}" | while read line ; do
- printf '\t{%s}\n' "${line}"
- done
+ echo "full env: $(q -ev "${var}")"
fi
}
# clear out env vars that would affect our tests
-unset $(qenv | awk '{print $1}')
+unset $(q -e | cut -d= -f1)
# test vars that should default to known values.
# cannot test too many more as portage's default
diff --git a/tests/qmerge/dotest b/tests/qmerge/dotest
index 83cb991..86c6147 100755
--- a/tests/qmerge/dotest
+++ b/tests/qmerge/dotest
@@ -4,6 +4,8 @@
set -e
+unset CONFIG_PROTECT CONFIG_PROTECT_MASK EPREFIX
+
export QMERGE=1
export PKGDIR=${as}/packages
export FEATURES='config-protect-if-modified'