Re: [PATCH 4/5] Make DiskDevice.partedDisk a property.

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

 



On Thu, 2009-08-06 at 11:04 -0400, Peter Jones wrote:
> This allows for the backing DiskDevice._partedDisk to be created
> just-in-time, instead of when the instance is created.
> ---
>  storage/devices.py |   49 +++++++++++++++++++++++++++++--------------------
>  1 files changed, 29 insertions(+), 20 deletions(-)

Subtle behavior changes like this make me nervous, but this solves a
real problem with non-physical-disk partitioned devices, so it's worth
seeing what it breaks. Ack.

> 
> diff --git a/storage/devices.py b/storage/devices.py
> index 3439e86..3ca05aa 100644
> --- a/storage/devices.py
> +++ b/storage/devices.py
> @@ -235,7 +235,7 @@ class Device(object):
>          """
>          new = self.__class__.__new__(self.__class__)
>          memo[id(self)] = new
> -        shallow_copy_attrs = ('partedDisk', '_partedDevice',
> +        shallow_copy_attrs = ('_partedDisk', '_partedDevice',
>                               '_partedPartition', '_origPartedDisk',
>                               '_raidSet')
>          for (attr, value) in self.__dict__.items():
> @@ -722,22 +722,39 @@ class DiskDevice(StorageDevice):
>          StorageDevice.__init__(self, device, format=format, size=size,
>                                 major=major, minor=minor, exists=True,
>                                 sysfsPath=sysfsPath, parents=parents)
> +        self._partedDisk = None
> +        self._initlabel = initlabel
> +        self._initcb = initcb
>  
> -        self.partedDisk = None
> +        # We save the actual state of the disk here. Before the first
> +        # modification (addPartition or removePartition) to the partition
> +        # table we reset self.partedPartition to this state so we can
> +        # perform the modifications one at a time.
> +        if self.partedDisk:
> +            self._origPartedDisk = self.partedDisk.duplicate()
> +        else:
> +            self._origPartedDisk = None
> +
> +
> +    @property
> +    def partedDisk(self):
> +        if self._partedDisk:
> +            return self._partedDisk
>  
>          log.debug("looking up parted Device: %s" % self.path)
>  
>          if self.partedDevice:
>              log.debug("creating parted Disk: %s" % self.path)
> -            if initlabel:
> -                self.partedDisk = self.freshPartedDisk()
> +            if self._initlabel:
> +                self._partedDisk = self.freshPartedDisk()
>              else:
>                  try:
> -                    self.partedDisk = parted.Disk(device=self.partedDevice)
> +                    self._partedDisk = parted.Disk(device=self.partedDevice)
>                  except _ped.DiskLabelException:
>                      # if we have a cb function use it. else an error.
> -                    if initcb is not None and initcb():
> -                        self.partedDisk = parted.freshDisk(device=self.partedDevice, \
> +                    if self._initcb is not None and self._initcb():
> +                        self._partedDisk = parted.freshDisk( \
> +                                device=self.partedDevice, \
>                                  ty = platform.getPlatform(None).diskType)
>                      else:
>                          raise DeviceUserDeniedFormatError("User prefered to not format.")
> @@ -745,22 +762,14 @@ class DiskDevice(StorageDevice):
>                  # When the device has no partition table but it has a FS, it
>                  # will be created with label type loop.  Treat the same as if
>                  # the device had no label (cause it really doesn't).
> -                if self.partedDisk.type == "loop":
> -                    if initcb is not None and initcb():
> -                        self.partedDisk = parted.freshDisk(device=self.partedDevice, \
> +                if self._partedDisk.type == "loop":
> +                    if self._initcb is not None and self._initcb():
> +                        self._partedDisk = parted.freshDisk( \
> +                                device=self.partedDevice, \
>                                  ty = platform.getPlatform(None).diskType)
>                      else:
>                          raise DeviceUserDeniedFormatError("User prefered to not format.")
>  
> -        # We save the actual state of the disk here. Before the first
> -        # modification (addPartition or removePartition) to the partition
> -        # table we reset self.partedPartition to this state so we can
> -        # perform the modifications one at a time.
> -        if self.partedDisk:
> -            self._origPartedDisk = self.partedDisk.duplicate()
> -        else:
> -            self._origPartedDisk = None
> -
>      def __str__(self):
>          s = StorageDevice.__str__(self)
>          s += ("  removable = %(removable)s  partedDevice = %(partedDevice)r\n"
> @@ -795,7 +804,7 @@ class DiskDevice(StorageDevice):
>      def resetPartedDisk(self):
>          """ Reset parted.Disk to reflect the actual layout of the disk. """
>          log_method_call(self, self.name)
> -        self.partedDisk = self._origPartedDisk
> +        self._partedDisk = self._origPartedDisk
>  
>      def removePartition(self, device):
>          log_method_call(self, self.name, part=device.name)

_______________________________________________
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