1745 wystapien w 291 plikach (backend, scripts, mobile). Dominowal jeden ksztalt, ' — ' laczace zdania, wiec poszedl przecinek; myslnik otwierajacy mysl zdjety; zakresy 0–5 i A–Z na dywiz. Podzial komentarz/kod robil skaner stanow, nie regex, zeby nie ruszyc myslnika stojacego w stringu albo w wyrazeniu regularnym. Potwierdzone maszynowo: po wycieciu komentarzy z wersji HEAD i z dysku obie sa identyczne we wszystkich 291 plikach, czyli poza komentarzami nie zmienilo sie nic. 233 pliki .py parsuja sie bez bledu, tsc ma te same 11 bledow w tych samych 3 plikach co przed zmiana. Dwie rzeczy wymagaly poprawki po automacie: wyrownane listy definicji, gdzie myslnik byl separatorem kolumny (37 miejsc, kolumna przywrocona), i trzy przeniesienia mysli do nowej linii, gdzie zostawal wiszacy przecinek na poczatku (poprawione recznie). Bundla nie republikuje: Hermes i tak nie niesie komentarzy, wiec dla uzytkownika to zero zmiany. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
"""One-shot: napraw manifest.json dla istniejącego OTA update'u.
|
|
|
|
Bugs:
|
|
1. Windows publish wpisywał `assets\<hash>` (os.sep) do URL'i.
|
|
2. URL hosta ustawiony na 'goon-app.invalid:8443' który nie ma DNS,
|
|
mobile nie pobierze assetów. Właściwy host: api.goon-foss.org (port 443).
|
|
|
|
Normalizujemy `\` → `/` i podmieniamy hosta na CORRECT_HOST.
|
|
"""
|
|
import json
|
|
import sys
|
|
|
|
CORRECT_HOST_PREFIX = "https://api.goon-foss.org/expo-updates/asset"
|
|
WRONG_HOST_PREFIXES = [
|
|
"https://goon-app.invalid:8443/expo-updates/asset",
|
|
]
|
|
|
|
|
|
def fix_url(u: str) -> tuple[str, bool]:
|
|
new = u.replace("\\", "/")
|
|
for wrong in WRONG_HOST_PREFIXES:
|
|
if new.startswith(wrong):
|
|
new = new.replace(wrong, CORRECT_HOST_PREFIX, 1)
|
|
break
|
|
return new, new != u
|
|
|
|
|
|
def main() -> int:
|
|
if len(sys.argv) != 2:
|
|
print("usage: _patch_manifest.py <manifest.json path>")
|
|
return 1
|
|
|
|
path = sys.argv[1]
|
|
m = json.load(open(path))
|
|
fixed = 0
|
|
for a in m.get("assets", []):
|
|
new, ch = fix_url(a["url"])
|
|
if ch:
|
|
a["url"] = new
|
|
fixed += 1
|
|
la = m.get("launchAsset", {})
|
|
if "url" in la:
|
|
new, ch = fix_url(la["url"])
|
|
if ch:
|
|
la["url"] = new
|
|
fixed += 1
|
|
with open(path, "w") as f:
|
|
json.dump(m, f, indent=2)
|
|
print(f"patched {fixed} URLs in {path}")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|