summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/sstate.bbclass45
1 files changed, 45 insertions, 0 deletions
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index f579168162..1fa8a63d17 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -1223,3 +1223,48 @@ python sstate_eventhandler2() {
1223 if preservestamps: 1223 if preservestamps:
1224 os.remove(preservestampfile) 1224 os.remove(preservestampfile)
1225} 1225}
1226
1227addhandler sstate_eventhandler_stalesstate
1228sstate_eventhandler_stalesstate[eventmask] = "bb.event.StaleSetSceneTasks"
1229python sstate_eventhandler_stalesstate() {
1230 d = e.data
1231 tasks = e.tasks
1232
1233 bb.utils.mkdirhier(d.expand("${SSTATE_MANIFESTS}"))
1234
1235 for a in list(set(d.getVar("SSTATE_ARCHS").split())):
1236 toremove = []
1237 i = d.expand("${SSTATE_MANIFESTS}/index-" + a)
1238 if not os.path.exists(i):
1239 continue
1240 with open(i, "r") as f:
1241 lines = f.readlines()
1242 for l in lines:
1243 try:
1244 (stamp, manifest, workdir) = l.split()
1245 for tid in tasks:
1246 for s in tasks[tid]:
1247 if s.startswith(stamp):
1248 taskname = bb.runqueue.taskname_from_tid(tid)[3:]
1249 manname = manifest + "." + taskname
1250 if os.path.exists(manname):
1251 bb.debug(2, "Sstate for %s is stale, removing related manifest %s" % (tid, manname))
1252 toremove.append((manname, tid, tasks[tid]))
1253 break
1254 except ValueError:
1255 bb.fatal("Invalid line '%s' in sstate manifest '%s'" % (l, i))
1256
1257 if toremove:
1258 msg = "Removing %d stale sstate objects for arch %s" % (len(toremove), a)
1259 bb.event.fire(bb.event.ProcessStarted(msg, len(toremove)), d)
1260
1261 removed = 0
1262 for (manname, tid, stamps) in toremove:
1263 sstate_clean_manifest(manname, d)
1264 for stamp in stamps:
1265 bb.utils.remove(stamp)
1266 removed = removed + 1
1267 bb.event.fire(bb.event.ProcessProgress(msg, removed), d)
1268
1269 bb.event.fire(bb.event.ProcessFinished(msg), d)
1270}