Инсталлятор: убрана кириллица, ломавшая его на запуске
cmd.exe читает .cmd в системной кодировке, поэтому русские комментарии rem превращались в мусор, и cmd пытался выполнять обрывки строк как команды. Правило «в батниках только ASCII» уже было записано в шапке файла — и всё равно нарушено, поэтому теперь его проверяют тесты: любой .cmd проекта обязан быть чистым ASCII. Ещё две правки по итогам установки с нуля в чистой папке: - запись .env вынесена из блока if/else в метки: cmd неверно разбирает блок, внутри которого есть rem-строки и вызов PowerShell с переносами через ^, и сообщает только «The syntax of the command is incorrect»; - запуск приложения в конце идёт по полному пути, а не по имени start.cmd — относительное имя разрешается не во всех оболочках. Проверено установкой с нуля: клонирование анонимно из публичного репозитория, venv, зависимости, .env с выбранным адресом, ярлык на рабочем столе. Личные данные в архив не попадают — ни базы, ни фотографий, ни .env. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -177,6 +177,20 @@ config.DB_FILE.write_text("{ битый json", encoding="utf-8")
|
||||
r.check("битая база не роняет", c.get("/api/tree").status_code == 200)
|
||||
r.check("пустой ввод не роняет", "reply" in j("POST", "/api/say", text=" "))
|
||||
|
||||
print("\n== Батники: только ASCII ==")
|
||||
# cmd.exe читает .cmd в системной кодировке. Кириллица внутри — даже
|
||||
# в комментарии rem — превращается в мусор, и cmd пытается выполнить обрывки
|
||||
# как команды. На этом уже дважды ломался инсталлятор.
|
||||
import pathlib # noqa: E402
|
||||
root = pathlib.Path(__file__).resolve().parent.parent
|
||||
for cmd_file in sorted(root.rglob("*.cmd")):
|
||||
if "venv" in cmd_file.parts:
|
||||
continue
|
||||
lines = cmd_file.read_text(encoding="utf-8").splitlines()
|
||||
bad = [(n, l) for n, l in enumerate(lines, 1) if any(ord(ch) > 127 for ch in l)]
|
||||
r.check("%s без не-ASCII" % cmd_file.relative_to(root), not bad,
|
||||
bad[0] if bad else "")
|
||||
|
||||
print("\n== Настройки из браузера ==")
|
||||
d = c.get("/api/config").get_json()
|
||||
r.check("отдаёт текущие", d.get("ollama_host") and d.get("chat_model"), d)
|
||||
|
||||
Reference in New Issue
Block a user