From a14604a1b642e41e53b09df7b9b0eabd684045a0 Mon Sep 17 00:00:00 2001 From: Werner Llácer Date: Mon, 25 Apr 2022 08:57:49 +0200 Subject: Created a routine to check if a partition includes a certain mountpoint (#1069) For a btrfs volume with a subvolume to be mounted on /, we will not generate a keyfile anymore --- archinstall/lib/disk/helpers.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'archinstall/lib/disk/helpers.py') diff --git a/archinstall/lib/disk/helpers.py b/archinstall/lib/disk/helpers.py index 30c47666..2f73b2bd 100644 --- a/archinstall/lib/disk/helpers.py +++ b/archinstall/lib/disk/helpers.py @@ -440,3 +440,35 @@ def convert_device_to_uuid(path :str) -> str: time.sleep(storage['DISK_TIMEOUTS']) raise DiskError(f"Could not retrieve the UUID of {path} within a timely manner.") + +def has_mountpoint(partition: Union[dict,Partition,MapperDev], target: str, strict: bool = True) -> bool: + """ Determine if a certain partition is mounted (or has a mountpoint) as specific target (path) + Coded for clarity rather than performance + + Input parms: + :parm partition the partition we check + :type Either a Partition object or a dict with the contents of a partition definiton in the disk_layouts schema + + :parm target (a string representing a mount path we want to check for. + :type str + + :parm strict if the check will be strict, target is exactly the mountpoint, or no, where the target is a leaf (f.i. to check if it is in /mnt/archinstall/). Not available for root check ('/') for obvious reasons + + """ + # we create the mountpoint list + if isinstance(partition,dict): + subvols = partition.get('btrfs',{}).get('subvolumes',{}) + mountpoints = [partition.get('mountpoint'),] + [subvols[subvol] if isinstance(subvols[subvol],str) or not subvols[subvol] else subvols[subvol].get('mountpoint') for subvol in subvols] + else: + mountpoints = [partition.mountpoint,] + [subvol.target for subvol in partition.subvolumes] + # we check + if strict or target == '/': + if target in mountpoints: + return True + else: + return False + else: + for mp in mountpoints: + if mp and mp.endswith(target): + return True + return False -- cgit v1.2.3-70-g09d2