[blivet:master 16/16] Use _resizefsUnit in resizeArgs() method implementations.

mulhern amulhern at redhat.com
Thu Jan 8 17:45:23 UTC 2015


The reason it is used elsewhere, i.e., when calculating minimum size
is because of the constraint on the resizeArgs() method to use the
units defined by _resizefsUnit. This patch makes that explicit.

The appropriate format string for the size specification for the particular
resizing application and resizefsUnit combination is looked up dynamically
during execution of resizeArgs(). Ideally, it would be calculated when
the class is read, rather than at every invocation. However, due to the
fact that the format string is a function of the class's resizefsUnit
that is tricky. The only principled way to do it is to construct the class
dynamically, passing the resizefsUnit value as an argument. This is
definite overkill for this particular problem, so it seems better to
accept this slightly wasteful dynamic calculation.

There is no try/except KeyError block surrounding the FMT calculations.
Since the key is known statically and does not change between one invocation
and the next, this would be overkill.

Signed-off-by: mulhern <amulhern at redhat.com>
---
 blivet/formats/fs.py | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/blivet/formats/fs.py b/blivet/formats/fs.py
index 17faf5b..ad2542a 100644
--- a/blivet/formats/fs.py
+++ b/blivet/formats/fs.py
@@ -35,7 +35,8 @@ from ..flags import flags
 from parted import fileSystemType
 from ..storage_log import log_exception_info, log_method_call
 from .. import arch
-from ..size import Size, ROUND_UP, ROUND_DOWN, MiB, B, unitStr
+from ..size import Size, ROUND_UP, ROUND_DOWN, unitStr
+from ..size import B, KiB, MiB, GiB, KB, MB, GB
 from ..i18n import _, N_
 from .. import udev
 
@@ -1030,8 +1031,10 @@ class Ext2FS(FS):
 
     @property
     def resizeArgs(self):
-        argv = ["-p", self.device, "%dM" % (self.targetSize.convertTo(MiB))]
-        return argv
+        # No unit specifier is interpreted not as bytes, but block size.
+        FMT = {KiB: "%dK", MiB: "%dM", GiB: "%dG"}[self._resizefsUnit]
+        size_spec = FMT % self.targetSize.convertTo(self._resizefsUnit)
+        return ["-p", self.device, size_spec]
 
 register_device_format(Ext2FS)
 
@@ -1423,11 +1426,12 @@ class NTFS(FS):
 
     @property
     def resizeArgs(self):
+        FMT = {B: "%d", KB: "%dK", MB: "%dM", GB: "%dG"}[self._resizefsUnit]
+        size_spec = FMT % self.targetSize.convertTo(self._resizefsUnit)
+
         # You must supply at least two '-f' options to ntfsresize or
         # the proceed question will be presented to you.
-        argv = ["-ff", "-s", "%d" % self.targetSize.convertTo(B),
-                self.device]
-        return argv
+        return ["-ff", "-s", size_spec, self.device]
 
 
 register_device_format(NTFS)
-- 
1.9.3



More information about the anaconda-patches mailing list