|
@@ -781,100 +781,6 @@ class RunQueue:
|
|
|
|
|
|
self.rqexe = None
|
|
|
|
|
|
- def check_stamps(self):
|
|
|
- unchecked = {}
|
|
|
- current = []
|
|
|
- notcurrent = []
|
|
|
- buildable = []
|
|
|
-
|
|
|
- if self.stamppolicy == "perfile":
|
|
|
- fulldeptree = False
|
|
|
- else:
|
|
|
- fulldeptree = True
|
|
|
- stampwhitelist = []
|
|
|
- if self.stamppolicy == "whitelist":
|
|
|
- stampwhitelist = self.rqdata.stampfnwhitelist
|
|
|
-
|
|
|
- for task in xrange(len(self.rqdata.runq_fnid)):
|
|
|
- unchecked[task] = ""
|
|
|
- if len(self.rqdata.runq_depends[task]) == 0:
|
|
|
- buildable.append(task)
|
|
|
-
|
|
|
- def check_buildable(self, task, buildable):
|
|
|
- for revdep in self.rqdata.runq_revdeps[task]:
|
|
|
- alldeps = 1
|
|
|
- for dep in self.rqdata.runq_depends[revdep]:
|
|
|
- if dep in unchecked:
|
|
|
- alldeps = 0
|
|
|
- if alldeps == 1:
|
|
|
- if revdep in unchecked:
|
|
|
- buildable.append(revdep)
|
|
|
-
|
|
|
- for task in xrange(len(self.rqdata.runq_fnid)):
|
|
|
- if task not in unchecked:
|
|
|
- continue
|
|
|
- fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[task]]
|
|
|
- taskname = self.rqdata.runq_task[task]
|
|
|
- stampfile = bb.build.stampfile(taskname, self.rqdata.dataCache, fn)
|
|
|
- # If the stamp is missing its not current
|
|
|
- if not os.access(stampfile, os.F_OK):
|
|
|
- del unchecked[task]
|
|
|
- notcurrent.append(task)
|
|
|
- check_buildable(self, task, buildable)
|
|
|
- continue
|
|
|
- # If its a 'nostamp' task, it's not current
|
|
|
- taskdep = self.rqdata.dataCache.task_deps[fn]
|
|
|
- if 'nostamp' in taskdep and task in taskdep['nostamp']:
|
|
|
- del unchecked[task]
|
|
|
- notcurrent.append(task)
|
|
|
- check_buildable(self, task, buildable)
|
|
|
- continue
|
|
|
-
|
|
|
- while (len(buildable) > 0):
|
|
|
- nextbuildable = []
|
|
|
- for task in buildable:
|
|
|
- if task in unchecked:
|
|
|
- fn = self.taskData.fn_index[self.rqdata.runq_fnid[task]]
|
|
|
- taskname = self.rqdata.runq_task[task]
|
|
|
- stampfile = bb.build.stampfile(taskname, self.rqdata.dataCache, fn)
|
|
|
- iscurrent = True
|
|
|
-
|
|
|
- t1 = os.stat(stampfile)[stat.ST_MTIME]
|
|
|
- for dep in self.rqdata.runq_depends[task]:
|
|
|
- if iscurrent:
|
|
|
- fn2 = self.taskData.fn_index[self.rqdata.runq_fnid[dep]]
|
|
|
- taskname2 = self.rqdata.runq_task[dep]
|
|
|
- stampfile2 = bb.build.stampfile(taskname2, self.rqdata.dataCache, fn2)
|
|
|
- if fn == fn2 or (fulldeptree and fn2 not in stampwhitelist):
|
|
|
- if dep in notcurrent:
|
|
|
- iscurrent = False
|
|
|
- else:
|
|
|
- t2 = os.stat(stampfile2)[stat.ST_MTIME]
|
|
|
- if t1 < t2:
|
|
|
- iscurrent = False
|
|
|
- del unchecked[task]
|
|
|
- if iscurrent:
|
|
|
- current.append(task)
|
|
|
- else:
|
|
|
- notcurrent.append(task)
|
|
|
-
|
|
|
- check_buildable(self, task, nextbuildable)
|
|
|
-
|
|
|
- buildable = nextbuildable
|
|
|
-
|
|
|
- #for task in range(len(self.runq_fnid)):
|
|
|
- # fn = self.taskData.fn_index[self.runq_fnid[task]]
|
|
|
- # taskname = self.runq_task[task]
|
|
|
- # print "%s %s.%s" % (task, taskname, fn)
|
|
|
-
|
|
|
- #print "Unchecked: %s" % unchecked
|
|
|
- #print "Current: %s" % current
|
|
|
- #print "Not current: %s" % notcurrent
|
|
|
-
|
|
|
- if len(unchecked) > 0:
|
|
|
- bb.msg.fatal("RunQueue", "check_stamps fatal internal error")
|
|
|
- return current
|
|
|
-
|
|
|
def check_stamp_task(self, task, taskname = None, recurse = False, cache = None):
|
|
|
def get_timestamp(f):
|
|
|
try:
|