All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] Checksum / error reporting improvements
@ 2012-05-30 16:17 Paul Eggleton
  2012-05-30 16:17 ` [PATCH 1/5] lib/bb/data_smart.py: don't report variable in ExpansionError if not set Paul Eggleton
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Paul Eggleton @ 2012-05-30 16:17 UTC (permalink / raw)
  To: bitbake-devel

Some checksum improvements and a few error reporting fixes that I made
in the process. Note that the varflags change won't do anything without
the list of exclusions; an appropriate list has been set in a patch
which will shortly be set to the OE-Core list.


The following changes (against Poky, but which apply cleanly with -p2
against BitBake master) are available in the git repository at:

  git://git.yoctoproject.org/poky-contrib paule/bb-checksum-fixes-2
  http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=paule/bb-checksum-fixes-2

Paul Eggleton (5):
  lib/bb/data_smart.py: don't report variable in ExpansionError if not
    set
  cooker: fix UnboundLocalError when exception occurs during parsing
  cooker: report recipe being parsed when ExpansionError occurs
  lib/bb/fetch2: ignore remote URIs when doing file checksums
  bitbake: include varflags in checksums

 bitbake/lib/bb/cooker.py          |    8 +++++++-
 bitbake/lib/bb/data.py            |   20 +++++++++++++++++++-
 bitbake/lib/bb/data_smart.py      |    5 ++++-
 bitbake/lib/bb/fetch2/__init__.py |   26 ++++++++++++++++++++------
 bitbake/lib/bb/siggen.py          |    4 ++++
 5 files changed, 54 insertions(+), 9 deletions(-)

-- 
1.7.9.5




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

* [PATCH 1/5] lib/bb/data_smart.py: don't report variable in ExpansionError if not set
  2012-05-30 16:17 [PATCH 0/5] Checksum / error reporting improvements Paul Eggleton
@ 2012-05-30 16:17 ` Paul Eggleton
  2012-05-30 16:17 ` [PATCH 2/5] cooker: fix UnboundLocalError when exception occurs during parsing Paul Eggleton
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Paul Eggleton @ 2012-05-30 16:17 UTC (permalink / raw)
  To: bitbake-devel

If the variable name is not specified then don't confuse the error message
by starting off with "Failure expanding variable None...".

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
---
 bitbake/lib/bb/data_smart.py |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py
index 27fb7d9..2c02cde 100644
--- a/bitbake/lib/bb/data_smart.py
+++ b/bitbake/lib/bb/data_smart.py
@@ -102,7 +102,10 @@ class ExpansionError(Exception):
         self.expression = expression
         self.variablename = varname
         self.exception = exception
-        self.msg = "Failure expanding variable %s, expression was %s which triggered exception %s: %s" % (varname, expression, type(exception).__name__, exception)
+        if varname:
+            self.msg = "Failure expanding variable %s, expression was %s which triggered exception %s: %s" % (varname, expression, type(exception).__name__, exception)
+        else:
+            self.msg = "Failure expanding expression %s which triggered exception %s: %s" % (expression, type(exception).__name__, exception)
         Exception.__init__(self, self.msg)
         self.args = (varname, expression, exception)
     def __str__(self):
-- 
1.7.9.5




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

* [PATCH 2/5] cooker: fix UnboundLocalError when exception occurs during parsing
  2012-05-30 16:17 [PATCH 0/5] Checksum / error reporting improvements Paul Eggleton
  2012-05-30 16:17 ` [PATCH 1/5] lib/bb/data_smart.py: don't report variable in ExpansionError if not set Paul Eggleton
@ 2012-05-30 16:17 ` Paul Eggleton
  2012-05-30 16:17 ` [PATCH 3/5] cooker: report recipe being parsed when ExpansionError occurs Paul Eggleton
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Paul Eggleton @ 2012-05-30 16:17 UTC (permalink / raw)
  To: bitbake-devel

Fix a recent regression where we see the following additional error
after an error occurs during parsing:

ERROR: Command execution failed: Traceback (most recent call last):
  File "/home/paul/poky/poky/bitbake/lib/bb/command.py", line 84, in runAsyncCommand
    self.cooker.updateCache()
  File "/home/paul/poky/poky/bitbake/lib/bb/cooker.py", line 1202, in updateCache
    if not self.parser.parse_next():
  File "/home/paul/poky/poky/bitbake/lib/bb/cooker.py", line 1672, in parse_next
    self.virtuals += len(result)
