From 012f5c3c30eb0526b8ca42ab44fc341325a4c978 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sun, 23 Aug 2026 12:51:05 +0300 Subject: [PATCH] =?UTF-8?q?feat(db-repo):=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=BD=D0=B0=D0=B4=20=D0=B2=D1=81=D0=B5?= =?UTF-8?q?=D0=B9=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B5=D0=B9=20=E2=80=94=20=D1=82=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=BA=D0=BE=20=D0=BF=D0=BE=20=D1=8F=D0=B2=D0=BD=D0=BE=D0=BC?= =?UTF-8?q?=D1=83=20-All?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Захват всей конфигурации на большой базе идёт долго и блокирует работу всей команде, а получался он от одного забытого -Objects: «вся конфигурация» была умолчанием. Теперь для lock, unlock и commit это отдельный флаг -All, который нельзя совместить с -Objects. Захват корня с -WithChildren, означающий то же самое, отсылает к нему же. update без -Objects остаётся обычным вызовом: получение всех изменений — это нормальный ежедневный сценарий, а не тяжёлая операция. Флаг отдельный, а не -Force: у -Force уже есть платформенное значение, разное по подкомандам, и третье значение сделало бы его нечитаемым. Co-Authored-By: Claude Opus 5 --- .claude/skills/db-repo/SKILL.md | 4 +++- .claude/skills/db-repo/scripts/db-repo.ps1 | 26 ++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/.claude/skills/db-repo/SKILL.md b/.claude/skills/db-repo/SKILL.md index 772a12e63..d36d1c3bf 100644 --- a/.claude/skills/db-repo/SKILL.md +++ b/.claude/skills/db-repo/SKILL.md @@ -97,8 +97,9 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/db-repo.ps1" <по | `-InfoBaseRef <имя>` | * | Имя базы на сервере | | `-UserName <имя>` | нет | Пользователь базы | | `-Password <пароль>` | нет | Пароль пользователя базы | -| `-Objects <список>` | нет | Объекты через запятую. Без него — вся конфигурация, спроси подтверждение | +| `-Objects <список>` | усл. | Объекты через запятую. Для `lock`, `unlock`, `commit` обязателен, если не задан `-All` | | `-ObjectsFile <путь>` | нет | Файл со списком объектов, одно имя на строку | +| `-All` | нет | Операция над всей конфигурацией — вместо `-Objects`, а не вместе с ним | | `-WithChildren` | нет | Вместе с подчинёнными объектами на полную глубину | | `-Comment <текст>` | нет | Комментарий к помещению (`commit`). Многострочный — как есть, с переводами строк | | `-KeepLocked` | нет | Оставить объекты захваченными после помещения | @@ -146,6 +147,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/db-repo.ps1" <по | Операция | Что теряется | |----------|--------------| +| `lock -All` | Ничего, но захватывает **всю конфигурацию**: на большой базе идёт долго и блокирует работу всей команде | | `unlock -Force` | Локальные правки захваченных объектов | | `disconnect` | Подключение базы к хранилищу, в том числе на стороне хранилища | | `connect -ForceReplaceCfg` | Конфигурация базы заменяется конфигурацией из хранилища | diff --git a/.claude/skills/db-repo/scripts/db-repo.ps1 b/.claude/skills/db-repo/scripts/db-repo.ps1 index 56780a8b4..4360b1f28 100644 --- a/.claude/skills/db-repo/scripts/db-repo.ps1 +++ b/.claude/skills/db-repo/scripts/db-repo.ps1 @@ -1,4 +1,4 @@ -# db-repo v1.2 — 1C configuration repository operations +# db-repo v1.3 — 1C configuration repository operations # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: движок только 1cv8 — ibcmd работу с хранилищем не поддерживает (нет такого режима). <# @@ -73,6 +73,11 @@ param( [Parameter(Mandatory=$false)] [switch]$WithChildren, + # Операция над ВСЕЙ конфигурацией. Отдельный флаг, а не умолчание при забытом -Objects: + # захват всей конфигурации на большой базе идёт долго и блокирует работу всей команде. + [Parameter(Mandatory=$false)] + [switch]$All, + [Parameter(Mandatory=$false)] [string]$Comment, @@ -977,14 +982,27 @@ if ($requested.Count -gt 0 -and $objectAware -notcontains $cmd) { exit 1 } -# Корень с подчинёнными — это ВСЯ конфигурация, а выглядит как «захвачу корень». Для всей -# конфигурации есть однозначная форма (вызов без -Objects), поэтому двусмысленную отклоняем. +# Операции над всей конфигурацией требуют явного -All. Умолчанием это быть не может: захват +# всей конфигурации на большой базе идёт долго и блокирует работу всей команде, а получается +# такой вызов от одного забытого -Objects. +$wholeConfigAware = @('lock', 'unlock', 'commit') +if ($All -and $requested.Count -gt 0) { + Write-Host "Error: -All (whole configuration) contradicts -Objects/-ObjectsFile — pick one" -ForegroundColor Red + exit 1 +} +if ($wholeConfigAware -contains $cmd -and $requested.Count -eq 0 -and -not $All) { + Write-Host "Error: '$cmd' without -Objects would affect the WHOLE configuration." -ForegroundColor Red + Write-Host " Укажите объекты: -Objects `"Справочник.Номенклатура`"" -ForegroundColor Yellow + Write-Host " Это и нужно — подтвердите явно: -All" -ForegroundColor Yellow + exit 1 +} +# Корень с подчинёнными — это тоже вся конфигурация, хотя выглядит как «захвачу корень». if ($WithChildren) { $rootAsked = @($requested | Where-Object { $script:ConfigRootAliases -contains $_ }) if ($rootAsked.Count -gt 0) { Write-Host "Error: '$($rootAsked[0])' with -WithChildren means the WHOLE configuration, not just its root." -ForegroundColor Red Write-Host " Нужен только корень (чтобы добавить или удалить объект) — уберите -WithChildren." -ForegroundColor Yellow - Write-Host " Нужна вся конфигурация — вызовите без -Objects." -ForegroundColor Yellow + Write-Host " Нужна вся конфигурация — вызовите с -All вместо -Objects." -ForegroundColor Yellow exit 1 } }