Patchwork [bitbake-devel,4/6] ui/crumbs/hig.py: check deploy process return value

login
register
mail settings
Submitter Kang Kai
Date June 6, 2012, 9:52 a.m.
Message ID <bda43415c8822a6a47f955a7df6b382db29f7b33.1338976258.git.kai.kang@windriver.com>
Download mbox | patch
Permalink /patch/29277/
State New
Headers show

Comments

Kang Kai - June 6, 2012, 9:52 a.m.
Update function response_cb of DeployImageDialog to get deploy process
return value. According the return value tell user that deploy image
successfully or not.

Signed-off-by: Kang Kai <kai.kang@windriver.com>
---
 bitbake/lib/bb/ui/crumbs/hig.py |   32 +++++++++++++++++++++++++++++---
 1 files changed, 29 insertions(+), 3 deletions(-)
Darren Hart - June 8, 2012, 2:56 p.m.
Hi Kang,

A couple comments below...

On 06/06/2012 02:52 AM, Kang Kai wrote:
> Update function response_cb of DeployImageDialog to get deploy process
> return value. According the return value tell user that deploy image
> successfully or not.
> 
> Signed-off-by: Kang Kai <kai.kang@windriver.com>
> ---
>  bitbake/lib/bb/ui/crumbs/hig.py |   32 +++++++++++++++++++++++++++++---
>  1 files changed, 29 insertions(+), 3 deletions(-)
> 
> diff --git a/bitbake/lib/bb/ui/crumbs/hig.py b/bitbake/lib/bb/ui/crumbs/hig.py
> index cf73145..97a3b22 100644
> --- a/bitbake/lib/bb/ui/crumbs/hig.py
> +++ b/bitbake/lib/bb/ui/crumbs/hig.py
> @@ -827,12 +827,38 @@ class DeployImageDialog (CrumbsDialog):
>  
>      def response_cb(self, dialog, response_id):
>          if response_id == gtk.RESPONSE_YES:
> +            lbl = ''
>              combo_item = self.usb_combo.get_active_text()
> -            if combo_item and combo_item != self.__dummy_usb__:
> +            if combo_item and combo_item != self.__dummy_usb__ and self.image_path:
>                  cmdline = bb.ui.crumbs.utils.which_terminal()
>                  if cmdline:
> -                    cmdline += "\"sudo dd if=" + self.image_path + " of=" + combo_item + "\""
> -                    bb.process.Popen(shlex.split(cmdline))

This should be subprocess.call()

http://docs.python.org/library/subprocess.html

> +                    tmpname = os.tmpnam()
> +                    cmdline += "\"sudo dd if=" + self.image_path + \
> +                                " of=" + combo_item + "; echo $? > " + tmpname + "\""
> +                    deploy_process = bb.process.Popen(shlex.split(cmdline))
> +                    deploy_process.wait()
> +
> +                    # if file tmpname not exists, that means there is something wrong with xterm
> +                    # user can get the error message from xterm so no more warning need.
> +                    if os.path.exists(tmpname):
> +                        tmpfile = open(tmpname)
> +                        if int(tmpfile.readline().strip()) == 0:
> +                            lbl = "<b>Deploy image successfully</b>"

"<b>Deployed image successfully.</b>"

> +                        else:
> +                            lbl = "<b>Deploy image failed</b>\nPlease try again."

"<b>Failed to deploy image.</b>"

As to "Please try again." Why would the user have any expectation of a
different result? Is there something we can tell them about the reason
for the failure?

> +                        tmpfile.close()
> +                        os.remove(tmpname)
> +            else:
> +                if not self.image_path:
> +                    lbl = "<b>No selection made</b>\nYou have not selected an image to deploy"

Missing periods.

> +                else:
> +                    lbl = "<b>No selection made</b>\nYou have not selected USB device"

Missing periods. Missing article:

"<b>No selection made.</b>\nYou have not selected a USB device."


> +            if len(lbl):
> +                crumbs_dialog = CrumbsMessageDialog(self, lbl, gtk.STOCK_DIALOG_INFO)
> +                button = crumbs_dialog.add_button("Close", gtk.RESPONSE_OK)
> +                HobButton.style_button(button)
> +                crumbs_dialog.run()
> +                crumbs_dialog.destroy()
>  
>      def update_progress_bar(self, title, fraction, status=None):
>          self.progress_bar.update(fraction)

Patch

diff --git a/bitbake/lib/bb/ui/crumbs/hig.py b/bitbake/lib/bb/ui/crumbs/hig.py
index cf73145..97a3b22 100644
--- a/bitbake/lib/bb/ui/crumbs/hig.py
+++ b/bitbake/lib/bb/ui/crumbs/hig.py
@@ -827,12 +827,38 @@  class DeployImageDialog (CrumbsDialog):
 
     def response_cb(self, dialog, response_id):
         if response_id == gtk.RESPONSE_YES:
+            lbl = ''
             combo_item = self.usb_combo.get_active_text()
-            if combo_item and combo_item != self.__dummy_usb__:
+            if combo_item and combo_item != self.__dummy_usb__ and self.image_path:
                 cmdline = bb.ui.crumbs.utils.which_terminal()
                 if cmdline:
-                    cmdline += "\"sudo dd if=" + self.image_path + " of=" + combo_item + "\""
-                    bb.process.Popen(shlex.split(cmdline))
+                    tmpname = os.tmpnam()
+                    cmdline += "\"sudo dd if=" + self.image_path + \
+                                " of=" + combo_item + "; echo $? > " + tmpname + "\""
+                    deploy_process = bb.process.Popen(shlex.split(cmdline))
+                    deploy_process.wait()
+
+                    # if file tmpname not exists, that means there is something wrong with xterm
+                    # user can get the error message from xterm so no more warning need.
+                    if os.path.exists(tmpname):
+                        tmpfile = open(tmpname)
+                        if int(tmpfile.readline().strip()) == 0:
+                            lbl = "<b>Deploy image successfully</b>"
+                        else:
+                            lbl = "<b>Deploy image failed</b>\nPlease try again."
+                        tmpfile.close()
+                        os.remove(tmpname)
+            else:
+                if not self.image_path:
+                    lbl = "<b>No selection made</b>\nYou have not selected an image to deploy"
+                else:
+                    lbl = "<b>No selection made</b>\nYou have not selected USB device"
+            if len(lbl):
+                crumbs_dialog = CrumbsMessageDialog(self, lbl, gtk.STOCK_DIALOG_INFO)
+                button = crumbs_dialog.add_button("Close", gtk.RESPONSE_OK)
+                HobButton.style_button(button)
+                crumbs_dialog.run()
+                crumbs_dialog.destroy()
 
     def update_progress_bar(self, title, fraction, status=None):
         self.progress_bar.update(fraction)