-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcname_main.py
More file actions
95 lines (67 loc) · 2.31 KB
/
cname_main.py
File metadata and controls
95 lines (67 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
gl-cname main entrypoint
"""
from functools import reduce
from os.path import basename, dirname
import argparse
import logging
import re
from .cname import CName
from .parser import Parser
from .__main__ import (
get_cname_base,
get_minimal_feature_set,
get_version_and_commit_id_from_files,
sort_subset,
)
def main():
"""
gl-cname main()
:since: 0.7.0
"""
parser = argparse.ArgumentParser()
parser.add_argument("--arch", dest="arch")
parser.add_argument("--commit", dest="commit")
parser.add_argument("--feature-dir", default="features")
parser.add_argument("--version", dest="version")
parser.add_argument("cname")
args = parser.parse_args()
re_match = re.match(
"([a-zA-Z0-9]+([\\_\\-][a-zA-Z0-9]+)*?)(-([a-z0-9]+)(-([a-z0-9.]+)-([a-z0-9]+))*)?$",
args.cname,
)
assert re_match, f"Not a valid GardenLinux canonical name {args.cname}"
arch = args.arch
commit_id = args.commit
gardenlinux_root = dirname(args.feature_dir)
version = args.version
if gardenlinux_root == "":
gardenlinux_root = "."
if not version:
try:
version, commit_id = get_version_and_commit_id_from_files(gardenlinux_root)
except RuntimeError as exc:
logging.warning(
"Failed to parse version information for GL root '{0}': {1}".format(
gardenlinux_root, exc
)
)
cname = CName(args.cname, arch=arch, commit_id=commit_id, version=version)
assert cname.arch, "Architecture could not be determined"
feature_dir_name = basename(args.feature_dir)
if gardenlinux_root == "":
gardenlinux_root = "."
graph = Parser(gardenlinux_root, feature_dir_name).filter(cname.flavor)
sorted_features = Parser.sort_graph_nodes(graph)
minimal_feature_set = get_minimal_feature_set(graph)
sorted_minimal_features = sort_subset(minimal_feature_set, sorted_features)
generated_cname = get_cname_base(sorted_minimal_features)
if cname.arch is not None:
generated_cname += f"-{cname.arch}"
if cname.version_and_commit_id is not None:
generated_cname += f"-{cname.version_and_commit_id}"
print(generated_cname)
if __name__ == "__main__":
main()