--- iw/lvm_dialog_gui.py | 166 ++++++++++++++++++++++++++++++++------------------ 1 files changed, 107 insertions(+), 59 deletions(-) diff --git a/iw/lvm_dialog_gui.py b/iw/lvm_dialog_gui.py index c5ea131..b8b31dd 100644 --- a/iw/lvm_dialog_gui.py +++ b/iw/lvm_dialog_gui.py @@ -563,42 +563,25 @@ class VolumeGroupEditor: dialog.show_all() # Here ends the gtk crap - while 1: - rc = dialog.run() - if rc == 2: - dialog.destroy() - return - - actions = [] - luksdev = None - targetSize = None - migrate = None - format = None - newluks = None - - if templv.format.type == "luks": - format = self.luks[lv['name']] - else: - format = templv.format - - if not templv.exists: - fmt_class = newfstypeCombo.get_active_value() - else: - # existing lv - fmt_class = self.fsoptionsDict["fstypeCombo"].get_active_value() - - mountpoint = mountCombo.get_children()[0].get_text().strip() - + # Here start the lv_check_functions + # Before we dare to create an lv device we check for stuff. Gather all + # the checkfunctions in inner functions and put them in a list. This + # decouples the check functions from the creating device stuff. For + # all the checks True means pass and False means Fail. + def lv_check_validate_name(*args, **kwargs): # validate logical volume name - lvname = lvnameentry.get_text().strip() + lvname = kwargs['lvname'] if not templv.exists: err = sanityCheckLogicalVolumeName(lvname) if err: self.intf.messageWindow(_("Illegal Logical Volume Name"), err, custom_icon="error") - continue + return False + return True + def lv_checks_name_in_use(*args, **kwargs): # check that the name is not already in use + lvname = kwargs['lvname'] used = 0 for _lv in self.lvs.values(): if _lv == lv: @@ -609,16 +592,21 @@ class VolumeGroupEditor: break if used: - self.intf.messageWindow(_("Illegal logical volume name"), - _("The logical volume name \"%s\" is " - "already in use. Please pick " - "another.") % (lvname,), custom_icon="error") - continue + self.intf.messageWindow( + _("Illegal logical volume name"), + _("The logical volume name \"%s\" is already in use. " + "Please pick another.") % (lvname,), + custom_icon="error") + return False + return True + def lv_check_mount_point(*args, **kwargs): # test mount point # check in pending logical volume requests # these may not have been put in master list of requests # yet if we have not hit 'OK' for the volume group creation + fmt_class = kwargs['fmt_class'] + mountpoint = kwargs['mountpoint'] if fmt_class().mountable and mountpoint: used = 0 curmntpt = getattr(format, "mountpoint", None) @@ -638,47 +626,107 @@ class VolumeGroupEditor: break if used: - self.intf.messageWindow(_("Mount point in use"), - _("The mount point \"%s\" is in " - "use. Please pick another.") % - (mountpoint,), - custom_icon="error") - continue - + self.intf.messageWindow( + _("Mount point in use"), + _("The mount point \"%s\" is in use. Please pick " + "another.") % (mountpoint,), + custom_icon="error") + return False + return True + + def lv_check_size_fomrat_value(*args, **kwargs): # check that size specification is numeric and positive if not templv.exists: badsize = 0 try: - size = long(sizeEntry.get_text()) + size = long(kwargs['size']) except: badsize = 1 if badsize or size <= 0: - self.intf.messageWindow(_("Illegal size"), - _("The requested size as entered is " - "not a valid number greater " - "than 0."), custom_icon="error") - continue - else: - size = templv.size - + self.intf.messageWindow( + _("Illegal size"), + _("The requested size as entered is not a valid number " + "greater than 0."), + custom_icon="error") + return False + return True + + def lv_check_size_limits(*args, **kwargs): # check that size specification is within limits + size = long(kwargs['size']) pesize = int(self.peCombo.get_active_value()) / 1024.0 size = lvm.clampSize(size, pesize, roundup=True) maxlv = lvm.getMaxLVSize() if size > maxlv: - self.intf.messageWindow(_("Not enough space"), - _("The current requested size " - "(%10.2f MB) is larger than the maximum " - "logical volume size (%10.2f MB). " - "To increase this limit you can " - "create more Physical Volumes from " - "unpartitioned disk space and " - "add them to this Volume Group.") - %(size, maxlv), - custom_icon="error") + self.intf.messageWindow( + _("Not enough space"), + _("The current requested size (%10.2f MB) is larger " + "than the maximum logical volume size (%10.2f MB). " + "To increase this limit you can create more Physical " + "Volumes from unpartitioned disk space and add them " + "to this Volume Group.") %(size, maxlv), + custom_icon="error") + return False + return True + + + + # Note that the order in which these test are run matters. Specifically + # lv_check_size_fomrat_value needs to come before lv_check_size_limits. + lv_checks = [lv_check_validate_name, lv_checks_name_in_use, + lv_check_mount_point, lv_check_size_fomrat_value, + lv_check_size_limits] + # Here end the lv_check_functions + + while 1: + rc = dialog.run() + if rc == 2: + dialog.destroy() + return + + actions = [] + luksdev = None + targetSize = None + migrate = None + format = None + newluks = None + + if templv.format.type == "luks": + format = self.luks[lv['name']] + else: + format = templv.format + + if not templv.exists: + fmt_class = newfstypeCombo.get_active_value() + size = sizeEntry.get_text() # We check for validity later. + else: + # existing lv + fmt_class = self.fsoptionsDict["fstypeCombo"].get_active_value() + size = templv.size + + mountpoint = mountCombo.get_children()[0].get_text().strip() + lvname = lvnameentry.get_text().strip() + + # Call all the tests. + # If we find that something is wrong continue in the while loop. + # FIXME: handle the globals better. + kwargs = { "fmt_class" : fmt_class, + "mountpoint" : mountpoint, + "fomrmat" : format, + "lvname" : lvname, + "size" : size} + failed = False + for func in lv_checks: + if not func(*[], **kwargs): + falied = True + break + if failed: continue + # FIXME: handle the globals better. + size = long(size) + # Ok -- now we've done all the checks to validate the # user-specified parameters. Time to set up the device... origname = templv.lvname -- 1.6.0.6 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list