feat(db-repo): операции над всей конфигурацией — только по явному -All

Захват всей конфигурации на большой базе идёт долго и блокирует работу всей
команде, а получался он от одного забытого -Objects: «вся конфигурация» была
умолчанием. Теперь для lock, unlock и commit это отдельный флаг -All, который
нельзя совместить с -Objects. Захват корня с -WithChildren, означающий то же
самое, отсылает к нему же.

update без -Objects остаётся обычным вызовом: получение всех изменений — это
нормальный ежедневный сценарий, а не тяжёлая операция.

Флаг отдельный, а не -Force: у -Force уже есть платформенное значение, разное
по подкомандам, и третье значение сделало бы его нечитаемым.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-23 12:51:05 +03:00
co-authored by Claude Opus 5
parent 33633aaf0e
commit 012f5c3c30
2 changed files with 25 additions and 5 deletions
+3 -1
View File
@@ -97,8 +97,9 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/db-repo.ps1" <по
| `-InfoBaseRef <имя>` | * | Имя базы на сервере | | `-InfoBaseRef <имя>` | * | Имя базы на сервере |
| `-UserName <имя>` | нет | Пользователь базы | | `-UserName <имя>` | нет | Пользователь базы |
| `-Password <пароль>` | нет | Пароль пользователя базы | | `-Password <пароль>` | нет | Пароль пользователя базы |
| `-Objects <список>` | нет | Объекты через запятую. Без него — вся конфигурация, спроси подтверждение | | `-Objects <список>` | усл. | Объекты через запятую. Для `lock`, `unlock`, `commit` обязателен, если не задан `-All` |
| `-ObjectsFile <путь>` | нет | Файл со списком объектов, одно имя на строку | | `-ObjectsFile <путь>` | нет | Файл со списком объектов, одно имя на строку |
| `-All` | нет | Операция над всей конфигурацией — вместо `-Objects`, а не вместе с ним |
| `-WithChildren` | нет | Вместе с подчинёнными объектами на полную глубину | | `-WithChildren` | нет | Вместе с подчинёнными объектами на полную глубину |
| `-Comment <текст>` | нет | Комментарий к помещению (`commit`). Многострочный — как есть, с переводами строк | | `-Comment <текст>` | нет | Комментарий к помещению (`commit`). Многострочный — как есть, с переводами строк |
| `-KeepLocked` | нет | Оставить объекты захваченными после помещения | | `-KeepLocked` | нет | Оставить объекты захваченными после помещения |
@@ -146,6 +147,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/db-repo.ps1" <по
| Операция | Что теряется | | Операция | Что теряется |
|----------|--------------| |----------|--------------|
| `lock -All` | Ничего, но захватывает **всю конфигурацию**: на большой базе идёт долго и блокирует работу всей команде |
| `unlock -Force` | Локальные правки захваченных объектов | | `unlock -Force` | Локальные правки захваченных объектов |
| `disconnect` | Подключение базы к хранилищу, в том числе на стороне хранилища | | `disconnect` | Подключение базы к хранилищу, в том числе на стороне хранилища |
| `connect -ForceReplaceCfg` | Конфигурация базы заменяется конфигурацией из хранилища | | `connect -ForceReplaceCfg` | Конфигурация базы заменяется конфигурацией из хранилища |
+22 -4
View File
@@ -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 # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# NB: движок только 1cv8 — ibcmd работу с хранилищем не поддерживает (нет такого режима). # NB: движок только 1cv8 — ibcmd работу с хранилищем не поддерживает (нет такого режима).
<# <#
@@ -73,6 +73,11 @@ param(
[Parameter(Mandatory=$false)] [Parameter(Mandatory=$false)]
[switch]$WithChildren, [switch]$WithChildren,
# Операция над ВСЕЙ конфигурацией. Отдельный флаг, а не умолчание при забытом -Objects:
# захват всей конфигурации на большой базе идёт долго и блокирует работу всей команде.
[Parameter(Mandatory=$false)]
[switch]$All,
[Parameter(Mandatory=$false)] [Parameter(Mandatory=$false)]
[string]$Comment, [string]$Comment,
@@ -977,14 +982,27 @@ if ($requested.Count -gt 0 -and $objectAware -notcontains $cmd) {
exit 1 exit 1
} }
# Корень с подчинёнными — это ВСЯ конфигурация, а выглядит как «захвачу корень». Для всей # Операции над всей конфигурацией требуют явного -All. Умолчанием это быть не может: захват
# конфигурации есть однозначная форма (вызов без -Objects), поэтому двусмысленную отклоняем. # всей конфигурации на большой базе идёт долго и блокирует работу всей команде, а получается
# такой вызов от одного забытого -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) { if ($WithChildren) {
$rootAsked = @($requested | Where-Object { $script:ConfigRootAliases -contains $_ }) $rootAsked = @($requested | Where-Object { $script:ConfigRootAliases -contains $_ })
if ($rootAsked.Count -gt 0) { if ($rootAsked.Count -gt 0) {
Write-Host "Error: '$($rootAsked[0])' with -WithChildren means the WHOLE configuration, not just its root." -ForegroundColor Red Write-Host "Error: '$($rootAsked[0])' with -WithChildren means the WHOLE configuration, not just its root." -ForegroundColor Red
Write-Host " Нужен только корень (чтобы добавить или удалить объект) — уберите -WithChildren." -ForegroundColor Yellow Write-Host " Нужен только корень (чтобы добавить или удалить объект) — уберите -WithChildren." -ForegroundColor Yellow
Write-Host " Нужна вся конфигурация — вызовите без -Objects." -ForegroundColor Yellow Write-Host " Нужна вся конфигурация — вызовите с -All вместо -Objects." -ForegroundColor Yellow
exit 1 exit 1
} }
} }