UnboundLocalError: local variable 'result' referenced before assignment

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
---
 bitbake/lib/bb/cooker.py |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index d1de757..b30945c 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -1646,6 +1646,8 @@ class CookerParser(object):
                     yield result
 
     def parse_next(self):
+        result = []
+        parsed = None
         try:
             parsed, result = self.results.next()
         except StopIteration:
-- 
1.7.9.5




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

* [PATCH 3/5] cooker: report recipe being parsed when ExpansionError occurs
  2012-05-30 16:17 [PATCH 0/5] Checksum / error reporting improvements Paul Eggleton
  2012-05-30 16:17 ` [PATCH 1/5] lib/bb/data_smart.py: don't report variable in ExpansionError if not set Paul Eggleton
  2012-05-30 16:17 ` [PATCH 2/5] cooker: fix UnboundLocalError when exception occurs during parsing Paul Eggleton
@ 2012-05-30 16:17 ` Paul Eggleton
  2012-05-30 16:17 ` [PATCH 4/5] lib/bb/fetch2: ignore remote URIs when doing file checksums Paul Eggleton
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Paul Eggleton @ 2012-05-30 16:17 UTC (permalink / raw)
  To: bitbake-devel

When an ExpansionError occurs during parsing it is useful to know which
recipe was being parsed when it occurred.

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
---
 bitbake/lib/bb/cooker.py |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index b30945c..928b600 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -1657,9 +1657,13 @@ class CookerParser(object):
             logger.error('Unable to parse %s: %s' %
                      (exc.recipe, bb.exceptions.to_string(exc.realexception)))
             self.shutdown(clean=False)
-        except (bb.parse.ParseError, bb.data_smart.ExpansionError) as exc:
+        except bb.parse.ParseError as exc:
             logger.error(str(exc))
             self.shutdown(clean=False)
+        except bb.data_smart.ExpansionError as exc:
+            _, value, _ = sys.exc_info()
+            logger.error('ExpansionError during parsing %s: %s', value.recipe, str(exc))
+            self.shutdown(clean=False)
         except SyntaxError as exc:
             logger.error('Unable to parse %s', exc.recipe)
             self.shutdown(clean=False)
-- 
1.7.9.5




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

* [PATCH 4/5] lib/bb/fetch2: ignore remote URIs when doing file checksums
  2012-05-30 16:17 [PATCH 0/5] Checksum / error reporting improvements Paul Eggleton
                   ` (2 preceding siblings ...)
  2012-05-30 16:17 ` [PATCH 3/5] cooker: report recipe being parsed when ExpansionError occurs Paul Eggleton
