Hi Niall,

Thanks for reviewing (despite the conflict of interest in reviewing
code you contributed to ;) ).

Responses below.


On 06/10/11 16:24, Niall Power wrote:
[caiman-discuss] Code Review request: GUI Install -> CUD
Hi Dermot, I've reviewed the majority of the code but I ran out of time to get everything done. The things I haven't covered are the timezone related files (I reivewed map.py briefly), user_support.py, the manifest file and the glade/gtkbuilder XML files. IMO, since the XML builder files are autogenerated from glade-3 I think it's much more important that they be visually verified in the running app rather than reviewed line by line in a code review. Anyway, here are my comments.... Thanks, Niall <http://opensolaris.org/jive/thread.jspa?threadID=139576&tstart=0>


Hi Dermot,
I've reviewed the majority of the code but I ran out of time to get everything covered. The things I haven't covered are timezone files (reviewed map.py briefly), user_support.py, the manifest file and the glade/gtkbuilder XML. IMO the XML builder files are not really worth reviewing in much detail since they auto-generated - better to visually inspect the end result in the running app. Anyway here are my comments.

Overall it looks excellent... nice job!

Thanks!

usr/src/cmd/gui-aux/Makefile:
57 ROOTIMGURLMAP= $(IMGURLMAP:%=$(ROOTUSRSHARE)/gui-install/installmessages/%)

Should $(ROOTUSRSHARE)/gui-install be substituted with $(ROOTGUIINST) as defined in Makefile.master?

done

/usr/src/cmd/gui-install/pixmaps/Makefile:
  31         diskupdate-selected.png \
  32         diskupdate-unselected.png \
...
  37         sun_curve_hacky2.png \
  38         sun_logo.png \

I don't think we use or need these images any more and are artifacts from Dwarf Caiman

agreed. also, sun_logo was referenced in gui-install.xml, so that bit needs to be
deleted also.

usr/src/cmd/gui-install/src/confirm_screen.py:
  80         if viewport is not None:
  81             bg_color = gtk.gdk.Color("white")
  82             viewport.modify_bg(gtk.STATE_NORMAL, bg_color)

Can we use the definition of COLOR_WHITE from solaris_install.gui_install.gui_install_common here?

done

  161         if profile is None:
 162             return

This seems to handle a failure silently and result in a blank summary screen being displayed to the user.
Is this really the desired result or should this be more fatal?
agreed.  replaced return with:
   raise RuntimeError("INTERNAL ERROR: Unable to retrieve "
       "InstallProfile from DataObjectCache")

  233     def licensechecked_callback(self, widget, data=None):
 234         '''callback for "clicked" event on release notes button'''

The docstring should refer to the license check button rather than the release notes button.

fixed

usr/src/cmd/gui-install/src/disk_screen.py:
36-57: Alphabetize imports

fixed

  82     BUSY_MARKUP = "<span font_desc=\"Bold\">%s</span>" % BUSY_TEXT
 743             markup = "<span font_desc=\"Bold\">%s</span>" % \
You can replace the outer "" quotes with single quotes '' which allows you to then remove the leading '\'
escape character from the markup eg.
         BUSY_MARKUP = '<span font_desc="Bold">%s</span>' % BUSY_TEXT

done - also fixed similar in base_screen.py and fdisk_panel.py

  267         for slice in all_slices:
 268             if slice.in_zpool == ROOT_POOL:
 269                 solaris_slice = slice

"slice" is a python reserved word. Can you change too "slc" instead (like TD/TI uses)?

done

usr/src/cmd/gui-install/src/failure_screen.py
  52         self.activate_stage_label("finishstaglabel")
This looks like it would raise a KeyError from activate_stage_label()..
"finishstagelabel" should be -> "finishstagelabel"

It won't raise an error, as it doesn't directly access the dictionary with
that string as the key - it presumably just doesn't work correctly.

Anyway: fixed.

usr/src/cmd/gui-install/src/fdisk_panel.py:
36-41 Alpahabetize imports

done

  397         try:
 398             new_val = float(new_text)
 399         except ValueError:
 400             return

This is my fault but I think instead of using float() directly here we should be using locale.atof() to account
for locale specific decimal place characters ("." "," etc.)

Leaving for Niall...

just kidding: used locale.atof, as per its use in previous
method, size_insert_text()

  406     def size_focus_in(self, widget, event, index):
 407         ''' Signal handler for when the partition size SpinButtons
 408             receive a "focus-in-event" signal.
 409         '''
 410
 411         pass
 412
 413     def size_focus_out(self, widget, event, index):
 414         ''' Signal handler for when the partition size SpinButtons
 415             receive a "focus-out-event" signal.
 416         '''
 417
 418         pass

Why are these callbacks defined if they don't do anything? What is their purpose?

I think similar methods must have been present in the old code and
I wrote those stubs, intending to add functionality as needed.  However,
I found that no special handling was needed.

I have removed them now.

  509         self._add_footer_to_table(index)
 510         index += 1
 511
 512         self._fdisktable.show()
 513

It is unnecessary to increment 'index' at line 510 because it is no longer referenced in the method
after line 509

ok - removed

  986                 # logicals run from ID 5 to 36, inc.
 987                 max_logicals = 36 - 5 + 1

I think max_logicals could be better expressed by using solaris_install.target.libadm.MAX_EXT_PARTS:
MAX_EXT_PARTS = 32  # number of logical partitions

agreed - changed as suggested

1041             ui_partition.compute_mix_size()
s/mix/min

