Patchwork [bitbake-devel,07/11] Hob: Remove the recipe/package populated signal

login
register
mail settings
Submitter Dongxiao Xu
Date March 14, 2012, 9:26 a.m.
Message ID <c5a2b26da70c94f26bfd2e2297cc7b69139ec78c.1331716896.git.dongxiao.xu@intel.com>
Download mbox | patch
Permalink /patch/23297/
State Accepted
Commit 0c766a8c69782b2dd35a363dc9573b78f9d41995
Headers show

Comments

Dongxiao Xu - March 14, 2012, 9:26 a.m.
Handle the recipe and package list update in
handler_command_succeeded_cb(), which could avoid potential race
condition when doing recipe/package list updating and page switching.

Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
---
 lib/bb/ui/crumbs/builder.py      |   18 ++++++++----------
 lib/bb/ui/crumbs/hoblistmodel.py |   14 --------------
 2 files changed, 8 insertions(+), 24 deletions(-)
Joshua Lock - March 14, 2012, 7:37 p.m.
On 14/03/12 02:26, Dongxiao Xu wrote:
> Handle the recipe and package list update in
> handler_command_succeeded_cb(), which could avoid potential race
> condition when doing recipe/package list updating and page switching.
>
> Signed-off-by: Dongxiao Xu<dongxiao.xu@intel.com>

AFAICS this switches the GUI even if the model is not ready, which seems 
like a reasonable change.

Signed-off-by: Joshua Lock <josh@linux.intel.com>

