-
Notifications
You must be signed in to change notification settings - Fork 33
Expand file tree
/
Copy pathReleaseExportEditorPlugin.gd
More file actions
130 lines (105 loc) · 3.72 KB
/
Copy pathReleaseExportEditorPlugin.gd
File metadata and controls
130 lines (105 loc) · 3.72 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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
extends EditorExportPlugin
var _repo_hash: StringName = "0000000000000000000000000000000000000000"
var _repo_short_hash: StringName = "0000000"
var _repo_tag: StringName = "<tag missing>"
var _repo_release_name: StringName = "<release name missing>"
func _get_name():
return "OpenVic-ReleaseExportEditorPlugin"
func _export_file(path: String, type: String, features: PackedStringArray) -> void:
if path != "res://src/GIT_INFO.gd":
return
var GitInfoScript: String = ""
_get_commit_long()
_get_commit_short()
_get_tag()
_get_release_name()
GitInfoScript = "class_name _GIT_INFO_\nextends RefCounted\n\n"
GitInfoScript += 'const commit_hash : StringName = &"' + _repo_hash + '"\n'
GitInfoScript += 'const short_hash : StringName = &"' + _repo_short_hash + '"\n'
GitInfoScript += 'const tag : StringName = &"' + _repo_tag + '"\n'
GitInfoScript += 'const release_name : StringName = &"' + _repo_release_name + '"\n'
add_file(path, GitInfoScript.to_ascii_buffer(), false)
skip()
# Based on
# https://github.com/godotengine/godot/blob/6ef2f358c741c993b5cdc9680489e2c4f5da25cc/methods.py#L102-L133
# REQUIREMENTS:
# * UIFUN-298
var _cached_hash: StringName = &""
func _get_commit_hash() -> StringName:
if not _cached_hash.is_empty():
return _cached_hash
var git_hash := OS.get_environment("OPENVIC_COMMIT")
if not git_hash.is_empty():
_cached_hash = git_hash
return git_hash
var git_folder := "../.git"
if FileAccess.file_exists(git_folder):
var module_folder := FileAccess.open(git_folder, FileAccess.READ).get_line().strip_edges()
if module_folder.begins_with("gitdir: "):
git_folder = module_folder.substr(8)
if FileAccess.file_exists(git_folder.path_join("HEAD")):
var head := (
FileAccess.open(git_folder.path_join("HEAD"), FileAccess.READ).get_line().strip_edges()
)
if head.begins_with("ref: "):
var ref := head.substr(5)
var parts := git_folder.split("/")
if len(parts) > 2 and parts[len(parts) - 2] == "worktrees":
git_folder = "/".join(parts.slice(0, len(parts) - 2))
head = git_folder.path_join(ref)
var packedrefs := git_folder.path_join("packed-refs")
if FileAccess.file_exists(head):
git_hash = FileAccess.open(head, FileAccess.READ).get_line().strip_edges()
elif FileAccess.file_exists(packedrefs):
for line in FileAccess.open(packedrefs, FileAccess.READ).get_as_text().split(
"\n", false
):
if line.begins_with("#"):
continue
var line_split := line.split(" ")
var line_hash := line_split[0]
var line_ref = line_split[1]
if ref == line_ref:
git_hash = line_hash
break
else:
git_hash = head
_cached_hash = git_hash
return git_hash
# REQUIREMENTS:
# * UIFUN-296
func _try_get_tag() -> StringName:
var result: StringName = OS.get_environment("OPENVIC_TAG")
if result.is_empty():
var git_output := []
if OS.execute("git", ["describe", "--tags", "--abbrev=0"], git_output) == -1:
push_warning("Could not retrieve repository tag.")
return &""
result = git_output[0].trim_suffix("\n")
return result
func _get_commit_long():
var result := _get_commit_hash()
if not result.is_empty():
_repo_hash = result
print("Hash: " + _repo_hash)
# REQUIREMENTS:
# * UIFUN-300
func _get_commit_short():
var result := _get_commit_hash().substr(0, 7)
if not result.is_empty():
_repo_short_hash = result
print("Short Hash: " + _repo_short_hash)
func _get_tag():
var result := _try_get_tag()
if not result.is_empty():
_repo_tag = result
print("Tag: " + _repo_tag)
# REQUIREMENTS:
# * UIFUN-295
func _get_release_name():
var result: StringName = OS.get_environment("OPENVIC_RELEASE")
if result.is_empty():
result = _try_get_tag()
if not result.is_empty():
_repo_release_name = result
print("Release Name: " + _repo_release_name)