diff options
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 7b3defd343..3560996b9d 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -150,6 +150,7 @@ class RunQueue: | |||
150 | self.multi_provider_whitelist = (bb.data.getVar("MULTI_PROVIDER_WHITELIST", cfgData, 1) or "").split() | 150 | self.multi_provider_whitelist = (bb.data.getVar("MULTI_PROVIDER_WHITELIST", cfgData, 1) or "").split() |
151 | self.scheduler = bb.data.getVar("BB_SCHEDULER", cfgData, 1) or "speed" | 151 | self.scheduler = bb.data.getVar("BB_SCHEDULER", cfgData, 1) or "speed" |
152 | self.stamppolicy = bb.data.getVar("BB_STAMP_POLICY", cfgData, 1) or "perfile" | 152 | self.stamppolicy = bb.data.getVar("BB_STAMP_POLICY", cfgData, 1) or "perfile" |
153 | self.stampwhitelist = bb.data.getVar("BB_STAMP_WHITELIST", cfgData, 1) or [] | ||
153 | 154 | ||
154 | def reset_runqueue(self): | 155 | def reset_runqueue(self): |
155 | 156 | ||
@@ -667,6 +668,18 @@ class RunQueue: | |||
667 | #if error: | 668 | #if error: |
668 | # bb.msg.fatal(bb.msg.domain.RunQueue, "Corrupted metadata configuration detected, aborting...") | 669 | # bb.msg.fatal(bb.msg.domain.RunQueue, "Corrupted metadata configuration detected, aborting...") |
669 | 670 | ||
671 | |||
672 | # Create a whitelist usable by the stamp checks | ||
673 | stampfnwhitelist = [] | ||
674 | for entry in self.stampwhitelist.split(): | ||
675 | entryid = self.taskData.getbuild_id(entry) | ||
676 | if entryid not in self.taskData.build_targets: | ||
677 | continue | ||
678 | fnid = self.taskData.build_targets[entryid][0] | ||
679 | fn = self.taskData.fn_index[fnid] | ||
680 | stampfnwhitelist.append(fn) | ||
681 | self.stampfnwhitelist = stampfnwhitelist | ||
682 | |||
670 | #self.dump_data(taskData) | 683 | #self.dump_data(taskData) |
671 | 684 | ||
672 | def check_stamps(self): | 685 | def check_stamps(self): |
@@ -679,6 +692,9 @@ class RunQueue: | |||
679 | fulldeptree = False | 692 | fulldeptree = False |
680 | else: | 693 | else: |
681 | fulldeptree = True | 694 | fulldeptree = True |
695 | stampwhitelist = [] | ||
696 | if self.stamppolicy == "whitelist": | ||
697 | stampwhitelist = self.self.stampfnwhitelist | ||
682 | 698 | ||
683 | for task in range(len(self.runq_fnid)): | 699 | for task in range(len(self.runq_fnid)): |
684 | unchecked[task] = "" | 700 | unchecked[task] = "" |
@@ -730,7 +746,7 @@ class RunQueue: | |||
730 | fn2 = self.taskData.fn_index[self.runq_fnid[dep]] | 746 | fn2 = self.taskData.fn_index[self.runq_fnid[dep]] |
731 | taskname2 = self.runq_task[dep] | 747 | taskname2 = self.runq_task[dep] |
732 | stampfile2 = "%s.%s" % (self.dataCache.stamp[fn2], taskname2) | 748 | stampfile2 = "%s.%s" % (self.dataCache.stamp[fn2], taskname2) |
733 | if fulldeptree or fn == fn2: | 749 | if fn == fn2 or (fulldeptree and fn2 not in stampwhitelist): |
734 | if dep in notcurrent: | 750 | if dep in notcurrent: |
735 | iscurrent = False | 751 | iscurrent = False |
736 | else: | 752 | else: |
@@ -766,6 +782,9 @@ class RunQueue: | |||
766 | fulldeptree = False | 782 | fulldeptree = False |
767 | else: | 783 | else: |
768 | fulldeptree = True | 784 | fulldeptree = True |
785 | stampwhitelist = [] | ||
786 | if self.stamppolicy == "whitelist": | ||
787 | stampwhitelist = self.stampfnwhitelist | ||
769 | 788 | ||
770 | fn = self.taskData.fn_index[self.runq_fnid[task]] | 789 | fn = self.taskData.fn_index[self.runq_fnid[task]] |
771 | taskname = self.runq_task[task] | 790 | taskname = self.runq_task[task] |
@@ -785,7 +804,7 @@ class RunQueue: | |||
785 | fn2 = self.taskData.fn_index[self.runq_fnid[dep]] | 804 | fn2 = self.taskData.fn_index[self.runq_fnid[dep]] |
786 | taskname2 = self.runq_task[dep] | 805 | taskname2 = self.runq_task[dep] |
787 | stampfile2 = "%s.%s" % (self.dataCache.stamp[fn2], taskname2) | 806 | stampfile2 = "%s.%s" % (self.dataCache.stamp[fn2], taskname2) |
788 | if fulldeptree or fn == fn2: | 807 | if fn == fn2 or (fulldeptree and fn2 not in stampwhitelist): |
789 | try: | 808 | try: |
790 | t2 = os.stat(stampfile2)[stat.ST_MTIME] | 809 | t2 = os.stat(stampfile2)[stat.ST_MTIME] |
791 | if t1 < t2: | 810 | if t1 < t2: |