[PATCH 05/10] test: Inline mk_fs() into FsHelper.mk_fs()

Simon Glass sjg at chromium.org
Wed May 6 17:56:19 CEST 2026


The module-level mk_fs() function is now only called from
FsHelper.mk_fs() and from the __main__() smoke-test.

Move its body into the method so there is a single entry point for
creating a filesystem image, and update the smoke-test block to use
FsHelper

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 test/py/tests/fs_helper.py | 143 +++++++++++++++++--------------------
 1 file changed, 67 insertions(+), 76 deletions(-)

diff --git a/test/py/tests/fs_helper.py b/test/py/tests/fs_helper.py
index 04cb01fa074..179fbf04dfb 100644
--- a/test/py/tests/fs_helper.py
+++ b/test/py/tests/fs_helper.py
@@ -63,12 +63,72 @@ class FsHelper:
         self._do_cleanup = False
 
     def mk_fs(self):
-        """Make a new filesystem and copy in the files"""
+        """Make a new filesystem and copy in the files
+
+        Raises:
+            CalledProcessError: if any error occurs when creating the
+                filesystem
+        """
         self.setup()
         self._do_cleanup = True
         src_dir = self.srcdir if os.listdir(self.srcdir) else None
-        self.fs_img = mk_fs(self.config, self.fs_type, self.size_mb << 20,
-                            self.prefix, src_dir, quiet=self.quiet)
+
+        fs_img = os.path.join(self.config.persistent_data_dir,
+                              f'{self.prefix}.{self.fs_type}.img')
+
+        if self.fs_type == 'fat12':
+            mkfs_opt = '-F 12'
+        elif self.fs_type == 'fat16':
+            mkfs_opt = '-F 16'
+        elif self.fs_type == 'fat32':
+            mkfs_opt = '-F 32'
+        else:
+            mkfs_opt = ''
+
+        if self.fs_type == 'exfat':
+            fs_lnxtype = 'exfat'
+        elif re.match('fat', self.fs_type) or self.fs_type == 'fs_generic':
+            fs_lnxtype = 'vfat'
+        else:
+            fs_lnxtype = self.fs_type
+
+        if src_dir:
+            if fs_lnxtype == 'ext4':
+                mkfs_opt = mkfs_opt + ' -d ' + src_dir
+            elif fs_lnxtype != 'vfat' and fs_lnxtype != 'exfat':
+                raise ValueError(
+                    f'src_dir not implemented for fs {fs_lnxtype}')
+
+        size = self.size_mb << 20
+        count = (size + SIZE_GRAN - 1) // SIZE_GRAN
+
+        # Some distributions do not add /sbin to the default PATH, where
+        # mkfs lives
+        if '/sbin' not in os.environ['PATH'].split(os.pathsep):
+            os.environ['PATH'] += os.pathsep + '/sbin'
+
+        try:
+            check_call(f'rm -f {fs_img}', shell=True)
+            check_call(f'truncate -s $(( {SIZE_GRAN} * {count} )) {fs_img}',
+                       shell=True)
+            check_call(f'mkfs.{fs_lnxtype} {mkfs_opt} {fs_img}', shell=True,
+                       stdout=DEVNULL if self.quiet else None)
+            if self.fs_type == 'ext4':
+                sb_content = check_output(f'tune2fs -l {fs_img}',
+                                          shell=True).decode()
+                if 'metadata_csum' in sb_content:
+                    check_call(f'tune2fs -O ^metadata_csum {fs_img}',
+                               shell=True)
+            elif fs_lnxtype == 'vfat' and src_dir:
+                flags = f"-smpQ{'' if self.quiet else 'v'}"
+                check_call(f'mcopy -i {fs_img} {flags} {src_dir}/* ::/',
+                           shell=True)
+            elif fs_lnxtype == 'exfat' and src_dir:
+                check_call(f'fattools cp {src_dir}/* {fs_img}', shell=True)
+            self.fs_img = fs_img
+        except CalledProcessError:
+            call(f'rm -f {fs_img}', shell=True)
+            raise
 
     def setup(self):
         """Set up the srcdir ready to receive files"""
