[unpackfs] Special-case file sources

This commit is contained in:
Adriaan de Groot 2019-09-30 16:47:39 +02:00
parent 7856c1a6a8
commit 27cdaba8b2

View File

@ -58,6 +58,9 @@ class UnpackEntry:
self.copied = 0 self.copied = 0
self.total = 0 self.total = 0
def is_file(self):
return self.sourcefs == "file"
ON_POSIX = 'posix' in sys.builtin_module_names ON_POSIX = 'posix' in sys.builtin_module_names
@ -247,9 +250,15 @@ class UnpackOperation:
""" """
Mount given image as loop device. Mount given image as loop device.
A *file* entry (e.g. one with *sourcefs* set to *file*)
is not mounted and just ignored.
:param entry: :param entry:
:param imgmountdir: :param imgmountdir:
""" """
if entry.is_file():
return
if os.path.isdir(entry.source): if os.path.isdir(entry.source):
subprocess.check_call(["mount", subprocess.check_call(["mount",
"--bind", entry.source, "--bind", entry.source,
@ -289,10 +298,11 @@ class UnpackOperation:
try: try:
return file_copy(imgmountdir, entry.destination, progress_cb) return file_copy(imgmountdir, entry.destination, progress_cb)
finally: finally:
if not entry.is_file():
subprocess.check_call(["umount", "-l", imgmountdir]) subprocess.check_call(["umount", "-l", imgmountdir])
def get_supported_filesystems(): def get_supported_filesystems_kernel():
""" """
Reads /proc/filesystems (the list of supported filesystems Reads /proc/filesystems (the list of supported filesystems
for the current kernel) and returns a list of (names of) for the current kernel) and returns a list of (names of)
@ -310,6 +320,14 @@ def get_supported_filesystems():
return [] return []
def get_supported_filesystems():
"""
Returns a list of all the supported filesystems
(valid values for the *sourcefs* key in an item.
"""
return ["file"] + get_supported_filesystems_kernel()
def run(): def run():
""" """
Unsquash filesystem. Unsquash filesystem.