summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/fetch/cvs.py11
-rw-r--r--bitbake/lib/bb/fetch2/__init__.py34
-rw-r--r--bitbake/lib/bb/fetch2/cvs.py12
-rw-r--r--bitbake/lib/bb/fetch2/git.py6
-rw-r--r--bitbake/lib/bb/fetch2/local.py4
-rw-r--r--bitbake/lib/bb/fetch2/svn.py7
-rw-r--r--meta/classes/base.bbclass24
7 files changed, 83 insertions, 15 deletions
diff --git a/bitbake/lib/bb/fetch/cvs.py b/bitbake/lib/bb/fetch/cvs.py
index 0edb794b0..7d0ccf213 100644
--- a/bitbake/lib/bb/fetch/cvs.py
+++ b/bitbake/lib/bb/fetch/cvs.py
@@ -170,3 +170,14 @@ class Cvs(Fetch):
except OSError:
pass
raise FetchError(ud.module)
+
+ def clean(self, ud, d):
+ """ clean the git directory """
+
+ pkg = data.expand('${PN}', d)
+ localdata = data.createCopy(d)
+ data.setVar('OVERRIDES', "cvs:%s" % data.getVar('OVERRIDES', localdata), localdata)
+ data.update_data(localdata)
+ pkgdir = os.path.join(data.expand('${CVSDIR}', localdata), pkg)
+ bb.utils.remove(pkgdir, True)
+ bb.utils.remove(ud.localpath)
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py
index ef9d75f3f..1ec42717f 100644
--- a/bitbake/lib/bb/fetch2/__init__.py
+++ b/bitbake/lib/bb/fetch2/__init__.py
@@ -491,6 +491,7 @@ class FetchData(object):
"""
def __init__(self, url, d):
# localpath is the location of a downloaded result. If not set, the file is local.
+ self.donestamp = None
self.localfile = ""
self.localpath = None
self.lockfile = None
@@ -717,6 +718,12 @@ class FetchMethod(object):
return
+ def clean(self, urldata, d):
+ """
+ Clean any existing full or partial download
+ """
+ bb.utils.remove(urldata.localpath)
+
def try_premirror(self, url, urldata, d):
"""
Should premirrors be used?
@@ -958,6 +965,33 @@ class Fetch(object):
if ud.lockfile:
bb.utils.unlockfile(lf)
+ def clean(self, urls = []):
+ """
+ Clean files that the fetcher gets or places
+ """
+
+ if len(urls) == 0:
+ urls = self.urls
+
+ for url in urls:
+ if url not in self.ud:
+ self.ud[url] = FetchData(url, d)
+ ud = self.ud[url]
+ ud.setup_localpath(self.d)
+
+ if not ud.localfile or self.localpath is None:
+ continue
+
+ if ud.lockfile:
+ lf = bb.utils.lockfile(ud.lockfile)
+
+ ud.method.clean(ud, self.d)
+ if ud.donestamp:
+ bb.utils.remove(ud.donestamp)
+
+ if ud.lockfile:
+ bb.utils.unlockfile(lf)
+
from . import cvs
from . import git
from . import local
diff --git a/bitbake/lib/bb/fetch2/cvs.py b/bitbake/lib/bb/fetch2/cvs.py
index 3cd28b1fd..ae03daf23 100644
--- a/bitbake/lib/bb/fetch2/cvs.py
+++ b/bitbake/lib/bb/fetch2/cvs.py
@@ -167,3 +167,15 @@ class Cvs(FetchMethod):
runfetchcmd(cmd, d, cleanup = [ud.localpath])
+ def clean(self, ud, d):
+ """ Clean CVS Files and tarballs """
+
+ pkg = data.expand('${PN}', d)
+ localdata = data.createCopy(d)
+ data.setVar('OVERRIDES', "cvs:%s" % data.getVar('OVERRIDES', localdata), localdata)
+ data.update_data(localdata)
+ pkgdir = os.path.join(data.expand('${CVSDIR}', localdata), pkg)
+
+ bb.utils.remove(pkgdir, True)
+ bb.utils.remove(ud.localpath)
+
diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
index 6d9940677..6d82bdc88 100644
--- a/bitbake/lib/bb/fetch2/git.py
+++ b/bitbake/lib/bb/fetch2/git.py
@@ -172,6 +172,12 @@ class Git(FetchMethod):
runfetchcmd("%s checkout-index -q -f -a" % ud.basecmd, d)
return True
+ def clean(self, ud, d):
+ """ clean the git directory """
+
+ bb.utils.remove(ud.localpath, True)
+ bb.utils.remove(ud.fullmirror)
+
def supports_srcrev(self):
return True
diff --git a/bitbake/lib/bb/fetch2/local.py b/bitbake/lib/bb/fetch2/local.py
index d77d39375..77a296ec6 100644
--- a/bitbake/lib/bb/fetch2/local.py
+++ b/bitbake/lib/bb/fetch2/local.py
@@ -74,3 +74,7 @@ class Local(FetchMethod):
if os.path.exists(urldata.localpath):
return True
return False
+
+ def clean(self, urldata, d):
+ return
+
diff --git a/bitbake/lib/bb/fetch2/svn.py b/bitbake/lib/bb/fetch2/svn.py
index 4ab643bcf..d05dc0276 100644
--- a/bitbake/lib/bb/fetch2/svn.py
+++ b/bitbake/lib/bb/fetch2/svn.py
@@ -138,6 +138,13 @@ class Svn(FetchMethod):
# tar them up to a defined filename
runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, ud.module), d, cleanup = [ud.localpath])
+ def clean(self, ud, d):
+ """ Clean SVN specific files and dirs """
+
+ bb.utils.remove(ud.localpath)
+ bb.utils.remove(ud.moddir, True)
+
+
def supports_srcrev(self):
return True
diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index edb65eb96..e4ea69d48 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -464,24 +464,18 @@ addtask cleanall after do_clean
python do_cleanall() {
sstate_clean_cachefiles(d)
+ src_uri = (bb.data.getVar('SRC_URI', d, True) or "").split()
+ if len(src_uri) == 0:
+ return
+
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) or "").split()
- if len(src_uri) == 0:
- return
- fetcher = bb.fetch2.Fetch(src_uri, localdata)
- for url in src_uri:
- local = fetcher.localpath(url)
- if local is None:
- continue
- local = os.path.realpath(local)
- if local.startswith(dl_dir):
- bb.note("Removing %s*" % local)
- oe.path.remove(local + "*")
+ try:
+ fetcher = bb.fetch2.Fetch(src_uri, localdata)
+ fetcher.clean()
+ except bb.fetch2.BBFetchException, e:
+ raise bb.build.FuncFailed(e)
}
do_cleanall[nostamp] = "1"