]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
bitbake/data/runqueue: Sync up with upstream to clean up environment variable handling
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 8 Jun 2011 19:16:56 +0000 (20:16 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 8 Jun 2011 19:38:28 +0000 (20:38 +0100)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
bitbake/lib/bb/data.py
bitbake/lib/bb/runqueue.py

index 50f2218a7009a0e184493368cc006b17ce16621e..720dd76ef62455c947614e30751a54dfbe0f811e 100644 (file)
@@ -234,25 +234,20 @@ def emit_env(o=sys.__stdout__, d = init(), all=False):
         for key in keys:
             emit_var(key, o, d, all and not isfunc) and o.write('\n')
 
-def export_vars(d):
-    keys = (key for key in d.keys() if d.getVarFlag(key, "export"))
-    ret = {}
-    for k in keys:
+def exported_keys(d):
+    return (key for key in d.keys() if not key.startswith('__') and
+                                      d.getVarFlag(key, 'export') and
+                                      not d.getVarFlag(key, 'unexport'))
+
+def exported_vars(d):
+    for key in exported_keys(d):
         try:
-            v = d.getVar(k, True)
-            if v: 
-                ret[k] = v
-        except (KeyboardInterrupt, bb.build.FuncFailed):
-            raise
-        except Exception, exc:
+            value = d.getVar(key, True)
+        except Exception:
             pass
-    return ret
 
-def export_envvars(v, d):
-    for s in os.environ.keys():
-        if s not in v:
-            v[s] = os.environ[s]
-    return v
+        if value is not None:
+            yield key, str(value)
 
 def emit_func(func, o=sys.__stdout__, d = init()):
     """Emits all items in the data store in a format such that it can be sourced by a shell."""
index 772b3667c4b1fc08dda2ff4232a6ca73b97fea76..af21eae42a3f7bb11750423eca6dc69e6d102647 100644 (file)
@@ -1062,7 +1062,6 @@ class RunQueueExecute:
         # We need to setup the environment BEFORE the fork, since
         # a fork() or exec*() activates PSEUDO...
 
-        env = {}
         envbackup = {}
 
         taskdep = self.rqdata.dataCache.task_deps[fn]
@@ -1071,7 +1070,6 @@ class RunQueueExecute:
             for key, value in (var.split('=') for var in envvars):
                 envbackup[key] = os.environ.get(key)
                 os.environ[key] = value
-                env[key] = value
 
             fakedirs = (self.rqdata.dataCache.fakerootdirs[fn] or "").split()
             for p in fakedirs:
@@ -1118,14 +1116,7 @@ class RunQueueExecute:
                 for h in self.rqdata.hash_deps:
                     the_data.setVar("BBHASHDEPS_%s" % h, self.rqdata.hash_deps[h])
 
-                env2 = bb.data.export_vars(the_data)
-                env2 = bb.data.export_envvars(env2, the_data)
-                for e in os.environ:
-                    os.unsetenv(e)
-                for e in env2:
-                    os.putenv(e, env2[e])
-                for e in env:
-                    os.putenv(e, env[e])
+                os.environ.update(bb.data.exported_vars(the_data))
 
                 if quieterrors:
                     the_data.setVarFlag(taskname, "quieterrors", "1")