mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-04 17:20:52 +03:00
fix(epf-build,epf-dump,web-publish): надёжный резолв пути к платформе 1С
Распространение фикса резолва (см. предыдущий коммит по db-*) на оставшиеся навыки с тем же дублированным блоком: - epf-build, epf-dump (ps1+py): резолв 1cv8.exe — реестр .v8-project.json → числовая сортировка версий → glob Program Files [+ (x86)] с заметкой. - web-publish (ps1+py): резолв bin-каталога (для wsap24.dll) — те же приоритеты; v8path из реестра уже есть нужный bin-каталог. Чинит лексикографический выбор версии и узкую область поиска; py деградирует без падения вне Windows. Версии: epf-* 1.0→1.1, web-publish 1.2→1.3. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
e507e6bfba
commit
3d36c20269
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# web-publish v1.2 — Publish 1C infobase via Apache
|
||||
# web-publish v1.3 — Publish 1C infobase via Apache
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
|
||||
"""
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
import argparse
|
||||
import glob
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
@@ -24,6 +25,33 @@ import zipfile
|
||||
import psutil
|
||||
|
||||
|
||||
def _find_project_v8path():
|
||||
"""Walk up from CWD to find .v8-project.json and read its v8path."""
|
||||
d = os.getcwd()
|
||||
while True:
|
||||
pf = os.path.join(d, ".v8-project.json")
|
||||
if os.path.isfile(pf):
|
||||
try:
|
||||
with open(pf, encoding="utf-8-sig") as f:
|
||||
data = json.load(f)
|
||||
v = data.get("v8path")
|
||||
if v:
|
||||
return v
|
||||
except Exception:
|
||||
pass
|
||||
return None
|
||||
parent = os.path.dirname(d)
|
||||
if parent == d:
|
||||
return None
|
||||
d = parent
|
||||
|
||||
|
||||
def _version_key(p):
|
||||
"""Numeric sort key from version dir name (.../1cv8/<ver>/bin/1cv8.exe)."""
|
||||
ver = os.path.basename(os.path.dirname(os.path.dirname(p)))
|
||||
return [int(x) for x in re.findall(r"\d+", ver)]
|
||||
|
||||
|
||||
def get_our_httpd(httpd_exe_norm):
|
||||
"""Filter httpd processes by our ApachePath."""
|
||||
result = []
|
||||
@@ -78,10 +106,17 @@ def main():
|
||||
# --- Resolve V8Path ---
|
||||
v8_path = args.V8Path
|
||||
if not v8_path:
|
||||
candidates = glob.glob(r'C:\Program Files\1cv8\*\bin\1cv8.exe')
|
||||
candidates.sort(reverse=True)
|
||||
v8_path = _find_project_v8path()
|
||||
if not v8_path:
|
||||
candidates = (
|
||||
glob.glob(r'C:\Program Files\1cv8\*\bin\1cv8.exe')
|
||||
+ glob.glob(r'C:\Program Files (x86)\1cv8\*\bin\1cv8.exe')
|
||||
)
|
||||
if candidates:
|
||||
v8_path = os.path.dirname(candidates[0])
|
||||
best = max(candidates, key=_version_key)
|
||||
v8_path = os.path.dirname(best)
|
||||
ver = os.path.basename(os.path.dirname(v8_path))
|
||||
print(f'Auto-selected platform {ver}: {v8_path}')
|
||||
else:
|
||||
print('Error: платформа 1С не найдена. Укажите -V8Path', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
Reference in New Issue
Block a user