svn.py: Fix a references to date
[vuplus_bitbake] / lib / bb / fetch / svn.py
index ee57ea6..d788c82 100644 (file)
@@ -26,6 +26,7 @@ Based on functions from the base bb module, Copyright 2003 Holger Schurig
 """
 
 import os, re
+import sys
 import bb
 from   bb import data
 from   bb.fetch import Fetch
@@ -34,135 +35,94 @@ from   bb.fetch import MissingParameterError
 
 class Svn(Fetch):
     """Class to fetch a module or modules from svn repositories"""
-    def supports(url, d):
-        """Check to see if a given url can be fetched with svn.
-           Expects supplied url in list form, as outputted by bb.decodeurl().
+    def supports(self, url, ud, d):
         """
-        (type, host, path, user, pswd, parm) = bb.decodeurl(data.expand(url, d))
-        return type in ['svn']
-    supports = staticmethod(supports)
-
-    def localpath(url, d):
-        (type, host, path, user, pswd, parm) = bb.decodeurl(data.expand(url, d))
-        if "localpath" in parm:
-#           if user overrides local path, use it.
-            return parm["localpath"]
+        Check to see if a given url can be fetched with svn.
+        """
+        return ud.type in ['svn']
 
-        if not "module" in parm:
+    def localpath(self, url, ud, d):
+        if not "module" in ud.parm:
             raise MissingParameterError("svn method needs a 'module' parameter")
         else:
-            module = parm["module"]
-        if 'rev' in parm:
-            revision = parm['rev']
-        else:
-            revision = ""
+            ud.module = ud.parm["module"]
 
-        date = Fetch.getSRCDate(d)
+        ud.revision = ""
+        if 'rev' in ud.parm:
+            ud.revision = ud.parm['rev']
 
-        return os.path.join(data.getVar("DL_DIR", d, 1),data.expand('%s_%s_%s_%s_%s.tar.gz' % ( module.replace('/', '.'), host, path.replace('/', '.'), revision, date), d))
-    localpath = staticmethod(localpath)
+        ud.localfile = data.expand('%s_%s_%s_%s_%s.tar.gz' % (ud.module.replace('/', '.'), ud.host, ud.path.replace('/', '.'), ud.revision, ud.date), d)
 
-    def go(self, d, urls = []):
-        """Fetch urls"""
-        if not urls:
-            urls = self.urls
+        return os.path.join(data.getVar("DL_DIR", d, True), ud.localfile)
+
+    def go(self, loc, ud, d):
+        """Fetch url"""
 
         localdata = data.createCopy(d)
         data.setVar('OVERRIDES', "svn:%s" % data.getVar('OVERRIDES', localdata), localdata)
         data.update_data(localdata)
 
