diff options
author | Andrei Dinu <andrei.adrianx.dinu@intel.com> | 2012-12-05 14:08:11 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-12-06 12:31:18 +0000 |
commit | 6a8677696e229cf28b4fe083b7028d36d75f55b6 (patch) | |
tree | 4a7ae821b9dc08587647c45d3fd04fdabad34da1 /meta/classes | |
parent | ae4a89612bcd0eb24db499682a44cdeb062a8690 (diff) | |
download | poky-6a8677696e229cf28b4fe083b7028d36d75f55b6.tar.gz |
Added regex functionality to distrodata.bbclass
In order to make the PRS use regexes for the versioning
of packages who have the distros on sourceforge and
for those who have faulty reports.
(From OE-Core rev: 2fe52b23c643d2125867dc9fcc9c01a184a9e238)
Signed-off-by: Andrei Dinu <andrei.adrianx.dinu@intel.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/distrodata.bbclass | 88 |
1 files changed, 63 insertions, 25 deletions
diff --git a/meta/classes/distrodata.bbclass b/meta/classes/distrodata.bbclass index 69bcc35d44..ffc1b829e7 100644 --- a/meta/classes/distrodata.bbclass +++ b/meta/classes/distrodata.bbclass | |||
@@ -1,4 +1,4 @@ | |||
1 | 1 | include conf/distro/include/upstream_tracking.inc | |
2 | addhandler distro_eventhandler | 2 | addhandler distro_eventhandler |
3 | python distro_eventhandler() { | 3 | python distro_eventhandler() { |
4 | 4 | ||
@@ -237,11 +237,12 @@ python do_checkpkg() { | |||
237 | prefix2 = "[a-zA-Z]+" # a loose pattern such as for unzip552.tar.gz | 237 | prefix2 = "[a-zA-Z]+" # a loose pattern such as for unzip552.tar.gz |
238 | prefix3 = "[0-9a-zA-Z]+" # a loose pattern such as for 80325-quicky-0.4.tar.gz | 238 | prefix3 = "[0-9a-zA-Z]+" # a loose pattern such as for 80325-quicky-0.4.tar.gz |
239 | prefix = "(%s|%s|%s)" % (prefix1, prefix2, prefix3) | 239 | prefix = "(%s|%s|%s)" % (prefix1, prefix2, prefix3) |
240 | suffix = "(tar\.gz|tgz|tar\.bz2|zip|xz|rpm)" | 240 | #ver_regex = "((\d+[\.\-_]*[a-z]*)+)"#"((\d+[\.\-_[a-z]])+)" |
241 | suffixtuple = ("tar.gz", "tgz", "zip", "tar.bz2", "tar.xz", "src.rpm") | 241 | suffix = "(tar\.gz|tgz|tar\.bz2|zip|xz|rpm|bz2|orig\.tar\.gz|tar\.xz)" |
242 | 242 | ||
243 | suffixtuple = ("tar.gz", "tgz", "zip", "tar.bz2", "tar.xz", "src.rpm", "bz2", "orig.tar.gz") | ||
243 | sinterstr = "(?P<name>%s?)(?P<ver>.*)" % prefix | 244 | sinterstr = "(?P<name>%s?)(?P<ver>.*)" % prefix |
244 | sdirstr = "(?P<name>%s)(?P<ver>.*)\.(?P<type>%s$)" % (prefix, suffix) | 245 | sdirstr = "(?P<name>%s)\.?(?P<ver>.*)\.(?P<type>%s$)" % (prefix, suffix) |
245 | 246 | ||
246 | def parse_inter(s): | 247 | def parse_inter(s): |
247 | m = re.search(sinterstr, s) | 248 | m = re.search(sinterstr, s) |
@@ -271,6 +272,13 @@ python do_checkpkg() { | |||
271 | ev = re.search("[\d|\.]+[^a-zA-Z]+", ev).group() | 272 | ev = re.search("[\d|\.]+[^a-zA-Z]+", ev).group() |
272 | return bb.utils.vercmp(("0", ov, ""), ("0", ev, "")) | 273 | return bb.utils.vercmp(("0", ov, ""), ("0", ev, "")) |
273 | 274 | ||
275 | def __vercmp2(old,new): | ||
276 | (on,ov,ot) = old | ||
277 | (en,ev,et) = new | ||
278 | #bb.plain("old n = %s" %(str(ov))) | ||
279 | if on != en or (et and et not in suffixtuple): | ||
280 | return False | ||
281 | return ov < ev | ||
274 | """ | 282 | """ |
275 | wrapper for fetch upstream directory info | 283 | wrapper for fetch upstream directory info |
276 | 'url' - upstream link customized by regular expression | 284 | 'url' - upstream link customized by regular expression |
@@ -376,6 +384,7 @@ python do_checkpkg() { | |||
376 | if not re.search("\d+", curname): | 384 | if not re.search("\d+", curname): |
377 | return pcurver | 385 | return pcurver |
378 | pn = d.getVar('PN', True) | 386 | pn = d.getVar('PN', True) |
387 | newver_regex = d.getVar('RECIPE_NEWVER_REGEX',True) | ||
379 | f = tempfile.NamedTemporaryFile(delete=False, prefix="%s-2-" % pn) | 388 | f = tempfile.NamedTemporaryFile(delete=False, prefix="%s-2-" % pn) |
380 | status = internal_fetch_wget(url, d, f) | 389 | status = internal_fetch_wget(url, d, f) |
381 | fhtml = f.read() | 390 | fhtml = f.read() |
@@ -383,25 +392,45 @@ python do_checkpkg() { | |||
383 | if status == "SUCC" and len(fhtml): | 392 | if status == "SUCC" and len(fhtml): |
384 | newver = parse_dir(curname) | 393 | newver = parse_dir(curname) |
385 | 394 | ||
386 | """match "{PN}-5.21.1.tar.gz">{PN}-5.21.1.tar.gz """ | 395 | if not newver_regex: |
387 | pn1 = re.search("^%s" % prefix, curname).group() | 396 | """this is the default matching pattern, if recipe does not """ |
388 | 397 | """provide a regex expression """ | |
389 | s = "[^\"]*%s[^\d\"]*?(\d+[\.\-_])+[^\"]*" % pn1 | 398 | """match "{PN}-5.21.1.tar.gz">{PN}-5.21.1.tar.gz """ |
390 | searchstr = "[hH][rR][eE][fF]=\"%s\".*[>\"]" % s | 399 | pn1 = re.search("^%s" % prefix, curname).group() |
391 | reg = re.compile(searchstr) | 400 | s = "[^\"]*%s[^\d\"]*?(\d+[\.\-_])+[^\"]*" % pn1 |
392 | 401 | searchstr = "[hH][rR][eE][fF]=\"%s\".*[>\"]" % s | |
402 | reg = searchstr | ||
403 | else: | ||
404 | reg = newver_regex | ||
393 | valid = 0 | 405 | valid = 0 |
406 | count = 0 | ||
394 | for line in fhtml.split("\n"): | 407 | for line in fhtml.split("\n"): |
395 | m = reg.search(line) | 408 | count += 1 |
409 | m = re.search(reg, line) | ||
396 | if m: | 410 | if m: |
397 | valid = 1 | 411 | valid = 1 |
398 | ver = m.group().split("\"")[1].split("/")[-1] | 412 | if not newver_regex: |
399 | if ver == "download": | 413 | ver = m.group().split("\"")[1].split("/")[-1] |
400 | ver = m.group().split("\"")[1].split("/")[-2] | 414 | if ver == "download": |
401 | ver = parse_dir(ver) | 415 | ver = m.group().split("\"")[1].split("/")[-2] |
402 | if ver and __vercmp(newver, ver) < 0: | 416 | ver = parse_dir(ver) |
403 | newver = ver | 417 | else: |
404 | 418 | """ we cheat a little here, but we assume that the | |
419 | regular expression in the recipe will extract exacly | ||
420 | the version """ | ||
421 | (on, ov, oe) = newver | ||
422 | #HARDCODED MESS | ||
423 | if pn == 'remake': | ||
424 | ver = (on, m.group(1)+m.group(3), oe) | ||
425 | else: | ||
426 | ver = (on, m.group(1), oe) | ||
427 | pkg_problem = ['jpeg','dhcp','remake','blktool','apmd','nativesdk-openssl','valgrind','net-tools'] | ||
428 | if pn in pkg_problem: | ||
429 | if ver and __vercmp2(newver,ver) == True: | ||
430 | newver = ver | ||
431 | else: | ||
432 | if ver and __vercmp(newver, ver) < 0: | ||
433 | newver = ver | ||
405 | """Expect a match for curver in directory list, or else it indicates unknown format""" | 434 | """Expect a match for curver in directory list, or else it indicates unknown format""" |
406 | if not valid: | 435 | if not valid: |
407 | status = "ErrParseDir" | 436 | status = "ErrParseDir" |
@@ -454,6 +483,9 @@ python do_checkpkg() { | |||
454 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True)) | 483 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES', True)) |
455 | bb.data.update_data(localdata) | 484 | bb.data.update_data(localdata) |
456 | 485 | ||
486 | chk_uri = d.getVar('RECIPE_NEWVER_URI',True) | ||
487 | if not chk_uri: | ||
488 | chk_uri = src_uri | ||
457 | pdesc = localdata.getVar('DESCRIPTION', True) | 489 | pdesc = localdata.getVar('DESCRIPTION', True) |
458 | pgrp = localdata.getVar('SECTION', True) | 490 | pgrp = localdata.getVar('SECTION', True) |
459 | pversion = localdata.getVar('PV', True) | 491 | pversion = localdata.getVar('PV', True) |
@@ -505,12 +537,15 @@ python do_checkpkg() { | |||
505 | 537 | ||
506 | """use new path and remove param. for wget only param is md5sum""" | 538 | """use new path and remove param. for wget only param is md5sum""" |
507 | alturi = bb.encodeurl([type, host, altpath, user, pswd, {}]) | 539 | alturi = bb.encodeurl([type, host, altpath, user, pswd, {}]) |
508 | 540 | my_uri = d.getVar('RECIPE_NEWVER_URI',True) | |
509 | newver = check_new_dir(alturi, dirver, d) | 541 | if my_uri: |
542 | newver = d.getVar('PV', True) | ||
543 | else: | ||
544 | newver = check_new_dir(alturi, dirver, d) | ||
510 | altpath = path | 545 | altpath = path |
511 | if not re.match("Err", newver) and dirver != newver: | 546 | if not re.match("Err", newver) and dirver != newver: |
512 | altpath = altpath.replace(dirver, newver, True) | 547 | altpath = altpath.replace(dirver, newver, True) |
513 | 548 | # For folder in folder cases - try to enter the folder again and then try parsing | |
514 | """Now try to acquire all remote files in current directory""" | 549 | """Now try to acquire all remote files in current directory""" |
515 | if not re.match("Err", newver): | 550 | if not re.match("Err", newver): |
516 | curname = altpath.split("/")[-1] | 551 | curname = altpath.split("/")[-1] |
@@ -521,8 +556,11 @@ python do_checkpkg() { | |||
521 | altpath = "/" | 556 | altpath = "/" |
522 | else: | 557 | else: |
523 | altpath = m.group() | 558 | altpath = m.group() |
524 | 559 | chk_uri = d.getVar('RECIPE_NEWVER_URI',True) | |
525 | alturi = bb.encodeurl([type, host, altpath, user, pswd, {}]) | 560 | if not chk_uri: |
561 | alturi = bb.encodeurl([type, host, altpath, user, pswd, {}]) | ||
562 | else: | ||
563 | alturi = chk_uri | ||
526 | newver = check_new_version(alturi, curname, d) | 564 | newver = check_new_version(alturi, curname, d) |
527 | while(newver == "ErrHostNoDir"): | 565 | while(newver == "ErrHostNoDir"): |
528 | if alturi == "/download": | 566 | if alturi == "/download": |