diff options
author | Kevin Tian <kevin.tian@intel.com> | 2010-07-08 15:42:42 +0800 |
---|---|---|
committer | Saul Wold <Saul.Wold@intel.com> | 2010-07-08 21:08:19 -0700 |
commit | 90ceeff2587c932f9d998ccf05f01c01300f3268 (patch) | |
tree | a037b855ab3db993d356bb5ed265af065a174ebe /meta/classes | |
parent | 43bd7936793701839df4dd4e49ef91985ee11e06 (diff) | |
download | poky-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.bbclass | 72 |
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 | } |