diff --git a/.claude/skills/db-repo/references/connect.md b/.claude/skills/db-repo/references/connect.md index 6b550de1d..576d85a5f 100644 --- a/.claude/skills/db-repo/references/connect.md +++ b/.claude/skills/db-repo/references/connect.md @@ -13,6 +13,10 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/db-repo.ps1" -Comma На пустой базе `-ForceReplaceCfg` не нужен. +**Переподключение** базы, которая уже была подключена, обычно требует обоих флагов: конфигурация +в базе не пустая (`-ForceReplaceCfg`), а за пользователем хранилища всё ещё числится эта база +(`-ForceBindAlreadyBindedUser`). Навык подсказывает оба по сообщению платформы. + После подключения добавь `repository` в запись базы в `.v8-project.json` — иначе остальные подкоманды придётся каждый раз звать с явными реквизитами, а `update` откажется работать. diff --git a/.claude/skills/db-repo/scripts/db-repo.ps1 b/.claude/skills/db-repo/scripts/db-repo.ps1 index 202de4b65..e22e5ded2 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.5 — 1C configuration repository operations +# db-repo v1.6 — 1C configuration repository operations # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: движок только 1cv8 — ibcmd работу с хранилищем не поддерживает (нет такого режима). <# @@ -968,6 +968,16 @@ function Write-RepoVerdict { default { if ($PlatformExit -ne 0) { Write-Host "Команда '$Cmd' завершилась с ошибкой (код $PlatformExit)$(Get-ExitAnnotation $PlatformExit)" -ForegroundColor Red + # Подключение базы, у которой конфигурация уже есть, платформа отклоняет без + # подсказки — а действие ровно одно, и оно необратимо. + if ($Log.Raw -match 'связанная с данным хранилищем') { + Write-Host "[hint] за этим пользователем хранилища уже числится другая база." -ForegroundColor Yellow + Write-Host " Подключить всё равно — -ForceBindAlreadyBindedUser." -ForegroundColor Yellow + } + if ($Log.Raw -match 'Конфигурация не пустая') { + Write-Host "[hint] в базе уже есть конфигурация. Замена её конфигурацией из хранилища —" -ForegroundColor Yellow + Write-Host " -ForceReplaceCfg. Операция необратима: спросите подтверждение у пользователя." -ForegroundColor Yellow + } return 1 } Write-Host "Команда '$Cmd' выполнена." -ForegroundColor Green diff --git a/.claude/skills/db-repo/scripts/db-repo.py b/.claude/skills/db-repo/scripts/db-repo.py index 1945a2f88..723fb2e30 100644 --- a/.claude/skills/db-repo/scripts/db-repo.py +++ b/.claude/skills/db-repo/scripts/db-repo.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-repo v1.5 — 1C configuration repository operations +# db-repo v1.6 — 1C configuration repository operations # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: движок только 1cv8 — ibcmd работу с хранилищем не поддерживает (нет такого режима). """Работа с хранилищем конфигурации 1С. @@ -558,7 +558,7 @@ def read_repo_log(log_text): r = { "locked": [], "locked_by_other": [], "received": [], "committed": [], "unchanged": [], "unlocked": [], "not_locked": [], "modified": [], "missing": [], - "has_operation_block": False, + "has_operation_block": False, "raw": log_text, } if not log_text: return r @@ -852,6 +852,14 @@ def write_repo_verdict(cmd, log, platform_exit, requested, report_format="", out if platform_exit != 0: print("Команда '%s' завершилась с ошибкой (код %s)%s" % (cmd, platform_exit, describe_exit(platform_exit))) + # Подключение базы, у которой конфигурация уже есть, платформа отклоняет без + # подсказки — а действие ровно одно, и оно необратимо. + if "связанная с данным хранилищем" in (log.get("raw") or ""): + print("[hint] за этим пользователем хранилища уже числится другая база.") + print(" Подключить всё равно — -ForceBindAlreadyBindedUser.") + if "Конфигурация не пустая" in (log.get("raw") or ""): + print("[hint] в базе уже есть конфигурация. Замена её конфигурацией из хранилища —") + print(" -ForceReplaceCfg. Операция необратима: спросите подтверждение у пользователя.") return 1 print("Команда '%s' выполнена." % cmd) if cmd == "report" and report_format == "txt" and os.path.exists(output_file):