diff options
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 462c685d2f..60ef5ea976 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -875,7 +875,7 @@ class RunQueue: | |||
875 | bb.msg.fatal("RunQueue", "check_stamps fatal internal error") | 875 | bb.msg.fatal("RunQueue", "check_stamps fatal internal error") |
876 | return current | 876 | return current |
877 | 877 | ||
878 | def check_stamp_task(self, task, taskname = None, recurse = False): | 878 | def check_stamp_task(self, task, taskname = None, recurse = False, cache = None): |
879 | def get_timestamp(f): | 879 | def get_timestamp(f): |
880 | try: | 880 | try: |
881 | if not os.access(f, os.F_OK): | 881 | if not os.access(f, os.F_OK): |
@@ -911,10 +911,16 @@ class RunQueue: | |||
911 | if taskname != "do_setscene" and taskname.endswith("_setscene"): | 911 | if taskname != "do_setscene" and taskname.endswith("_setscene"): |
912 | return True | 912 | return True |
913 | 913 | ||
914 | if cache is None: | ||
915 | cache = {} | ||
916 | |||
914 | iscurrent = True | 917 | iscurrent = True |
915 | t1 = get_timestamp(stampfile) | 918 | t1 = get_timestamp(stampfile) |
916 | for dep in self.rqdata.runq_depends[task]: | 919 | for dep in self.rqdata.runq_depends[task]: |
917 | if iscurrent: | 920 | if iscurrent: |
921 | if dep in cache: | ||
922 | iscurrent = cache[dep] | ||
923 | continue | ||
918 | fn2 = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[dep]] | 924 | fn2 = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[dep]] |
919 | taskname2 = self.rqdata.runq_task[dep] | 925 | taskname2 = self.rqdata.runq_task[dep] |
920 | stampfile2 = bb.build.stampfile(taskname2, self.rqdata.dataCache, fn2) | 926 | stampfile2 = bb.build.stampfile(taskname2, self.rqdata.dataCache, fn2) |
@@ -931,7 +937,9 @@ class RunQueue: | |||
931 | logger.debug(2, 'Stampfile %s < %s', stampfile, stampfile2) | 937 | logger.debug(2, 'Stampfile %s < %s', stampfile, stampfile2) |
932 | iscurrent = False | 938 | iscurrent = False |
933 | if recurse and iscurrent: | 939 | if recurse and iscurrent: |
934 | iscurrent = self.check_stamp_task(dep, recurse=True) | 940 | iscurrent = self.check_stamp_task(dep, recurse=True, cache=cache) |
941 | cache[dep] = iscurrent | ||
942 | cache[task] = iscurrent | ||
935 | return iscurrent | 943 | return iscurrent |
936 | 944 | ||
937 | def execute_runqueue(self): | 945 | def execute_runqueue(self): |
@@ -1041,6 +1049,8 @@ class RunQueueExecute: | |||
1041 | self.build_stamps = {} | 1049 | self.build_stamps = {} |
1042 | self.failed_fnids = [] | 1050 | self.failed_fnids = [] |
1043 | 1051 | ||
1052 | self.stampcache = {} | ||
1053 | |||
1044 | def runqueue_process_waitpid(self): | 1054 | def runqueue_process_waitpid(self): |
1045 | """ | 1055 | """ |
1046 | Return none is there are no processes awaiting result collection, otherwise | 1056 | Return none is there are no processes awaiting result collection, otherwise |
@@ -1384,7 +1394,7 @@ class RunQueueExecuteTasks(RunQueueExecute): | |||
1384 | self.task_skip(task) | 1394 | self.task_skip(task) |
1385 | return True | 1395 | return True |
1386 | 1396 | ||
1387 | if self.rq.check_stamp_task(task, taskname): | 1397 | if self.rq.check_stamp_task(task, taskname, cache=self.stampcache): |
1388 | logger.debug(2, "Stamp current task %s (%s)", task, | 1398 | logger.debug(2, "Stamp current task %s (%s)", task, |
1389 | self.rqdata.get_user_idstring(task)) | 1399 | self.rqdata.get_user_idstring(task)) |
1390 | self.task_skip(task) | 1400 | self.task_skip(task) |
@@ -1568,7 +1578,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute): | |||
1568 | bb.build.make_stamp(taskname + "_setscene", self.rqdata.dataCache, fn) | 1578 | bb.build.make_stamp(taskname + "_setscene", self.rqdata.dataCache, fn) |
1569 | continue | 1579 | continue |
1570 | 1580 | ||
1571 | if self.rq.check_stamp_task(realtask, taskname + "_setscene"): | 1581 | if self.rq.check_stamp_task(realtask, taskname + "_setscene", cache=self.stampcache): |
1572 | logger.debug(2, 'Setscene stamp current for task %s(%s)', task, self.rqdata.get_user_idstring(realtask)) | 1582 | logger.debug(2, 'Setscene stamp current for task %s(%s)', task, self.rqdata.get_user_idstring(realtask)) |
1573 | stamppresent.append(task) | 1583 | stamppresent.append(task) |
1574 | self.task_skip(task) | 1584 | self.task_skip(task) |
@@ -1661,7 +1671,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute): | |||
1661 | fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[realtask]] | 1671 | fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[realtask]] |
1662 | 1672 | ||
1663 | taskname = self.rqdata.runq_task[realtask] + "_setscene" | 1673 | taskname = self.rqdata.runq_task[realtask] + "_setscene" |
1664 | if self.rq.check_stamp_task(realtask, self.rqdata.runq_task[realtask], recurse = True): | 1674 | if self.rq.check_stamp_task(realtask, self.rqdata.runq_task[realtask], recurse = True, cache=self.stampcache): |
1665 | logger.debug(2, 'Stamp for underlying task %s(%s) is current, so skipping setscene variant', | 1675 | logger.debug(2, 'Stamp for underlying task %s(%s) is current, so skipping setscene variant', |
1666 | task, self.rqdata.get_user_idstring(realtask)) | 1676 | task, self.rqdata.get_user_idstring(realtask)) |
1667 | self.task_failoutright(task) | 1677 | self.task_failoutright(task) |
@@ -1673,7 +1683,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute): | |||
1673 | self.task_failoutright(task) | 1683 | self.task_failoutright(task) |
1674 | return True | 1684 | return True |
1675 | 1685 | ||
1676 | if self.rq.check_stamp_task(realtask, taskname): | 1686 | if self.rq.check_stamp_task(realtask, taskname, cache=self.stampcache): |
1677 | logger.debug(2, 'Setscene stamp current task %s(%s), so skip it and its dependencies', | 1687 | logger.debug(2, 'Setscene stamp current task %s(%s), so skip it and its dependencies', |
1678 | task, self.rqdata.get_user_idstring(realtask)) | 1688 | task, self.rqdata.get_user_idstring(realtask)) |
1679 | self.task_skip(task) | 1689 | self.task_skip(task) |