From 9d3f301423090cb27a495e808323a804d1740a90 Mon Sep 17 00:00:00 2001
From: Chris Larson <chris_larson@mentor.com>
Date: Tue, 20 Apr 2010 13:51:35 -0700
Subject: emit_env: clean up, iterate once

(Bitbake rev: db718ec6f67c7c0d0efb4ba0b5b24384f707dcf5)

Signed-off-by: Chris Larson <chris_larson@mentor.com>
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
---
 bitbake/lib/bb/data.py | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py
index ba496c9d9..3ff1ac811 100644
--- a/bitbake/lib/bb/data.py
+++ b/bitbake/lib/bb/data.py
@@ -43,6 +43,7 @@ if sys.argv[0][-5:] == "pydoc":
 else:
     path = os.path.dirname(os.path.dirname(sys.argv[0]))
 sys.path.insert(0, path)
+from itertools import groupby
 
 from bb import data_smart
 import bb
@@ -226,17 +227,12 @@ def emit_var(var, o=sys.__stdout__, d = init(), all=False):
 def emit_env(o=sys.__stdout__, d = init(), all=False):
     """Emits all items in the data store in a format such that it can be sourced by a shell."""
 
-    env = keys(d)
-
-    for e in env:
-        if getVarFlag(e, "func", d):
-            continue
-        emit_var(e, o, d, all) and o.write('\n')
-
-    for e in env:
-        if not getVarFlag(e, "func", d):
-            continue
-        emit_var(e, o, d) and o.write('\n')
+    isfunc = lambda key: bool(d.getVarFlag(key, "func"))
+    keys = sorted(d.keys(), key=isfunc)
+    grouped = groupby(keys, isfunc)
+    for isfunc, keys in grouped:
+        for key in keys:
+            emit_var(key, o, d, all and not isfunc) and o.write('\n')
 
 def update_data(d):
     """Performs final steps upon the datastore, including application of overrides"""
-- 
cgit v1.2.3