bitbake: fetch2/__init__.py: Make get_srcrev output configurable

The idea here is to support package version numbering similar to gitpkgv in
meta-openembedded. This commit is the first step towards such functionality.

The original plan was to add a "get_pretty_srcrev" method to the fetcher, as
per Richard's suggestion [1]. While writing this, I noticed that it would
become a copy of get_srcrev with only two lines changed. So to create something
more Pythonic than a boolean argument and conditionals around the calls to the
fetcher's sortable_revision, I just made the method to be called on the fetcher
an argument to the method. Defaulting to 'sortable_revision' prevents affecting
existing code.

Now if the git fetcher were to implement, say 'gitpkgv_revision' one could
set the following in a recipe:
  PKGV="1.2+${@bb.fetch2.get_srcrev(d, 'gitpkgv_revision')}"
and this would yield the same result as gitpkgv's GITPKGV variable.

See for the discussion leading to this change:
[1] http://lists.openembedded.org/pipermail/openembedded-core/2015-January/100345.html

(Bitbake rev: 2f1f4483493cc290f5d2c07f9906e90eaea2f4c1)

Signed-off-by: Mike Looijmans <mike.looijmans@topic.nl>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Mike Looijmans
2015-05-22 08:29:03 +02:00
committed by Richard Purdie
parent 2db5dd7a26
commit f03e108fb1

View File

@@ -720,7 +720,7 @@ def get_autorev(d):
d.setVar('__BB_DONT_CACHE', '1') d.setVar('__BB_DONT_CACHE', '1')
return "AUTOINC" return "AUTOINC"
def get_srcrev(d): def get_srcrev(d, method_name='sortable_revision'):
""" """
Return the revsion string, usually for use in the version string (PV) of the current package Return the revsion string, usually for use in the version string (PV) of the current package
Most packages usually only have one SCM so we just pass on the call. Most packages usually only have one SCM so we just pass on the call.
@@ -729,6 +729,9 @@ def get_srcrev(d):
The idea here is that we put the string "AUTOINC+" into return value if the revisions are not The idea here is that we put the string "AUTOINC+" into return value if the revisions are not
incremental, other code is then responsible for turning that into an increasing value (if needed) incremental, other code is then responsible for turning that into an increasing value (if needed)
A method_name can be supplied to retrieve an alternatively formatted revision from a fetcher, if
that fetcher provides a method with the given name and the same signature as sortable_revision.
""" """
scms = [] scms = []
@@ -742,7 +745,7 @@ def get_srcrev(d):
raise FetchError("SRCREV was used yet no valid SCM was found in SRC_URI") raise FetchError("SRCREV was used yet no valid SCM was found in SRC_URI")
if len(scms) == 1 and len(urldata[scms[0]].names) == 1: if len(scms) == 1 and len(urldata[scms[0]].names) == 1:
autoinc, rev = urldata[scms[0]].method.sortable_revision(urldata[scms[0]], d, urldata[scms[0]].names[0]) autoinc, rev = getattr(urldata[scms[0]].method, method_name)(urldata[scms[0]], d, urldata[scms[0]].names[0])
if len(rev) > 10: if len(rev) > 10:
rev = rev[:10] rev = rev[:10]
if autoinc: if autoinc:
@@ -760,7 +763,7 @@ def get_srcrev(d):
for scm in scms: for scm in scms:
ud = urldata[scm] ud = urldata[scm]
for name in ud.names: for name in ud.names:
autoinc, rev = ud.method.sortable_revision(ud, d, name) autoinc, rev = getattr(ud.method, method_name)(ud, d, name)
seenautoinc = seenautoinc or autoinc seenautoinc = seenautoinc or autoinc
if len(rev) > 10: if len(rev) > 10:
rev = rev[:10] rev = rev[:10]