* 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.ja...@gmail.com>
---
 meta/classes/buildhistory.bbclass | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/meta/classes/buildhistory.bbclass 
b/meta/classes/buildhistory.bbclass
index 82d0bf8..760075f 100644
--- a/meta/classes/buildhistory.bbclass
+++ b/meta/classes/buildhistory.bbclass
@@ -546,6 +546,10 @@ def _get_srcrev_values(d):
             if rev.startswith(autoinc_templ):
                 rev = rev[len(autoinc_templ):]
             dict[name] = rev
+            if 'tag' in ud.parm:
+                tag = ud.parm['tag'];
+                key = 'tag_'+name+'_'+tag
+                dict[key] = rev
     return dict
 
 python do_write_srcrev() {
@@ -556,8 +560,18 @@ python do_write_srcrev() {
     if srcrevs:
         if not os.path.exists(pkghistdir):
             os.makedirs(pkghistdir)
+        data = {}
+        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('# ', '').strip()
+                        value = value.replace('"', '').strip()
+                        data[key] = value
         with open(srcrevfile, 'w') as f:
             orig_srcrev = d.getVar('SRCREV', False) or 'INVALID'
+            pkg = d.getVar('PN', True)
             if orig_srcrev != 'INVALID':
                 f.write('# SRCREV = "%s"\n' % orig_srcrev)
             if len(srcrevs) > 1:
@@ -565,6 +579,12 @@ python do_write_srcrev() {
                     orig_srcrev = d.getVar('SRCREV_%s' % name, False)
                     if orig_srcrev:
                         f.write('# SRCREV_%s = "%s"\n' % (name, orig_srcrev))
+                    if name.startswith('tag_'):
+                        f.write('# %s = "%s"\n' % (name, srcrev))
+                        if name in data and data[name] != srcrev:
+                            bb.warn("Revision for tag %s in package %s was 
changed since last build (from %s to %s)" % (name, pkg, data[name], srcrev))
+                        continue
+
                     f.write('SRCREV_%s = "%s"\n' % (name, srcrev))
             else:
                 f.write('SRCREV = "%s"\n' % srcrevs.itervalues().next())
-- 
1.8.1.5


_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to