Skip to contentSkip to conversation

Hob fixes

PATCH In review Shane Wang 1 participant 4 messages Mar 26, 2012 – Mar 27, 2012

lore
Share & tools
lore

Shane Wang

author
#0 lore raw

cover Hob fixes

These are some fixes for Hob.

The following changes since commit db529f9f7d9015656c67c548975d918a1908de1a:

documentation/poky-ref-manual/development.xml: another env var clarification (2012-03-26 12:13:49 +0100)

are available in the git repository at:
git://git.pokylinux.org/poky-contrib shane/hob
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=shane/hob

Shane Wang (2):
Hob: Set one of deployable images or runnable images as the default
toggled item
Hob: show (package, task) pair which is being executed on the build
details screen

 bitbake/lib/bb/ui/crumbs/builddetailspage.py |   23 ++++++---
 bitbake/lib/bb/ui/crumbs/builder.py          |   12 +++-
 bitbake/lib/bb/ui/crumbs/imagedetailspage.py |   72 ++++++++++++++++---------
 bitbake/lib/bb/ui/crumbs/runningbuild.py     |    7 +++
 4 files changed, 78 insertions(+), 36 deletions(-)
Signature · 1 line
1.7.6
author
#1 lore raw

PATCH 1/2 Hob: Set one of deployable images or runnable images as the default toggled item

With this patch, even though there are a lot of images built out, a default image which is either deployable or runnable is toggled by default. So, for users, one more action to select an image before running qemu or deploying is not needed any more.

Note: If there are more than one runnable or deployable images (such as ext2, ext3, jffs2 and btrfs), only the first image is toggled by default for run-qemu or deployment. If the user wants to run or deploy others, he/she needs to toggle them manually.

[Yocto #2155]

---
 bitbake/lib/bb/ui/crumbs/imagedetailspage.py |   72 ++++++++++++++++---------
 1 files changed, 46 insertions(+), 26 deletions(-)
bitbake/lib/bb/ui/crumbs/imagedetailspage.py +46 -26
index 5a5ec3f..ce39ab2 100755
@@ -176,14 +176,30 @@ class ImageDetailsPage (HobPage):
             build_result = self.DetailBox(varlist=varlist, vallist=vallist, icon=icon, color=color)
             self.box_group_area.pack_start(build_result, expand=False, fill=False)
 
+        # create the buttons at the bottom first because the buttons are used in apply_button_per_image()
+        if build_succeeded:
+            buttonlist = ["Build new image", "Save as template", "Run image", "Deploy image"]
+        else: # get to this page from "My images"
+            buttonlist = ["Build new image", "Run image", "Deploy image"]
+        details_bottom_buttons = self.create_bottom_buttons(buttonlist)
+
         # Name
         self.image_store.clear()
+        default_toggled = False
+        default_image_size = 0
         for image_name in image_names:
             image_size = self._size_to_string(os.stat(os.path.join(image_addr, image_name)).st_size)
-            self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, False)
+            if not default_toggled:
+                default_toggled = (self.test_type_runnable(image_name) and self.test_mach_runnable(image_name)) \
+                    or self.test_deployable(image_name)
+                self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, default_toggled)
+                if default_toggled:
+                    default_image_size = image_size
+                self.apply_buttons_per_image(image_name)
+            else:
+                self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, False)
         image_table = HobViewTable(self.__columns__)
         image_table.set_model(self.image_store)
-        image_size = self._size_to_string(os.stat(os.path.join(image_addr, image_names[0])).st_size)
         image_table.connect("toggled", self.toggled_cb)
         view_files_button = gtk.LinkButton("file://%s" % image_addr, "View files")
         self.box_group_area.pack_start(self.DetailBox(widget=image_table, button=view_files_button), expand=True, fill=True)
@@ -221,7 +237,7 @@ class ImageDetailsPage (HobPage):
         varlist = ["Packages included: ", "Total image size: "]
         vallist = []
         vallist.append(pkg_num)
