Re: [PATCH 3/5] Fix up device dialogs' handling of preexisting formatting.

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

 



Ack,

Note I think this fixes bug 527444 .

Regards,

Hans


On 03/10/2010 01:18 AM, David Lehman wrote:
Fixes display of original fstype, original fslabel. Also fixes
handling for when users initially specify that a device be re-
formatted, then later change it back to use what's already there.
---
  iw/lvm_dialog_gui.py           |  105 +++++++++++++++++++++++++++++----------
  iw/partition_dialog_gui.py     |   58 +++++++++++++++++-----
  iw/partition_ui_helpers_gui.py |    2 +
  iw/raid_dialog_gui.py          |   52 ++++++++++++++++----
  4 files changed, 169 insertions(+), 48 deletions(-)

diff --git a/iw/lvm_dialog_gui.py b/iw/lvm_dialog_gui.py
index 7a98d99..6ea54ab 100644
--- a/iw/lvm_dialog_gui.py
+++ b/iw/lvm_dialog_gui.py
@@ -46,11 +46,12 @@ class VolumeGroupEditor:
          vg = LVMVolumeGroupDevice('tmp-%s' % self.vg.name,
                                    parents=pvs, peSize=self.peSize)
          for lv in self.lvs.values():
-            LVMLogicalVolumeDevice(lv['name'], vg, format=lv['format'],
+            _l = LVMLogicalVolumeDevice(lv['name'], vg, format=lv['format'],
                                     size=lv['size'], exists=lv['exists'],
                                     stripes=lv['stripes'],
                                     logSize=lv['logSize'],
                                     snapshotSpace=lv['snapshotSpace'])
+            _l.originalFormat = lv['originalFormat']

          return vg

@@ -405,23 +406,31 @@ class VolumeGroupEditor:
          # appear.  Note that if the format is swap or Raiddevice, the mount
          # point is none-sense.
          templuks = None
-        usedev = None
-        for _lv in tempvg.lvs:
-            if _lv.lvname == lv['name']:
-                templv = _lv
-                usedev = templv
-                if templv.format.type == "luks":
-                    templuks = LUKSDevice("luks-%s" % lv['name'],
-                                          parents=[templv],
-                                          format=self.luks[lv['name']],
-                                          exists=templv.format.exists)
-                    usedev = templuks
-                break
+        templv = self.getLVByName(lv['name'], vg=tempvg)
+        usedev = templv
+        if templv.format.type == "luks":
+            templuks = LUKSDevice("luks-%s" % lv['name'],
+                                  parents=[templv],
+                                  format=self.luks[lv['name']],
+                                  exists=templv.format.exists)
+            usedev = templuks

          if lv['format'].type == "luks":
              format = self.luks[lv['name']]
          else:
              format = lv['format']
+
+        if lv['exists']:
+            _origlv = self.getLVByName(lv['name'])
+            originalFormat = _origlv.originalFormat
+            if originalFormat.type == "luks":
+                try:
+                    _origluks = self.storage.devicetree.getChildren(_origlv)[0]
+                except IndexError:
+                    pass
+                else:
+                    originalFormat = _origluks.originalFormat
+
          mountCombo = createMountPointCombo(usedev, excludeMountPoints=["/boot"])


@@ -467,16 +476,13 @@ class VolumeGroupEditor:
          else:
              # File system type lable&  combo
              newfstypelabel = createAlignedLabel(_("Original File System Type:"))
-            if format.type:
-                newfstypeCombo = gtk.Label(format.name)
-            else:
-                newfstypeCombo = gtk.Label(_("Unknown"))
+            newfstypeCombo = gtk.Label(originalFormat.name)

              # File system label label&  combo
-            if getattr(format, "label", None):
+            if getattr(originalFormat, "label", None):
                  newfslabellabel = createAlignedLabel(_("Original File System "
                                                        "Label:"))
-                newfslableCombo = gtk.Label(format.label)
+                newfslableCombo = gtk.Label(originalFormat.label)

              # Logical Volume name label&  entry
              lvnamelabel = createAlignedLabel(_("Logical Volume Name:"))
@@ -737,7 +743,12 @@ class VolumeGroupEditor:
                          format = templv.format

                      templv.format = format
-                elif format.mountable:
+                elif self.fsoptionsDict.has_key("formatcb") and \
+                     not self.fsoptionsDict["formatcb"].get_active():
+                    templv.format = templv.originalFormat
+                    format = templv.format
+
+                if format.mountable:
                      format.mountpoint = mountpoint

                  if self.fsoptionsDict.has_key("migratecb") and \
@@ -770,6 +781,7 @@ class VolumeGroupEditor:
          self.lvs[templv.lvname] = {'name': templv.lvname,
                                     'size': templv.size,
                                     'format': templv.format,
+                                   'originalFormat': templv.originalFormat,
                                     'stripes': templv.stripes,
                                     'logSize': templv.logSize,
                                     'snapshotSpace': templv.snapshotSpace,
@@ -817,9 +829,11 @@ class VolumeGroupEditor:

          tempvg = self.getTempVG()
          name = self.storage.createSuggestedLVName(tempvg)
+        format = getFormat(self.storage.defaultFSType)
          self.lvs[name] = {'name': name,
                            'size': free,
-                          'format': getFormat(self.storage.defaultFSType),
+                          'format': format,
+                          'originalFormat': format,
                            'stripes': 1,
                            'logSize': 0,
                            'snapshotSpace': 0,
@@ -1073,12 +1087,7 @@ class VolumeGroupEditor:
                  log.debug("lv %s already exists" % lv.lvname)
                  # this lv is preexisting. check for resize and reformat.
                  # first, get the real/original lv
-                origlv = None
-                for _lv in self.vg.lvs:
-                    if _lv.lvname == lv.lvname:
-                        origlv = _lv
-                        break
-
+                origlv = self.getLVByName(lv.lvname)
                  if lv.resizable and lv.targetSize != origlv.size:
                      actions.append(ActionResizeDevice(origlv, lv.targetSize))

@@ -1100,6 +1109,39 @@ class VolumeGroupEditor:
                          usedev = origlv
                          format = lv.format

+                    # no formatting action requested, meaning we should
+                    # cancel all format create/destroy actions
+                    if format == usedev.originalFormat:
+                        devicetree = self.storage.devicetree
+                        cancel = []
+                        if origlv.originalFormat.type == "luks":
+                            path = "/dev/mapper/luks-%s" % origlv.originalFormat.uuid
+                            cancel.extend(devicetree.findActions(path=path))
+
+                        cancel.extend(devicetree.findActions(type="create",
+                                                             object="format",
+                                                             devid=origlv.id))
+                        cancel.extend(devicetree.findActions(type="destroy",
+                                                             object="format",
+                                                             devid=origlv.id))
+                        for action in cancel:
+                            devicetree.cancelAction(action)
+
+                        # even though we cancelled a bunch of actions, it's
+                        # pretty much impossible to be sure we cancelled them
+                        # in the correct order. make sure things are back to
+                        # their original state.
+                        origlv.format = request.originalFormat
+                        if origlv.format.type == "luks":
+                            try:
+                                usedev = devicetree.getChildren(origlv)[0]
+                            except IndexError:
+                                usedev = origlv
+                            else:
+                                usedev.format = usedev.originalFormat
+                        else:
+                            usedev = origlv
+
                      if hasattr(format, "mountpoint"):
                          usedev.format.mountpoint = format.mountpoint

@@ -1164,6 +1206,14 @@ class VolumeGroupEditor:
  	    self.dialog.destroy()
  	self.dialog = None

+    def getLVByName(self, name, vg=None):
+        if vg is None:
+            vg = self.vg
+
+        for lv in vg.lvs:
+            if lv.lvname == name or lv.name == name:
+                return lv
+
      def __init__(self, anaconda, intf, parent, vg, isNew = 0):
          self.storage = anaconda.storage

@@ -1192,6 +1242,7 @@ class VolumeGroupEditor:
              self.lvs[lv.lvname] = {"name": lv.lvname,
                                     "size": lv.size,
                                     "format": copy.copy(lv.format),
+                                   "originalFormat": lv.originalFormat,
                                     "stripes": lv.stripes,
                                     "logSize": lv.logSize,
                                     "snapshotSpace": lv.snapshotSpace,
diff --git a/iw/partition_dialog_gui.py b/iw/partition_dialog_gui.py
index 52e06d5..b621087 100644
--- a/iw/partition_dialog_gui.py
+++ b/iw/partition_dialog_gui.py
@@ -287,12 +287,39 @@ class PartitionEditor:
                              actions.append(ActionCreateDevice(luksdev))
                              actions.append(ActionCreateFormat(luksdev))
                      elif not self.fsoptionsDict["formatcb"].get_active():
-                        creates = devicetree.findActions(type="create",
-                                                         object="format",
-                                                         devid=usedev.id)
-                        for action in creates:
+                        # if the format checkbutton is inactive, cancel all
+                        # actions on this device that create or destroy
+                        # formats
+                        cancel = []
+                        if request.originalFormat.type == "luks":
+                            path = "/dev/mapper/luks-%s" % request.originalFormat.uuid
+                            cancel.extend(devicetree.findActions(path=path))
+
+                        cancel.extend(devicetree.findActions(type="destroy",
+                                                             object="format",
+                                                             devid=request.id))
+                        cancel.extend(devicetree.findActions(type="create",
+                                                             object="format",
+                                                             devid=request.id))
+                        cancel.reverse()
+                        for action in cancel:
                              devicetree.cancelAction(action)

+                        # even though we cancelled a bunch of actions, it's
+                        # pretty much impossible to be sure we cancelled them
+                        # in the correct order. make sure things are back to
+                        # their original state.
+                        request.format = request.originalFormat
+                        if request.format.type == "luks":
+                            try:
+                                usedev = devicetree.getChildren(request)[0]
+                            except IndexError:
+                                usedev = request
+                            else:
+                                usedev.format = usedev.originalFormat
+                        else:
+                            usedev = request
+
                          if usedev.format.mountable:
                              usedev.format.mountpoint = mountpoint
                  elif self.origrequest.protected and usedev.format.mountable:
@@ -416,15 +443,22 @@ class PartitionEditor:

              row = row + 1

-        # original fs label
-        if usereq.format.exists and \
-           getattr(usereq.format, "label", None):
-            maintable.attach(createAlignedLabel(_("Original File System "
-                                                  "Label:")),
+        # original fs type and label
+        if self.origrequest.exists:
+            maintable.attach(createAlignedLabel(_("Original File System Type:")),
                               0, 1, row, row + 1)
-            fslabel = gtk.Label(usereq.format.label)
-            maintable.attach(fslabel, 1, 2, row, row + 1)
-            row = row + 1
+            self.fstypeCombo = gtk.Label(usereq.originalFormat.name)
+
+            maintable.attach(self.fstypeCombo, 1, 2, row, row + 1)
+            row += 1
+
+            if getattr(usereq.originalFormat, "label", None):
+                maintable.attach(createAlignedLabel(_("Original File System "
+                                                      "Label:")),
+                                 0, 1, row, row + 1)
+                fslabel = gtk.Label(usereq.originalFormat.label)
+                maintable.attach(fslabel, 1, 2, row, row + 1)
+                row = row + 1

          # size
          if not self.origrequest.exists:
diff --git a/iw/partition_ui_helpers_gui.py b/iw/partition_ui_helpers_gui.py
index 46e2efb..ec8d236 100644
--- a/iw/partition_ui_helpers_gui.py
+++ b/iw/partition_ui_helpers_gui.py
@@ -401,6 +401,8 @@ def createPreExistFSOptionSection(origrequest, maintable, row, mountCombo,

      if luksdev:
          lukscb.set_active(1)
+
+    if origrequest.originalFormat.type == "luks":
          lukscb.set_data("encrypted", 1)
      else:
          lukscb.set_data("encrypted", 0)
diff --git a/iw/raid_dialog_gui.py b/iw/raid_dialog_gui.py
index 086c562..8e31767 100644
--- a/iw/raid_dialog_gui.py
+++ b/iw/raid_dialog_gui.py
@@ -279,7 +279,45 @@ class RaidEditor:
                              luksdev = None

                          actions.append(ActionDestroyFormat(self.origrequest))
-                elif self.origrequest.format.mountable:
+                elif self.fsoptionsDict.has_key("formatcb") and \
+                     not self.fsoptionsDict["formatcb"].get_active():
+                    # if the format checkbutton is inactive, cancel all
+                    # actions on this device that create or destroy formats
+                    devicetree = self.storage.devicetree
+                    request = self.origrequest
+                    cancel = []
+                    if request.originalFormat.type == "luks":
+                        path = "/dev/mapper/luks-%s" % request.originalFormat.uuid
+                        cancel.extend(devicetree.findActions(path=path))
+
+                    cancel.extend(devicetree.findActions(type="destroy",
+                                                         object="format",
+                                                         devid=request.id))
+                    cancel.extend(devicetree.findActions(type="create",
+                                                         object="format",
+                                                         devid=request.id))
+                    for action in cancel:
+                        devicetree.cancelAction(action)
+
+                    # even though we cancelled a bunch of actions, it's
+                    # pretty much impossible to be sure we cancelled them
+                    # in the correct order. make sure things are back to
+                    # their original state.
+                    request.format = request.originalFormat
+                    if request.format.type == "luks":
+                        try:
+                            usedev = devicetree.getChildren(request)[0]
+                        except IndexError:
+                            usedev = request
+                        else:
+                            usedev.format = usedev.originalFormat
+                    else:
+                        usedev = request
+
+                    if usedev.format.mountable:
+                        usedev.format.mountpoint = mountpoint
+
+                if self.origrequest.format.mountable:
                      self.origrequest.format.mountpoint = mountpoint

  		if self.fsoptionsDict.has_key("migratecb") and \
@@ -408,22 +446,18 @@ class RaidEditor:
  	    lbl.set_mnemonic_widget(self.fstypeCombo)
              maintable.attach(self.fstypeCombo, 1, 2, row, row + 1)
              row += 1
-        elif format.exists:
+        else:
              maintable.attach(createAlignedLabel(_("Original File System Type:")),
                               0, 1, row, row + 1)
-            if format.type:
-                self.fstypeCombo = gtk.Label(format.name)
-            else:
-                self.fstypeCombo = gtk.Label(_("Unknown"))
-
+            self.fstypeCombo = gtk.Label(usedev.originalFormat.name)
              maintable.attach(self.fstypeCombo, 1, 2, row, row + 1)
              row += 1

-            if getattr(format, "label", None):
+            if getattr(usedev.originalFormat, "label", None):
                  maintable.attach(createAlignedLabel(_("Original File System "
                                                        "Label:")),
                                   0, 1, row, row + 1)
-                maintable.attach(gtk.Label(format.label),
+                maintable.attach(gtk.Label(usedev.originalFormat.label),
                                   1, 2, row, row + 1)
                  row += 1


_______________________________________________
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