summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2010-10-22 10:22:34 +0100
committerRichard Purdie <rpurdie@linux.intel.com>2010-10-22 10:22:34 +0100
commitfd4457199ef604dc4d5f8346c8b2a09dc3939129 (patch)
tree32234080a437751424a79bd170f62858c1527e13
parent2a69c58046a86d0f783acebd8a77e9419b43139a (diff)
downloadopenembedded-core-fd4457199ef604dc4d5f8346c8b2a09dc3939129.tar.gz
openembedded-core-fd4457199ef604dc4d5f8346c8b2a09dc3939129.tar.bz2
openembedded-core-fd4457199ef604dc4d5f8346c8b2a09dc3939129.zip
base/sstate: Add cleanall task to remove downloads and sstate cached files
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
-rw-r--r--meta/classes/base.bbclass28
-rw-r--r--meta/classes/sstate.bbclass21
2 files changed, 44 insertions, 5 deletions
diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index aee75297eb..1547ed0305 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -621,4 +621,32 @@ def check_gcc3(data):
return False
+addtask cleanall after do_clean
+python do_cleanall() {
+ sstate_clean_cachefiles(d)
+
+ localdata = bb.data.createCopy(d)
+ bb.data.update_data(localdata)
+
+ dl_dir = bb.data.getVar('DL_DIR', localdata, True)
+ dl_dir = os.path.realpath(dl_dir)
+
+ src_uri = bb.data.getVar('SRC_URI', localdata, True)
+ if not src_uri:
+ return
+ for url in src_uri.split():
+ try:
+ local = bb.data.expand(bb.fetch.localpath(url, localdata), localdata)
+ except bb.MalformedUrl, e:
+ raise FuncFailed('Unable to generate local path for malformed uri: %s' % e)
+ if local is None:
+ continue
+ local = os.path.realpath(local)
+ if local.startswith(dl_dir):
+ bb.note("Removing %s*" % local)
+ oe.path.remove(local + "*")
+}
+do_cleanall[nostamp] = "1"
+
+
EXPORT_FUNCTIONS do_setscene do_fetch do_unpack do_configure do_compile do_install do_package
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index 4a63d37d20..92c3a274f0 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -44,11 +44,12 @@ def sstate_init(name, d):
ss['lockfiles'] = []
return ss
-def sstate_state_fromvars(d):
- task = bb.data.getVar('BB_CURRENTTASK', d, True)
- if not task:
- bb.fatal("sstate code running without task context?!")
- task = task.replace("_setscene", "")
+def sstate_state_fromvars(d, task = None):
+ if task is None:
+ task = bb.data.getVar('BB_CURRENTTASK', d, True)
+ if not task:
+ bb.fatal("sstate code running without task context?!")
+ task = task.replace("_setscene", "")
name = bb.data.expand(bb.data.getVarFlag("do_" + task, 'sstate-name', d), d)
inputs = (bb.data.expand(bb.data.getVarFlag("do_" + task, 'sstate-inputdirs', d) or "", d)).split()
@@ -158,6 +159,16 @@ def sstate_installpkg(ss, d):
return True
+def sstate_clean_cachefile(ss, d):
+ sstatepkg = bb.data.getVar('SSTATE_PKG', d, True) + '_' + ss['name'] + ".tgz"
+ bb.note("Removing %s" % sstatepkg)
+ oe.path.remove(sstatepkg)
+
+def sstate_clean_cachefiles(d):
+ for task in (bb.data.getVar('SSTATETASKS', d, True) or "").split():
+ ss = sstate_state_fromvars(d, task[3:])
+ sstate_clean_cachefile(ss, d)
+
def sstate_clean_manifest(manifest, d):
import oe.path