[PATCH] Implement the format disk question as a callback.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



---
 storage/devices.py    |   23 +++++++++++++--------
 storage/devicetree.py |   50 ++++++++++++++++++++++++------------------------
 storage/errors.py     |    3 ++
 3 files changed, 42 insertions(+), 34 deletions(-)

diff --git a/storage/devices.py b/storage/devices.py
index 84cfe1b..946f357 100644
--- a/storage/devices.py
+++ b/storage/devices.py
@@ -101,6 +101,7 @@ from devicelibs import lvm
 #import block
 from devicelibs import dm
 import parted
+import platform
 
 from errors import *
 from iutil import log_method_call, notify_kernel, numeric_type
@@ -568,8 +569,8 @@ class DiskDevice(StorageDevice):
     _type = "disk"
 
     def __init__(self, device, format=None,
-                 size=None, major=None, minor=None,
-                 sysfsPath='', parents=None, init = False, labeltype = None):
+                 size=None, major=None, minor=None, sysfsPath='', \
+                 parents=None, initcb=None, kwargsinitcb=None):
         """ Create a DiskDevice instance.
 
             Arguments:
@@ -586,8 +587,8 @@ class DiskDevice(StorageDevice):
                 parents -- a list of required Device instances
                 removable -- whether or not this is a removable device
 
-                init -- initialize label on this drive
-                labeltype -- type of the label to use during initialization
+                initcb -- the call back to be used when initiating disk.
+                kwargs -- arguments for the intcb.  If no args then = {}
 
 
             DiskDevices always exist.
@@ -603,12 +604,16 @@ class DiskDevice(StorageDevice):
         if not self.partedDevice:
             raise DeviceError("cannot find parted device instance")
         log.debug("creating parted Disk: %s" % self.path)
-        if init:
-            self.partedDisk = parted.freshDisk(device=self.partedDevice, ty = labeltype)
-        else:
+        try:
             self.partedDisk = parted.Disk(device=self.partedDevice)
-        if not self.partedDisk:
-            raise DeviceError("failed to create parted Disk")
+        except:
+            # if we have a cb function use it. else an error.
+            if initcb is not None and kwargsinitcb is not None and \
+                    initcb(**kwargsinitcb):
+                self.partedDisk = parted.freshDisk(device=self.partedDevice, \
+                        ty = platform.getPlatform(None).diskType)
+            else:
+                raise DeviceUserDeniedFormatError("User prefered to not format.")
 
         self.probe()
 
diff --git a/storage/devicetree.py b/storage/devicetree.py
index 3494d5a..374ef46 100644
--- a/storage/devicetree.py
+++ b/storage/devicetree.py
@@ -27,8 +27,6 @@ from devices import *
 from deviceaction import *
 import formats
 from udev import *
-import parted
-import platform
 
 import gettext
 _ = lambda x: gettext.ldgettext("anaconda", x)
@@ -116,7 +114,26 @@ def getLUKSPassphrase(intf, device, globalPassphrase):
 
     return (passphrase, isglobal)
 
- 
+# Don't really know where to put this.
+def questionInitializeDisk(intf=None, name=None):
+    retVal = False # The less destructive default
+    if not intf or not name:
+        pass
+    else:
+        rc = intf.messageWindow(_("Warning"),
+                _("Error processing drive %s.\n"
+                  "Maybe it needs to be reinitialized."
+                  "YOU WILL LOSE ALL DATA ON THIS DRIVE!") % (name,),
+                type="custom",
+                custom_buttons = [ _("_Ignore drive"),
+                                   _("_Re-initialize drive") ],
+                custom_icon="question")
+        if rc == 0:
+            pass
+        else:
+            retVal = True
+    return retVal
+
 class DeviceTree(object):
     """ A quasi-tree that represents the devices in the system.
 
@@ -749,29 +766,12 @@ class DeviceTree(object):
                     device = DiskDevice(name,
                                     major=udev_device_get_major(info),
                                     minor=udev_device_get_minor(info),
-                                    sysfsPath=sysfs_path)
+                                    sysfsPath=sysfs_path,
+                                    initcb=questionInitializeDisk,
+                                    kwargsinitcb={"intf":self.intf, "name":name})
                     self._addDevice(device)
-                except parted.IOException: #drive not initialized?
-                    if not self.intf:
-                        self.ignoredDisks.append(name)
-                    else:
-                        rc = self.intf.messageWindow(_("Warning"),
-                                _("Error processing drive %s.\n"
-                                  "Maybe it needs to be reinitialized."
-                                  "YOU WILL LOSE ALL DATA ON THIS DRIVE!") % (name,),
-                                type="custom",
-                                custom_buttons = [ _("_Ignore drive"),
-                                                   _("_Re-initialize drive") ],
-                                custom_icon="question")
-                        if rc == 0:
-                            self.ignoredDisks.append(name)
-                        else:
-                            device = DiskDevice(name,
-                                            major=udev_device_get_major(info),
-                                            minor=udev_device_get_minor(info),
-                                            sysfsPath=sysfs_path, init = True,
-                                            labeltype = platform.getPlatform(None).diskType)
-                            self._addDevice(device)
+                except DeviceUserDeniedFormatError: #drive not initialized?
+                    self.ignoredDisks.append(name)
         elif udev_device_is_partition(info):
             log.debug("%s is a partition" % name)
             device = self.getDeviceByName(name)
diff --git a/storage/errors.py b/storage/errors.py
index 692e0ac..8fb57b1 100644
--- a/storage/errors.py
+++ b/storage/errors.py
@@ -21,6 +21,9 @@ class DeviceTeardownError(DeviceError):
 class DeviceResizeError(DeviceError):
     pass
 
+class DeviceUserDeniedFormatError(DeviceError):
+    pass
+
 # DeviceFormat
 class DeviceFormatError(Exception):
     pass
-- 
1.6.0.6

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux