You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by gi...@apache.org on 2020/12/29 13:02:01 UTC

[buildstream] 11/27: _variables.pyx: Pass around provenance node instead of provenance itself

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch tristan/partial-variables-manual-string-join
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit 116eec0b9c3bf9cd0faf72d5fc1550a5d3291d43
Author: Tristan van Berkom <tr...@codethink.co.uk>
AuthorDate: Thu Jul 2 20:35:41 2020 +0900

    _variables.pyx: Pass around provenance node instead of provenance itself
---
 src/buildstream/_variables.pyx | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/src/buildstream/_variables.pyx b/src/buildstream/_variables.pyx
index 18772ae..8020efe 100644
--- a/src/buildstream/_variables.pyx
+++ b/src/buildstream/_variables.pyx
@@ -158,7 +158,7 @@ cdef class Variables:
         dependencies, n_dependencies = value.dependencies()
         while idx < n_dependencies:
             dep_name = <str> dependencies[idx]
-            self._resolve(dep_name, node.get_provenance())
+            self._resolve(dep_name, node)
             idx += 1
 
         return value.resolve(self._values)
@@ -224,17 +224,17 @@ cdef class Variables:
     # the given dictionary of expansion strings.
     #
     # Args:
-    #     name (str): Name of the variable to expand
-    #     provenance (ProvenanceInformation): Whence this variable was refered from
+    #    name (str): Name of the variable to expand
+    #    pnode (ScalarNode): The ScalarNode for which we need to resolve `name`
     #
     # Returns:
-    #     (str): The expanded value of variable
+    #    (str): The expanded value of variable
     #
     # Raises:
-    #     (LoadError): In case there was any undefined variables or circular
-    #                  references encountered when resolving the variable.
+    #    (LoadError): In case there was any undefined variables or circular
+    #                 references encountered when resolving the variable.
     #
-    cdef str _resolve(self, str name, ProvenanceInformation provenance):
+    cdef str _resolve(self, str name, ScalarNode pnode):
         cdef ResolutionStep step
         cdef ResolutionStep new_step
         cdef ResolutionStep this_step
@@ -275,7 +275,7 @@ cdef class Variables:
             idx = 0
             while idx < this_step.n_varnames:
                 iter_name = <str> this_step.varnames[idx]
-                iter_value = self._get_checked_value(iter_name, this_step.referee, provenance)
+                iter_value = self._get_checked_value(iter_name, this_step.referee, pnode)
                 idx += 1
 
                 # Earliest return for an already resolved value
@@ -318,7 +318,7 @@ cdef class Variables:
     # Args:
     #    varname (str): The variable name to fetch
     #    referee (str): The variable name referring to `varname`, or None
-    #    provenance (ProvenanceInformation): The provenance, incase referee is None.
+    #    pnode (ScalarNode): The ScalarNode for which we need to resolve `name`
     #
     # Returns:
     #   (Value): The Value for varname
@@ -326,7 +326,8 @@ cdef class Variables:
     # Raises:
     #   (LoadError): An appropriate error in case of undefined variables
     #
-    cdef Value _get_checked_value(self, str varname, str referee, ProvenanceInformation provenance):
+    cdef Value _get_checked_value(self, str varname, str referee, ScalarNode pnode):
+        cdef ProvenanceInformation provenance = None
         cdef Value referee_value
         cdef str error_message
 
@@ -346,8 +347,10 @@ cdef class Variables:
 
             if referee_value:
                 provenance = referee_value.get_provenance()
-
+            elif pnode:
+                provenance = pnode.get_provenance()
             error_message = "Reference to undefined variable '{}'".format(varname)
+
             if provenance:
                 error_message = "{}: {}".format(provenance, error_message)
             raise LoadError(error_message, LoadErrorReason.UNRESOLVED_VARIABLE) from e