fix(help-add): версия формата справки — прежде всего из дескриптора объекта

Справка — тело объекта, а тело и дескриптор платформа загружает только в одной версии формата.
Версия выгрузки тут не годится: после мержа веток объект бывает старше выгрузки (2.18 в 2.20), и
справка по версии выгрузки вышла бы 2.20 — платформа отвергла бы объект. Версия теперь берётся из
дескриптора <объект>.xml, как это уже делает template-add, и только без него — подъёмом от каталога
объекта.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-09-26 22:22:11 +03:00
co-authored by Claude Opus 5.5
parent b5bdd39689
commit 14d010f4c2
2 changed files with 26 additions and 8 deletions
+12 -4
View File
@@ -182,10 +182,18 @@ if (-not (Test-Path $extDir)) {
exit 1
}
# Версию ищем от каталога объекта, а не от SrcDir: у внешней обработки корень <Имя>.xml лежит В SrcDir,
# и подъём от SrcDir его не видит — справка писалась 2.17 при обработке 2.20, и платформа отказывала
# в сборке (тело и дескриптор объекта обязаны быть в одной версии формата).
$formatVersion = Detect-FormatVersion (Resolve-Path $objectDir).Path
# Справка — тело объекта, а тело и дескриптор платформа загружает только в одной версии формата.
# Поэтому версию берём прежде всего из дескриптора <объект>.xml (объект может быть старше выгрузки после
# мержа веток), и только без него — подъёмом от каталога объекта. Не от SrcDir: у внешней обработки
# корень <Имя>.xml лежит В SrcDir, подъём его не видел, и справка обработки 2.20 писалась 2.17.
$formatVersion = $null
$ownerXml = "$((Resolve-Path $objectDir).Path).xml"
if (Test-Path $ownerXml) {
$ownerHead = [System.IO.File]::ReadAllText($ownerXml, [System.Text.Encoding]::UTF8)
$ownerHead = $ownerHead.Substring(0, [Math]::Min(2000, $ownerHead.Length))
if ($ownerHead -match '<MetaDataObject[^>]+version="(\d+\.\d+)"') { $formatVersion = $Matches[1] }
}
if (-not $formatVersion) { $formatVersion = Detect-FormatVersion (Resolve-Path $objectDir).Path }
# Код языка идёт и в текст XML, и в имя файла страницы, поэтому проверяем его до записи:
# пустое значение дало бы файл «.html» и пустой <Page></Page>, разделитель пути — запись мимо
+14 -4
View File
@@ -347,10 +347,20 @@ def main():
print(f"Каталог объекта не найден: {ext_dir}. Проверьте путь ObjectName (например Catalogs/МойСправочник).", file=sys.stderr)
sys.exit(1)
# Версию ищем от каталога объекта, а не от SrcDir: у внешней обработки корень <Имя>.xml лежит В SrcDir,
# и подъём от SrcDir его не видит — справка писалась 2.17 при обработке 2.20, и платформа отказывала
# в сборке (тело и дескриптор объекта обязаны быть в одной версии формата).
format_version = detect_format_version(os.path.abspath(object_dir))
# Справка — тело объекта, а тело и дескриптор платформа загружает только в одной версии формата.
# Поэтому версию берём прежде всего из дескриптора <объект>.xml (объект может быть старше выгрузки после
# мержа веток), и только без него — подъёмом от каталога объекта. Не от SrcDir: у внешней обработки
# корень <Имя>.xml лежит В SrcDir, подъём его не видел, и справка обработки 2.20 писалась 2.17.
format_version = None
owner_xml = os.path.abspath(object_dir) + ".xml"
if os.path.isfile(owner_xml):
with open(owner_xml, "r", encoding="utf-8-sig") as f:
owner_head = f.read(2000)
m = re.search(r'<MetaDataObject[^>]+version="(\d+\.\d+)"', owner_head)
if m:
format_version = m.group(1)
if not format_version:
format_version = detect_format_version(os.path.abspath(object_dir))
if not is_valid_lang(lang):
print(f"Недопустимый код языка: '{lang}'", file=sys.stderr)