Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/archinstall/lib
diff options
context:
space:
mode:
authorAnton Hvornum <anton@hvornum.se>2021-02-07 15:25:34 +0100
committerAnton Hvornum <anton@hvornum.se>2021-02-07 15:25:34 +0100
commita5a6ff4d31aa23dfaceca3973166a24dba4ccd0f (patch)
tree4ed3edee8193f77dc1c93f7f3ba522e50f9ae5ee /archinstall/lib
parent759b7787439e49c03cc330cf0500977c0b83696e (diff)
Added an early check for filesystem compatability. Since we need to handle unique packages etc for certain filesystem formats. This early check can be caught and ignored if the programmer/user wants to override the check and continue anyway. But the default should be to stop all execution to not install a half-working system.
Diffstat (limited to 'archinstall/lib')
-rw-r--r--archinstall/lib/disk.py18
-rw-r--r--archinstall/lib/exceptions.py2
2 files changed, 17 insertions, 3 deletions
diff --git a/archinstall/lib/disk.py b/archinstall/lib/disk.py
index 93d24613..e23e354c 100644
--- a/archinstall/lib/disk.py
+++ b/archinstall/lib/disk.py
@@ -138,14 +138,26 @@ class Partition():
self.mountpoint = partition_info['target']
self.filesystem = partition_info['fstype']
+ # We perform a dummy format on /dev/null with the given filesystem-type
+ # in order to determain if we support it or not.
+ try:
+ self.format(self.filesystem, '/dev/null')
+ except DiskError:
+ pass # We supported it, but /dev/null is not formatable as expected
+ except UnknownFilesystemFormat as err:
+ raise err
+
def __repr__(self, *args, **kwargs):
if self.encrypted:
return f'Partition(path={self.path}, real_device={self.real_device}, fs={self.filesystem}, mounted={self.mountpoint})'
else:
return f'Partition(path={self.path}, fs={self.filesystem}, mounted={self.mountpoint})'
- def format(self, filesystem):
- log(f'Formatting {self} -> {filesystem}', level=LOG_LEVELS.Info)
+ def format(self, filesystem, path=None):
+ if not path:
+ path = self.path
+
+ log(f'Formatting {path} -> {filesystem}', level=LOG_LEVELS.Info)
if filesystem == 'btrfs':
o = b''.join(sys_command(f'/usr/bin/mkfs.btrfs -f {self.path}'))
if b'UUID' not in o:
@@ -169,7 +181,7 @@ class Partition():
raise DiskError(f'Could not format {self.path} with {filesystem} because: {b"".join(handle)}')
self.filesystem = 'f2fs'
else:
- raise DiskError(f'Fileformat {filesystem} is not yet implemented.')
+ raise UnknownFilesystemFormat(f'Fileformat '{filesystem}' is not yet implemented.')
return True
def find_parent_of(self, data, name, parent=None):
diff --git a/archinstall/lib/exceptions.py b/archinstall/lib/exceptions.py
index 84e6a766..a7864a23 100644
--- a/archinstall/lib/exceptions.py
+++ b/archinstall/lib/exceptions.py
@@ -2,6 +2,8 @@ class RequirementError(BaseException):
pass
class DiskError(BaseException):
pass
+class UnknownFilesystemFormat(BaseException):
+ pass
class ProfileError(BaseException):
pass
class SysCallError(BaseException):