From c9c230b14a8202c31648c044e75e47022004014f Mon Sep 17 00:00:00 2001
From: Chris Larson <chris_larson@mentor.com>
Date: Thu, 8 Apr 2010 15:43:47 -0700
Subject: Move update_data into the DataSmart class as a finalize() method

(Bitbake rev: ff801397785567cb84b3615de86bff764d65decf)

Signed-off-by: Chris Larson <chris_larson@mentor.com>
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
---
 bitbake/lib/bb/data.py       | 138 +------------------------------------------
 bitbake/lib/bb/data_smart.py |  65 ++++++++++++++++++++
 2 files changed, 67 insertions(+), 136 deletions(-)

(limited to 'bitbake/lib')

diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py
index c3bb1a1f4..593827727 100644
--- a/bitbake/lib/bb/data.py
+++ b/bitbake/lib/bb/data.py
@@ -410,142 +410,8 @@ def emit_env(o=sys.__stdout__, d = init(), all=False):
         emit_var(e, o, d) and o.write('\n')
 
 def update_data(d):
-    """Modifies the environment vars according to local overrides and commands.
-    Examples:
-        Appending to a variable:
-        >>> d = init()
-        >>> setVar('TEST', 'this is a', d)
-        >>> setVar('TEST_append', ' test', d)
-        >>> setVar('TEST_append', ' of the emergency broadcast system.', d)
-        >>> update_data(d)
-        >>> print getVar('TEST', d)
-        this is a test of the emergency broadcast system.
-
-        Prepending to a variable:
-        >>> setVar('TEST', 'virtual/libc', d)
-        >>> setVar('TEST_prepend', 'virtual/tmake ', d)
-        >>> setVar('TEST_prepend', 'virtual/patcher ', d)
-        >>> update_data(d)
-        >>> print getVar('TEST', d)
-        virtual/patcher virtual/tmake virtual/libc
-
-        Overrides:
-        >>> setVar('TEST_arm', 'target', d)
-        >>> setVar('TEST_ramses', 'machine', d)
-        >>> setVar('TEST_local', 'local', d)
-        >>> setVar('OVERRIDES', 'arm', d)
-
-        >>> setVar('TEST', 'original', d)
-        >>> update_data(d)
-        >>> print getVar('TEST', d)
-        target
-
-        >>> setVar('OVERRIDES', 'arm:ramses:local', d)
-        >>> setVar('TEST', 'original', d)
-        >>> update_data(d)
-        >>> print getVar('TEST', d)
-        local
-
-        CopyMonster:
-        >>> e = d.createCopy()
-        >>> setVar('TEST_foo', 'foo', e)
-        >>> update_data(e)
-        >>> print getVar('TEST', e)
-        local
-
-        >>> setVar('OVERRIDES', 'arm:ramses:local:foo', e)
-        >>> update_data(e)
-        >>> print getVar('TEST', e)
-        foo
-
-        >>> f = d.createCopy()
-        >>> setVar('TEST_moo', 'something', f)
-        >>> setVar('OVERRIDES', 'moo:arm:ramses:local:foo', e)
-        >>> update_data(e)
-        >>> print getVar('TEST', e)
-        foo
-
-
-        >>> h = init()
-        >>> setVar('SRC_URI', 'file://append.foo;patch=1 ', h)
-        >>> g = h.createCopy()
-        >>> setVar('SRC_URI_append_arm', 'file://other.foo;patch=1', g)
-        >>> setVar('OVERRIDES', 'arm:moo', g)
-        >>> update_data(g)
-        >>> print getVar('SRC_URI', g)
-        file://append.foo;patch=1 file://other.foo;patch=1
-
-    """
-    bb.msg.debug(2, bb.msg.domain.Data, "update_data()")
-
-    # now ask the cookie monster for help
-    #print "Cookie Monster"
-    #print "Append/Prepend %s" % d._special_values
-    #print "Overrides      %s" % d._seen_overrides
-
-    overrides = (getVar('OVERRIDES', d, 1) or "").split(':') or []
-
-    #
-    # Well let us see what breaks here. We used to iterate
-    # over each variable and apply the override and then
-    # do the line expanding.
-    # If we have bad luck - which we will have - the keys
-    # where in some order that is so important for this
-    # method which we don't have anymore.
-    # Anyway we will fix that and write test cases this
-    # time.
-
-    #
-    # First we apply all overrides
-    # Then  we will handle _append and _prepend
-    #
-
-    for o in overrides:
-        # calculate '_'+override
-        l    = len(o)+1
-
-        # see if one should even try
-        if not d._seen_overrides.has_key(o):
-            continue
-
-        vars = d._seen_overrides[o]
-        for var in vars:
-            name = var[:-l]
-            try:
-                d[name] = d[var]
-            except:
-                bb.msg.note(1, bb.msg.domain.Data, "Untracked delVar")
-
-    # now on to the appends and prepends
-    if d._special_values.has_key('_append'):
-        appends = d._special_values['_append'] or []
-        for append in appends:
-            for (a, o) in getVarFlag(append, '_append', d) or []:
-                # maybe the OVERRIDE was not yet added so keep the append
-                if (o and o in overrides) or not o:
-                    delVarFlag(append, '_append', d)
-                if o and not o in overrides:
-                    continue
-
-                sval = getVar(append,d) or ""
-                sval+=a
-                setVar(append, sval, d)
-
-
-    if d._special_values.has_key('_prepend'):
-        prepends = d._special_values['_prepend'] or []
-
-        for prepend in prepends:
-            for (a, o) in getVarFlag(prepend, '_prepend', d) or []:
-                # maybe the OVERRIDE was not yet added so keep the prepend
-                if (o and o in overrides) or not o:
-                    delVarFlag(prepend, '_prepend', d)
-                if o and not o in overrides:
-                    continue
-
-                sval = a + (getVar(prepend,d) or "")
-                setVar(prepend, sval, d)
-
+    """Performs final steps upon the datastore, including application of overrides"""
+    d.finalize()
 
 def inherits_class(klass, d):
     val = getVar('__inherit_cache', d) or []
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py
index 77f186138..6ea018285 100644
--- a/bitbake/lib/bb/data_smart.py
+++ b/bitbake/lib/bb/data_smart.py
@@ -95,6 +95,71 @@ class DataSmart:
 
         return s
 
