[unpackfs] Reduce file-reading
- Only need to get the list of supported filesystems *once*, not for each and every filesystem that is going to be unpacked. - Be more Python-idiomatic.
This commit is contained in:
parent
4ceedf239c
commit
56d05d5834
@ -261,12 +261,28 @@ class UnpackOperation:
|
||||
subprocess.check_call(["umount", "-l", imgmountdir])
|
||||
|
||||
|
||||
def get_supported_filesystems():
|
||||
"""
|
||||
Reads /proc/filesystems (the list of supported filesystems
|
||||
for the current kernel) and returns a list of (names of)
|
||||
those filesystems.
|
||||
"""
|
||||
PATH_PROCFS = '/proc/filesystems'
|
||||
|
||||
if os.path.isfile(PATH_PROCFS) and os.access(PATH_PROCFS, os.R_OK):
|
||||
with open(PATH_PROCFS, 'r') as procfile:
|
||||
filesystems = procfile.read()
|
||||
filesystems = filesystems.replace(
|
||||
"nodev", "").replace("\t", "").splitlines()
|
||||
return filesystems
|
||||
|
||||
return []
|
||||
|
||||
|
||||
def run():
|
||||
"""
|
||||
Unsquash filesystem.
|
||||
"""
|
||||
PATH_PROCFS = '/proc/filesystems'
|
||||
|
||||
root_mount_point = globalstorage.value("rootMountPoint")
|
||||
|
||||
if not root_mount_point:
|
||||
@ -279,28 +295,15 @@ def run():
|
||||
"globalstorage[\"rootMountPoint\"] is \"{}\", which does not "
|
||||
"exist, doing nothing".format(root_mount_point))
|
||||
|
||||
supported_filesystems = get_supported_filesystems()
|
||||
|
||||
unpack = list()
|
||||
|
||||
for entry in job.configuration["unpack"]:
|
||||
source = os.path.abspath(entry["source"])
|
||||
|
||||
sourcefs = entry["sourcefs"]
|
||||
|
||||
# Get supported filesystems
|
||||
fs_is_supported = False
|
||||
|
||||
if os.path.isfile(PATH_PROCFS) and os.access(PATH_PROCFS, os.R_OK):
|
||||
with open(PATH_PROCFS, 'r') as procfile:
|
||||
filesystems = procfile.read()
|
||||
filesystems = filesystems.replace(
|
||||
"nodev", "").replace("\t", "").splitlines()
|
||||
|
||||
# Check if the source filesystem is supported
|
||||
for fs in filesystems:
|
||||
if fs == sourcefs:
|
||||
fs_is_supported = True
|
||||
|
||||
if not fs_is_supported:
|
||||
if sourcefs not in supported_filesystems:
|
||||
return "Bad filesystem", "sourcefs=\"{}\"".format(sourcefs)
|
||||
|
||||
destination = os.path.abspath(root_mount_point + entry["destination"])
|
||||
|
Loading…
Reference in New Issue
Block a user