mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-01 07:50:50 +03:00
fix(skills): единый порядок поиска .v8-project.json для newObjectPosition
Резолвер настройки искал файл от каталога конфигурации и лишь потом от cwd — единственное место в репозитории с таким отсчётом. Остальные ищут от рабочего каталога: support-guard (18 навыков) с фолбэком на каталог конфигурации, группа db-* (5 навыков) вообще без фолбэка, потому что каталога конфигурации у них нет. Обоснование прежнего порядка («cwd почти всегда чужой проект») опиралось на нашу стендовую раскладку — вызов из репозитория навыков по выгрузке в cfsrc. У пользователя cwd и есть каталог проекта с .v8-project.json, а скрипт навыка зовётся по абсолютному пути и cwd не меняет, так что оба порядка эквивалентны. Кейс cfe-borrow/newobjectposition-byname клал настройку внутрь каталога расширения и тем закреплял несуществующую раскладку — конфиг проекта лежит в корне проекта, расширение внутри него. Поправлен на реальную. Из гайда убран абзац, объяснявший особый порядок: объяснять больше нечего. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QoAJmoNbgWKobA7JGgN5S3
This commit is contained in:
co-authored by
Claude Opus 5
parent
1ccd56606b
commit
ecde0d1c41
@@ -460,16 +460,16 @@ function Do-ModifyProperty([string]$batchVal) {
|
||||
# databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML,
|
||||
# иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида
|
||||
# (так дописывает Конфигуратор); byName — по имени среди объектов того же вида.
|
||||
# Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard:
|
||||
# настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда
|
||||
# оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный.
|
||||
# Файл ищем от рабочего каталога вверх, каталог конфигурации — запасной путь: так же
|
||||
# его ищут support-guard и группа db-*, а скрипт навыка зовут по абсолютному пути, и cwd
|
||||
# остаётся рабочим каталогом проекта.
|
||||
# configSrc считается от каталога .v8-project.json, как задокументировано в
|
||||
# docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs.
|
||||
function Get-NewObjectPosition([string]$cfgDir) {
|
||||
try {
|
||||
if (-not $cfgDir) { $cfgDir = "." }
|
||||
$pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir))
|
||||
if (-not $pj) { $pj = Find-V8Project (Get-Location).Path }
|
||||
$pj = Find-V8Project (Get-Location).Path
|
||||
if (-not $pj) { $pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir)) }
|
||||
if (-not $pj) { return "end" }
|
||||
$proj = Get-Content -Raw $pj | ConvertFrom-Json
|
||||
$projDir = [System.IO.Path]::GetDirectoryName($pj)
|
||||
|
||||
@@ -360,14 +360,14 @@ def get_new_object_position(cfg_dir):
|
||||
databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML,
|
||||
иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида
|
||||
(так дописывает Конфигуратор); byName — по имени среди объектов того же вида.
|
||||
Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard:
|
||||
настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда
|
||||
оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный.
|
||||
Файл ищем от рабочего каталога вверх, каталог конфигурации — запасной путь: так же
|
||||
его ищут support-guard и группа db-*, а скрипт навыка зовут по абсолютному пути, и cwd
|
||||
остаётся рабочим каталогом проекта.
|
||||
configSrc считается от каталога .v8-project.json, как задокументировано в
|
||||
docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs.
|
||||
"""
|
||||
try:
|
||||
pj = _sg_find_v8project(os.path.abspath(cfg_dir or ".")) or _sg_find_v8project(os.getcwd())
|
||||
pj = _sg_find_v8project(os.getcwd()) or _sg_find_v8project(os.path.abspath(cfg_dir or "."))
|
||||
if not pj:
|
||||
return "end"
|
||||
proj = json.loads(open(pj, encoding="utf-8-sig").read())
|
||||
|
||||
@@ -2261,16 +2261,16 @@ function Find-V8Project([string]$startDir) {
|
||||
# databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML,
|
||||
# иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида
|
||||
# (так дописывает Конфигуратор); byName — по имени среди объектов того же вида.
|
||||
# Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard:
|
||||
# настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда
|
||||
# оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный.
|
||||
# Файл ищем от рабочего каталога вверх, каталог конфигурации — запасной путь: так же
|
||||
# его ищут support-guard и группа db-*, а скрипт навыка зовут по абсолютному пути, и cwd
|
||||
# остаётся рабочим каталогом проекта.
|
||||
# configSrc считается от каталога .v8-project.json, как задокументировано в
|
||||
# docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs.
|
||||
function Get-NewObjectPosition([string]$cfgDir) {
|
||||
try {
|
||||
if (-not $cfgDir) { $cfgDir = "." }
|
||||
$pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir))
|
||||
if (-not $pj) { $pj = Find-V8Project (Get-Location).Path }
|
||||
$pj = Find-V8Project (Get-Location).Path
|
||||
if (-not $pj) { $pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir)) }
|
||||
if (-not $pj) { return "end" }
|
||||
$proj = Get-Content -Raw $pj | ConvertFrom-Json
|
||||
$projDir = [System.IO.Path]::GetDirectoryName($pj)
|
||||
|
||||
@@ -224,14 +224,14 @@ def get_new_object_position(cfg_dir):
|
||||
databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML,
|
||||
иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида
|
||||
(так дописывает Конфигуратор); byName — по имени среди объектов того же вида.
|
||||
Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard:
|
||||
настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда
|
||||
оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный.
|
||||
Файл ищем от рабочего каталога вверх, каталог конфигурации — запасной путь: так же
|
||||
его ищут support-guard и группа db-*, а скрипт навыка зовут по абсолютному пути, и cwd
|
||||
остаётся рабочим каталогом проекта.
|
||||
configSrc считается от каталога .v8-project.json, как задокументировано в
|
||||
docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs.
|
||||
"""
|
||||
try:
|
||||
pj = _sg_find_v8project(os.path.abspath(cfg_dir or ".")) or _sg_find_v8project(os.getcwd())
|
||||
pj = _sg_find_v8project(os.getcwd()) or _sg_find_v8project(os.path.abspath(cfg_dir or "."))
|
||||
if not pj:
|
||||
return "end"
|
||||
proj = json.loads(open(pj, encoding="utf-8-sig").read())
|
||||
|
||||
@@ -5238,16 +5238,16 @@ if ($commands -and $commands.Count -gt 0) {
|
||||
# databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML,
|
||||
# иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида
|
||||
# (так дописывает Конфигуратор); byName — по имени среди объектов того же вида.
|
||||
# Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard:
|
||||
# настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда
|
||||
# оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный.
|
||||
# Файл ищем от рабочего каталога вверх, каталог конфигурации — запасной путь: так же
|
||||
# его ищут support-guard и группа db-*, а скрипт навыка зовут по абсолютному пути, и cwd
|
||||
# остаётся рабочим каталогом проекта.
|
||||
# configSrc считается от каталога .v8-project.json, как задокументировано в
|
||||
# docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs.
|
||||
function Get-NewObjectPosition([string]$cfgDir) {
|
||||
try {
|
||||
if (-not $cfgDir) { $cfgDir = "." }
|
||||
$pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir))
|
||||
if (-not $pj) { $pj = Find-V8Project (Get-Location).Path }
|
||||
$pj = Find-V8Project (Get-Location).Path
|
||||
if (-not $pj) { $pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir)) }
|
||||
if (-not $pj) { return "end" }
|
||||
$proj = Get-Content -Raw $pj | ConvertFrom-Json
|
||||
$projDir = [System.IO.Path]::GetDirectoryName($pj)
|
||||
|
||||
@@ -5215,14 +5215,14 @@ def get_new_object_position(cfg_dir):
|
||||
databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML,
|
||||
иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида
|
||||
(так дописывает Конфигуратор); byName — по имени среди объектов того же вида.
|
||||
Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard:
|
||||
настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда
|
||||
оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный.
|
||||
Файл ищем от рабочего каталога вверх, каталог конфигурации — запасной путь: так же
|
||||
его ищут support-guard и группа db-*, а скрипт навыка зовут по абсолютному пути, и cwd
|
||||
остаётся рабочим каталогом проекта.
|
||||
configSrc считается от каталога .v8-project.json, как задокументировано в
|
||||
docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs.
|
||||
"""
|
||||
try:
|
||||
pj = _sg_find_v8project(os.path.abspath(cfg_dir or ".")) or _sg_find_v8project(os.getcwd())
|
||||
pj = _sg_find_v8project(os.getcwd()) or _sg_find_v8project(os.path.abspath(cfg_dir or "."))
|
||||
if not pj:
|
||||
return "end"
|
||||
proj = json.loads(open(pj, encoding="utf-8-sig").read())
|
||||
|
||||
@@ -1189,16 +1189,16 @@ $enc = New-Object System.Text.UTF8Encoding($true)
|
||||
# databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML,
|
||||
# иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида
|
||||
# (так дописывает Конфигуратор); byName — по имени среди объектов того же вида.
|
||||
# Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard:
|
||||
# настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда
|
||||
# оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный.
|
||||
# Файл ищем от рабочего каталога вверх, каталог конфигурации — запасной путь: так же
|
||||
# его ищут support-guard и группа db-*, а скрипт навыка зовут по абсолютному пути, и cwd
|
||||
# остаётся рабочим каталогом проекта.
|
||||
# configSrc считается от каталога .v8-project.json, как задокументировано в
|
||||
# docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs.
|
||||
function Get-NewObjectPosition([string]$cfgDir) {
|
||||
try {
|
||||
if (-not $cfgDir) { $cfgDir = "." }
|
||||
$pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir))
|
||||
if (-not $pj) { $pj = Find-V8Project (Get-Location).Path }
|
||||
$pj = Find-V8Project (Get-Location).Path
|
||||
if (-not $pj) { $pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir)) }
|
||||
if (-not $pj) { return "end" }
|
||||
$proj = Get-Content -Raw $pj | ConvertFrom-Json
|
||||
$projDir = [System.IO.Path]::GetDirectoryName($pj)
|
||||
|
||||
@@ -1062,14 +1062,14 @@ def get_new_object_position(cfg_dir):
|
||||
databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML,
|
||||
иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида
|
||||
(так дописывает Конфигуратор); byName — по имени среди объектов того же вида.
|
||||
Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard:
|
||||
настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда
|
||||
оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный.
|
||||
Файл ищем от рабочего каталога вверх, каталог конфигурации — запасной путь: так же
|
||||
его ищут support-guard и группа db-*, а скрипт навыка зовут по абсолютному пути, и cwd
|
||||
остаётся рабочим каталогом проекта.
|
||||
configSrc считается от каталога .v8-project.json, как задокументировано в
|
||||
docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs.
|
||||
"""
|
||||
try:
|
||||
pj = _sg_find_v8project(os.path.abspath(cfg_dir or ".")) or _sg_find_v8project(os.getcwd())
|
||||
pj = _sg_find_v8project(os.getcwd()) or _sg_find_v8project(os.path.abspath(cfg_dir or "."))
|
||||
if not pj:
|
||||
return "end"
|
||||
proj = json.loads(open(pj, encoding="utf-8-sig").read())
|
||||
|
||||
@@ -997,16 +997,16 @@ function Esc-XmlText {
|
||||
# databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML,
|
||||
# иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида
|
||||
# (так дописывает Конфигуратор); byName — по имени среди объектов того же вида.
|
||||
# Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard:
|
||||
# настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда
|
||||
# оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный.
|
||||
# Файл ищем от рабочего каталога вверх, каталог конфигурации — запасной путь: так же
|
||||
# его ищут support-guard и группа db-*, а скрипт навыка зовут по абсолютному пути, и cwd
|
||||
# остаётся рабочим каталогом проекта.
|
||||
# configSrc считается от каталога .v8-project.json, как задокументировано в
|
||||
# docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs.
|
||||
function Get-NewObjectPosition([string]$cfgDir) {
|
||||
try {
|
||||
if (-not $cfgDir) { $cfgDir = "." }
|
||||
$pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir))
|
||||
if (-not $pj) { $pj = Find-V8Project (Get-Location).Path }
|
||||
$pj = Find-V8Project (Get-Location).Path
|
||||
if (-not $pj) { $pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir)) }
|
||||
if (-not $pj) { return "end" }
|
||||
$proj = Get-Content -Raw $pj | ConvertFrom-Json
|
||||
$projDir = [System.IO.Path]::GetDirectoryName($pj)
|
||||
|
||||
@@ -1112,14 +1112,14 @@ def get_new_object_position(cfg_dir):
|
||||
databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML,
|
||||
иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида
|
||||
(так дописывает Конфигуратор); byName — по имени среди объектов того же вида.
|
||||
Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard:
|
||||
настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда
|
||||
оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный.
|
||||
Файл ищем от рабочего каталога вверх, каталог конфигурации — запасной путь: так же
|
||||
его ищут support-guard и группа db-*, а скрипт навыка зовут по абсолютному пути, и cwd
|
||||
остаётся рабочим каталогом проекта.
|
||||
configSrc считается от каталога .v8-project.json, как задокументировано в
|
||||
docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs.
|
||||
"""
|
||||
try:
|
||||
pj = _sg_find_v8project(os.path.abspath(cfg_dir or ".")) or _sg_find_v8project(os.getcwd())
|
||||
pj = _sg_find_v8project(os.getcwd()) or _sg_find_v8project(os.path.abspath(cfg_dir or "."))
|
||||
if not pj:
|
||||
return "end"
|
||||
proj = json.loads(open(pj, encoding="utf-8-sig").read())
|
||||
|
||||
@@ -161,8 +161,6 @@
|
||||
|
||||
Читают поле навыки, добавляющие запись в состав: `meta-compile`, `role-compile`, `xdto-compile`, `cfe-borrow` и операция `add-childObject` навыка `cf-edit`. Раскладка та же, что у `editingAllowedCheck`: берётся `databases[].newObjectPosition` базы, чей `configSrc` (относительно каталога `.v8-project.json`) охватывает каталог правимого файла; иначе корневое поле; иначе `end`.
|
||||
|
||||
Сам файл `.v8-project.json` ищется вверх **от каталога конфигурации**, и лишь потом от текущего каталога — в отличие от `editingAllowedCheck`, который смотрит сначала на текущий каталог. Настройка принадлежит выгрузке: навык почти всегда вызывают из другого проекта, и его `.v8-project.json` перекрыл бы нужный.
|
||||
|
||||
**Порядок имён** — как в дереве Конфигуратора: регистр не учитывается, подчёркивание раньше цифр, цифры раньше букв, латиница раньше кириллицы, `ё` на месте `е`. Сравнение реализовано ключом «ранг+символ», а не культурными таблицами ОС, поэтому PowerShell- и Python-порты дают одинаковый результат на любой платформе.
|
||||
|
||||
**Подсистемы поле не затрагивает** — они всегда дописываются в конец. Порядок подсистем в дереве задаёт порядок разделов в панели, пока они не перечислены в `<SubsystemsOrder>` файла `Ext/CommandInterface.xml`; сама платформа этот список не заводит, а `subsystem-compile` его не трогает (это работа `interface-edit`). Сортировка подсистем поэтому переставляла бы разделы интерфейса молча.
|
||||
|
||||
@@ -3,25 +3,56 @@
|
||||
"preRun": [
|
||||
{
|
||||
"script": "meta-compile/scripts/meta-compile",
|
||||
"input": { "type": "Catalog", "name": "Договоры" },
|
||||
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
|
||||
"input": {
|
||||
"type": "Catalog",
|
||||
"name": "Договоры"
|
||||
},
|
||||
"args": {
|
||||
"-JsonPath": "{inputFile}",
|
||||
"-OutputDir": "{workDir}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"script": "meta-compile/scripts/meta-compile",
|
||||
"input": { "type": "Catalog", "name": "Терминалы", "owners": ["Catalog.Договоры"] },
|
||||
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
|
||||
"input": {
|
||||
"type": "Catalog",
|
||||
"name": "Терминалы",
|
||||
"owners": [
|
||||
"Catalog.Договоры"
|
||||
]
|
||||
},
|
||||
"args": {
|
||||
"-JsonPath": "{inputFile}",
|
||||
"-OutputDir": "{workDir}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"script": "cfe-init/scripts/cfe-init",
|
||||
"args": { "-Name": "Тест", "-OutputDir": "{workDir}/cfe", "-ConfigPath": "{workDir}" }
|
||||
"args": {
|
||||
"-Name": "Тест",
|
||||
"-OutputDir": "{workDir}/cfe",
|
||||
"-ConfigPath": "{workDir}"
|
||||
}
|
||||
},
|
||||
{ "writeFile": { "path": "cfe/.v8-project.json", "content": { "newObjectPosition": "byName", "databases": [] } } }
|
||||
{
|
||||
"writeFile": {
|
||||
"path": ".v8-project.json",
|
||||
"content": {
|
||||
"newObjectPosition": "byName",
|
||||
"databases": []
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"params": { "extensionPath": "cfe", "object": "Catalog.Терминалы" },
|
||||
"params": {
|
||||
"extensionPath": "cfe",
|
||||
"object": "Catalog.Терминалы"
|
||||
},
|
||||
"expect": {
|
||||
"fileContains": {
|
||||
"file": "cfe/Configuration.xml",
|
||||
"text": "<Catalog>Договоры</Catalog>\r\n\t\t\t<Catalog>Терминалы</Catalog>"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cwd": "workDir"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user