+    def finalize(self):
+        """Performs final steps upon the datastore, including application of overrides"""
+        overrides = (self.getVar("OVERRIDES", True) or "").split(":")
+
+        #
+        # Well let us see what breaks here. We used to iterate
+        # over each variable and apply the override and then
+        # do the line expanding.
+        # If we have bad luck - which we will have - the keys
+        # where in some order that is so important for this
+        # method which we don't have anymore.
+        # Anyway we will fix that and write test cases this
+        # time.
+
+        #
+        # First we apply all overrides
+        # Then  we will handle _append and _prepend
+        #
+
+        for o in overrides:
+            # calculate '_'+override
+            l    = len(o)+1
+
+            # see if one should even try
+            if not self._seen_overrides.has_key(o):
+                continue
+
+            vars = self._seen_overrides[o]
+            for var in vars:
+                name = var[:-l]
+                try:
+                    self.renameVar(var, name)
+                except:
+                    bb.msg.note(1, bb.msg.domain.Data, "Untracked delVar")
+
+        # now on to the appends and prepends
+        if self._special_values.has_key("_append"):
+            appends = self._special_values['_append'] or []
+            for append in appends:
+                for (a, o) in self.getVarFlag(append, '_append') or []:
+                    # maybe the OVERRIDE was not yet added so keep the append
+                    if (o and o in overrides) or not o:
+                        self.delVarFlag(append, '_append')
+                    if o and not o in overrides:
+                        continue
+
+                    sval = self.getVar(append, False) or ""
+                    sval += a
+                    self.setVar(append, sval)
+
+
+        if self._special_values.has_key("_prepend"):
+            prepends = self._special_values['_prepend'] or []
+
+            for prepend in prepends:
+                for (a, o) in self.getVarFlag(prepend, '_prepend') or []:
+                    # maybe the OVERRIDE was not yet added so keep the prepend
+                    if (o and o in overrides) or not o:
+                        self.delVarFlag(prepend, '_prepend')
+                    if o and not o in overrides:
+                        continue
+
+                    sval = a + (self.getVar(prepend, False) or "")
+                    self.setVar(prepend, sval)
+
     def initVar(self, var):
         self.expand_cache = {}
         if not var in self.dict:
-- 
cgit v1.2.3