Files
2023-11-16 22:28:11 -05:00

162 lines
3.6 KiB
Python
Executable File

#!/usr/bin/env python3
from __future__ import print_function
import time
import argparse
import os
import pathlib
import subprocess
import shutil
# The path to Ren'Py.
RENPY = pathlib.Path(__file__).resolve().parent.parent
# The path to Tests.
TESTS = RENPY.parent / os.environ.get("RENPY_TESTS", "tests")
# The currently-selected test.
CURRENT = TESTS / 'current'
def list_command(args):
modtimes = [ ]
for i in TESTS.iterdir():
if not i.is_dir():
continue
if i.is_symlink():
continue
modtimes.append((i.stat().st_ctime, i))
modtimes.sort()
if not args.all:
last = modtimes[-1][0]
modtimes = [ i for i in modtimes if i[0] > last - 7 * 86400 ]
for t, p in modtimes:
print(time.strftime("%Y-%m-%d %H:%M", time.localtime(t)), p.name)
def select(dn):
p = pathlib.Path(dn)
if CURRENT.is_symlink():
CURRENT.unlink()
CURRENT.symlink_to(p)
subprocess.run([
RENPY / "run.sh",
RENPY / "launcher",
"set_project",
TESTS / dn,
])
def select_command(args):
select(args.path)
def selected_command(args):
print(CURRENT.resolve().name)
def edit_command(args):
subprocess.call([ "code", CURRENT.resolve(), CURRENT.resolve() / "game/script.rpy" ])
def new_command(args):
p = TESTS / pathlib.Path(args.name)
if p.exists():
if not args.force:
print(f'{p} exists.')
return
shutil.rmtree(p)
shutil.copytree(RENPY / 'gui', p)
shutil.copy(RENPY / 'scripts/rt/script.rpy', p / 'game')
shutil.copy(RENPY / 'scripts/rt/augustina.rpy', p / 'game')
subprocess.call([
RENPY / "run.sh",
RENPY / "launcher",
"generate_gui",
"--start",
"--width", "1280",
"--template", RENPY / "gui",
p])
def copy(src, dst):
for i in RENPY.glob(src):
shutil.copy(i, p / dst)
copy("tutorial/game/images/eileen *", "game/images")
copy("tutorial/game/images/lucy *", "game/images")
copy("tutorial/game/images/bg *", "game/images")
copy("scripts/rt/*.png", "game/images")
(p / "project.json").unlink()
(p / "game" / "guisupport.rpy").unlink()
(p / "game" / "guisupport.rpyc").unlink()
select(p)
edit_command(None)
def run_command(args):
dash_args = [ i for i in args.args if i.startswith("-") if (i != "--") ]
nodash_args = [ i for i in args.args if not i.startswith("-") ]
if args.lint:
dash_args.insert(0, "--lint")
if args.compile:
dash_args.insert(0, "--compile")
args = [ RENPY / "run.sh" ] + dash_args + [ CURRENT.resolve() ] + nodash_args
os.execv(args[0], args)
def main():
ap = argparse.ArgumentParser()
asp = ap.add_subparsers()
sp = asp.add_parser('list')
sp.set_defaults(func=list_command)
sp.add_argument("--all", action='store_true')
sp = asp.add_parser('select')
sp.set_defaults(func=select_command)
sp.add_argument("path")
sp = asp.add_parser('selected')
sp.set_defaults(func=selected_command)
sp = asp.add_parser('edit')
sp.set_defaults(func=edit_command)
sp = asp.add_parser('new', aliases=['project'])
sp.set_defaults(func=new_command)
sp.add_argument("name")
sp.add_argument("--force", action='store_true')
sp = asp.add_parser('run')
sp.set_defaults(func=run_command)
sp.add_argument("--lint", action="store_true")
sp.add_argument("--compile", action="store_true")
sp.add_argument("args", nargs=argparse.REMAINDER)
args = ap.parse_args()
args.func(args)
if __name__ == "__main__":
main()