[bitbake-devel] [PATCH 20/20] Hob: change the logic for rcppkglist_populated()
Wang, Shane
shane.wang at intel.com
Mon Apr 9 04:40:16 UTC 2012
Skip this patch only, I am going to send another version to fix the bug.
--
Shane
Shane Wang wrote on 2012-04-08:
> There are some bugs in the previous log of rcppkglist_populated. [Yocto
> #2255] is one of them.
>
> Once more, when the user loads a template, changes the base image to the
> other one which is not the same as the one in the template, changes the
> machine, and then you will find the base image specified in the template
> disappears.
>
> This patch changes the logic as follows:
> - If any template is loaded into this Hob session, its base image will be
> remembered always. After the recipe list and the package list are
> populated, the template base image will be appended. That is to fix
> the above bug. - If the reason for reparsing recipes is any settings
> are changed, Hob will remember selected_recipes and selected_packages.
> The behaviour is the same as before, because we don't want to clear
> the user selection. - If the reason for reparsing recipes is the
> machine is changed, including a template is loaded (which causes the
> machine is changed), Hob will forget selected_recipes and
> selected_packages the user selects. (see [Yocto #2255] for details)
> - Again, we reuse the code for rcppkglist_populated() for any base image
> changing.
> I.e., when the user changes any base image, Hob will forget the previous
> selected_recipes and selected_packages.
> In Hob code, two places will cause recipe parsing. One is settings are
> changed. The other is machine is changed.
>
> [Yocto #2255]
>
> Signed-off-by: Shane Wang <shane.wang at intel.com>
> ---
> bitbake/lib/bb/ui/crumbs/builder.py | 65
> +++++++++++++++++--- bitbake/lib/bb/ui/crumbs/imageconfigurationpage.py
> | 30 ++-------- 2 files changed, 62 insertions(+), 33 deletions(-)
> diff --git a/bitbake/lib/bb/ui/crumbs/builder.py
> b/bitbake/lib/bb/ui/crumbs/builder.py index 4997cd4..849a1f0 100755 ---
> a/bitbake/lib/bb/ui/crumbs/builder.py +++
> b/bitbake/lib/bb/ui/crumbs/builder.py @@ -26,6 +26,7 @@ import copy
> import os import subprocess import shlex +import glib from
> bb.ui.crumbs.template import TemplateMgr from
> bb.ui.crumbs.imageconfigurationpage import ImageConfigurationPage from
> bb.ui.crumbs.recipeselectionpage import RecipeSelectionPage
> @@ -259,6 +260,7 @@ class Builder(gtk.Window):
> self.handler = hobHandler
>
> self.template = None
> + self.loaded_images = []
>
> # build step self.current_step = None @@ -339,7 +341,8 @@ class
> Builder(gtk.Window): self.set_user_config()
> self.handler.parse_generate_configuration()
> - def populate_recipe_package_info_async(self):
> + def populate_recipe_package_info_async(self, mach_changed = True):
> + self.mach_changed = mach_changed
> self.switch_page(self.RCPPKGINFO_POPULATING) # Parse recipes
> self.set_user_config() @@ -395,6 +398,12 @@ class
> Builder(gtk.Window): self.template.load(path)
> self.configuration.load(self.template)
> + entry = {}
> + entry["image"] = self.configuration.selected_image
> + entry["recipes"] = self.configuration.selected_recipes[:]
> + entry["packages"] = self.configuration.selected_packages[:]
> + self.loaded_images.append(entry)
> +
> for layer in self.configuration.layers:
> if not os.path.exists(layer+'/conf/layer.conf'):
> return False
> @@ -589,17 +598,57 @@ class Builder(gtk.Window):
> self.window_sensitive(True)
> def rcppkglist_populated(self):
> + # remember those images loaded previously in this Hob session +
> for entry in self.loaded_images: +
> self.recipe_model.image_list_append(entry["image"], + "
> ".join(entry["recipes"]), + " ".join(entry["packages"]))
> + + if self.mach_changed: +
> self.update_rcppkglist_forgotten(self.configuration.selected_image) +
> else: + self.update_rcppkglist_remembered() + + def
> update_rcppkglist_idle(self, selected_image, selected_recipes,
> selected_packages): + self.update_recipe_model(selected_image,
> selected_recipes) + self.update_package_model(selected_packages)
> + self.window_sensitive(True) + + def
> update_rcppkglist_forgotten(self, selected_image = None): +
> self.window_sensitive(False) + + selected_recipes =
> selected_packages = [] + self.recipe_model.reset() +
> self.package_model.reset() + + selected_image_desc = "" +
> if selected_image: + image_path =
> self.recipe_model.pn_path[selected_image] + image_iter =
> self.recipe_model.get_iter(image_path) + selected_packages =
> self.recipe_model.get_value(image_iter,
> self.recipe_model.COL_INSTALL).split() + selected_image_desc
> = self.recipe_model.get_value(image_iter, self.recipe_model.COL_DESC) +
> + self.image_configuration_page.update_image_combo(self.recipe_model,
> selected_image, selected_image_desc) + +
> glib.idle_add(self.update_rcppkglist_idle, selected_image,
> selected_recipes, selected_packages) + + + def
> update_rcppkglist_remembered(self): +
> self.window_sensitive(False) +
> selected_image = self.configuration.selected_image
> selected_recipes = self.configuration.selected_recipes[:]
> selected_packages = self.configuration.selected_packages[:]
> - self.recipe_model.image_list_append(selected_image, -
> " ".join(selected_recipes), -
> " ".join(selected_packages)) +
> selected_image_desc = "" + if selected_image: +
> image_path = self.recipe_model.pn_path[selected_image] +
> image_iter = self.recipe_model.get_iter(image_path) +
> selected_image_desc = self.recipe_model.get_value(image_iter,
> self.recipe_model.COL_DESC)
>
> - self.image_configuration_page.update_image_combo(self.recipe_model,
> selected_image) - self.update_recipe_model(selected_image,
> selected_recipes) - self.update_package_model(selected_packages)
> + self.image_configuration_page.update_image_combo(self.recipe_model,
> selected_image, selected_image_desc) + +
> glib.idle_add(self.update_rcppkglist_idle, selected_image,
> selected_recipes, selected_packages)
>
> def recipelist_changed_cb(self, recipe_model):
> self.recipe_details_page.refresh_selection() @@ -905,7 +954,7
> @@ class Builder(gtk.Window): if not
> self.configuration.curr_mach:
> self.update_config_async()
> else:
> - self.populate_recipe_package_info_async() +
> self.populate_recipe_package_info_async(mach_changed = False)
>
> def deploy_image(self, image_name):
> if not image_name:
> diff --git a/bitbake/lib/bb/ui/crumbs/imageconfigurationpage.py
> b/bitbake/lib/bb/ui/crumbs/imageconfigurationpage.py index
> c2e0f5f..c63fc61 100644 ---
> a/bitbake/lib/bb/ui/crumbs/imageconfigurationpage.py +++
> b/bitbake/lib/bb/ui/crumbs/imageconfigurationpage.py @@ -21,7 +21,6 @@
> # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
>
> import gtk -import glib from bb.ui.crumbs.progressbar import
> HobProgressBar from bb.ui.crumbs.hobcolor import HobColors from
> bb.ui.crumbs.hobwidget import hic, HobImageButton, HobInfoButton,
> HobAltButton, HobButton
> @@ -259,7 +258,7 @@ class ImageConfigurationPage (HobPage):
>
> self.builder.configuration.curr_mach = combo_item
> # Do reparse recipes
> - self.builder.populate_recipe_package_info_async()
> + self.builder.populate_recipe_package_info_async(mach_changed
> = True)
>
> def update_machine_combo(self):
> all_machines = self.builder.parameters.all_machines
> @@ -280,32 +279,11 @@ class ImageConfigurationPage (HobPage):
> active += 1
> self.machine_combo.set_active(-1)
> - def image_combo_changed_idle_cb(self, selected_image,
> selected_recipes, selected_packages): -
> self.builder.update_recipe_model(selected_image, selected_recipes) -
> self.builder.update_package_model(selected_packages) -
> self.builder.window_sensitive(True) -
> def image_combo_changed_cb(self, combo):
> - self.builder.window_sensitive(False)
> selected_image = self.image_combo.get_active_text()
> if not selected_image:
> return
> - - selected_recipes = [] - - image_path =
> self.builder.recipe_model.pn_path[selected_image] - image_iter =
> self.builder.recipe_model.get_iter(image_path) -
> selected_packages = self.builder.recipe_model.get_value(image_iter,
> self.builder.recipe_model.COL_INSTALL).split() - - mark = ("<span
> %s>%s</span>\n") % (self.span_tag('small'),
> self.builder.recipe_model.get_value(image_iter,
> self.builder.recipe_model.COL_DESC)) -
> self.image_desc.set_markup(mark) - -
> self.builder.recipe_model.reset() -
> self.builder.package_model.reset() - -
> self.show_baseimg_selected() - -
> glib.idle_add(self.image_combo_changed_idle_cb, selected_image,
> selected_recipes, selected_packages) +
> self.builder.update_rcppkglist_forgotten(selected_image)
>
> def _image_combo_connect_signal(self):
> if not self.image_combo_id:
> @@ -316,7 +294,7 @@ class ImageConfigurationPage (HobPage):
> self.image_combo.disconnect(self.image_combo_id)
> self.image_combo_id = None
> - def update_image_combo(self, recipe_model, selected_image):
> + def update_image_combo(self, recipe_model, selected_image,
> selected_image_desc):
> # Update the image combo according to the images in the
> recipe_model # populate image combo filter =
> {RecipeListModel.COL_TYPE : ['image']}
> @@ -348,6 +326,8 @@ class ImageConfigurationPage (HobPage):
>
> if active != -1:
> self.show_baseimg_selected()
> + mark = "<span %s>%s</span>\n" % (self.span_tag('small'),
> selected_image_desc) + self.image_desc.set_markup(mark)
>
> self._image_combo_connect_signal()
More information about the bitbake-devel
mailing list