distrodata.bbclass: make upstream version check more useful for git upstreams

Specifically:

1) remove +git${SRCPV} stuff from comparison and output; it's just
unnecessary clutter;

2) write the commit id of the latest version tag into the output;
this saves quite a bit of trouble of manually checking what that
commit id is when doing version updates;

3) when UPSTREAM_CHECK_COMMITS is set, ignore the tags altogether;
instead check if the latest commit is different to the one we use,
and if so, report that the recipe can be updated to said commit
(which is also written into the output, as in 2). Multiple
recipes are failing the upstream check because they never
issue tags, now we can fix them.

(From OE-Core rev: 591d57877d3d3e659d78c0ed33f4c515e3f6f8fb)

Signed-off-by: Alexander Kanavin <alexander.kanavin@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Alexander Kanavin 2017-11-14 16:57:28 +02:00 committed by Richard Purdie
parent 4f2b00b673
commit c599921025
2 changed files with 26 additions and 44 deletions

View File

@ -272,24 +272,15 @@ python do_checkpkg() {
if upstream_check_unreliable == "1":
return "N/A", "CHECK_IS_UNRELIABLE"
try:
uv = oe.recipeutils.get_recipe_upstream_version(localdata)
pupver = uv['version'] if uv['version'] else "N/A"
except Exception as e:
pupver = "N/A"
uv = oe.recipeutils.get_recipe_upstream_version(localdata)
pupver = uv['version'] if uv['version'] else "N/A"
pversion = uv['current_version']
revision = uv['revision'] if uv['revision'] else "N/A"
if pupver == "N/A":
pstatus = "UNKNOWN" if upstream_version_unknown else "UNKNOWN_BROKEN"
else:
src_uri = (localdata.getVar('SRC_URI') or '').split()
if src_uri:
uri_type, _, _, _, _, _ = decodeurl(src_uri[0])
else:
uri_type = "none"
pv, _, _ = oe.recipeutils.get_recipe_pv_without_srcpv(pversion, uri_type)
upv, _, _ = oe.recipeutils.get_recipe_pv_without_srcpv(pupver, uri_type)
cmp = vercmp_string(pv, upv)
cmp = vercmp_string(pversion, pupver)
if cmp == -1:
pstatus = "UPDATE" if not upstream_version_unknown else "KNOWN_BROKEN"
elif cmp == 0:
@ -297,7 +288,7 @@ python do_checkpkg() {
else:
pstatus = "UNKNOWN" if upstream_version_unknown else "UNKNOWN_BROKEN"
return pupver, pstatus
return pversion, pupver, pstatus, revision
"""initialize log files."""
@ -334,7 +325,6 @@ python do_checkpkg() {
pdesc = localdata.getVar('DESCRIPTION')
pgrp = localdata.getVar('SECTION')
pversion = localdata.getVar('PV')
plicense = localdata.getVar('LICENSE')
psection = localdata.getVar('SECTION')
phome = localdata.getVar('HOMEPAGE')
@ -345,7 +335,7 @@ python do_checkpkg() {
psrcuri = localdata.getVar('SRC_URI')
maintainer = localdata.getVar('RECIPE_MAINTAINER')
pupver, pstatus = get_upstream_version_and_status()
pversion, pupver, pstatus, prevision = get_upstream_version_and_status()
if psrcuri:
psrcuri = psrcuri.split()[0]
@ -358,7 +348,7 @@ python do_checkpkg() {
with open(logfile, "a") as f:
writer = csv.writer(f, delimiter='\t')
writer.writerow([pname, pversion, pupver, plicense, psection, phome,
prelease, pdepends, pbugtracker, ppe, pdesc, pstatus, pupver,
prelease, pdepends, pbugtracker, ppe, pdesc, pstatus, prevision,
psrcuri, maintainer, no_upgr_reason])
f.close()
bb.utils.unlockfile(lf)

View File

@ -900,25 +900,25 @@ def get_recipe_upstream_version(rd):
FetchError when don't have network access or upstream site don't response.
NoMethodError when uri latest_versionstring method isn't implemented.
Returns a dictonary with version, type and datetime.
Returns a dictonary with version, repository revision, current_version, type and datetime.
Type can be A for Automatic, M for Manual and U for Unknown.
"""
from bb.fetch2 import decodeurl
from datetime import datetime
ru = {}
ru['current_version'] = rd.getVar('PV')
ru['version'] = ''
ru['type'] = 'U'
ru['datetime'] = ''
pv = rd.getVar('PV')
ru['revision'] = ''
# XXX: If don't have SRC_URI means that don't have upstream sources so
# returns the current recipe version, so that upstream version check
# declares a match.
src_uris = rd.getVar('SRC_URI')
if not src_uris:
ru['version'] = pv
ru['version'] = ru['current_version']
ru['type'] = 'M'
ru['datetime'] = datetime.now()
return ru
@ -927,6 +927,9 @@ def get_recipe_upstream_version(rd):
src_uri = src_uris.split()[0]
uri_type, _, _, _, _, _ = decodeurl(src_uri)
(pv, pfx, sfx) = get_recipe_pv_without_srcpv(rd.getVar('PV'), uri_type)
ru['current_version'] = pv
manual_upstream_version = rd.getVar("RECIPE_UPSTREAM_VERSION")
if manual_upstream_version:
# manual tracking of upstream version.
@ -947,33 +950,22 @@ def get_recipe_upstream_version(rd):
ru['datetime'] = datetime.now()
else:
ud = bb.fetch2.FetchData(src_uri, rd)
pupver = ud.method.latest_versionstring(ud, rd)
(upversion, revision) = pupver
# format git version version+gitAUTOINC+HASH
if uri_type == 'git':
(pv, pfx, sfx) = get_recipe_pv_without_srcpv(pv, uri_type)
# if contains revision but not upversion use current pv
if upversion == '' and revision:
upversion = pv
if upversion:
tmp = upversion
upversion = ''
if pfx:
upversion = pfx + tmp
else:
upversion = tmp
if sfx:
upversion = upversion + sfx + revision[:10]
if rd.getVar("UPSTREAM_CHECK_COMMITS") == "1":
revision = ud.method.latest_revision(ud, rd, 'default')
upversion = pv
if revision != rd.getVar("SRCREV"):
upversion = upversion + "-new-commits-available"
else:
pupver = ud.method.latest_versionstring(ud, rd)
(upversion, revision) = pupver
if upversion:
ru['version'] = upversion
ru['type'] = 'A'
if revision:
ru['revision'] = revision
ru['datetime'] = datetime.now()
return ru