Browse Source

fetch2: Correct the clean() mechanism for the fetcher2 code

This create a clean() method in each of the fetcher modules
and correctly cleans the .done stamp file and lock files

(From Poky rev: 14dea89521c0c648e8e543388096a6dcd6d4f2e0)

Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Saul Wold 13 years ago
parent
commit
db2abcd641
5 changed files with 63 additions and 0 deletions
  1. 34 0
      lib/bb/fetch2/__init__.py
  2. 12 0
      lib/bb/fetch2/cvs.py
  3. 6 0
      lib/bb/fetch2/git.py
  4. 4 0
      lib/bb/fetch2/local.py
  5. 7 0
      lib/bb/fetch2/svn.py

+ 34 - 0
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

+ 12 - 0
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)
+

+ 6 - 0
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
 

+ 4 - 0
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
+

+ 7 - 0
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