#!/usr/bin/env python3 """Install the two small command hooks in a server source tree, keeping byte encoding intact.""" from pathlib import Path import shutil import sys source, stage = map(Path, sys.argv[1:3]) here = Path(__file__).resolve().parent for filename, marker, insertion in ( ('cmd_general.cpp', b'#include "autohunt_pull.h"', b'\n#include "biolog_remote.h"'), ('cmd.cpp', b'ACMD(do_server_bonuses);', b'\nACMD(do_port_biolog);'), ): path = source / filename data = path.read_bytes() if insertion.strip() not in data: if data.count(marker) != 1: raise RuntimeError('source hook mismatch: ' + str(path)) data = data.replace(marker, marker + insertion) if filename == 'cmd.cpp' and b'{ "biolog",' not in data: marker = b'\t{ "server_bonuses",' if data.count(marker) != 1: raise RuntimeError('command registry mismatch') data = data.replace(marker, b'\t{ "biolog", do_port_biolog, 0, POS_DEAD, GM_PLAYER },\n' + marker) if filename == 'cmd.cpp' and b'{ "bio",' not in data: marker = b'\t{ "biolog",' data = data.replace(marker, b'\t{ "bio", do_port_biolog, 0, POS_DEAD, GM_PLAYER },\n' + marker) path.write_bytes(data) for name, root in [('biolog_remote.h', here), ('ava2_biolog_core.h', here), ('ava2_biolog_shop.h', here)]: shutil.copy2(root / name, source / name)