From 602f6eacef5ab3eb73f3846078ff42a1920ac6ca Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 6 Mar 2008 01:03:42 +0000 Subject: Implement the sed-based declare -r filter in python. svn path=/main/trunk/; revision=9446 --- bin/ebuild.sh | 10 +--------- bin/filter-bash-environment.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 9 deletions(-) (limited to 'bin') 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: -- cgit v1.2.3-1-g7c22