scripts: sd_fusing: fixes in check_sfdisk()
authorJacek Kryszyn <j.kryszyn@samsung.com>
Mon, 10 Jun 2024 07:44:10 +0000 (09:44 +0200)
committerŁukasz Stelmach <l.stelmach@samsung.com>
Wed, 4 Dec 2024 11:00:01 +0000 (12:00 +0100)
sfdisk can have a version number consisting of
{major}.{minor} or {major}.{minor}.{patch}. The new
version of check_sfdisk() handles this. In case of
a wrong version, a nicer error message which
explicitly shows minimum required version is printed.

Change-Id: I09614eabad8958ec4ac1bcc906ac09c2f5c6cbf2
Signed-off-by: Jacek Kryszyn <j.kryszyn@samsung.com>
sd_fusing.py

index 39b83ba7e0d0273086fe8eaa8ec3376272c78f4c..ef0e754896102760b3dfacee39a58cc1291ff70d 100755 (executable)
@@ -732,17 +732,32 @@ def device_size(device):
     return size
 
 def check_sfdisk():
+    min_major = 2
+    min_minor = 26
+    min_minor_del = 28
+
     proc = subprocess.run(['sfdisk', '-v'],
                           stdout=subprocess.PIPE)
     version = proc.stdout.decode('utf-8').strip()
     logging.debug(f"Found {version}")
-    major, minor = [int(x) for x in re.findall('[0-9]+', version)][0:2]
+    version_tokens = [int(x) for x in re.findall('[0-9]+', version)]
+
+    if len(version_tokens) == 3:
+        major, minor, patch = version_tokens[0:3]
+        version_str = f"{major}.{minor}.{patch}"
+    elif len(version_tokens) == 2:
+        major, minor = version_tokens[0:2]
+        version_str = f"{major}.{minor}"
+    else:
+        logging.warning("Did not read version of sfdisk correctly.")
+        return False,False
+
     support_delete = False
 
-    if major < 2 or major == 2 and minor < 26:
-        logging.error(f"Your sfdisk {major}.{minor}.{patch} is too old.")
+    if major < min_major or major == min_major and minor < min_minor:
+        logging.error(f"Your sfdisk {version_str} is too old. Please switch to at least {min_major}.{min_minor}")
         return False,False
-    elif major == 2 and minor >= 28:
+    elif major == min_major and minor >= min_minor_del:
         support_delete = True
 
     return True, support_delete