11#!/usr/bin/env python3
22# -*- coding: utf-8 -*-
33
4+ from .cname import CName
45from .parser import Parser
56
67from functools import reduce
@@ -54,61 +55,43 @@ def main():
5455 ), "Please provide either `--features` or `--cname` argument"
5556
5657 arch = None
57- cname_base = None
58+ flavor = None
5859 commit_id = None
5960 gardenlinux_root = path .dirname (args .feature_dir )
6061 version = None
6162
62- if args .cname :
63- re_match = re .match (
64- "([a-zA-Z0-9]+([\\ _\\ -][a-zA-Z0-9]+)*?)(-([a-z0-9]+)(-([a-z0-9.]+)-([a-z0-9]+))*)?$" ,
65- args .cname ,
66- )
63+ if args .arch is not None :
64+ arch = args .arch
6765
68- assert re_match , f"Not a valid GardenLinux canonical name { args .cname } "
66+ if args .version is not None :
67+ version = args .version
6968
70- if re_match .lastindex == 1 :
71- data_splitted = re_match [1 ].split ("-" , 1 )
69+ if arch is None or arch == "" :
70+ arch = args .default_arch
71+
72+ if version is None or version == "" :
73+ version_data = get_version_and_commit_id_from_files (gardenlinux_root )
74+ version = f"{ version_data [0 ]} -{ version_data [1 ]} "
7275
73- cname_base = data_splitted [0 ]
76+ if args .cname :
77+ cname = CName (args .cname , arch = arch , version = version )
7478
75- if len (data_splitted ) > 1 :
76- if args .arch is None :
77- arch = data_splitted [1 ]
78- else :
79- cname_base += "-" + data_splitted [1 ]
80- else :
81- arch = re_match [4 ]
82- cname_base = re_match [1 ]
83- commit_id = re_match [7 ]
84- version = re_match [6 ]
79+ arch = cname .arch
80+ flavor = cname .flavor
81+ commit_id = cname .commit_id
82+ version = cname .version
8583
86- input_features = Parser .get_cname_as_feature_set (cname_base )
84+ input_features = Parser .get_cname_as_feature_set (flavor )
8785 else :
8886 input_features = args .features
8987
90- if args .arch is not None :
91- arch = args .arch
92-
93- if args .version is not None :
94- re_match = re .match ("([a-z0-9.]+)(-([a-z0-9]+))?$" , args .version )
95- assert re_match , f"Not a valid version { args .version } "
96-
97- commit_id = re_match [3 ]
98- version = re_match [1 ]
99-
10088 if arch is None or arch == "" and (args .type in ("cname" , "arch" )):
101- assert (
102- args .default_arch
103- ), "Architecture could not be determined and no default architecture set"
104- arch = args .default_arch
105-
106- if not commit_id or not version :
107- version , commit_id = get_version_and_commit_id_from_files (gardenlinux_root )
89+ raise RuntimeError (
90+ "Architecture could not be determined and no default architecture set"
91+ )
10892
109- if not version and (args .type in ("cname" , "version" )):
110- assert args .default_version , "version not specified and no default version set"
111- version = args .default_version
93+ if version is None or version == "" and (args .type in ("cname" , "version" )):
94+ raise RuntimeError ("Version not specified and no default version set" )
11295
11396 feature_dir_name = path .basename (args .feature_dir )
11497
@@ -124,7 +107,7 @@ def main():
124107 print (arch )
125108 elif args .type in ("cname_base" , "cname" , "graph" ):
126109 graph = Parser (gardenlinux_root , feature_dir_name ).filter (
127- cname_base , additional_filter_func = additional_filter_func
110+ flavor , additional_filter_func = additional_filter_func
128111 )
129112
130113 sorted_features = Parser .sort_graph_nodes (graph )
@@ -137,7 +120,7 @@ def main():
137120 if args .type == "cname_base" :
138121 print (cname_base )
139122 elif args .type == "cname" :
140- cname = cname_base
123+ cname = flavor
141124
142125 if arch is not None :
143126 cname += f"-{ arch } "
@@ -147,16 +130,16 @@ def main():
147130
148131 print (cname )
149132 elif args .type == "graph" :
150- print (graph_as_mermaid_markup (cname_base , graph ))
133+ print (graph_as_mermaid_markup (flavor , graph ))
151134 elif args .type == "features" :
152135 print (
153136 Parser (gardenlinux_root , feature_dir_name ).filter_as_string (
154- cname_base , additional_filter_func = additional_filter_func
137+ flavor , additional_filter_func = additional_filter_func
155138 )
156139 )
157140 elif args .type in ("flags" , "elements" , "platforms" ):
158141 features_by_type = Parser (gardenlinux_root , feature_dir_name ).filter_as_dict (
159- cname_base , additional_filter_func = additional_filter_func
142+ flavor , additional_filter_func = additional_filter_func
160143 )
161144
162145 if args .type == "platforms" :
@@ -194,15 +177,15 @@ def get_minimal_feature_set(graph):
194177 return set ([node for (node , degree ) in graph .in_degree () if degree == 0 ])
195178
196179
197- def graph_as_mermaid_markup (cname_base , graph ):
180+ def graph_as_mermaid_markup (flavor , graph ):
198181 """
199182 Generates a mermaid.js representation of the graph.
200183 This is helpful to identify dependencies between features.
201184
202185 Syntax docs:
203186 https://mermaid.js.org/syntax/flowchart.html?id=flowcharts-basic-syntax
204187 """
205- markup = f"---\n title: Dependency Graph for Feature { cname_base } \n ---\n graph TD;\n "
188+ markup = f"---\n title: Dependency Graph for Feature { flavor } \n ---\n graph TD;\n "
206189 for u , v in graph .edges :
207190 markup += f" { u } -->{ v } ;\n "
208191 return markup
0 commit comments