[elbe-devel] [PATCH 3/9] fstab: factor out hdpart from fstabentry

Bastian Germann bage at linutronix.de
Tue Dec 15 14:32:54 CET 2020


Am 14.12.20 um 17:41 schrieb Torben Hohn:
> the partition geometry is currently saved into attributes of
> an fstab label entry.
> 
> Prepare to be able to losetup() binary partitions, which do not
> have an fstabentry by splitting the losetup() stuff into a base class.
> 
> Signed-off-by: Torben Hohn <torben.hohn at linutronix.de>

Reviewed-by: Bastian Germann <bage at linutronix.de>

> ---
>   elbepack/fstab.py | 76 +++++++++++++++++++++++++----------------------
>   1 file changed, 40 insertions(+), 36 deletions(-)
> 
> diff --git a/elbepack/fstab.py b/elbepack/fstab.py
> index f3e0f5757..6b89b3990 100644
> --- a/elbepack/fstab.py
> +++ b/elbepack/fstab.py
> @@ -71,14 +71,53 @@ class mountpoint_dict (dict):
>   
>           return [self[x] for x in mplist]
>   
> +class hdpart:
> +    def __init__(self):
> +        # These attributes are filled later
> +        # using set_geometry()
> +        self.size = 0
> +        self.offset = 0
> +        self.filename = ''
> +        self.partnum = 0
> +        self.number = ''
> +
> +    def set_geometry(self, ppart, disk):
> +        sector_size = 512
> +        self.offset = ppart.geometry.start * sector_size
> +        self.size = ppart.getLength() * sector_size
> +        self.filename = disk.device.path
> +        self.partnum = ppart.number
> +        self.number = '{}{}'.format(disk.type, ppart.number)
> +
> +    def losetup(self):
> +
> +        cmd = ('losetup --offset %d --sizelimit %d --find --show "%s"' %
> +               (self.offset, self.size, self.filename))
> +
> +        while True:
> +
> +            try:
> +                loopdev = get_command_out(cmd)
> +            except CommandError as e:
> +                if e.returncode != 1:
> +                    raise
> +                do('sync')
> +                time.sleep(1)
> +            else:
> +                break
> +
> +        return loopdev.decode().rstrip('\n')
> +
>   
>   # TODO:py3 Remove object inheritance
>   # pylint: disable=useless-object-inheritance
> -class fstabentry(object):
> +class fstabentry(hdpart):
>   
>       # pylint: disable=too-many-instance-attributes
>   
>       def __init__(self, xml, entry, fsid=0):
> +        super().__init__()
> +
>           if entry.has("source"):
>               self.source = entry.text("source")
>           else:
> @@ -95,14 +134,6 @@ class fstabentry(object):
>               self.passno = entry.text("fs/passno", default="0")
>               self.tune = entry.text("fs/tune2fs", default=None)
>   
> -        # These attributes are filled later
> -        # using set_geometry()
> -        self.size = 0
> -        self.offset = 0
> -        self.filename = ''
> -        self.partnum = 0
> -        self.number = ''
> -
>           self.id = str(fsid)
>   
>       def get_str(self):
> @@ -126,33 +157,6 @@ class fstabentry(object):
>               return "-n " + self.label
>           return ""
>   
> -    def set_geometry(self, ppart, disk):
> -        sector_size = 512
> -        self.offset = ppart.geometry.start * sector_size
> -        self.size = ppart.getLength() * sector_size
> -        self.filename = disk.device.path
> -        self.partnum = ppart.number
> -        self.number = '{}{}'.format(disk.type, ppart.number)
> -
> -    def losetup(self):
> -
> -        cmd = ('losetup --offset %d --sizelimit %d --find --show "%s"' %
> -               (self.offset, self.size, self.filename))
> -
> -        while True:
> -
> -            try:
> -                loopdev = get_command_out(cmd)
> -            except CommandError as e:
> -                if e.returncode != 1:
> -                    raise
> -                do('sync')
> -                time.sleep(1)
> -            else:
> -                break
> -
> -        return loopdev.decode().rstrip('\n')
> -
>       def tuning(self, loopdev):
>           if self.tune:
>               do('tune2fs %s %s' % (self.tune, loopdev))
> 


More information about the elbe-devel mailing list