summaryrefslogtreecommitdiffstats
path: root/meta/classes
diff options
context:
space:
mode:
authorKevin Tian <kevin.tian@intel.com>2010-07-08 15:42:42 +0800
committerSaul Wold <Saul.Wold@intel.com>2010-07-08 21:08:19 -0700
commit90ceeff2587c932f9d998ccf05f01c01300f3268 (patch)
treea037b855ab3db993d356bb5ed265af065a174ebe /meta/classes
parent43bd7936793701839df4dd4e49ef91985ee11e06 (diff)
downloadpoky-90ceeff2587c932f9d998ccf05f01c01300f3268.tar.gz
utility-tasks.bbclass: add automatic version check for GIT/SVN proto
both git/svn supports remote information query: 'git ls-remote', and 'svn info'. With them, now upstream version will be automatically checked for git/svn packages. In the meantime, manual latest version tagged in distro tracking fields are also compared as one alternative if upstream check fails. Also such check is one indicator whether tracking field is missing. Signed-off-by: Kevin Tian <kevin.tian@intel.com>
Diffstat (limited to 'meta/classes')
-rw-r--r--meta/classes/utility-tasks.bbclass72
1 files changed, 64 insertions, 8 deletions
diff --git a/meta/classes/utility-tasks.bbclass b/meta/classes/utility-tasks.bbclass
index c3001ecfc8..a4db4f8beb 100644
--- a/meta/classes/utility-tasks.bbclass
+++ b/meta/classes/utility-tasks.bbclass
@@ -276,7 +276,6 @@ python do_checkpkg() {
276 276
277 """generate package information from .bb file""" 277 """generate package information from .bb file"""
278 pname = bb.data.getVar('PN', d, 1) 278 pname = bb.data.getVar('PN', d, 1)
279 pcurver = bb.data.getVar('PV', d, 1)
280 pdesc = bb.data.getVar('DESCRIPTION', d, 1) 279 pdesc = bb.data.getVar('DESCRIPTION', d, 1)
281 pgrp = bb.data.getVar('SECTION', d, 1) 280 pgrp = bb.data.getVar('SECTION', d, 1)
282 281
@@ -296,6 +295,11 @@ python do_checkpkg() {
296 295
297 (type, host, path, user, pswd, parm) = bb.decodeurl(uri) 296 (type, host, path, user, pswd, parm) = bb.decodeurl(uri)
298 if type in ['http', 'https', 'ftp']: 297 if type in ['http', 'https', 'ftp']:
298 pcurver = bb.data.getVar('PV', d, 1)
299 else:
300 pcurver = bb.data.getVar("SRCREV", d, 1)
301
302 if type in ['http', 'https', 'ftp']:
299 newver = pcurver 303 newver = pcurver
300 altpath = path 304 altpath = path
301 dirver = "-" 305 dirver = "-"
@@ -342,12 +346,52 @@ python do_checkpkg() {
342 if re.match("Err", newver): 346 if re.match("Err", newver):
343 pstatus = newver + ":" + altpath + ":" + dirver + ":" + curname 347 pstatus = newver + ":" + altpath + ":" + dirver + ":" + curname
344 elif type == 'git': 348 elif type == 'git':
345 """N.B. Now hardcode UPDATE for git/svn/cvs.""" 349 if user:
346 pupver = "master" 350 gituser = user + '@'
347 pstatus = "UPDATE" 351 else:
352 gituser = ""
353
354 if 'protocol' in parm:
355 gitproto = parm['protocol']
356 else:
357 gitproto = "rsync"
358
359 gitcmd = "git ls-remote %s://%s%s%s HEAD 2>&1" % (gitproto, gituser, host, path)
360 print gitcmd
361 ver = os.popen(gitcmd).read()
362 if ver and re.search("HEAD", ver):
363 pupver = ver.split("\t")[0]
364 if pcurver == pupver:
365 pstatus = "MATCH"
366 else:
367 pstatus = "UPDATE"
368 else:
369 pstatus = "ErrGitAccess"
348 elif type == 'svn': 370 elif type == 'svn':
349 pupver = "HEAD" 371 options = []
350 pstatus = "UPDATE" 372 if user:
373 options.append("--username %s" % user)
374 if pswd:
375 options.append("--password %s" % pswd)
376 svnproto = 'svn'
377 if 'proto' in parm:
378 svnproto = parm['proto']
379 if 'rev' in parm:
380 pcurver = parm['rev']
381
382 svncmd = "svn info %s %s://%s%s/%s/ 2>&1" % (" ".join(options), svnproto, host, path, parm["module"])
383 print svncmd
384 svninfo = os.popen(svncmd).read()
385 for line in svninfo.split("\n"):
386 if re.search("^Last Changed Rev:", line):
387 pupver = line.split(" ")[-1]
388 if pcurver == pupver:
389 pstatus = "MATCH"
390 else:
391 pstatus = "UPDATE"
392
393 if re.match("Err", pstatus):
394 pstatus = "ErrSvnAccess"
351 elif type == 'cvs': 395 elif type == 'cvs':
352 pupver = "HEAD" 396 pupver = "HEAD"
353 pstatus = "UPDATE" 397 pstatus = "UPDATE"
@@ -360,10 +404,22 @@ python do_checkpkg() {
360 404
361 if re.match("Err", pstatus): 405 if re.match("Err", pstatus):
362 pstatus += ":%s%s" % (host, path) 406 pstatus += ":%s%s" % (host, path)
407
408 """Read from manual distro tracking fields as alternative"""
409 pmver = bb.data.getVar("RECIPE_LATEST_VERSION", d, 1)
410 if not pmver:
411 pmver = "N/A"
412 pmstatus = "ErrNoRecipeData"
413 else:
414 if pmver == pcurver:
415 pmstatus = "MATCH"
416 else:
417 pmstatus = "UPDATE"
418
363 lf = bb.utils.lockfile(logfile + ".lock") 419 lf = bb.utils.lockfile(logfile + ".lock")
364 f = open(logfile, "a") 420 f = open(logfile, "a")
365 f.write("\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n" % \ 421 f.write("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n" % \
366 (pname, pgrp, pproto, pcurver, pupver, pstatus, pdesc)) 422 (pname, pgrp, pproto, pcurver, pmver, pupver, pmstatus, pstatus, pdesc))
367 f.close() 423 f.close()
368 bb.utils.unlockfile(lf) 424 bb.utils.unlockfile(lf)
369} 425}