summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Jansa <martin.jansa@gmail.com>2013-04-03 10:49:36 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-04-04 13:59:49 +0100
commit0bc22ed6bd67031749e8f2cb5415dabf933eef56 (patch)
treece02aca01f8d2cea92cf2baefd4fc7fc16dd96be
parentca36be708e54c0c86535bc8512295c76c48f6cf5 (diff)
downloadopenembedded-core-0bc22ed6bd67031749e8f2cb5415dabf933eef56.tar.gz
openembedded-core-0bc22ed6bd67031749e8f2cb5415dabf933eef56.tar.bz2
openembedded-core-0bc22ed6bd67031749e8f2cb5415dabf933eef56.zip
buildhistory: record tag names and show warning when the same tag corresponds to different revision
* persistent cache records tag-srcrev mappings, but is not shared between builders * when tag is moved in remote repo, all builders should rebuild the component to use the same source, show warning when revision is different than what was used in last build Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> Signed-off-by: Saul Wold <sgw@linux.intel.com>
-rw-r--r--meta/classes/buildhistory.bbclass29
1 files changed, 25 insertions, 4 deletions
diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/buildhistory.bbclass
index 82d0bf8070..8c9f7942ee 100644
--- a/meta/classes/buildhistory.bbclass
+++ b/meta/classes/buildhistory.bbclass
@@ -538,24 +538,38 @@ def _get_srcrev_values(d):
scms.append(u)
autoinc_templ = 'AUTOINC+'
- dict = {}
+ dict_srcrevs = {}
+ dict_tag_srcrevs = {}
for scm in scms:
ud = urldata[scm]
for name in ud.names:
rev = ud.method.sortable_revision(scm, ud, d, name)
if rev.startswith(autoinc_templ):
rev = rev[len(autoinc_templ):]
- dict[name] = rev
- return dict
+ dict_srcrevs[name] = rev
+ if 'tag' in ud.parm:
+ tag = ud.parm['tag'];
+ key = name+'_'+tag
+ dict_tag_srcrevs[key] = rev
+ return (dict_srcrevs, dict_tag_srcrevs)
python do_write_srcrev() {
pkghistdir = d.getVar('BUILDHISTORY_DIR_PACKAGE', True)
srcrevfile = os.path.join(pkghistdir, 'latest_srcrev')
- srcrevs = _get_srcrev_values(d)
+ srcrevs, tag_srcrevs = _get_srcrev_values(d)
if srcrevs:
if not os.path.exists(pkghistdir):
os.makedirs(pkghistdir)
+ old_tag_srcrevs = {}
+ if os.path.exists(srcrevfile):
+ with open(srcrevfile) as f:
+ for line in f:
+ if line.startswith('# tag_'):
+ key, value = line.split("=", 1)
+ key = key.replace('# tag_', '').strip()
+ value = value.replace('"', '').strip()
+ old_tag_srcrevs[key] = value
with open(srcrevfile, 'w') as f:
orig_srcrev = d.getVar('SRCREV', False) or 'INVALID'
if orig_srcrev != 'INVALID':
@@ -568,6 +582,13 @@ python do_write_srcrev() {
f.write('SRCREV_%s = "%s"\n' % (name, srcrev))
else:
f.write('SRCREV = "%s"\n' % srcrevs.itervalues().next())
+ if len(tag_srcrevs) > 0:
+ for name, srcrev in tag_srcrevs.items():
+ f.write('# tag_%s = "%s"\n' % (name, srcrev))
+ if name in old_tag_srcrevs and old_tag_srcrevs[name] != srcrev:
+ pkg = d.getVar('PN', True)
+ bb.warn("Revision for tag %s in package %s was changed since last build (from %s to %s)" % (name, pkg, old_tag_srcrevs[name], srcrev))
+
else:
if os.path.exists(srcrevfile):
os.remove(srcrevfile)