diff options
| -rw-r--r-- | bitbake/lib/bb/tinfoil.py | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/bitbake/lib/bb/tinfoil.py b/bitbake/lib/bb/tinfoil.py index 13b05cec2d..60359a1a38 100644 --- a/bitbake/lib/bb/tinfoil.py +++ b/bitbake/lib/bb/tinfoil.py | |||
| @@ -15,6 +15,7 @@ import atexit | |||
| 15 | import re | 15 | import re |
| 16 | from collections import OrderedDict, defaultdict | 16 | from collections import OrderedDict, defaultdict |
| 17 | from functools import partial | 17 | from functools import partial |
| 18 | from contextlib import contextmanager | ||
| 18 | 19 | ||
| 19 | import bb.cache | 20 | import bb.cache |
| 20 | import bb.cooker | 21 | import bb.cooker |
| @@ -641,6 +642,22 @@ class Tinfoil: | |||
| 641 | fn = self.get_recipe_file(pn) | 642 | fn = self.get_recipe_file(pn) |
| 642 | return self.parse_recipe_file(fn) | 643 | return self.parse_recipe_file(fn) |
| 643 | 644 | ||
| 645 | @contextmanager | ||
| 646 | def _data_tracked_if_enabled(self): | ||
| 647 | """ | ||
| 648 | A context manager to enable data tracking for a code segment if data | ||
| 649 | tracking was enabled for this tinfoil instance. | ||
| 650 | """ | ||
| 651 | if self.tracking: | ||
| 652 | # Enable history tracking just for the operation | ||
| 653 | self.run_command('enableDataTracking') | ||
| 654 | |||
| 655 | # Here goes the operation with the optional data tracking | ||
| 656 | yield | ||
| 657 | |||
| 658 | if self.tracking: | ||
| 659 | self.run_command('disableDataTracking') | ||
| 660 | |||
| 644 | def finalizeData(self): | 661 | def finalizeData(self): |
| 645 | """ | 662 | """ |
| 646 | Run anonymous functions and expand keys | 663 | Run anonymous functions and expand keys |
| @@ -659,10 +676,7 @@ class Tinfoil: | |||
| 659 | appendlist: optional list of bbappend files to apply, if you | 676 | appendlist: optional list of bbappend files to apply, if you |
| 660 | want to filter them | 677 | want to filter them |
| 661 | """ | 678 | """ |
| 662 | if self.tracking: | 679 | with self._data_tracked_if_enabled(): |
| 663 | # Enable history tracking just for the parse operation | ||
| 664 | self.run_command('enableDataTracking') | ||
| 665 | try: | ||
| 666 | if appends and appendlist == []: | 680 | if appends and appendlist == []: |
| 667 | appends = False | 681 | appends = False |
| 668 | if config_data: | 682 | if config_data: |
| @@ -674,9 +688,6 @@ class Tinfoil: | |||
| 674 | return self._reconvert_type(dscon, 'DataStoreConnectionHandle') | 688 | return self._reconvert_type(dscon, 'DataStoreConnectionHandle') |
| 675 | else: | 689 | else: |
| 676 | return None | 690 | return None |
| 677 | finally: | ||
| 678 | if self.tracking: | ||
| 679 | self.run_command('disableDataTracking') | ||
| 680 | 691 | ||
| 681 | def build_file(self, buildfile, task, internal=True): | 692 | def build_file(self, buildfile, task, internal=True): |
| 682 | """ | 693 | """ |