fixed

usr/src/cmd/gui-install/src/finish_screen.py:
  29 import logging
  30 import shutil
  31 import os

Alphabetize imports

done

  111         '''method from the super that deals with the update
 112            button being pressed'''

Can you move the closing docstring ''' comment delimiter to a new line?

done - also reworded text

usr/src/cmd/gui-install/src/gui_install_common.py:

other_instance_is_running():

This is a general, high level comment about the PIDFILE mechanism and not a critical issue IMO, but
did you consider using a lock file mechanism using fcntl.flock() instead?

I did not.  Would that be more robust?  This method
seems to work pretty well - I've tested it quite a bit.

usr/src/cmd/gui-install/src/help_dialog.py:
  88     def display(self, screen):
  89         '''show the helpdialog and update the help text'''
  90         self.helpdialog.show_all()
  91
  92         window = self.helpdialog.window
  93         if window:
  94             window.set_functions(gtk.gdk.FUNC_CLOSE)

Is it necessary to keep setting the window functions property? I would expect it only needs to set once when the window is created in __init__.

agree - fixed as suggested

map.py:330:    def unset_hoverd_timezone(self):
timezone.py:292:            self.map.unset_hoverd_timezone()
s/hoverd/hovered

done

usr/src/cmd/gui-install/src/progress_screen.py:
 240                     if fraction >= 1.0:
 241                         self.set_progress_fraction(1.0)
 242                         break
 243                     self.installationinfolabel.set_label(msg)
 244                     self.set_progress_fraction(fraction)
Can we move the UI updating back into the main thread (like we did for target discovery completion) instead of this separate thread? Updating the UI from outside the main gtk event loop thread has caused problems in the past. In particular accessiblity technologies don't seem to notice updates happening outside of the main event loop thread. If we copy the approach used in the td_completion case, we could set up a main loop timer
event in setup_progress_handling() after starting the server thread.

 335     def install_callback(self, status, failed_cps):
Same as above. Updates the UI from outside the main event loop.

Yes, I agree.  There was a strange, intermittent hang on the Disk
Screen that went away when you fixed it as above, so I think it's
good practice to do this on the progress screen, even if there haven't
been any reported problems yet.

will fix as you suggest.

usr/src/cmd/gui-install/src/screen_manager.py:

General - There is a lot of reference to "glade" which is now defunct and replaced by gtkbuilder. We should probably stop referring to glade and substitute with "gtkbuilder" or "builder" more consistently.

As I understand it, it's *lib*glade that is deprecated, the Glade application
is alive and well?  And the UI was generated, and will continue to be
generated, using Glade, right?

  140             "on_upgradebutton_clicked": self.no_op,
Upgrade has been dropped so we should remove items associated with it from the gtkbuilder XML instead of giving them no-op signal handlers. We can do this later if pressed for time though - won't break anything:)

will fix later ;)

  214         bgcolor = gtk.gdk.Color("white")
 215         viewport.modify_bg(gtk.STATE_NORMAL, bgcolor)

Why not use the WHITE definition from gui_install_common?

done

/usr/src/cmd/gui-install/src/target_utils.py:

this entire module has not been removed and this functionality
is now provided by the Disk class.


39-41 Alphabetize imports

  81     if primary:
  82         lowest_name = 1
  83         highest_name = 4
  84     else:
  85         lowest_name = 5
  86         highest_name = 36
87 Please use the const definitions FD_NUMPART and MAX_EXT_PARTS from solaris_install.target.libadm

163 # A couple of quick cosmetic changes to the value: 164 # - just take the first word, eg fibre channel -> fibre 165 # - use uppercase (prefer ATA, SCSI to ata, scsi, etc)
 166                     ctrl_type = ctrl_type.split()[0]
 167                     ctrl_type = ctrl_type.upper()

Looks a bit dodgy just randomly word chopping strings up and hoping for the best :-)

The possible values here are from the list defined in
install_target/libdiskmgt/const.py in CTYPE_*
I did check that this conversion would produce suitable
values!

usr/src/cmd/gui-install/src/textview_dialog.py:
  55     def display(self):
  56         '''show the helpdialog and update the help text'''
  57
  58         self.textviewdialog.show_all()
  59         self.quitapp.append(self.textviewdialog)
  60
Showing the textviewdialog should be done at the end rather than the beginning. If you show it first, then modify all it's properties and fill it with content then the user will probably observe flicker.

fixed as suggested

usr/src/cmd/gui-install/src/user_screen.py:
32-37 Alphabetize imports

done

77-92 self.password = user_password = \
  78             self.builder.get_object("userpassword1entry")
  etc.
Why are you creating 2 references to the same object/widget for password, confirm_password and host_name?

agreed - removed variables: user_password, confirm_password, host_name

  103         toplevel.show_all()
 104         # hide the various error widgets
105 for widget_name in ["loginnameinfoimage", "userpasswordinfoimage", 106 "userpasswordinfolabel", "hostnameinfoimage"]:
 107             widget = self.builder.get_object(widget_name)
 108             widget.hide_all()
I'd move toplevel.show_all() down to the bottom of this block for the same reasons mentioned just above,
 it can cause flicker that the user might see.

That won't work.  What's happening here is it shows everything,
then selectively hides the error images within toplevel.
If show_all is moved to the bottom, it will un-do the
hiding and show the error images.

  276         '''valitdates the hostname'''
s/valitdates/validates


- dermot

_______________________________________________
caiman-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/caiman-discuss

Reply via email to