diff options
author | David Lehman <dlehman@redhat.com> | 2009-05-27 17:17:19 -0500 |
---|---|---|
committer | David Lehman <dlehman@redhat.com> | 2009-05-28 13:55:19 -0500 |
commit | 08701badb81774ef2569a4f0fb2695260ef42566 (patch) | |
tree | f532a15c54272128f4b03c8a144607433624b10b | |
parent | 790b247fcb299a245cde34e971cb0c91aa6d3b51 (diff) | |
download | anaconda-08701badb81774ef2569a4f0fb2695260ef42566.tar.gz anaconda-08701badb81774ef2569a4f0fb2695260ef42566.tar.xz anaconda-08701badb81774ef2569a4f0fb2695260ef42566.zip |
Create and use unique ids for Device instances. (#500808)
The use of a unique id frees us from having to worry about parted renaming
partitions whenever we remove one. It will also provide a mechanism with
which we can more reliably track protected partitions, currently
problematic for the same reason.
-rw-r--r-- | iw/partition_dialog_gui.py | 2 | ||||
-rw-r--r-- | storage/devices.py | 14 | ||||
-rw-r--r-- | storage/devicetree.py | 37 |
3 files changed, 34 insertions, 19 deletions
diff --git a/iw/partition_dialog_gui.py b/iw/partition_dialog_gui.py index 45748c2ee..8e0161e2b 100644 --- a/iw/partition_dialog_gui.py +++ b/iw/partition_dialog_gui.py @@ -271,7 +271,7 @@ class PartitionEditor: elif not self.fsoptionsDict["formatcb"].get_active(): creates = devicetree.findActions(type="create", object="format", - path=usedev.path) + devid=usedev.id) for action in creates: devicetree.cancelAction(action) diff --git a/storage/devices.py b/storage/devices.py index 7d0e36ef0..b5e32afd3 100644 --- a/storage/devices.py +++ b/storage/devices.py @@ -176,6 +176,10 @@ class Device(object): before destroying the device itself. """ + + # This is a counter for generating unique ids for Devices. + _id = 0 + _type = "generic device" _packages = [] @@ -201,6 +205,10 @@ class Device(object): self.kids = 0 self.description = description + # Set this instance's id and increment the counter. + self.id = Device._id + Device._id += 1 + for parent in self.parents: parent.addChild() @@ -227,10 +235,12 @@ class Device(object): s = ("%(type)s instance (%(id)s) --\n" " description = %(descr)s name = %(name)s status = %(status)s" " parents = %(parents)s\n" - " kids = %(kids)s\n" % + " kids = %(kids)s\n" + " id = %(dev_id)s\n" % {"type": self.__class__.__name__, "id": "%#x" % id(self), "name": self.name, "parents": self.parents, "kids": self.kids, - "descr": self.description, "status": self.status}) + "descr": self.description, "status": self.status, + "dev_id": self.id}) return s def writeKS(self, f, preexisting=False, noformat=False, s=None): diff --git a/storage/devicetree.py b/storage/devicetree.py index 42ebdfca8..3dce7be83 100644 --- a/storage/devicetree.py +++ b/storage/devicetree.py @@ -226,11 +226,11 @@ class DeviceTree(object): continue log.debug("action '%s' (%s)" % (a, id(a))) - destroys = self.findActions(path=a.device.path, + destroys = self.findActions(devid=a.device.id, type="destroy", object="device") - creates = self.findActions(path=a.device.path, + creates = self.findActions(devid=a.device.id, type="create", object="device") @@ -282,11 +282,11 @@ class DeviceTree(object): continue log.debug("action '%s' (%s)" % (a, id(a))) - creates = self.findActions(path=a.device.path, + creates = self.findActions(devid=a.device.id, type="create", object="device") - destroys = self.findActions(path=a.device.path, + destroys = self.findActions(devid=a.device.id, type="destroy", object="device") @@ -318,7 +318,7 @@ class DeviceTree(object): # remove all actions on this from after the first destroy up # to the last create - dev_actions = self.findActions(path=a.device.path) + dev_actions = self.findActions(devid=a.device.id) for rem in dev_actions: if rem == stop_action: break @@ -337,7 +337,7 @@ class DeviceTree(object): continue log.debug("action '%s' (%s)" % (a, id(a))) - loops = self.findActions(path=a.device.path, + loops = self.findActions(devid=a.device.id, type="resize", object="device") @@ -359,11 +359,11 @@ class DeviceTree(object): continue log.debug("action '%s' (%s)" % (a, id(a))) - destroys = self.findActions(path=a.device.path, + destroys = self.findActions(devid=a.device.id, type="destroy", object="format") - creates = self.findActions(path=a.device.path, + creates = self.findActions(devid=a.device.id, type="create", object="format") @@ -396,7 +396,7 @@ class DeviceTree(object): # now we remove all actions on this device's format between # the start index (into self._actions) and stop_action. - dev_actions = self.findActions(path=a.device.path, + dev_actions = self.findActions(devid=a.device.id, object="format") for rem in dev_actions: end = self._actions.index(stop_action) @@ -417,11 +417,11 @@ class DeviceTree(object): continue log.debug("action '%s' (%s)" % (a, id(a))) - creates = self.findActions(path=a.device.path, + creates = self.findActions(devid=a.device.id, type="create", object="format") - destroys = self.findActions(path=a.device.path, + destroys = self.findActions(devid=a.device.id, type="destroy", object="format") @@ -453,7 +453,7 @@ class DeviceTree(object): # remove all actions on this from after the first destroy up # to the last create - dev_actions = self.findActions(path=a.device.path, + dev_actions = self.findActions(devid=a.device.id, object="format") for rem in dev_actions: if rem == stop_action: @@ -473,7 +473,7 @@ class DeviceTree(object): continue log.debug("action '%s' (%s)" % (a, id(a))) - loops = self.findActions(path=a.device.path, + loops = self.findActions(devid=a.device.id, type="resize", object="format") @@ -495,7 +495,7 @@ class DeviceTree(object): continue log.debug("action '%s' (%s)" % (a, id(a))) - loops = self.findActions(path=a.device.path, + loops = self.findActions(devid=a.device.id, type="migrate", object="format") @@ -783,7 +783,8 @@ class DeviceTree(object): self._actions.remove(action) - def findActions(self, device=None, type=None, object=None, path=None): + def findActions(self, device=None, type=None, object=None, path=None, + devid=None): """ Find all actions that match all specified parameters. Keyword arguments: @@ -794,7 +795,8 @@ class DeviceTree(object): path -- device path to match (string, or None to match any) """ - if device is None and type is None and object is None and path is None: + if device is None and type is None and object is None and \ + path is None and devid is None: return self._actions[:] # convert the string arguments to the types used in actions @@ -814,6 +816,9 @@ class DeviceTree(object): if path is not None and action.device.path != path: continue + + if devid is not None and action.device.id != devid: + continue actions.append(action) |