-        vallist.append(image_size)
+        vallist.append(default_image_size)
         if build_succeeded:
             edit_packages_button = HobAltButton("Edit packages")
             edit_packages_button.connect("clicked", self.edit_packages_button_clicked_cb)
@@ -230,11 +246,7 @@ class ImageDetailsPage (HobPage):
         self.package_detail = self.DetailBox(varlist=varlist, vallist=vallist, button=edit_packages_button)
         self.box_group_area.pack_start(self.package_detail, expand=False, fill=False)
 
-        if build_succeeded:
-            buttonlist = ["Build new image", "Save as template", "Run image", "Deploy image"]
-        else: # get to this page from "My images"
-            buttonlist = ["Build new image", "Run image", "Deploy image"]
-        details_bottom_buttons = self.create_bottom_buttons(buttonlist)
+        # pack the buttons at the bottom, at this time they are already created.
         self.box_group_area.pack_end(details_bottom_buttons, expand=False, fill=False)
 
         self.show_all()
@@ -242,41 +254,49 @@ class ImageDetailsPage (HobPage):
     def refresh_package_detail_box(self, image_size):
         self.package_detail.update_line_widgets("Total image size: ", image_size)
 
-    def toggled_cb(self, table, cell, path, columnid, tree):
-        model = tree.get_model()
-        if not model:
-            return
-        iter = model.get_iter_first()
-        while iter:
-            rowpath = model.get_path(iter)
-            model[rowpath][columnid] = False
-            iter = model.iter_next(iter)
-
-        model[path][columnid] = True
-        self.refresh_package_detail_box(model[path][1])
-
+    def test_type_runnable(self, image_name):
         type_runnable = False
-        mach_runnable = False
-        image_name = model[path][0]
         for t in self.builder.parameters.runnable_image_types:
             if image_name.endswith(t):
                 type_runnable = True
                 break
+        return type_runnable
 
+    def test_mach_runnable(self, image_name):
+        mach_runnable = False
         for t in self.builder.parameters.runnable_machine_patterns:
             if t in image_name:
                 mach_runnable = True
                 break
+        return mach_runnable
 
-        self.run_button.set_sensitive(type_runnable and mach_runnable)
-
+    def test_deployable(self, image_name):
         deployable = False
         for t in self.builder.parameters.deployable_image_types:
             if image_name.endswith(t):
                 deployable = True
                 break
+        return deployable
 
-        self.deploy_button.set_sensitive(deployable)
+    def apply_buttons_per_image(self, image_name):
+        self.run_button.set_sensitive(self.test_type_runnable(image_name) and self.test_mach_runnable(image_name))
+        self.deploy_button.set_sensitive(self.test_deployable(image_name))
+
+    def toggled_cb(self, table, cell, path, columnid, tree):
+        model = tree.get_model()
+        if not model:
+            return
+        iter = model.get_iter_first()
+        while iter:
+            rowpath = model.get_path(iter)
+            model[rowpath][columnid] = False
+            iter = model.iter_next(iter)
+
+        model[path][columnid] = True
+        self.refresh_package_detail_box(model[path][1])
+
+        image_name = model[path][0]
+        self.apply_buttons_per_image(image_name)
 
     def create_bottom_buttons(self, buttonlist):
         # Create the buttons at the bottom
Signature · 1 line
1.7.6
author
#2 lore raw

PATCH 2/2 Hob: show (package, task) pair which is being executed on the build details screen

This patch is still for bug 2098 to provide clear information about the task and the package in progress.

