Patchwork [bitbake-devel,6/8] bitbake: cooker, command: add a command to return global data

login
register
mail settings
Submitter Alexandru DAMIAN
Date Sept. 16, 2013, 11:56 a.m.
Message ID <b26fb58fcbdece4c7f36407045c1100a0d3fd8fb.1379332511.git.alexandru.damian@intel.com>
Download mbox | patch
Permalink /patch/58133/
State New
Headers show

Comments

Alexandru DAMIAN - Sept. 16, 2013, 11:56 a.m.
From: Alexandru DAMIAN <alexandru.damian@intel.com>

Adding the 'getDataDump' read-only command that will
return a dump of the global data state.

This will be used by UI clients to get the build configuration.

Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
---
 bitbake/lib/bb/command.py |  8 ++++++++
 bitbake/lib/bb/cooker.py  | 15 +++++++++++++++
 2 files changed, 23 insertions(+)
Richard Purdie - Sept. 16, 2013, 12:21 p.m.
On Mon, 2013-09-16 at 12:56 +0100, Alex DAMIAN wrote:
> From: Alexandru DAMIAN <alexandru.damian@intel.com>
> 
> Adding the 'getDataDump' read-only command that will
> return a dump of the global data state.
> 
> This will be used by UI clients to get the build configuration.
> 
> Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
> ---
>  bitbake/lib/bb/command.py |  8 ++++++++
>  bitbake/lib/bb/cooker.py  | 15 +++++++++++++++
>  2 files changed, 23 insertions(+)
> 
> diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py
> index f1abaf7..84136f1 100644
> --- a/bitbake/lib/bb/command.py
> +++ b/bitbake/lib/bb/command.py
> @@ -145,6 +145,14 @@ class CommandsSync:
>          """
>          command.cooker.shutdown(True)
>  
> +    def getDataDump(self, command, params):
> +        """
> +        Returns a dump of the global state. Call with
> +        variable flags to be retrieved as params.
> +        """
> +        return command.cooker.getGlobalExpandedData(params)

To be blunt, this *sucks* as an API call. "getDataDump" tells me nothing
about what it does. "getGlobalExpandedData" doesn't do much better.

"getAllKeyFlags"?

and please pass in a list as param[0] so there is a:

flaglist = params[0]

in there. This means we can add other parameters if we ever need to and
we don't have complete lock in to the API.

Cheers,

Richard

Patch

diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py
index f1abaf7..84136f1 100644
--- a/bitbake/lib/bb/command.py
+++ b/bitbake/lib/bb/command.py
@@ -145,6 +145,14 @@  class CommandsSync:
         """
         command.cooker.shutdown(True)
 
+    def getDataDump(self, command, params):
+        """
+        Returns a dump of the global state. Call with
+        variable flags to be retrieved as params.
+        """
+        return command.cooker.getGlobalExpandedData(params)
+    getDataDump.readonly = True
+
     def getVariable(self, command, params):
         """
         Read the value of a variable from data
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index cb0e3e5..12155b9 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -1134,6 +1134,21 @@  class BBCooker:
 
         self.configuration.server_register_idlecallback(buildTargetsIdle, rq)
 
+
+    def getGlobalExpandedData(self, flags):
+        dump = {}
+        for k in self.data.keys():
+            try:
+                v = self.data.getVar(k, True)
+                if not k.startswith("__") and not bool(self.data.getVarFlag(k, 'func')) and not isinstance(v, bb.data_smart.DataSmart):
+                    dump[k] = { 'v' : v }
+                    for d in flags:
+                        dump[k][d] = self.data.getVarFlag(k, d)
+            except:
+                pass
+        return dump
+
+
     def generateNewImage(self, image, base_image, package_queue, timestamp, description):
         '''
         Create a new image with a "require"/"inherit" base_image statement