On Thu, 2009-04-23 at 17:01 +0200, Hans de Goede wrote: > I envisioned this while working on a fix for bug 496638 (as that fix > has the same issues), I haven't actually tried this, but > it is pretty clear this will be a real problem. I think we need to do something about this. Is this why we had all that ID bullshit in the old code, I wonder? I really, really dislike the idea of Device classes having knowledge about the Storage object. Maybe we should be storing protectedPartitions as a UUID so we can avoid this nonsense. How does that strike you? > > Steps to Reproduce: > 1. Do an install with hd media, with the media being > a logical partition for example sda6 > 2. Choose custom partitioning remove sda5 > 3. Now sda6 has become sda5 and thus can be happily edited > > This patch fixes this as follows, when a partition changes name check > protecedPartitions for the old name and replace it with the new name if > necessary. This is done in Partition.updateName(). > --- > storage/devices.py | 23 ++++++++++++++++++++--- > storage/partitioning.py | 2 +- > 2 files changed, 21 insertions(+), 4 deletions(-) > > diff --git a/storage/devices.py b/storage/devices.py > index 53c3d83..a2aa97c 100644 > --- a/storage/devices.py > +++ b/storage/devices.py > @@ -1056,13 +1056,30 @@ class PartitionDevice(StorageDevice): > else: > StorageDevice.updateSysfsPath(self) > > - def updateName(self): > + def updateName(self, storage=None): > if self.partedPartition is None: > - self._name = self.req_name > + new_name = self.req_name > else: > - self._name = \ > + new_name = \ > devicePathToName(self.partedPartition.getDeviceNodeName()) > > + # If our name changed check if we are part of protectedPartitions > + # or immutableDevices and update our name there. > + if storage: > + for i in range(len(storage.protectedPartitions)): > + if storage.protectedPartitions[i] == self._name: > + storage.protectedPartitions[i] = new_name > + # Why do we have this in 2 places ?? > + for i in range(len(storage.devicetree.protectedPartitions)): > + if storage.devicetree.protectedPartitions[i] == self._name: > + storage.devicetree.protectedPartitions[i] = new_name > + > + for i in range(len(storage.devicetree.immutableDevices)): > + if storage.devicetree.immutableDevices[i][0] == self._name: > + storage.devicetree.immutableDevices[i][0] = new_name > + > + self._name = new_name > + > def dependsOn(self, dep): > """ Return True if this device depends on dep. """ > if isinstance(dep, PartitionDevice) and dep.isExtended and self.isLogical: > diff --git a/storage/partitioning.py b/storage/partitioning.py > index 663d1f1..a9dffe5 100644 > --- a/storage/partitioning.py > +++ b/storage/partitioning.py > @@ -572,7 +572,7 @@ def doPartitioning(storage, exclusiveDisks=None): > # needed because of XXX hack below > if part.isExtended: > continue > - part.updateName() > + part.updateName(storage) > > # XXX hack -- if we created any extended partitions we need to add > # them to the tree now _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list