mirror of
https://github.com/armbian/build.git
synced 2025-09-11 00:31:12 +02:00
bash_declare_parser: parse space-separated single-quoted array values correctly ('THIS=has space' is a single token, not two)
This commit is contained in:
parent
875960ddb7
commit
1b36bb63d7
@ -16,6 +16,7 @@ REGEX_BASH_DECLARE_DOUBLE_QUOTE = r"declare (-[-xr]) (.*?)=\"(.*)\""
|
|||||||
REGEX_BASH_DECLARE_SINGLE_QUOTE = r"declare (-[-xr]) (.*?)=\$'(.*)'"
|
REGEX_BASH_DECLARE_SINGLE_QUOTE = r"declare (-[-xr]) (.*?)=\$'(.*)'"
|
||||||
REGEX_BASH_DECLARE_ASSOCIATIVE_ARRAY = r"declare (-[A]) (.*?)=\((.*)\)"
|
REGEX_BASH_DECLARE_ASSOCIATIVE_ARRAY = r"declare (-[A]) (.*?)=\((.*)\)"
|
||||||
REGEX_BASH_DECLARE_SIMPLE_ARRAY = r"declare (-[a]) (.*?)=\((.*)\)"
|
REGEX_BASH_DECLARE_SIMPLE_ARRAY = r"declare (-[a]) (.*?)=\((.*)\)"
|
||||||
|
REGEX_SINGLE_QUOTED_SPLIT = r"'[^']+'|\S+"
|
||||||
|
|
||||||
|
|
||||||
class BashDeclareParser:
|
class BashDeclareParser:
|
||||||
@ -58,7 +59,7 @@ class BashDeclareParser:
|
|||||||
|
|
||||||
def parse_dequoted_value(self, key, value):
|
def parse_dequoted_value(self, key, value):
|
||||||
if ("_LIST" in key) or ("_DIRS" in key) or ("_ARRAY" in key):
|
if ("_LIST" in key) or ("_DIRS" in key) or ("_ARRAY" in key):
|
||||||
value = self.armbian_value_parse_list(value, " ")
|
value = self.armbian_value_parse_list(key, value, " ")
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def armbian_value_parse_double_quoted(self, value: str):
|
def armbian_value_parse_double_quoted(self, value: str):
|
||||||
@ -75,19 +76,13 @@ class BashDeclareParser:
|
|||||||
value = value.replace('\t', "\t")
|
value = value.replace('\t', "\t")
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def armbian_value_parse_list(self, item_value, delimiter):
|
def armbian_value_parse_list(self, key, item_value, delimiter):
|
||||||
ret = []
|
ret = []
|
||||||
for item in item_value.split(delimiter):
|
good = re.findall(REGEX_SINGLE_QUOTED_SPLIT, item_value)
|
||||||
ret.append((item))
|
for item in good:
|
||||||
|
ret.append(item)
|
||||||
# trim whitespace out of every value
|
# trim whitespace out of every value
|
||||||
ret = list(map(str.strip, ret))
|
ret = list(map(str.strip, ret))
|
||||||
# filter out empty strings
|
# filter out empty strings
|
||||||
ret = list(filter(None, ret))
|
ret = list(filter(None, ret))
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def armbian_value_parse_newline_map(self, item_value):
|
|
||||||
lines = item_value.split("\n")
|
|
||||||
ret = []
|
|
||||||
for line in lines:
|
|
||||||
ret.append(self.armbian_value_parse_list(line, ":"))
|
|
||||||
return ret
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user