mirror of
https://git.yoctoproject.org/poky
synced 2026-06-04 14:09:47 +00:00
bitbake: Upgrade from 1.4 -> 1.7.4ish
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@863 311d38ba-8fff-0310-9ca6-ca027cbcb966
This commit is contained in:
+79
-116
@@ -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,136 +35,98 @@ 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)
|
||||
Check to see if a given url can be fetched with svn.
|
||||
"""
|
||||
return ud.type in ['svn']
|
||||
|
||||
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"]
|
||||
|
||||
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 forcefetch(self, url, ud, d):
|
||||
if (ud.date == "now"):
|
||||
return True
|
||||
return False
|
||||
|
||||
def go(self, loc, ud, d):
|
||||
"""Fetch url"""
|
||||
|
||||
# try to use the tarball stash
|
||||
if not self.forcefetch(loc, ud, d) 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
|
||||
|
||||
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"]
|
||||
|
||||
svnroot = ud.host + ud.path
|
||||
|
||||
# either use the revision, or SRCDATE in braces, or nothing for SRCDATE = "now"
|
||||
options = []
|
||||
if ud.revision:
|
||||
options.append("-r %s" % ud.revision)
|
||||
elif ud.date != "now":
|
||||
options.append("-r {%s}" % ud.date)
|
||||
|
||||
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"]
|
||||
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)
|
||||
|
||||
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)
|
||||
if svn_rsh:
|
||||
svncmd = "svn_RSH=\"%s\" %s" % (svn_rsh, svncmd)
|
||||
svnupcmd = "svn_RSH=\"%s\" %s" % (svn_rsh, svnupcmd)
|
||||
|
||||
# setup svn options
|
||||
options = []
|
||||
if 'rev' in parm:
|
||||
revision = parm['rev']
|
||||
else:
|
||||
revision = ""
|
||||
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 + "'")
|
||||
|
||||
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)
|
||||
|
||||
if Fetch.check_for_tarball(d, tarfn, dldir, date):
|
||||
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)
|
||||
elif date == "now":
|
||||
svncmd = "svn co %s://%s/%s" % (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)
|
||||
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
|
||||
raise FetchError(ud.module)
|
||||
|
||||
Reference in New Issue
Block a user