diff options
-rw-r--r-- | bitbake/lib/bb/data_smart.py | 50 |
1 files changed, 23 insertions, 27 deletions
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index 7b2c0a8943..ecc71bd644 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py | |||
@@ -105,11 +105,7 @@ class VariableParse: | |||
105 | if self.varname and key: | 105 | if self.varname and key: |
106 | if self.varname == key: | 106 | if self.varname == key: |
107 | raise Exception("variable %s references itself!" % self.varname) | 107 | raise Exception("variable %s references itself!" % self.varname) |
108 | if key in self.d.expand_cache: | 108 | var = self.d.getVarFlag(key, "_content") |
109 | varparse = self.d.expand_cache[key] | ||
110 | var = varparse.value | ||
111 | else: | ||
112 | var = self.d.getVarFlag(key, "_content") | ||
113 | self.references.add(key) | 109 | self.references.add(key) |
114 | if var is not None: | 110 | if var is not None: |
115 | return var | 111 | return var |
@@ -412,9 +408,6 @@ class DataSmart(MutableMapping): | |||
412 | if not isinstance(s, str): # sanity check | 408 | if not isinstance(s, str): # sanity check |
413 | return VariableParse(varname, self, s) | 409 | return VariableParse(varname, self, s) |
414 | 410 | ||
415 | if varname and varname in self.expand_cache: | ||
416 | return self.expand_cache[varname] | ||
417 | |||
418 | varparse = VariableParse(varname, self) | 411 | varparse = VariableParse(varname, self) |
419 | 412 | ||
420 | while s.find('${') != -1: | 413 | while s.find('${') != -1: |
@@ -438,9 +431,6 @@ class DataSmart(MutableMapping): | |||
438 | 431 | ||
439 | varparse.value = s | 432 | varparse.value = s |
440 | 433 | ||
441 | if varname: | ||
442 | self.expand_cache[varname] = varparse | ||
443 | |||
444 | return varparse | 434 | return varparse |
445 | 435 | ||
446 | def expand(self, s, varname = None): | 436 | def expand(self, s, varname = None): |
@@ -509,6 +499,7 @@ class DataSmart(MutableMapping): | |||
509 | 499 | ||
510 | def setVar(self, var, value, **loginfo): | 500 | def setVar(self, var, value, **loginfo): |
511 | #print("var=" + str(var) + " val=" + str(value)) | 501 | #print("var=" + str(var) + " val=" + str(value)) |
502 | self.expand_cache = {} | ||
512 | parsing=False | 503 | parsing=False |
513 | if 'parsing' in loginfo: | 504 | if 'parsing' in loginfo: |
514 | parsing=True | 505 | parsing=True |
@@ -521,7 +512,7 @@ class DataSmart(MutableMapping): | |||
521 | 512 | ||
522 | if 'op' not in loginfo: | 513 | if 'op' not in loginfo: |
523 | loginfo['op'] = "set" | 514 | loginfo['op'] = "set" |
524 | self.expand_cache = {} | 515 | |
525 | match = __setvar_regexp__.match(var) | 516 | match = __setvar_regexp__.match(var) |
526 | if match and match.group("keyword") in __setvar_keyword__: | 517 | if match and match.group("keyword") in __setvar_keyword__: |
527 | base = match.group('base') | 518 | base = match.group('base') |
@@ -672,6 +663,7 @@ class DataSmart(MutableMapping): | |||
672 | self.setVar(var + "_prepend", value, ignore=True, parsing=True) | 663 | self.setVar(var + "_prepend", value, ignore=True, parsing=True) |
673 | 664 | ||
674 | def delVar(self, var, **loginfo): | 665 | def delVar(self, var, **loginfo): |
666 | self.expand_cache = {} | ||
675 | if '_remote_data' in self.dict: | 667 | if '_remote_data' in self.dict: |
676 | connector = self.dict["_remote_data"]["_content"] | 668 | connector = self.dict["_remote_data"]["_content"] |
677 | res = connector.delVar(var) | 669 | res = connector.delVar(var) |
@@ -681,7 +673,6 @@ class DataSmart(MutableMapping): | |||
681 | loginfo['detail'] = "" | 673 | loginfo['detail'] = "" |
682 | loginfo['op'] = 'del' | 674 | loginfo['op'] = 'del' |
683 | self.varhistory.record(**loginfo) | 675 | self.varhistory.record(**loginfo) |
684 | self.expand_cache = {} | ||
685 | self.dict[var] = {} | 676 | self.dict[var] = {} |
686 | if var in self.overridedata: | 677 | if var in self.overridedata: |
687 | del self.overridedata[var] | 678 | del self.overridedata[var] |
@@ -704,13 +695,13 @@ class DataSmart(MutableMapping): | |||
704 | override = None | 695 | override = None |
705 | 696 | ||
706 | def setVarFlag(self, var, flag, value, **loginfo): | 697 | def setVarFlag(self, var, flag, value, **loginfo): |
698 | self.expand_cache = {} | ||
707 | if '_remote_data' in self.dict: | 699 | if '_remote_data' in self.dict: |
708 | connector = self.dict["_remote_data"]["_content"] | 700 | connector = self.dict["_remote_data"]["_content"] |
709 | res = connector.setVarFlag(var, flag, value) | 701 | res = connector.setVarFlag(var, flag, value) |
710 | if not res: | 702 | if not res: |
711 | return | 703 | return |
712 | 704 | ||
713 | self.expand_cache = {} | ||
714 | if 'op' not in loginfo: | 705 | if 'op' not in loginfo: |
715 | loginfo['op'] = "set" | 706 | loginfo['op'] = "set" |
716 | loginfo['flag'] = flag | 707 | loginfo['flag'] = flag |
@@ -732,6 +723,17 @@ class DataSmart(MutableMapping): | |||
732 | self.dict["__exportlist"]["_content"].add(var) | 723 | self.dict["__exportlist"]["_content"].add(var) |
733 | 724 | ||
734 | def getVarFlag(self, var, flag, expand=True, noweakdefault=False, parsing=False): | 725 | def getVarFlag(self, var, flag, expand=True, noweakdefault=False, parsing=False): |
726 | if flag == "_content": | ||
727 | cachename = var | ||
728 | else: | ||
729 | if not flag: | ||
730 | bb.warn("Calling getVarFlag with flag unset is invalid") | ||
731 | return None | ||
732 | cachename = var + "[" + flag + "]" | ||
733 | |||
734 | if expand and cachename in self.expand_cache: | ||
735 | return self.expand_cache[cachename].value | ||
736 | |||
735 | local_var, overridedata = self._findVar(var) | 737 | local_var, overridedata = self._findVar(var) |
736 | value = None | 738 | value = None |
737 | if flag == "_content" and overridedata is not None and not parsing: | 739 | if flag == "_content" and overridedata is not None and not parsing: |
@@ -796,14 +798,9 @@ class DataSmart(MutableMapping): | |||
796 | if match: | 798 | if match: |
797 | value = r + value | 799 | value = r + value |
798 | 800 | ||
799 | if expand and value: | 801 | if expand: |
800 | # Only getvar (flag == _content) hits the expand cache | 802 | self.expand_cache[cachename] = self.expandWithRefs(value, cachename) |
801 | cachename = None | 803 | value = self.expand_cache[cachename].value |
802 | if flag == "_content": | ||
803 | cachename = var | ||
804 | else: | ||
805 | cachename = var + "[" + flag + "]" | ||
806 | value = self.expand(value, cachename) | ||
807 | 804 | ||
808 | if value and flag == "_content" and local_var is not None and "_remove" in local_var and not parsing: | 805 | if value and flag == "_content" and local_var is not None and "_remove" in local_var and not parsing: |
809 | removes = [] | 806 | removes = [] |
@@ -821,20 +818,19 @@ class DataSmart(MutableMapping): | |||
821 | filtered = filter(lambda v: v not in removes, | 818 | filtered = filter(lambda v: v not in removes, |
822 | __whitespace_split__.split(value)) | 819 | __whitespace_split__.split(value)) |
823 | value = "".join(filtered) | 820 | value = "".join(filtered) |
824 | if expand and var in self.expand_cache: | 821 | if expand and cachename in self.expand_cache: |
825 | # We need to ensure the expand cache has the correct value | 822 | self.expand_cache[cachename].value = value |
826 | # flag == "_content" here | 823 | |
827 | self.expand_cache[var].value = value | ||
828 | return value | 824 | return value |
829 | 825 | ||
830 | def delVarFlag(self, var, flag, **loginfo): | 826 | def delVarFlag(self, var, flag, **loginfo): |
827 | self.expand_cache = {} | ||
831 | if '_remote_data' in self.dict: | 828 | if '_remote_data' in self.dict: |
832 | connector = self.dict["_remote_data"]["_content"] | 829 | connector = self.dict["_remote_data"]["_content"] |
833 | res = connector.delVarFlag(var, flag) | 830 | res = connector.delVarFlag(var, flag) |
834 | if not res: | 831 | if not res: |
835 | return | 832 | return |
836 | 833 | ||
837 | self.expand_cache = {} | ||
838 | local_var, _ = self._findVar(var) | 834 | local_var, _ = self._findVar(var) |
839 | if not local_var: | 835 | if not local_var: |
840 | return | 836 | return |