#!/usr/bin/env python3 import argparse import base64 import pathlib import requests import subprocess import typing def error(msg: str) -> None: print('\033[31m' + msg + '\033[0m') class Source: def __init__(self, filename: str, url: typing.Optional[str], template: typing.Optional[str] = None, remove: typing.Optional[str] = None): self.file = pathlib.Path(filename) self.url = url self.template = template self.remove = remove def sync(self) -> None: if self.url is None: return print('Syncing {}...'.format(self.file), end=' ', flush=True) req = requests.get(self.url) if not req.ok: error('Failed to retrieve file: {} {}'.format(req.status_code, req.reason)) return content = req.content content = str(content, encoding='utf-8') if self.remove is not None: content = content.replace(self.remove, '') if self.template is not None: content = self.template % content with open(self.file, 'w') as f: f.write(content) print('Done') # rtinspector needs the docking branch of imgui BASE_URL = 'https://raw.githubusercontent.com/ocornut/imgui/refs/heads/docking' SOURCES = [ Source('src/imgui/backends/imgui_impl_sdl3.cpp', f'{BASE_URL}/backends/imgui_impl_sdl3.cpp'), Source('src/imgui/backends/imgui_impl_sdl3.h', f'{BASE_URL}/backends/imgui_impl_sdl3.h'), Source('src/imgui/backends/imgui_impl_vulkan.cpp', f'{BASE_URL}/backends/imgui_impl_vulkan.cpp'), Source('src/imgui/backends/imgui_impl_vulkan.h', f'{BASE_URL}/backends/imgui_impl_vulkan.h'), Source('src/imgui/imconfig.h', f'{BASE_URL}/imconfig.h'), Source('src/imgui/imgui.cpp', f'{BASE_URL}/imgui.cpp'), Source('src/imgui/imgui.h', f'{BASE_URL}/imgui.h'), Source('src/imgui/imgui_draw.cpp', f'{BASE_URL}/imgui_draw.cpp'), Source('src/imgui/imgui_internal.h', f'{BASE_URL}/imgui_internal.h'), Source('src/imgui/imgui_tables.cpp', f'{BASE_URL}/imgui_tables.cpp'), Source('src/imgui/imgui_widgets.cpp', f'{BASE_URL}/imgui_widgets.cpp'), Source('src/imgui/imstb_rectpack.h', f'{BASE_URL}/imstb_rectpack.h'), Source('src/imgui/imstb_textedit.h', f'{BASE_URL}/imstb_textedit.h'), Source('src/imgui/imstb_truetype.h', f'{BASE_URL}/imstb_truetype.h'), ] if __name__ == '__main__': git_toplevel = subprocess.check_output(['git', 'rev-parse', '--show-toplevel'], stderr=subprocess.DEVNULL).decode("ascii").strip() if not pathlib.Path(git_toplevel).resolve() == pathlib.Path('.').resolve(): error('Please run this script from the root folder ({})'.format(git_toplevel)) exit(1) for source in SOURCES: source.sync()