diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-01-24 15:27:08 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-07-12 22:50:45 +0100 |
commit | 7fc6f6c98d4479a8ae81e0961a7dd93d436e804e (patch) | |
tree | 1764e2b382f80a6fc35d1b59e02591e6bb29d956 /bitbake/lib | |
parent | 35a6f7d21fc4a034a427e25f98da6202becfd2a7 (diff) | |
download | poky-7fc6f6c98d4479a8ae81e0961a7dd93d436e804e.tar.gz |
bitbake: data_smart: Cache overrides and fix data store
Rather than repeatedly expanding the value of OVERRIDES, cache
the value and update it when things change.
There were also some bugs introduced in the replaces functionality
which this approach fixes by ensuring the replaces data is updated
at the correct points.
(Bitbake rev: f3b7c3e054ce230ea5c2db5813390383e8dfd6db)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/data_smart.py | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index eee5827b29..884ca190a6 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py | |||
@@ -311,6 +311,7 @@ class DataSmart(MutableMapping): | |||
311 | 311 | ||
312 | self.expand_cache = {} | 312 | self.expand_cache = {} |
313 | 313 | ||
314 | self.overrides = [] | ||
314 | self.overridevars = set(["OVERRIDES", "FILE"]) | 315 | self.overridevars = set(["OVERRIDES", "FILE"]) |
315 | self.replaces = {} | 316 | self.replaces = {} |
316 | 317 | ||
@@ -360,7 +361,7 @@ class DataSmart(MutableMapping): | |||
360 | def internal_finalize(self, parent = False): | 361 | def internal_finalize(self, parent = False): |
361 | """Performs final steps upon the datastore, including application of overrides""" | 362 | """Performs final steps upon the datastore, including application of overrides""" |
362 | 363 | ||
363 | overrides = (self.getVar("OVERRIDES", True) or "").split(":") or [] | 364 | self.overrides = (self.getVar("OVERRIDES", True) or "").split(":") or [] |
364 | 365 | ||
365 | # | 366 | # |
366 | # Well let us see what breaks here. We used to iterate | 367 | # Well let us see what breaks here. We used to iterate |
@@ -380,7 +381,7 @@ class DataSmart(MutableMapping): | |||
380 | 381 | ||
381 | self.replaces = {} | 382 | self.replaces = {} |
382 | 383 | ||
383 | for o in overrides: | 384 | for o in self.overrides: |
384 | # calculate '_'+override | 385 | # calculate '_'+override |
385 | l = len(o) + 1 | 386 | l = len(o) + 1 |
386 | 387 | ||
@@ -393,6 +394,18 @@ class DataSmart(MutableMapping): | |||
393 | name = var[:-l] | 394 | name = var[:-l] |
394 | self.replaces[name] = var | 395 | self.replaces[name] = var |
395 | 396 | ||
397 | def internal_finalize2(self, var, o): | ||
398 | """Performs final steps upon the datastore, including application of overrides""" | ||
399 | |||
400 | l = len(o) + 1 | ||
401 | name = var[:-l] | ||
402 | |||
403 | if name in self.replaces: | ||
404 | del self.replaces[name] | ||
405 | for o in self.overrides: | ||
406 | if o in self._seen_overrides and name + "_" + o in self._seen_overrides[o]: | ||
407 | self.replaces[name] = name + "_" + o | ||
408 | |||
396 | def initVar(self, var): | 409 | def initVar(self, var): |
397 | self.expand_cache = {} | 410 | self.expand_cache = {} |
398 | if not var in self.dict: | 411 | if not var in self.dict: |
@@ -457,6 +470,12 @@ class DataSmart(MutableMapping): | |||
457 | if "_prepend" in self.dict[var]: | 470 | if "_prepend" in self.dict[var]: |
458 | del self.dict[var]["_prepend"] | 471 | del self.dict[var]["_prepend"] |
459 | 472 | ||
473 | if var in self.replaces: | ||
474 | del self.replaces[var] | ||
475 | for o in self.overrides: | ||
476 | if o in self._seen_overrides and var + "_" + o in self._seen_overrides[o]: | ||
477 | self.delVar(var + "_" + o) | ||
478 | |||
460 | # more cookies for the cookie monster | 479 | # more cookies for the cookie monster |
461 | if '_' in var: | 480 | if '_' in var: |
462 | self._setvar_update_overrides(var) | 481 | self._setvar_update_overrides(var) |
@@ -477,6 +496,7 @@ class DataSmart(MutableMapping): | |||
477 | if override not in self._seen_overrides: | 496 | if override not in self._seen_overrides: |
478 | self._seen_overrides[override] = set() | 497 | self._seen_overrides[override] = set() |
479 | self._seen_overrides[override].add( var ) | 498 | self._seen_overrides[override].add( var ) |
499 | self.internal_finalize2(var, override) | ||
480 | override = None | 500 | override = None |
481 | if "_" in shortvar: | 501 | if "_" in shortvar: |
482 | override = var[shortvar.rfind('_')+1:] | 502 | override = var[shortvar.rfind('_')+1:] |
@@ -534,6 +554,7 @@ class DataSmart(MutableMapping): | |||
534 | override = var[var.rfind('_')+1:] | 554 | override = var[var.rfind('_')+1:] |
535 | if override and override in self._seen_overrides and var in self._seen_overrides[override]: | 555 | if override and override in self._seen_overrides and var in self._seen_overrides[override]: |
536 | self._seen_overrides[override].remove(var) | 556 | self._seen_overrides[override].remove(var) |
557 | self.internal_finalize2(var, override) | ||
537 | 558 | ||
538 | def setVarFlag(self, var, flag, value, **loginfo): | 559 | def setVarFlag(self, var, flag, value, **loginfo): |
539 | self.expand_cache = {} | 560 | self.expand_cache = {} |
@@ -574,9 +595,8 @@ class DataSmart(MutableMapping): | |||
574 | for (r, o) in local_var["_append"]: | 595 | for (r, o) in local_var["_append"]: |
575 | match = True | 596 | match = True |
576 | if o: | 597 | if o: |
577 | overrides = (self.getVar("OVERRIDES", True) or "").split(":") or [] | ||
578 | for o2 in o.split("_"): | 598 | for o2 in o.split("_"): |
579 | if not o2 in overrides: | 599 | if not o2 in self.overrides: |
580 | match = False | 600 | match = False |
581 | if match: | 601 | if match: |
582 | value = value + r | 602 | value = value + r |
@@ -587,9 +607,8 @@ class DataSmart(MutableMapping): | |||
587 | for (r, o) in local_var["_prepend"]: | 607 | for (r, o) in local_var["_prepend"]: |
588 | match = True | 608 | match = True |
589 | if o: | 609 | if o: |
590 | overrides = (self.getVar("OVERRIDES", True) or "").split(":") or [] | ||
591 | for o2 in o.split("_"): | 610 | for o2 in o.split("_"): |
592 | if not o2 in overrides: | 611 | if not o2 in self.overrides: |
593 | match = False | 612 | match = False |
594 | if match: | 613 | if match: |
595 | value = r + value | 614 | value = r + value |
@@ -608,9 +627,8 @@ class DataSmart(MutableMapping): | |||
608 | for (r, o) in local_var["_remove"]: | 627 | for (r, o) in local_var["_remove"]: |
609 | match = True | 628 | match = True |
610 | if o: | 629 | if o: |
611 | overrides = (self.getVar("OVERRIDES", True) or "").split(":") or [] | ||
612 | for o2 in o.split("_"): | 630 | for o2 in o.split("_"): |
613 | if not o2 in overrides: | 631 | if not o2 in self.overrides: |
614 | match = False | 632 | match = False |
615 | if match: | 633 | if match: |
616 | removes.extend(self.expand(r).split()) | 634 | removes.extend(self.expand(r).split()) |
@@ -716,6 +734,7 @@ class DataSmart(MutableMapping): | |||
716 | 734 | ||
717 | data._tracking = self._tracking | 735 | data._tracking = self._tracking |
718 | 736 | ||
737 | data.overrides = copy.copy(self.overrides) | ||
719 | data.overridevars = copy.copy(self.overridevars) | 738 | data.overridevars = copy.copy(self.overridevars) |
720 | 739 | ||
721 | return data | 740 | return data |