summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/ebuild.sh10
-rwxr-xr-xbin/filter-bash-environment.py13
2 files changed, 14 insertions, 9 deletions
diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index 542fca9e2..cfe225006 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -1441,15 +1441,7 @@ filter_readonly_variables() {
"
fi
- # TODO: Take the the below sed-based declare -r filter and integrate it
- # directly into filter-bash-environment.py.
- # The sed is to remove the readonly attribute from variables such as those
- # listed in READONLY_EBUILD_METADATA, since having any readonly attributes
- # persisting in the saved environment can be inconvenient when it
- # eventually needs to be reloaded.
- "${PORTAGE_BIN_PATH}"/filter-bash-environment.py "${filtered_vars}" | sed -r \
- -e 's:^declare[[:space:]]+-r[[:space:]]+:declare :' \
- -e 's:^declare[[:space:]]+-([[:alnum:]]*)r([[:alnum:]]*)[[:space:]]+:declare -\1\2 :'
+ "${PORTAGE_BIN_PATH}"/filter-bash-environment.py "${filtered_vars}"
}
# @FUNCTION: preprocess_ebuild_env
diff --git a/bin/filter-bash-environment.py b/bin/filter-bash-environment.py
index ab348d992..5e109295f 100755
--- a/bin/filter-bash-environment.py
+++ b/bin/filter-bash-environment.py
@@ -17,6 +17,7 @@ func_end_re = re.compile(r'^\}$')
var_assign_re = re.compile(r'(^|^declare\s+-\S+\s+|^export\s+)([^=\s]+)=("|\')?.*$')
close_quote_re = re.compile(r'(\\"|"|\')\s*$')
+readonly_re = re.compile(r'^declare\s+-(\S*)r(\S*)\s+')
def compile_egrep_pattern(s):
for k, v in egrep_compat_map.iteritems():
@@ -57,6 +58,18 @@ def filter_bash_environment(pattern, file_in, file_out):
multi_line_quote = quote
multi_line_quote_filter = filter_this
if not filter_this:
+ readonly_match = readonly_re.match(line)
+ if readonly_match is not None:
+ declare_opts = ""
+ for i in (1, 2):
+ group = readonly_match.group(i)
+ if group is not None:
+ declare_opts += group
+ if declare_opts:
+ line = "declare -%s %s" % \
+ (declare_opts, line[readonly_match.end():])
+ else:
+ line = "declare " + line[readonly_match.end():]
file_out.write(line)
continue
if here_doc_delim is not None: