diff --git a/.claude/skills/db-update/SKILL.md b/.claude/skills/db-update/SKILL.md index 0dc405370..9f9fdc55c 100644 --- a/.claude/skills/db-update/SKILL.md +++ b/.claude/skills/db-update/SKILL.md @@ -11,14 +11,16 @@ allowed-tools: # /db-update — Обновление конфигурации БД -Применяет изменения основной конфигурации к конфигурации базы данных (`/UpdateDBCfg`). Обязательный шаг после `/db-load-cf`, `/db-load-xml`, `/db-load-git`. +Применяет изменения основной конфигурации к конфигурации базы данных (`/UpdateDBCfg`) — +отдельным шагом после загрузки. У `/db-load-xml` и `/db-load-git` то же самое делает +ключ `-UpdateDB`. ## Usage ``` /db-update [database] /db-update dev -/db-update dev -Dynamic+ +/db-update dev -Dynamic on ``` ## Параметры подключения @@ -50,7 +52,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/db-update.ps1" <п | `-Password <пароль>` | нет | Пароль | | `-Extension <имя>` | нет | Обновить расширение | | `-AllExtensions` | нет | Обновить все расширения | -| `-Dynamic <+/->` | нет | `+` — динамическое обновление, `-` — отключить | +| `-Dynamic ` | нет | `on` — динамическое обновление, без монопольного доступа к базе; `off` — отключить | | `-Server` | нет | Обновление на стороне сервера | | `-WarningsAsErrors` | нет | Предупреждения считать ошибками | | `-AdditionalV8Arguments <список>` | нет | Доп. аргументы запуска `1cv8.exe` через запятую, напр. `/UseHwLicenses+` | @@ -68,20 +70,14 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/db-update.ps1" <п | `-BackgroundSuspend` | Приостановить | | `-BackgroundResume` | Возобновить | -## Предупреждения - -- Если обновление **не динамическое** — потребуется **монопольный доступ** к базе (все пользователи должны выйти) -- Для серверных баз рекомендуется `-Dynamic+` для обновления без остановки -- Если структура данных существенно изменилась (удаление реквизитов, изменение типов) — динамическое обновление может быть невозможно - ## Примеры ```powershell # Обычное обновление (файловая база) powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/db-update.ps1" -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -# Динамическое обновление (серверная база) -powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/db-update.ps1" -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -Dynamic "+" +# Динамическое обновление +powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/db-update.ps1" -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -Dynamic on # Обновление расширения powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/db-update.ps1" -InfoBasePath "C:\Bases\MyDB" -UserName "Admin" -Extension "МоёРасширение" diff --git a/.claude/skills/db-update/scripts/db-update.ps1 b/.claude/skills/db-update/scripts/db-update.ps1 index ee40199d6..dfca6effd 100644 --- a/.claude/skills/db-update/scripts/db-update.ps1 +++ b/.claude/skills/db-update/scripts/db-update.ps1 @@ -1,4 +1,4 @@ -# db-update v1.19 — Update 1C database configuration +# db-update v1.20 — Update 1C database configuration # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -34,7 +34,7 @@ Обновить все расширения .PARAMETER Dynamic - Динамическое обновление: "+" включить, "-" отключить + Динамическое обновление: on включить, off отключить .PARAMETER Server Обновление на стороне сервера @@ -81,8 +81,10 @@ param( [Parameter(Mandatory=$false)] [switch]$AllExtensions, + # on/off, а не +/-: значение "-" через powershell.exe -File парсер не связывает и молча + # выходит с кодом 2, без единого сообщения. "+"/"-" принимаются, но в инструкции не значатся. [Parameter(Mandatory=$false)] - [ValidateSet("+", "-")] + [ValidateSet("on", "off", "yes", "no", "+", "-")] [string]$Dynamic, [Parameter(Mandatory=$false)] @@ -113,6 +115,8 @@ param( [string[]]$AdditionalIbcmdArguments = @() ) +if ($Dynamic) { $Dynamic = if (@('on', 'yes', '+') -contains $Dynamic.ToLower()) { '+' } else { '-' } } + $OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 diff --git a/.claude/skills/db-update/scripts/db-update.py b/.claude/skills/db-update/scripts/db-update.py index 19c96c447..dbc9e6efe 100644 --- a/.claude/skills/db-update/scripts/db-update.py +++ b/.claude/skills/db-update/scripts/db-update.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-update v1.19 — Update 1C database configuration +# db-update v1.20 — Update 1C database configuration # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -544,7 +544,9 @@ def main(): parser.add_argument("-RepositoryPassword", default="") parser.add_argument("-Extension", default="") parser.add_argument("-AllExtensions", action="store_true") - parser.add_argument("-Dynamic", default="", choices=["", "+", "-"]) + # on/off, а не +/-: значение "-" через powershell.exe -File парсер PS не связывает и молча + # выходит с кодом 2. "+"/"-" принимаются, но в инструкции не значатся. + parser.add_argument("-Dynamic", default="", choices=["", "on", "off", "yes", "no", "+", "-"]) parser.add_argument("-Server", action="store_true") parser.add_argument("-WarningsAsErrors", action="store_true") # Ключ для регрессов и верификации снапшотов, не для повседневного вызова: в SKILL.md @@ -559,6 +561,9 @@ def main(): argv, v8_extra, ibcmd_extra = extract_extra_args(sys.argv[1:], known_opts) args = ci_parse_args(parser, argv) + if args.Dynamic: + args.Dynamic = "+" if args.Dynamic.lower() in ("on", "yes", "+") else "-" + args.V8Path = clean_path(args.V8Path, "-V8Path") args.InfoBasePath = clean_path(args.InfoBasePath, "-InfoBasePath") assert_infobase_exists(args.InfoBasePath) diff --git a/tests/skills/cases/db-update/dynamic-off.json b/tests/skills/cases/db-update/dynamic-off.json new file mode 100644 index 000000000..02c5afba3 --- /dev/null +++ b/tests/skills/cases/db-update/dynamic-off.json @@ -0,0 +1,18 @@ +{ + "name": "-Dynamic off передаётся платформе как -Dynamic-", + "fakePlatform": { + "log": "Обновление конфигурации успешно завершено\r\n" + }, + "args_extra": [ + "-V8Path", + "{fakePlatform}", + "-InfoBasePath", + "{workDir}/ib", + "-Dynamic", + "off" + ], + "expect": { + "stdoutContains": "/UpdateDBCfg -Dynamic-" + }, + "noSnapshot": "навык ничего не пишет в рабочий каталог — проверяется командная строка" +} diff --git a/tests/skills/cases/db-update/dynamic-on.json b/tests/skills/cases/db-update/dynamic-on.json new file mode 100644 index 000000000..7778a66a0 --- /dev/null +++ b/tests/skills/cases/db-update/dynamic-on.json @@ -0,0 +1,18 @@ +{ + "name": "-Dynamic on передаётся платформе как -Dynamic+", + "fakePlatform": { + "log": "Обновление конфигурации успешно завершено\r\n" + }, + "args_extra": [ + "-V8Path", + "{fakePlatform}", + "-InfoBasePath", + "{workDir}/ib", + "-Dynamic", + "on" + ], + "expect": { + "stdoutContains": "/UpdateDBCfg -Dynamic+" + }, + "noSnapshot": "навык ничего не пишет в рабочий каталог — проверяется командная строка" +}