--- storage/devicetree.py | 35 ++++++++++++++++++++++++++++++++++- storage/errors.py | 3 +++ storage/formats/fs.py | 4 ++-- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/storage/devicetree.py b/storage/devicetree.py index 8c41c50..1323008 100644 --- a/storage/devicetree.py +++ b/storage/devicetree.py @@ -164,6 +164,28 @@ def questionReinitILVM(intf=None, pv_names=None, lv_name=None, vg_name=None): return retVal +def questionClobberFS(intf=None, name=None): + retVal = False + if not intf or not name: + pass + else: + rc = intf.messageWindow(_("Warning"), + _("Error while processing File System.\n" + "There is inconsistent file system metadata on %s. You can " + "erase all file system metadata or ignore it, preserving its " + "contents." % name), + type="custom", + custom_buttons = [ _("_Ignore"), + _("_Erase Metadata") ], + custom_icon="question") + if rc == 0: + pass + else: + retVal = True # This means clobber. + + return retVal + + class DeviceTree(object): """ A quasi-tree that represents the devices in the system. @@ -1462,7 +1484,18 @@ class DeviceTree(object): if apple.minSize <= device.size <= apple.maxSize: args[0] = "appleboot" - device.format = formats.getFormat(*args, **kwargs) + try: + device.format = formats.getFormat(*args, **kwargs) + except FSMountError as e: + if questionClobberFS(self.intf, device.name): + device.format = formats.getFormat(*[None], **kwargs) + device.format.destroy() + else: + device.format = formats.getFormat(*[None], **kwargs) + if isinstance(device, PartitionDevice): + self.protectedPartitions.append(device.name) + else: + self.addIgnoredDisk(device.name) # # now do any special handling required for the device's format diff --git a/storage/errors.py b/storage/errors.py index a23b572..410779b 100644 --- a/storage/errors.py +++ b/storage/errors.py @@ -73,6 +73,9 @@ class FSResizeError(FSError): class FSMigrateError(FSError): pass +class FSMountError(FSError): + pass + class LUKSError(DeviceFormatError): pass diff --git a/storage/formats/fs.py b/storage/formats/fs.py index 0e155eb..105e530 100644 --- a/storage/formats/fs.py +++ b/storage/formats/fs.py @@ -481,10 +481,10 @@ class FS(DeviceFormat): options=options, bindMount=isinstance(self, BindFS)) except Exception as e: - raise FSError("mount failed: %s" % e) + raise FSMountError("mount failed: %s" % e) if rc: - raise FSError("mount failed: %s" % rc) + raise FSMountError("mount failed: %s" % rc) if flags.selinux: ret = isys.resetFileContext(mountpoint) -- 1.6.0.6 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list