> ---
>   lib/bb/ui/crumbs/builder.py      |   18 ++++++++----------
>   lib/bb/ui/crumbs/hoblistmodel.py |   14 --------------
>   2 files changed, 8 insertions(+), 24 deletions(-)
>
> diff --git a/lib/bb/ui/crumbs/builder.py b/lib/bb/ui/crumbs/builder.py
> index f9844de..c6b1a3d 100755
> --- a/lib/bb/ui/crumbs/builder.py
> +++ b/lib/bb/ui/crumbs/builder.py
> @@ -200,8 +200,6 @@ class Builder(gtk.Window):
>           self.connect("delete-event", self.destroy_window_cb)
>           self.recipe_model.connect ("recipe-selection-changed",  self.recipelist_changed_cb)
>           self.package_model.connect("package-selection-changed", self.packagelist_changed_cb)
> -        self.recipe_model.connect ("recipelist-populated",      self.recipelist_populated_cb)
> -        self.package_model.connect("packagelist-populated",     self.packagelist_populated_cb)
>           self.handler.connect("config-updated",           self.handler_config_updated_cb)
>           self.handler.connect("package-formats-updated",  self.handler_package_formats_updated_cb)
>           self.handler.connect("layers-updated",           self.handler_layers_updated_cb)
> @@ -413,10 +411,14 @@ class Builder(gtk.Window):
>                            self.handler.GENERATE_IMAGE]:
>               self.handler.request_package_info_async()
>           elif initcmd == self.handler.POPULATE_PACKAGEINFO:
> +            if self.current_step == self.RCPPKGINFO_POPULATING:
> +                self.switch_page(self.RCPPKGINFO_POPULATED)
> +                self.rcppkglist_populated()
> +                return
> +
> +            self.rcppkglist_populated()
>               if self.current_step == self.FAST_IMAGE_GENERATING:
>                   self.switch_page(self.IMAGE_GENERATING)
> -            elif self.current_step == self.RCPPKGINFO_POPULATING:
> -                self.switch_page(self.RCPPKGINFO_POPULATED)
>               elif self.current_step == self.PACKAGE_GENERATING:
>                   self.switch_page(self.PACKAGE_GENERATED)
>               elif self.current_step == self.IMAGE_GENERATING:
> @@ -448,7 +450,7 @@ class Builder(gtk.Window):
>       def handler_data_generated_cb(self, handler):
>           self.window_sensitive(True)
>
> -    def recipelist_populated_cb(self, recipe_model):
> +    def rcppkglist_populated(self):
>           selected_image = self.configuration.selected_image
>           selected_recipes = self.configuration.selected_recipes[:]
>           selected_packages = self.configuration.selected_packages[:]
> @@ -458,11 +460,7 @@ class Builder(gtk.Window):
>                                               " ".join(selected_packages))
>
>           self.image_configuration_page.update_image_combo(self.recipe_model, selected_image)
> -
>           self.update_recipe_model(selected_image, selected_recipes)
> -
> -    def packagelist_populated_cb(self, package_model):
> -        selected_packages = self.configuration.selected_packages[:]
>           self.update_package_model(selected_packages)
>
>       def recipelist_changed_cb(self, recipe_model):
> @@ -825,7 +823,7 @@ class Builder(gtk.Window):
>           self.switch_page(self.RECIPE_SELECTION)
>
>       def initiate_new_build(self):
> -	self.configuration.curr_mach = ""
> +        self.configuration.curr_mach = ""
>           self.image_configuration_page.switch_machine_combo()
>           self.switch_page(self.MACHINE_SELECTION)
>
> diff --git a/lib/bb/ui/crumbs/hoblistmodel.py b/lib/bb/ui/crumbs/hoblistmodel.py
> index c19aaa8..edd61b5 100644
> --- a/lib/bb/ui/crumbs/hoblistmodel.py
> +++ b/lib/bb/ui/crumbs/hoblistmodel.py
> @@ -36,9 +36,6 @@ class PackageListModel(gtk.TreeStore):
>       (COL_NAME, COL_VER, COL_REV, COL_RNM, COL_SEC, COL_SUM, COL_RDEP, COL_RPROV, COL_SIZE, COL_BINB, COL_INC) = range(11)
>
>       __gsignals__ = {
> -        "packagelist-populated" : (gobject.SIGNAL_RUN_LAST,
> -                                gobject.TYPE_NONE,
> -                                ()),
>           "package-selection-changed" : (gobject.SIGNAL_RUN_LAST,
>                                   gobject.TYPE_NONE,
>                                   ()),
> @@ -135,8 +132,6 @@ class PackageListModel(gtk.TreeStore):
>       """
>       The populate() function takes as input the data from a
>       bb.event.PackageInfo event and populates the package list.
> -    Once the population is done it emits gsignal packagelist-populated
> -    to notify any listeners that the model is ready
>       """
>       def populate(self, pkginfolist):
>           self.clear()
> @@ -194,8 +189,6 @@ class PackageListModel(gtk.TreeStore):
>                        self.COL_RPROV, rprov, self.COL_SIZE, size,
>                        self.COL_BINB, "", self.COL_INC, False)
>
> -        self.emit("packagelist-populated")
> -
>       """
>       Check whether the item at item_path is included or not
>       """
> @@ -425,9 +418,6 @@ class RecipeListModel(gtk.ListStore):
>       __dummy_image__ = "Start from scratch"
>
>       __gsignals__ = {
> -        "recipelist-populated" : (gobject.SIGNAL_RUN_LAST,
> -                                gobject.TYPE_NONE,
> -                                ()),
>           "recipe-selection-changed" : (gobject.SIGNAL_RUN_LAST,
>                                     gobject.TYPE_NONE,
>                                    ()),
> @@ -524,8 +514,6 @@ class RecipeListModel(gtk.ListStore):
>       """
>       The populate() function takes as input the data from a
>       bb.event.TargetsTreeGenerated event and populates the RecipeList.
> -    Once the population is done it emits gsignal recipelist-populated
> -    to notify any listeners that the model is ready
>       """
>       def populate(self, event_model):
>           # First clear the model, in case repopulating
> @@ -580,8 +568,6 @@ class RecipeListModel(gtk.ListStore):
>               self.pn_path[pn] = path
>               it = self.iter_next(it)
>
> -        self.emit("recipelist-populated")
> -
>       """
>       Update the model, send out the notification.
>       """

Patch

diff --git a/lib/bb/ui/crumbs/builder.py b/lib/bb/ui/crumbs/builder.py
index f9844de..c6b1a3d 100755
--- a/lib/bb/ui/crumbs/builder.py
+++ b/lib/bb/ui/crumbs/builder.py
@@ -200,8 +200,6 @@  class Builder(gtk.Window):
         self.connect("delete-event", self.destroy_window_cb)
         self.recipe_model.connect ("recipe-selection-changed",  self.recipelist_changed_cb)
         self.package_model.connect("package-selection-changed", self.packagelist_changed_cb)
-        self.recipe_model.connect ("recipelist-populated",      self.recipelist_populated_cb)
-        self.package_model.connect("packagelist-populated",     self.packagelist_populated_cb)
         self.handler.connect("config-updated",           self.handler_config_updated_cb)
         self.handler.connect("package-formats-updated",  self.handler_package_formats_updated_cb)
         self.handler.connect("layers-updated",           self.handler_layers_updated_cb)
@@ -413,10 +411,14 @@  class Builder(gtk.Window):
                          self.handler.GENERATE_IMAGE]:
             self.handler.request_package_info_async()
         elif initcmd == self.handler.POPULATE_PACKAGEINFO:
+            if self.current_step == self.RCPPKGINFO_POPULATING:
+                self.switch_page(self.RCPPKGINFO_POPULATED)
+                self.rcppkglist_populated()
+                return
+
+            self.rcppkglist_populated()
             if self.current_step == self.FAST_IMAGE_GENERATING:
                 self.switch_page(self.IMAGE_GENERATING)
-            elif self.current_step == self.RCPPKGINFO_POPULATING:
-                self.switch_page(self.RCPPKGINFO_POPULATED)
             elif self.current_step == self.PACKAGE_GENERATING:
                 self.switch_page(self.PACKAGE_GENERATED)
             elif self.current_step == self.IMAGE_GENERATING:
@@ -448,7 +450,7 @@  class Builder(gtk.Window):
     def handler_data_generated_cb(self, handler):
         self.window_sensitive(True)
 
-    def recipelist_populated_cb(self, recipe_model):
+    def rcppkglist_populated(self):
         selected_image = self.configuration.selected_image
         selected_recipes = self.configuration.selected_recipes[:]
         selected_packages = self.configuration.selected_packages[:]
@@ -458,11 +460,7 @@  class Builder(gtk.Window):
                                             " ".join(selected_packages))
 
         self.image_configuration_page.update_image_combo(self.recipe_model, selected_image)
-
         self.update_recipe_model(selected_image, selected_recipes)
-
-    def packagelist_populated_cb(self, package_model):
-        selected_packages = self.configuration.selected_packages[:]
         self.update_package_model(selected_packages)
 
     def recipelist_changed_cb(self, recipe_model):
@@ -825,7 +823,7 @@  class Builder(gtk.Window):
         self.switch_page(self.RECIPE_SELECTION)
 
     def initiate_new_build(self):
-	self.configuration.curr_mach = ""
+        self.configuration.curr_mach = ""
         self.image_configuration_page.switch_machine_combo()
         self.switch_page(self.MACHINE_SELECTION)
 
diff --git a/lib/bb/ui/crumbs/hoblistmodel.py b/lib/bb/ui/crumbs/hoblistmodel.py
index c19aaa8..edd61b5 100644
--- a/lib/bb/ui/crumbs/hoblistmodel.py
+++ b/lib/bb/ui/crumbs/hoblistmodel.py
@@ -36,9 +36,6 @@  class PackageListModel(gtk.TreeStore):
     (COL_NAME, COL_VER, COL_REV, COL_RNM, COL_SEC, COL_SUM, COL_RDEP, COL_RPROV, COL_SIZE, COL_BINB, COL_INC) = range(11)
 
     __gsignals__ = {
-        "packagelist-populated" : (gobject.SIGNAL_RUN_LAST,
-                                gobject.TYPE_NONE,
-                                ()),
         "package-selection-changed" : (gobject.SIGNAL_RUN_LAST,
                                 gobject.TYPE_NONE,
                                 ()),
@@ -135,8 +132,6 @@  class PackageListModel(gtk.TreeStore):
     """
     The populate() function takes as input the data from a
     bb.event.PackageInfo event and populates the package list.
-    Once the population is done it emits gsignal packagelist-populated
-    to notify any listeners that the model is ready
     """
     def populate(self, pkginfolist):
         self.clear()
@@ -194,8 +189,6 @@  class PackageListModel(gtk.TreeStore):
                      self.COL_RPROV, rprov, self.COL_SIZE, size,
                      self.COL_BINB, "", self.COL_INC, False)
 
-        self.emit("packagelist-populated")
-
     """
     Check whether the item at item_path is included or not
     """
@@ -425,9 +418,6 @@  class RecipeListModel(gtk.ListStore):
     __dummy_image__ = "Start from scratch"
 
     __gsignals__ = {
-        "recipelist-populated" : (gobject.SIGNAL_RUN_LAST,
-                                gobject.TYPE_NONE,
-                                ()),
         "recipe-selection-changed" : (gobject.SIGNAL_RUN_LAST,
                                   gobject.TYPE_NONE,
                                  ()),
@@ -524,8 +514,6 @@  class RecipeListModel(gtk.ListStore):
     """
     The populate() function takes as input the data from a
     bb.event.TargetsTreeGenerated event and populates the RecipeList.
-    Once the population is done it emits gsignal recipelist-populated
-    to notify any listeners that the model is ready
     """
     def populate(self, event_model):
         # First clear the model, in case repopulating
@@ -580,8 +568,6 @@  class RecipeListModel(gtk.ListStore):
             self.pn_path[pn] = path
             it = self.iter_next(it)
 
-        self.emit("recipelist-populated")
-
     """
     Update the model, send out the notification.
     """