@ 2012-05-30 16:17 ` Paul Eggleton
  2012-05-30 16:17 ` [PATCH 5/5] bitbake: include varflags in checksums Paul Eggleton
  2012-05-30 16:22 ` [PATCH 0/5] Checksum / error reporting improvements Richard Purdie
  5 siblings, 0 replies; 7+ messages in thread
From: Paul Eggleton @ 2012-05-30 16:17 UTC (permalink / raw)
  To: bitbake-devel

Skip evaluating remote URIs when doing local file checksums, because we
don't need to process them and doing so will trigger a parse failure if
SRCREV is not fully specified. Whilst this is just delaying a check
until runtime (when do_fetch runs for the recipe) we're only validating
this here accidentally and if we did wish to check it during parsing it
ought to be done explicitly.

Fixes [YOCTO #2512]

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
---
 bitbake/lib/bb/fetch2/__init__.py |   26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py
index 6ae69cd..83050e4 100644
--- a/bitbake/lib/bb/fetch2/__init__.py
+++ b/bitbake/lib/bb/fetch2/__init__.py
@@ -112,6 +112,9 @@ class NetworkAccess(BBFetchException):
          BBFetchException.__init__(self, msg)
          self.args = (url, cmd)
 
+class NonLocalMethod(Exception):
+    def __init__(self):
+        Exception.__init__(self)
 
 def decodeurl(url):
     """Decodes an URL into the tokens (scheme, network location, path,
@@ -565,17 +568,17 @@ def srcrev_internal_helper(ud, d, name):
 def get_checksum_file_list(d):
     """ Get a list of files checksum in SRC_URI
 
-    Returns the all resolved local path of all local file entries in
+    Returns the resolved local paths of all local file entries in
     SRC_URI as a space-separated string
     """
-    fetch = Fetch([], d)
+    fetch = Fetch([], d, cache = False, localonly = True)
 
     dl_dir = d.getVar('DL_DIR', True)
     filelist = []
     for u in fetch.urls:
         ud = fetch.ud[u]
 
-        if isinstance(ud.method, local.Local):
+        if ud and isinstance(ud.method, local.Local):
             ud.setup_localpath(d)
             f = ud.localpath
             if f.startswith(dl_dir):
@@ -639,7 +642,7 @@ class FetchData(object):
     """
     A class which represents the fetcher state for a given URI.
     """
-    def __init__(self, url, d):
+    def __init__(self, url, d, localonly = False):
         # localpath is the location of a downloaded result. If not set, the file is local.
         self.donestamp = None
         self.localfile = ""
@@ -686,6 +689,9 @@ class FetchData(object):
         if not self.method:
             raise NoMethodError(url)
 
+        if localonly and not isinstance(self.method, local.Local):
+            raise NonLocalMethod()
+
         if hasattr(self.method, "urldata_init"):
             self.method.urldata_init(self, d)
 
@@ -1009,7 +1015,10 @@ class FetchMethod(object):
         return "%s-%s" % (key, d.getVar("PN", True) or "")
 
 class Fetch(object):
-    def __init__(self, urls, d, cache = True):
+    def __init__(self, urls, d, cache = True, localonly = False):
+        if localonly and cache:
+            raise Exception("bb.fetch2.Fetch.__init__: cannot set cache and localonly at same time")
+
         if len(urls) == 0:
             urls = d.getVar("SRC_URI", True).split()
         self.urls = urls
@@ -1022,7 +1031,12 @@ class Fetch(object):
 
         for url in urls:
             if url not in self.ud:
-                self.ud[url] = FetchData(url, d)
+                try:
+                    self.ud[url] = FetchData(url, d, localonly)
+                except NonLocalMethod:
+                    if localonly:
+                        self.ud[url] = None
+                        pass
 
         if cache:
             urldata_cache[fn] = self.ud
-- 
1.7.9.5




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

* [PATCH 5/5] bitbake: include varflags in checksums
  2012-05-30 16:17 [PATCH 0/5] Checksum / error reporting improvements Paul Eggleton
                   ` (3 preceding siblings ...)
  2012-05-30 16:17 ` [PATCH 4/5] lib/bb/fetch2: ignore remote URIs when doing file checksums Paul Eggleton
@ 2012-05-30 16:17 ` Paul Eggleton
  2012-05-30 16:22 ` [PATCH 0/5] Checksum / error reporting improvements Richard Purdie
  5 siblings, 0 replies; 7+ messages in thread
From: Paul Eggleton @ 2012-05-30 16:17 UTC (permalink / raw)
  To: bitbake-devel

Add a dependency to each variable on a filtered list of its varflags.
This is intended to catch things such as SRC_URI checksums, varflags
controlling extra functionality from classes (e.g. the recently updated
update-alternatives class in OE-Core), etc. and ensure their values
influence the sstate checksums.

There is an exclusion list which needs to be set via bitbake.conf
(BB_SIGNATURE_EXCLUDE_FLAGS), if this is not set then the functionality
is disabled. The existing vardepsexclude mechanism can also be used to
exclude undesired varflags, but they must be fully specified, e.g.:

do_patch[vardepsexclude] += "do_patch[someflag]"

Implements [YOCTO #2517].

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
---
 bitbake/lib/bb/data.py   |   20 +++++++++++++++++++-
 bitbake/lib/bb/siggen.py |    4 ++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py
index c0636e1..e3ffefe 100644
--- a/bitbake/lib/bb/data.py
+++ b/bitbake/lib/bb/data.py
@@ -279,7 +279,12 @@ def build_dependencies(key, keys, shelldeps, vardepvals, d):
     deps = set()
     vardeps = d.getVarFlag(key, "vardeps", True)
     try:
-        value = d.getVar(key, False)
+        if key[-1] == ']':
+            vf = key[:-1].split('[')
+            value = d.getVarFlag(vf[0], vf[1], False)
+        else:
+            value = d.getVar(key, False)
+
         if key in vardepvals:
            value =  d.getVarFlag(key, "vardepvalue", True)
         elif d.getVarFlag(key, "func"):
@@ -301,6 +306,19 @@ def build_dependencies(key, keys, shelldeps, vardepvals, d):
             parser = d.expandWithRefs(value, key)
             deps |= parser.references
             deps = deps | (keys & parser.execs)
+
+        # Add varflags, assuming an exclusion list is set
+        varflagsexcl = d.getVar('BB_SIGNATURE_EXCLUDE_FLAGS', True)
+        if varflagsexcl:
+            varfdeps = []
+            varflags = d.getVarFlags(key)
+            if varflags:
+                for f in varflags:
+                    if f not in varflagsexcl:
+                        varfdeps.append('%s[%s]' % (key, f))
+            if varfdeps:
+                deps |= set(varfdeps)
+
         deps |= set((vardeps or "").split())
         deps -= set((d.getVarFlag(key, "vardepsexclude", True) or "").split())
     except:
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py
index daf5677..c4b7c39 100644
--- a/bitbake/lib/bb/siggen.py
+++ b/bitbake/lib/bb/siggen.py
@@ -108,6 +108,10 @@ class SignatureGeneratorBasic(SignatureGenerator):
                 data = data + dep
                 if dep in lookupcache:
                     var = lookupcache[dep]
+                elif dep[-1] == ']':
+                    vf = dep[:-1].split('[')
+                    var = d.getVarFlag(vf[0], vf[1], False)
+                    lookupcache[dep] = var
                 else:
                     var = d.getVar(dep, False)
                     lookupcache[dep] = var
-- 
1.7.9.5




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

* Re: [PATCH 0/5] Checksum / error reporting improvements
  2012-05-30 16:17 [PATCH 0/5] Checksum / error reporting improvements Paul Eggleton
                   ` (4 preceding siblings ...)
  2012-05-30 16:17 ` [PATCH 5/5] bitbake: include varflags in checksums Paul Eggleton
@ 2012-05-30 16:22 ` Richard Purdie
  5 siblings, 0 replies; 7+ messages in thread
