@@ -69,17 +69,46 @@ def __init__(
6969
7070 commit_id_or_hash = None
7171
72- re_match = re .match (
73- "([a-zA-Z0-9]+([\\ _\\ -][a-zA-Z0-9]+)*?)(-([a-z0-9]+)(-([a-z0-9.]+)-([a-z0-9]+))*)?$" ,
74- cname ,
72+ if version is not None :
73+ # Support version values formatted as <version>-<commit_hash>
74+ if commit_hash is None :
75+ re_match = re .match ("([a-z0-9.]+)(-([a-z0-9]+))?$" , version )
76+ assert re_match , f"Not a valid version { version } "
77+
78+ commit_id_or_hash = re_match [3 ]
79+ version = re_match [1 ]
80+ else :
81+ commit_id_or_hash = commit_hash
82+
83+ re_object = re .compile (
84+ "([a-zA-Z0-9]+([\\ _\\ -][a-zA-Z0-9]+)*?)(-([a-z0-9]+)(-([a-z0-9.]+)-([a-z0-9]+))*)?$"
7585 )
7686
87+ re_match = re_object .match (cname )
88+
89+ # Workaround Garden Linux canonical names without mandatory final commit hash
90+ if (
91+ not re_match
92+ and commit_id_or_hash
93+ and re .match (
94+ "([a-zA-Z0-9]+([\\ _\\ -][a-zA-Z0-9]+)*?)(-([a-z0-9]+)(-([a-z0-9.]+))*)?$" ,
95+ cname ,
96+ )
97+ ):
98+ re_match = re_object .match (f"{ cname } -{ commit_id_or_hash } " )
99+
77100 assert re_match , f"Not a valid Garden Linux canonical name { cname } "
78101
79102 if re_match .lastindex == 1 :
80103 self ._flavor = re_match [1 ]
81104 else :
82- commit_id_or_hash = re_match [7 ]
105+ if commit_id_or_hash is None :
106+ commit_id_or_hash = re_match [7 ]
107+ elif re_match .group (7 ) is not None :
108+ assert commit_id_or_hash .startswith (re_match [7 ]), (
109+ f"Mismatch between Garden Linux canonical name { cname } and given commit ID { commit_id_or_hash } detected"
110+ )
111+
83112 self ._flavor = re_match [1 ]
84113 self ._version = re_match [6 ]
85114
@@ -92,16 +121,7 @@ def __init__(
92121 self ._arch = arch
93122
94123 if self ._version is None and version is not None :
95- # Support version values formatted as <version>-<commit_hash>
96- if commit_hash is None :
97- re_match = re .match ("([a-z0-9.]+)(-([a-z0-9]+))?$" , version )
98- assert re_match , f"Not a valid version { version } "
99-
100- commit_id_or_hash = re_match [3 ]
101- self ._version = re_match [1 ]
102- else :
103- commit_id_or_hash = commit_hash
104- self ._version = version
124+ self ._version = version
105125
106126 if commit_id_or_hash is not None :
107127 self ._commit_id = commit_id_or_hash [:8 ]
@@ -312,21 +332,36 @@ def release_metadata_string(self) -> str:
312332 assert len (features ["platform" ]) < 2
313333 "Only one platform is supported"
314334
335+ commit_hash = self .commit_hash
336+ commit_id = self .commit_id
315337 elements = "," .join (features ["element" ])
316338 flags = "," .join (features ["flag" ])
317339 platform = features ["platform" ][0 ]
318340 platforms = "," .join (features ["platform" ])
319341 platform_variant = self .platform_variant
342+ version = self .version
343+
344+ if commit_id is None :
345+ commit_id = ""
346+
347+ if commit_hash is None :
348+ commit_hash = commit_id
320349
321350 if platform_variant is None :
322351 platform_variant = ""
323352
353+ if version is None :
354+ pretty_name = f"{ GL_DISTRIBUTION_NAME } unsupported version"
355+ version = ""
356+ else :
357+ pretty_name = f"{ GL_DISTRIBUTION_NAME } { version } "
358+
324359 metadata = f"""
325360ID={ GL_RELEASE_ID }
326361ID_LIKE=debian
327362NAME="{ GL_DISTRIBUTION_NAME } "
328- PRETTY_NAME="{ GL_DISTRIBUTION_NAME } { self . version } "
329- IMAGE_VERSION={ self . version }
363+ PRETTY_NAME="{ pretty_name } "
364+ IMAGE_VERSION={ version }
330365VARIANT_ID="{ self .flavor } -{ self .arch } "
331366HOME_URL="{ GL_HOME_URL } "
332367SUPPORT_URL="{ GL_SUPPORT_URL } "
@@ -338,9 +373,9 @@ def release_metadata_string(self) -> str:
338373GARDENLINUX_FEATURES_FLAGS="{ flags } "
339374GARDENLINUX_PLATFORM="{ platform } "
340375GARDENLINUX_PLATFORM_VARIANT="{ platform_variant } "
341- GARDENLINUX_VERSION="{ self . version } "
342- GARDENLINUX_COMMIT_ID="{ self . commit_id } "
343- GARDENLINUX_COMMIT_ID_LONG="{ self . commit_hash } "
376+ GARDENLINUX_VERSION="{ version } "
377+ GARDENLINUX_COMMIT_ID="{ commit_id } "
378+ GARDENLINUX_COMMIT_ID_LONG="{ commit_hash } "
344379 """ .strip ()
345380
346381 return metadata
@@ -365,7 +400,7 @@ def version_and_commit_id(self) -> Optional[str]:
365400 :since: 0.7.0
366401 """
367402
368- if self ._commit_id is None :
403+ if self ._version is None or self . _commit_id is None :
369404 return None
370405
371406 return f"{ self ._version } -{ self ._commit_id } "
0 commit comments