@@ -190,81 +250,12 @@ class DiskHelper:
         self.cleanup()
 
 
-def mk_fs(config, fs_type, size, prefix, src_dir=None, fs_img=None, quiet=False):
-    """Create a file system volume
-
-    Args:
-        config (u_boot_config): U-Boot configuration
-        fs_type (str): File system type, e.g. 'ext4'
-        size (int): Size of file system in bytes
-        prefix (str): Prefix string of volume's file name
-        src_dir (str): Root directory to use, or None for none
-        fs_img (str or None): Leaf filename for image, or None to use a
-            default name. The image is always placed under
-            persistent_data_dir.
-        quiet (bool): Suppress non-error output
-
-    Raises:
-        CalledProcessError: if any error occurs when creating the filesystem
-    """
-    if not fs_img:
-        fs_img = f'{prefix}.{fs_type}.img'
-    fs_img = os.path.join(config.persistent_data_dir, fs_img)
-
-    if fs_type == 'fat12':
-        mkfs_opt = '-F 12'
-    elif fs_type == 'fat16':
-        mkfs_opt = '-F 16'
-    elif fs_type == 'fat32':
-        mkfs_opt = '-F 32'
-    else:
-        mkfs_opt = ''
-
-    if fs_type == 'exfat':
-        fs_lnxtype = 'exfat'
-    elif re.match('fat', fs_type) or fs_type == 'fs_generic':
-        fs_lnxtype = 'vfat'
-    else:
-        fs_lnxtype = fs_type
-
-    if src_dir:
-        if fs_lnxtype == 'ext4':
-            mkfs_opt = mkfs_opt + ' -d ' + src_dir
-        elif fs_lnxtype != 'vfat' and fs_lnxtype != 'exfat':
-            raise ValueError(f'src_dir not implemented for fs {fs_lnxtype}')
-
-    count = (size + SIZE_GRAN - 1) // SIZE_GRAN
-
-    # Some distributions do not add /sbin to the default PATH, where mkfs lives
-    if '/sbin' not in os.environ["PATH"].split(os.pathsep):
-        os.environ["PATH"] += os.pathsep + '/sbin'
-
-    try:
-        check_call(f'rm -f {fs_img}', shell=True)
-        check_call(f'truncate -s $(( {SIZE_GRAN} * {count} )) {fs_img}',
-                   shell=True)
-        check_call(f'mkfs.{fs_lnxtype} {mkfs_opt} {fs_img}', shell=True,
-                   stdout=DEVNULL if quiet else None)
-        if fs_type == 'ext4':
-            sb_content = check_output(f'tune2fs -l {fs_img}',
-                                      shell=True).decode()
-            if 'metadata_csum' in sb_content:
-                check_call(f'tune2fs -O ^metadata_csum {fs_img}', shell=True)
-        elif fs_lnxtype == 'vfat' and src_dir:
-            flags = f"-smpQ{'' if quiet else 'v'}"
-            check_call(f'mcopy -i {fs_img} {flags} {src_dir}/* ::/',
-                       shell=True)
-        elif fs_lnxtype == 'exfat' and src_dir:
-            check_call(f'fattools cp {src_dir}/* {fs_img}', shell=True)
-        return fs_img
-    except CalledProcessError:
-        call(f'rm -f {fs_img}', shell=True)
-        raise
-
 # Just for trying out
 if __name__ == "__main__":
     import collections
 
-    CNF= collections.namedtuple('config', 'persistent_data_dir')
+    CNF = collections.namedtuple('config', 'persistent_data_dir')
 
-    mk_fs(CNF('.'), 'ext4', 0x1000000, 'pref')
+    fsh = FsHelper(CNF('.'), 'ext4', 16, 'pref')
+    fsh.setup()
+    fsh.mk_fs()
-- 
2.43.0



More information about the U-Boot mailing list