From: Richard Purdie @ 2012-05-30 16:22 UTC (permalink / raw)
  To: Paul Eggleton; +Cc: bitbake-devel

On Wed, 2012-05-30 at 17:17 +0100, Paul Eggleton wrote:
> Some checksum improvements and a few error reporting fixes that I made
> in the process. Note that the varflags change won't do anything without
> the list of exclusions; an appropriate list has been set in a patch
> which will shortly be set to the OE-Core list.
> 
> 
> The following changes (against Poky, but which apply cleanly with -p2
> against BitBake master) are available in the git repository at:
> 
>   git://git.yoctoproject.org/poky-contrib paule/bb-checksum-fixes-2
>   http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=paule/bb-checksum-fixes-2
> 
> Paul Eggleton (5):
>   lib/bb/data_smart.py: don't report variable in ExpansionError if not
>     set
>   cooker: fix UnboundLocalError when exception occurs during parsing
>   cooker: report recipe being parsed when ExpansionError occurs
>   lib/bb/fetch2: ignore remote URIs when doing file checksums
>   bitbake: include varflags in checksums

Merged to master, thanks.

Richard




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

end of thread, other threads:[~2012-05-30 16:33 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-30 16:17 [PATCH 0/5] Checksum / error reporting improvements Paul Eggleton
2012-05-30 16:17 ` [PATCH 1/5] lib/bb/data_smart.py: don't report variable in ExpansionError if not set Paul Eggleton
2012-05-30 16:17 ` [PATCH 2/5] cooker: fix UnboundLocalError when exception occurs during parsing Paul Eggleton
2012-05-30 16:17 ` [PATCH 3/5] cooker: report recipe being parsed when ExpansionError occurs Paul Eggleton
2012-05-30 16:17 ` [PATCH 4/5] lib/bb/fetch2: ignore remote URIs when doing file checksums Paul Eggleton
2012-05-30 16:17 ` [PATCH 5/5] bitbake: include varflags in checksums Paul Eggleton
2012-05-30 16:22 ` [PATCH 0/5] Checksum / error reporting improvements Richard Purdie

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.