On Wed, 2009-09-02 at 13:33 -1000, David Cantrell wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On Wed, 2 Sep 2009, David Lehman wrote: > > > On Tue, 2009-09-01 at 15:25 -1000, David Cantrell wrote: > >> The devices property in Storage and FSSet were the same. Remove the one > >> from FSSet and have that class reference the one from Storage. > > > > Here we are are taking the device list from one point in time, before > > we've parsed the fstab. More importantly, we're taking the list of > > devices from before we've done any partitioning, &c. Since we now have a > > list of devices instead of a property in FSSet we will not pick up > > changes to the list of devices, which I think is going to be > > problematic. > > Correct me if I'm wrong, but any access of the 'devices' property on Storage > is going to resort devicetree.devices, right? Isn't devicetree the same > between Storage and FSSet (it looks like FSSet just has a reference to the one > in Storage). In FSSet when 'devices' is accessed, devicetree.devices will be > resorted and a new list returned. I don't think it will happen that way. It seems to me that self.devices is evaluated when the FSSet is instantiated and from that point forward it is just a list. It's not like passing a reference to a method/function. Here's a little python session that helped me to arrive at this conclusion: [dave@localhost anaconda]$ python Python 2.6 (r26:66714, Jun 8 2009, 16:07:29) [GCC 4.4.0 20090506 (Red Hat 4.4.0-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> class X(object): ... def __init__(self, x): ... self._x = x ... @property ... def x(self): ... return self._x ... >>> x = X(3) >>> foo = x.x >>> foo 3 >>> x._x = 1 >>> foo 3 Dave > > > > > Dave > > > >> --- > >> booty/ppc.py | 4 ++-- > >> storage/__init__.py | 17 +++++++---------- > >> upgrade.py | 2 +- > >> yuminstall.py | 2 +- > >> 4 files changed, 11 insertions(+), 14 deletions(-) > >> > >> diff --git a/booty/ppc.py b/booty/ppc.py > >> index 9e43090..42aae57 100644 > >> --- a/booty/ppc.py > >> +++ b/booty/ppc.py > >> @@ -14,11 +14,11 @@ class ppcBootloaderInfo(bootloaderInfo): > >> machine = iutil.getPPCMachine() > >> > >> if machine == 'pSeries': > >> - for dev in self.storage.fsset.devices: > >> + for dev in self.storage.devices: > >> if dev.format.type == "prepboot": > >> retval.append(dev.path) > >> elif machine == 'PMac': > >> - for dev in self.storage.fsset.devices: > >> + for dev in self.storage.devices: > >> if dev.format.type == "hfs" and dev.format.bootable: > >> retval.append(dev.path) > >> > >> diff --git a/storage/__init__.py b/storage/__init__.py > >> index 494bef0..10fe07a 100644 > >> --- a/storage/__init__.py > >> +++ b/storage/__init__.py > >> @@ -224,7 +224,8 @@ class Storage(object): > >> passphrase=self.encryptionPassphrase, > >> luksDict=self.__luksDevs, > >> iscsi=self.iscsi) > >> - self.fsset = FSSet(self.devicetree, self.anaconda.rootPath) > >> + self.fsset = FSSet(self.devicetree, self.anaconda.rootPath, > >> + self.devices) > >> > >> def doIt(self): > >> self.devicetree.processActions() > >> @@ -291,7 +292,8 @@ class Storage(object): > >> luksDict=self.__luksDevs, > >> iscsi=self.iscsi) > >> self.devicetree.populate() > >> - self.fsset = FSSet(self.devicetree, self.anaconda.rootPath) > >> + self.fsset = FSSet(self.devicetree, self.anaconda.rootPath, > >> + self.devices) > >> self.anaconda.id.rootParts = None > >> self.anaconda.id.upgradeRoot = None > >> w.pop() > >> @@ -299,9 +301,7 @@ class Storage(object): > >> @property > >> def devices(self): > >> """ A list of all the devices in the device tree. """ > >> - devices = self.devicetree.devices > >> - devices.sort(key=lambda d: d.path) > >> - return devices > >> + return sorted(self.devicetree.devices, key=lambda d: d.path) > >> > >> @property > >> def disks(self): > >> @@ -1306,9 +1306,10 @@ def get_containing_device(path, devicetree): > >> > >> class FSSet(object): > >> """ A class to represent a set of filesystems. """ > >> - def __init__(self, devicetree, rootpath): > >> + def __init__(self, devicetree, rootpath, devices): > >> self.devicetree = devicetree > >> self.rootpath = rootpath > >> + self.devices = devices > >> self.cryptTab = None > >> self.blkidTab = None > >> self.origFStab = None > >> @@ -1364,10 +1365,6 @@ class FSSet(object): > >> return self._devshm > >> > >> @property > >> - def devices(self): > >> - return sorted(self.devicetree.devices, key=lambda d: d.path) > >> - > >> - @property > >> def mountpoints(self): > >> filesystems = {} > >> for device in self.devices: > >> diff --git a/upgrade.py b/upgrade.py > >> index c751533..1ae9a58 100644 > >> --- a/upgrade.py > >> +++ b/upgrade.py > >> @@ -146,7 +146,7 @@ def upgradeSwapSuggestion(anaconda): > >> > >> fsList = [] > >> > >> - for device in anaconda.id.storage.fsset.devices: > >> + for device in anaconda.id.storage.devices: > >> if not device.format: > >> continue > >> if device.format.mountable and device.format.linuxNative: > >> diff --git a/yuminstall.py b/yuminstall.py > >> index b247b52..4e13939 100644 > >> --- a/yuminstall.py > >> +++ b/yuminstall.py > >> @@ -1295,7 +1295,7 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon > >> selectKernel("kernel") > >> > >> def selectFSPackages(self, storage): > >> - for device in storage.fsset.devices: > >> + for device in storage.devices: > >> # this takes care of device and filesystem packages > >> map(self.selectPackage, device.packages) > >> > > > > _______________________________________________ > > Anaconda-devel-list mailing list > > Anaconda-devel-list@xxxxxxxxxx > > https://www.redhat.com/mailman/listinfo/anaconda-devel-list > > > > - -- > David Cantrell <dcantrell@xxxxxxxxxx> > Red Hat / Honolulu, HI > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.9 (GNU/Linux) > > iEYEARECAAYFAkqfAM0ACgkQ5hsjjIy1Vkn5TwCfbA6OnrhQJAT8nKGxL5kc0mG0 > Xn0An1G7Bi6/zAtHQG/1q01r2SOChPeC > =zv+u > -----END PGP SIGNATURE----- > > _______________________________________________ > Anaconda-devel-list mailing list > Anaconda-devel-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/anaconda-devel-list _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list