-
Notifications
You must be signed in to change notification settings - Fork 2
/
generate-descriptor.py
48 lines (39 loc) · 1.22 KB
/
generate-descriptor.py
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
import json
import os
import sys
from dirhash import dirhash
input_methods = sys.argv[1:]
cwd = os.getcwd()
data_dir = f"{cwd}/../data"
plugin = cwd.split("/")[-3] # /path/to/rime/tmp/fcitx5
files: list[str] = []
for wd in (cwd, data_dir):
for dirpath, _, filenames in os.walk(wd):
if dirpath == f"{wd}/plugin":
continue
for filename in filenames:
files.append(f"{dirpath[len(wd) + 1:]}/{filename}")
try:
version = dirhash(cwd, "md5", ignore=["plugin"])
except:
# pure data plugin
version = None
data_version = dirhash(data_dir, "md5")
# Both data/ and fcitx/ have to contain descriptor,
# so that updating either *-any or *-arm64 will update descriptor.
plugin_dir = f"{data_dir}/plugin"
os.makedirs(plugin_dir, exist_ok=True)
descriptor_path = f"{plugin_dir}/{plugin}.json"
with open(descriptor_path, "w") as f:
descriptor = {
"data_version": data_version,
"files": files
}
if version:
descriptor["version"] = version
if input_methods:
descriptor["input_methods"] = input_methods
json.dump(descriptor, f)
if version:
os.makedirs(f"{cwd}/plugin", exist_ok=True)
os.system(f"cp {descriptor_path} {cwd}/plugin/{plugin}.json")