diff options
-rw-r--r-- | meta/classes/sstate.bbclass | 45 |
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 | |||
1227 | addhandler sstate_eventhandler_stalesstate | ||
1228 | sstate_eventhandler_stalesstate[eventmask] = "bb.event.StaleSetSceneTasks" | ||
1229 | python 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 | } | ||