-        for loc in urls:
-            (type, host, path, user, pswd, parm) = bb.decodeurl(data.expand(loc, localdata))
-            if not "module" in parm:
-                raise MissingParameterError("svn method needs a 'module' parameter")
-            else:
-                module = parm["module"]
-
-            dlfile = self.localpath(loc, localdata)
-            dldir = data.getVar('DL_DIR', localdata, 1)
-#           if local path contains the svn
-#           module, consider the dir above it to be the
-#           download directory
-#           pos = dlfile.find(module)
-#           if pos:
-#               dldir = dlfile[:pos]
-#           else:
-#               dldir = os.path.dirname(dlfile)
-
-#           setup svn options
-            options = []
-            if 'rev' in parm:
-                revision = parm['rev']
-            else:
-                revision = ""
-
-            date = Fetch.getSRCDate(d)
-
-            if "proto" in parm:
-                proto = parm["proto"]
-            else:
-                proto = "svn"
-
-            svn_rsh = None
-            if proto == "svn+ssh" and "rsh" in parm:
-                svn_rsh = parm["rsh"]
-
-            tarfn = data.expand('%s_%s_%s_%s_%s.tar.gz' % (module.replace('/', '.'), host, path.replace('/', '.'), revision, date), localdata)
-            data.setVar('TARFILES', dlfile, localdata)
-            data.setVar('TARFN', tarfn, localdata)
-
-            # try to use the tarball stash
-            if Fetch.try_mirror(d, tarfn):
-                bb.debug(1, "%s already exists or was mirrored, skipping svn checkout." % tarfn)
-                continue
-
-            olddir = os.path.abspath(os.getcwd())
-            os.chdir(data.expand(dldir, localdata))
-
-            svnroot = host + path
-
-            data.setVar('SVNROOT', svnroot, localdata)
-            data.setVar('SVNCOOPTS', " ".join(options), localdata)
-            data.setVar('SVNMODULE', module, localdata)
-            svncmd = data.getVar('FETCHCOMMAND', localdata, 1)
-            svncmd = "svn co -r {%s} %s://%s/%s" % (date, proto, svnroot, module)
-
-            if revision:
-                svncmd = "svn co -r %s %s://%s/%s" % (revision, proto, svnroot, module)
-            if svn_rsh:
-                svncmd = "svn_RSH=\"%s\" %s" % (svn_rsh, svncmd)
-
-#           create temp directory
-            bb.debug(2, "Fetch: creating temporary directory")
-            bb.mkdirhier(data.expand('${WORKDIR}', localdata))
-            data.setVar('TMPBASE', data.expand('${WORKDIR}/oesvn.XXXXXX', localdata), localdata)
-            tmppipe = os.popen(data.getVar('MKTEMPDIRCMD', localdata, 1) or "false")
-            tmpfile = tmppipe.readline().strip()
-            if not tmpfile:
-                bb.error("Fetch: unable to create temporary directory.. make sure 'mktemp' is in the PATH.")
-                raise FetchError(module)
-
-#           check out sources there
-            os.chdir(tmpfile)
-            bb.note("Fetch " + loc)
-            bb.debug(1, "Running %s" % svncmd)
+        # setup svn options
+        options = []
+
+        proto = "svn"
+        if "proto" in ud.parm:
+            proto = ud.parm["proto"]
+
+        svn_rsh = None
+        if proto == "svn+ssh" and "rsh" in ud.parm:
+            svn_rsh = ud.parm["rsh"]
+
+        # try to use the tarball stash
+        if (ud.date != "now") and Fetch.try_mirror(d, ud.localfile):
+            bb.msg.debug(1, bb.msg.domain.Fetcher, "%s already exists or was mirrored, skipping svn checkout." % ud.localpath)
+            return
+
+        svnroot = ud.host + ud.path
+
+        # either use the revision, or SRCDATE in braces, or nothing for SRCDATE = "now"
+        if ud.revision:
+            options.append("-r %s" % ud.revision)
+        elif ud.date != "now":
+            options.append("-r {%s}" % ud.date)
+
+        data.setVar('SVNROOT', "%s://%s/%s" % (proto, svnroot, ud.module), localdata)
+        data.setVar('SVNCOOPTS', " ".join(options), localdata)
+        data.setVar('SVNMODULE', ud.module, localdata)
+        svncmd = data.getVar('FETCHCOMMAND', localdata, 1)
+        svnupcmd = data.getVar('UPDATECOMMAND', localdata, 1)
+
+        if svn_rsh:
+            svncmd = "svn_RSH=\"%s\" %s" % (svn_rsh, svncmd)
+            svnupcmd = "svn_RSH=\"%s\" %s" % (svn_rsh, svnupcmd)
+
+        pkg=data.expand('${PN}', d)
+        pkgdir=os.path.join(data.expand('${SVNDIR}', localdata), pkg)
+        moddir=os.path.join(pkgdir, ud.module)
+        bb.msg.debug(2, bb.msg.domain.Fetcher, "Fetch: checking for module directory '" + moddir + "'")
+
+        if os.access(os.path.join(moddir,'.svn'), os.R_OK):
+            bb.msg.note(1, bb.msg.domain.Fetcher, "Update " + loc)
+            # update sources there
+            os.chdir(moddir)
+            bb.msg.debug(1, bb.msg.domain.Fetcher, "Running %s" % svnupcmd)
+            myret = os.system(svnupcmd)
+        else:
+            bb.msg.note(1, bb.msg.domain.Fetcher, "Fetch " + loc)
+            # check out sources there
+            bb.mkdirhier(pkgdir)
+            os.chdir(pkgdir)
+            bb.msg.debug(1, bb.msg.domain.Fetcher, "Running %s" % svncmd)
             myret = os.system(svncmd)
-            if myret != 0:
-                try:
-                    os.rmdir(tmpfile)
-                except OSError:
-                    pass
-                raise FetchError(module)
-
-            os.chdir(os.path.join(tmpfile, os.path.dirname(module)))
-#           tar them up to a defined filename
-            myret = os.system("tar -czf %s %s" % (os.path.join(dldir,tarfn), os.path.basename(module)))
-            if myret != 0:
-                try:
-                    os.unlink(tarfn)
-                except OSError:
-                    pass
-#           cleanup
-            os.system('rm -rf %s' % tmpfile)
-            os.chdir(olddir)
-        del localdata
+
+        if myret != 0:
+            raise FetchError(ud.module)
+
+        os.chdir(pkgdir)
+        # tar them up to a defined filename
+        myret = os.system("tar -czf %s %s" % (ud.localpath, os.path.basename(ud.module)))
+        if myret != 0:
+            try:
+                os.unlink(ud.localpath)
+            except OSError:
+                pass