diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-03-06 01:03:42 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-03-06 01:03:42 +0000 |
commit | 602f6eacef5ab3eb73f3846078ff42a1920ac6ca (patch) | |
tree | 7ab4b75a3c5d4e4f8687252237a5ae43e7178a1c | |
parent | 3914c583172c82ca50668acce58edf278fbef56d (diff) | |
download | portage-602f6eacef5ab3eb73f3846078ff42a1920ac6ca.tar.gz portage-602f6eacef5ab3eb73f3846078ff42a1920ac6ca.tar.bz2 portage-602f6eacef5ab3eb73f3846078ff42a1920ac6ca.zip |
Implement the sed-based declare -r filter in python.
svn path=/main/trunk/; revision=9446
-rwxr-xr-x | bin/ebuild.sh | 10 | ||||
-rwxr-xr-x | bin/filter-bash-environment.py | 13 |
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: |