All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] buildhistory: record tag names and show warning when the same tag corresponds to different revision
@ 2013-04-01 12:50 Martin Jansa
  2013-04-03  8:24 ` Martin Jansa
  0 siblings, 1 reply; 4+ messages in thread
From: Martin Jansa @ 2013-04-01 12:50 UTC (permalink / raw)
  To: openembedded-core

* 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>
---
 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




^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] buildhistory: record tag names and show warning when the same tag corresponds to different revision
  2013-04-01 12:50 [PATCH] buildhistory: record tag names and show warning when the same tag corresponds to different revision Martin Jansa
@ 2013-04-03  8:24 ` Martin Jansa
  2013-04-03  8:49   ` [PATCHv2] " Martin Jansa
  0 siblings, 1 reply; 4+ messages in thread
From: Martin Jansa @ 2013-04-03  8:24 UTC (permalink / raw)
  To: openembedded-core

[-- Attachment #1: Type: text/plain, Size: 3260 bytes --]

On Mon, Apr 01, 2013 at 02:50:44PM +0200, Martin Jansa wrote:
> * 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>
> ---
>  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:

Please hold this patch, this len(srcrevs) doesn't work anymore to detect
multiple names (when there is another line for tag-srcrev).

So it's causing changes like this for every recipe with 1 git repo in
SRC_URI with tag parameter:
-SRCREV = "594dbb8992b42a33f78b57c15f194fae0923a7f8"
+SRCREV_default = "594dbb8992b42a33f78b57c15f194fae0923a7f8"

> @@ -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
> 

-- 
Martin 'JaMa' Jansa     jabber: Martin.Jansa@gmail.com

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 205 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCHv2] buildhistory: record tag names and show warning when the same tag corresponds to different revision
  2013-04-03  8:24 ` Martin Jansa
@ 2013-04-03  8:49   ` Martin Jansa
  2013-04-03 16:45     ` Paul Eggleton
  0 siblings, 1 reply; 4+ messages in thread
From: Martin Jansa @ 2013-04-03  8:49 UTC (permalink / raw)
  To: openembedded-core

* 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>
---
 meta/classes/buildhistory.bbclass | 29 +++++++++++++++++++++++++----
 1 file changed, 25 insertions(+), 4 deletions(-)

diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/buildhistory.bbclass
index 82d0bf8..8c9f794 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)
-- 
1.8.1.5




^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCHv2] buildhistory: record tag names and show warning when the same tag corresponds to different revision
  2013-04-03  8:49   ` [PATCHv2] " Martin Jansa
@ 2013-04-03 16:45     ` Paul Eggleton
  0 siblings, 0 replies; 4+ messages in thread
From: Paul Eggleton @ 2013-04-03 16:45 UTC (permalink / raw)
  To: openembedded-core

On Wednesday 03 April 2013 10:49:36 Martin Jansa wrote:
> * 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>
> ---
>  meta/classes/buildhistory.bbclass | 29 +++++++++++++++++++++++++----
>  1 file changed, 25 insertions(+), 4 deletions(-)
> 
> diff --git a/meta/classes/buildhistory.bbclass
> b/meta/classes/buildhistory.bbclass index 82d0bf8..8c9f794 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)

Acked-by: Paul Eggleton <paul.eggleton@linux.intel.com>

Cheers,
Paul

-- 

Paul Eggleton
Intel Open Source Technology Centre



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-04-03 17:03 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-04-01 12:50 [PATCH] buildhistory: record tag names and show warning when the same tag corresponds to different revision Martin Jansa
2013-04-03  8:24 ` Martin Jansa
2013-04-03  8:49   ` [PATCHv2] " Martin Jansa
2013-04-03 16:45     ` Paul Eggleton

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.