@@ -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,15 +332,27 @@ 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+ version = ""
355+
324356 metadata = f"""
325357ID={ GL_RELEASE_ID }
326358ID_LIKE=debian
@@ -338,9 +370,9 @@ def release_metadata_string(self) -> str:
338370GARDENLINUX_FEATURES_FLAGS="{ flags } "
339371GARDENLINUX_PLATFORM="{ platform } "
340372GARDENLINUX_PLATFORM_VARIANT="{ platform_variant } "
341- GARDENLINUX_VERSION="{ self . version } "
342- GARDENLINUX_COMMIT_ID="{ self . commit_id } "
343- GARDENLINUX_COMMIT_ID_LONG="{ self . commit_hash } "
373+ GARDENLINUX_VERSION="{ version } "
374+ GARDENLINUX_COMMIT_ID="{ commit_id } "
375+ GARDENLINUX_COMMIT_ID_LONG="{ commit_hash } "
344376 """ .strip ()
345377
346378 return metadata
0 commit comments