This commit is contained in:
Kovid Goyal 2022-08-26 10:52:10 +05:30
parent b1f9139ca5
commit 841b368021
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 34 additions and 16 deletions

View File

@ -2,9 +2,11 @@
# License: GPLv3 Copyright: 2022, Kovid Goyal <kovid at kovidgoyal.net>
import json
import io
import os
import subprocess
from typing import Dict, List, Tuple, Union
from contextlib import contextmanager
from typing import Dict, Iterator, List, Tuple, Union
import kitty.constants as kc
from kittens.tui.operations import Mode
@ -16,6 +18,9 @@ from kitty.key_names import (
from kitty.rc.base import RemoteCommand, all_command_names, command_for_name
changed: List[str] = []
def serialize_as_go_string(x: str) -> str:
return x.replace('\\', '\\\\').replace('\n', '\\n').replace('"', '\\"')
@ -210,11 +215,10 @@ def load_ref_map() -> Dict[str, Dict[str, str]]:
return data # type: ignore
def main() -> None:
def generate_constants() -> str:
ref_map = load_ref_map()
with open('constants_generated.go', 'w') as f:
dp = ", ".join(map(lambda x: f'"{serialize_as_go_string(x)}"', kc.default_pager_for_help))
f.write(f'''\
dp = ", ".join(map(lambda x: f'"{serialize_as_go_string(x)}"', kc.default_pager_for_help))
return f'''\
// auto-generated by {__file__} do no edit
package kitty
@ -235,7 +239,23 @@ var CharacterKeyNameAliases = map[string]string{serialize_go_dict(character_key_
var ConfigModMap = map[string]uint16{serialize_go_dict(config_mod_map)}
var RefMap = map[string]string{serialize_go_dict(ref_map['ref'])}
var DocTitleMap = map[string]string{serialize_go_dict(ref_map['doc'])}
''')
'''
@contextmanager
def replace_if_needed(path: str) -> Iterator[io.StringIO]:
buf = io.StringIO()
yield buf
with open(path, 'r') as f:
orig = f.read()
new = buf.getvalue()
if orig != new:
changed.append(path)
with open(path, 'w') as f:
f.write(new)
def update_at_commands() -> None:
with open('tools/cmd/at/template.go') as f:
template = f.read()
for name in all_command_names():
@ -252,5 +272,12 @@ var DocTitleMap = map[string]string{serialize_go_dict(ref_map['doc'])}
raise SystemExit(cp.returncode)
def main() -> None:
with replace_if_needed('constants_generated.go') as f:
f.write(generate_constants())
update_at_commands()
print(json.dumps(changed, indent=2))
if __name__ == '__main__':
main()

View File

@ -880,18 +880,9 @@ def safe_makedirs(path: str) -> None:
def update_go_generated_files(args: Options, kitty_exe: str) -> None:
# update all the various auto-generated go files, if needed
rc_sources = [x for x in glob.glob('kitty/rc/*.py') if os.path.basename(x) not in ('base.py', '__init__.py')]
rc_objects = glob.glob('tools/cmd/at/*_generated.go')
generated = rc_objects + glob.glob('constants_generated.go')
sources = ['gen-rc-go.py', 'kitty/constants.py', 'setup.py', 'kitty/docs_ref_map_generated.h', 'tools/cmd/at/template.go'] + rc_sources
if generated:
oldest_generated = min(map(os.path.getmtime, generated))
newest_source = max(map(os.path.getmtime, sources))
if oldest_generated > newest_source and len(rc_sources) == len(rc_objects) and 'constants_generated.go' in generated:
return
if args.verbose:
print('Updating Go generated files...')
cp = subprocess.run([kitty_exe, '+launch', os.path.join(base, 'gen-rc-go.py')])
cp = subprocess.run([kitty_exe, '+launch', os.path.join(base, 'gen-rc-go.py')], stdout=subprocess.PIPE)
if cp.returncode != 0:
raise SystemExit(cp.returncode)