[Yocto #2098]

---
 bitbake/lib/bb/ui/crumbs/builddetailspage.py |   23 ++++++++++++++++-------
 bitbake/lib/bb/ui/crumbs/builder.py          |   12 +++++++++---
 bitbake/lib/bb/ui/crumbs/runningbuild.py     |    7 +++++++
 3 files changed, 32 insertions(+), 10 deletions(-)
bitbake/lib/bb/ui/crumbs/builddetailspage.py +16 -7
index c2f980f..1031906 100755
@@ -47,9 +47,12 @@ class BuildDetailsPage (HobPage):
         self.vbox = gtk.VBox(False, 12)
 
         self.progress_box = gtk.VBox(False, 12)
-        self.task_status = gtk.Label()
-        self.task_status.set_alignment(0.0, 0.5)
-        self.progress_box.pack_start(self.task_status, expand=False, fill=False)
+        self.rq_status = gtk.Label()
+        self.rq_status.set_alignment(0.0, 0.5)
+        self.pt_status = gtk.Label()
+        self.pt_status.set_alignment(0.0, 0.5)
+        self.progress_box.pack_start(self.rq_status, expand=False, fill=False)
+        self.progress_box.pack_start(self.pt_status, expand=False, fill=False)
         self.progress_hbox = gtk.HBox(False, 6)
         self.progress_box.pack_end(self.progress_hbox, expand=True, fill=True)
         self.progress_bar = HobProgressBar()
@@ -89,11 +92,17 @@ class BuildDetailsPage (HobPage):
         self.back_button.connect("clicked", self.back_button_clicked_cb)
         self.button_box.pack_start(self.back_button, expand=False, fill=False)
 
-    def update_build_status(self, tsk_msg):
-        self.task_status.set_markup(tsk_msg)
+    def update_runqueue_status(self, msg):
+        self.rq_status.set_markup(msg)
 
-    def reset_build_status(self):
-        self.task_status.set_markup("")
+    def update_package_task_status(self, msg):
+        self.pt_status.set_markup(msg)
+
+    def reset_runqueue_status(self):
+        self.rq_status.set_markup("")
+
+    def reset_package_task_status(self):
+        self.pt_status.set_markup("")
 
     def show_issues(self):
         self.num_of_issues += 1
bitbake/lib/bb/ui/crumbs/builder.py +9 -3
index f32a066..245a747 100755
@@ -218,6 +218,7 @@ class Builder(gtk.Window):
         self.handler.build.connect("build-succeeded",    self.handler_build_succeeded_cb)
         self.handler.build.connect("build-failed",       self.handler_build_failed_cb)
         self.handler.build.connect("task-started",       self.handler_task_started_cb)
+        self.handler.build.connect("task-executing",     self.handler_task_executing_cb)
         self.handler.build.connect("log-error",          self.handler_build_failure_cb)
         self.handler.connect("generating-data",          self.handler_generating_data_cb)
         self.handler.connect("data-generated",           self.handler_data_generated_cb)
@@ -543,7 +544,8 @@ class Builder(gtk.Window):
         elif self.current_step == self.PACKAGE_GENERATING:
             fraction = 0
         self.build_details_page.update_progress_bar("Build Started: ", fraction)
-        self.build_details_page.reset_build_status()
+        self.build_details_page.reset_runqueue_status()
+        self.build_details_page.reset_package_task_status()
         self.build_details_page.reset_issues()
 
     def build_succeeded(self):
@@ -611,8 +613,12 @@ class Builder(gtk.Window):
             elif message["eventname"] == "runQueueTaskStarted":
                 fraction = 0.2 + 0.8 * fraction
         self.build_details_page.update_progress_bar(title + ": ", fraction)
-        self.build_details_page.update_build_status(
-            "<span weight=\'bold\'>Running task %s of %s:</span> %s" % (message["current"], message["total"], message["task"]))
+        self.build_details_page.update_runqueue_status(
+            "<span weight=\'bold\'>Starting task %s of %s:</span> %s" % (message["current"], message["total"], message["task"]))
+
+    def handler_task_executing_cb(self, running_build, message):
+        self.build_details_page.update_package_task_status(
+            "<span weight=\'bold\'>Running task</span> %s <span weight=\'bold\'>on package</span> %s" % (message["task"], message["package"]))
 
     def handler_build_failure_cb(self, running_build):
         self.build_details_page.show_issues()
bitbake/lib/bb/ui/crumbs/runningbuild.py +7 -0
index 0f58e4e..e9d8070 100644
@@ -85,6 +85,9 @@ class RunningBuild (gobject.GObject):
           'task-started'    :  (gobject.SIGNAL_RUN_LAST,
                                 gobject.TYPE_NONE,
                                (gobject.TYPE_PYOBJECT,)),
+          'task-executing'  :  (gobject.SIGNAL_RUN_LAST,
+                                gobject.TYPE_NONE,
+                               (gobject.TYPE_PYOBJECT,)),
           'log-error'       :  (gobject.SIGNAL_RUN_LAST,
                                 gobject.TYPE_NONE,
                                ()),
@@ -208,6 +211,10 @@ class RunningBuild (gobject.GObject):
             # Save out the iter so that we can find it when we have a message
             # that we need to attach to a task.
             self.tasks_to_iter[(package, task)] = i
+            message = {}
+            message["task"] = task
+            message["package"] = package
+            self.emit("task-executing", message)
 
         elif isinstance(event, bb.build.TaskBase):
             current = self.tasks_to_iter[(package, task)]
Signature · 1 line
1.7.6
#3 lore raw

Re: [PATCH 2/2] Hob: show (package, task) pair which is being executed on the build details screen

I saw Josh had a patch pending to show (recipe, task) pair on http://git.yoctoproject.org/cgit/cgit.cgi/poky-contrib/commit/?h=josh/hob&id=1840c40a77038d3e181830d4aba84a59273eccd1, which hasn't been submitted. I am OK with his and skip my patch below.

--
Shane

Shane Wang wrote on 2012-03-26:

Quoted 126 lines

This patch is still for bug 2098 to provide clear information about the task and the package in progress.

[Yocto #2098]

---
 bitbake/lib/bb/ui/crumbs/builddetailspage.py |   23
 ++++++++++++++++------- bitbake/lib/bb/ui/crumbs/builder.py          | 
  12 +++++++++--- bitbake/lib/bb/ui/crumbs/runningbuild.py     |    7

+++++++ 3 files changed, 32 insertions(+), 10 deletions(-)

(quoted diff) +0 -0

b/bitbake/lib/bb/ui/crumbs/builddetailspage.py index c2f980f..1031906 100755 --- a/bitbake/lib/bb/ui/crumbs/builddetailspage.py +++ b/bitbake/lib/bb/ui/crumbs/builddetailspage.py @@ -47,9 +47,12 @@ class BuildDetailsPage (HobPage):
self.vbox = gtk.VBox(False, 12)

self.progress_box = gtk.VBox(False, 12)
- self.task_status = gtk.Label() -
self.task_status.set_alignment(0.0, 0.5) - self.progress_box.pack_start(self.task_status, expand=False, fill=False)
+ self.rq_status = gtk.Label() +
self.rq_status.set_alignment(0.0, 0.5) + self.pt_status =
gtk.Label() + self.pt_status.set_alignment(0.0, 0.5) +
self.progress_box.pack_start(self.rq_status, expand=False, fill=False) +
self.progress_box.pack_start(self.pt_status, expand=False,
fill=False)

         self.progress_hbox = gtk.HBox(False, 6)
         self.progress_box.pack_end(self.progress_hbox, expand=True,
         fill=True) self.progress_bar = HobProgressBar() @@ -89,11
         +92,17 @@ class BuildDetailsPage (HobPage):
         self.back_button.connect("clicked",
         self.back_button_clicked_cb)
         self.button_box.pack_start(self.back_button, expand=False,

fill=False)

bitbake/lib/bb/ui/crumbs/builddetailspage.py +10 -4
-    def update_build_status(self, tsk_msg):
-        self.task_status.set_markup(tsk_msg)
+    def update_runqueue_status(self, msg):
+        self.rq_status.set_markup(msg)
 
-    def reset_build_status(self):
-        self.task_status.set_markup("")
+    def update_package_task_status(self, msg):
+        self.pt_status.set_markup(msg)
+
+    def reset_runqueue_status(self):
+        self.rq_status.set_markup("")
+
+    def reset_package_task_status(self):
+        self.pt_status.set_markup("")
 
     def show_issues(self):
         self.num_of_issues += 1
(quoted diff) +0 -0

b/bitbake/lib/bb/ui/crumbs/builder.py index f32a066..245a747 100755 --- a/bitbake/lib/bb/ui/crumbs/builder.py +++ b/bitbake/lib/bb/ui/crumbs/builder.py @@ -218,6 +218,7 @@ class Builder(gtk.Window):
self.handler.build.connect("build-succeeded", self.handler_build_succeeded_cb) self.handler.build.connect("build-failed", self.handler_build_failed_cb) self.handler.build.connect("task-started",
self.handler_task_started_cb)
+ self.handler.build.connect("task-executing",
self.handler_task_executing_cb)
self.handler.build.connect("log-error", self.handler_build_failure_cb) self.handler.connect("generating-data", self.handler_generating_data_cb) self.handler.connect("data-generated",
self.handler_data_generated_cb)

bitbake/lib/bb/ui/crumbs/builder.py +2 -2
@@ -543,7 +544,8 @@ class Builder(gtk.Window):
         elif self.current_step == self.PACKAGE_GENERATING:
             fraction = 0
         self.build_details_page.update_progress_bar("Build Started: ",
 fraction)
-        self.build_details_page.reset_build_status()
+        self.build_details_page.reset_runqueue_status()
+        self.build_details_page.reset_package_task_status()
         self.build_details_page.reset_issues()
     def build_succeeded(self):
@@ -611,8 +613,12 @@ class Builder(gtk.Window):
             elif message["eventname"] == "runQueueTaskStarted":
                 fraction = 0.2 + 0.8 * fraction
         self.build_details_page.update_progress_bar(title + ": ", fraction)
-        self.build_details_page.update_build_status( -           

"<span weight=\'bold\'>Running task %s of %s:</span> %s" % (message["current"], message["total"], message["task"])) +
self.build_details_page.update_runqueue_status( + "<span
weight=\'bold\'>Starting task %s of %s:</span> %s" %
(message["current"], message["total"], message["task"])) + + def
handler_task_executing_cb(self, running_build, message): +
self.build_details_page.update_package_task_status( + "<span
weight=\'bold\'>Running task</span> %s <span weight=\'bold\'>on package</span> %s" % (message["task"], message["package"]))

def handler_build_failure_cb(self, running_build):
self.build_details_page.show_issues()

(quoted diff) +0 -0

b/bitbake/lib/bb/ui/crumbs/runningbuild.py index 0f58e4e..e9d8070 100644 --- a/bitbake/lib/bb/ui/crumbs/runningbuild.py +++ b/bitbake/lib/bb/ui/crumbs/runningbuild.py @@ -85,6 +85,9 @@ class RunningBuild (gobject.GObject):
'task-started' : (gobject.SIGNAL_RUN_LAST,
gobject.TYPE_NONE,
(gobject.TYPE_PYOBJECT,)),

bitbake/lib/bb/ui/crumbs/runningbuild.py +7 -0
+          'task-executing'  :  (gobject.SIGNAL_RUN_LAST,
+                                gobject.TYPE_NONE,
+                               (gobject.TYPE_PYOBJECT,)),
           'log-error'       :  (gobject.SIGNAL_RUN_LAST,
                                 gobject.TYPE_NONE,
                                ()),
@@ -208,6 +211,10 @@ class RunningBuild (gobject.GObject):
             # Save out the iter so that we can find it when we have a
             message # that we need to attach to a task.
             self.tasks_to_iter[(package, task)] = i
+            message = {}
+            message["task"] = task
+            message["package"] = package
+            self.emit("task-executing", message)
 
         elif isinstance(event, bb.build.TaskBase):
             current = self.tasks_to_iter[(package, task)]