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

Re: [PATCH master] Check size limits on pre-existing partitions



On Fri, 2011-03-18 at 15:50 -0700, Brian C. Lane wrote:
> When editing a pre-existing partition and changing its format type we
> need to re-check the size limits. eg. mounting a partition on /boot/efi
> needs to make sure it is <= 256M

I hate functions/methods that return strings like that, but otherwise it
looks okay.

> 
> Resolves: rhbz#684860
> ---
>  pyanaconda/storage/__init__.py     |    8 ++++++
>  pyanaconda/storage/devices.py      |   48 ++++++++++++++++++++++++++++++++++++
>  pyanaconda/storage/partitioning.py |   12 +--------
>  3 files changed, 57 insertions(+), 11 deletions(-)
> 
> diff --git a/pyanaconda/storage/__init__.py b/pyanaconda/storage/__init__.py
> index a0cbdfa..b000573 100644
> --- a/pyanaconda/storage/__init__.py
> +++ b/pyanaconda/storage/__init__.py
> @@ -1102,6 +1102,14 @@ class Storage(object):
>                                  % {'mount': mount, 'size': size,
>                                     'productName': productName})
>  
> +        for (mount, device) in filesystems.items():
> +            problem = filesystems[mount].checkSize()
> +            if problem:
> +                errors.append(_("Your %s partition is too %s for %s formatting "
> +                                "(allowable size is %d MB to %d MB)")
> +                              % (mount, problem, device.format.name,
> +                                 device.minSize, device.maxSize))
> +
>          usb_disks = []
>          firewire_disks = []
>          for disk in self.disks:
> diff --git a/pyanaconda/storage/devices.py b/pyanaconda/storage/devices.py
> index 80bb7be..303856b 100644
> --- a/pyanaconda/storage/devices.py
> +++ b/pyanaconda/storage/devices.py
> @@ -932,6 +932,19 @@ class StorageDevice(Device):
>                      break
>          return grow
>  
> +    def checkSize(self):
> +        """ Check to make sure the size of the device is allowed by the
> +            format used.
> +
> +            return None is all is ok
> +            return large or small depending on the problem
> +        """
> +        problem = None
> +        if self.format.maxSize and self.size > self.format.maxSize:
> +            problem = _("large")
> +        elif self.format.minSize and self.size < self.format.minSize:
> +            problem = _("small")
> +        return problem
>  
>  class DiskDevice(StorageDevice):
>      """ A disk """
> @@ -1595,6 +1608,24 @@ class PartitionDevice(StorageDevice):
>          return super(PartitionDevice, self).resizable and \
>                 self.disk.type != 'dasd'
>  
> +    def checkSize(self):
> +        """ Check to make sure the size of the device is allowed by the
> +            format used.
> +
> +            return None is all is ok
> +            return large or small depending on the problem
> +        """
> +        problem = None
> +        if self.format.maxSize and self.size > self.format.maxSize:
> +            problem = _("large")
> +        elif (self.format.minSize and
> +              (not self.req_grow and
> +               self.size < self.format.minSize) or
> +              (self.req_grow and self.req_max_size and
> +               self.req_max_size < self.format.minSize)):
> +            problem = _("small")
> +        return problem
> +
>  class DMDevice(StorageDevice):
>      """ A device-mapper device """
>      _type = "dm"
> @@ -2553,6 +2584,23 @@ class LVMLogicalVolumeDevice(DMDevice):
>          # is different (ofcourse)
>          return "rd_LVM_LV=%s/%s" % (self.vg.name, self._name)
>  
> +    def checkSize(self):
> +        """ Check to make sure the size of the device is allowed by the
> +            format used.
> +
> +            return None is all is ok
> +            return large or small depending on the problem
> +        """
> +        problem = None
> +        if self.format.maxSize and self.size > self.format.maxSize:
> +            problem = _("large")
> +        elif (self.format.minSize and
> +              (not self.req_grow and
> +               self.size < self.format.minSize) or
> +              (self.req_grow and self.req_max_size and
> +               self.req_max_size < self.format.minSize)):
> +            problem = _("small")
> +        return problem
>  
>  class MDRaidArrayDevice(StorageDevice):
>      """ An mdraid (Linux RAID) device. """
> diff --git a/pyanaconda/storage/partitioning.py b/pyanaconda/storage/partitioning.py
> index e8f3921..aebd7b8 100644
> --- a/pyanaconda/storage/partitioning.py
> +++ b/pyanaconda/storage/partitioning.py
> @@ -1000,17 +1000,7 @@ def allocatePartitions(storage, disks, partitions, freespace, bootloader=None):
>              if _part.req_grow:
>                  current_free = None
>  
> -            problem = None
> -            if _part.format.maxSize and _part.req_size > _part.format.maxSize:
> -                problem = "large"
> -            elif (_part.format.minSize and
> -                  (not _part.req_grow and
> -                   _part.req_size < _part.format.minSize) or
> -                  (_part.req_grow and _part.req_max_size and
> -                   _part.req_max_size < _part.format.minSize)):
> -                # format max/min size also enforced in growPartitions
> -                problem = "small"
> -
> +            problem = _part.checkSize()
>              if problem:
>                  raise PartitioningError("partition is too %s for %s formatting "
>                                          "(allowable size is %d MB to %d MB)"



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