fix(db-repo): длинный отчёт по версиям не печатать вовсе, а не обрезать

Печать отчёта целиком стоит модели контекста, но опаснее другое: обрезанный
отчёт по версиям читается как полный ответ. По куску легко заключить, что
объект не менялся, — в отличие от списка объектов, где неполнота очевидна.

Короткий отчёт (до ста строк) печатается целиком, длинный не печатается
совсем: называется путь к файлу и способы сузить выборку. Порог не
теоретический — даже стенд из девяти версий даёт 124 строки.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-23 13:47:39 +03:00
co-authored by Claude Opus 5
parent ac20d95fea
commit 4f6bfd75eb
3 changed files with 30 additions and 16 deletions
@@ -32,6 +32,10 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/db-repo.ps1" -Comma
> На боевом хранилище полный отчёт строить не надо — тысячи версий. Нужна головная версия —
> `-NBegin -1`.
Короткий отчёт печатается в вывод целиком, длинный — не печатается вовсе: называется путь к файлу
и способы сузить выборку. Обрезанный отчёт по версиям читался бы как полный ответ, и по куску
можно было бы заключить, что объект не менялся.
## dump-cfg — выгрузить версию в CF
```powershell
+13 -8
View File
@@ -1,4 +1,4 @@
# db-repo v1.7 — 1C configuration repository operations
# db-repo v1.8 — 1C configuration repository operations
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# NB: движок только 1cv8 — ibcmd работу с хранилищем не поддерживает (нет такого режима).
<#
@@ -985,14 +985,19 @@ function Write-RepoVerdict {
if ($Cmd -eq 'report' -and $ReportFormat -eq 'txt' -and (Test-Path $OutputFile)) {
$txt = [System.Text.Encoding]::UTF8.GetString([System.IO.File]::ReadAllBytes($OutputFile))
if ($txt.Length -gt 0 -and $txt[0] -eq [char]0xFEFF) { $txt = $txt.Substring(1) }
$lines = @($txt -split "`r?`n")
$limit = 200
Write-Host "--- $OutputFile ---"
Write-Host (($lines | Select-Object -First $limit) -join [Environment]::NewLine)
if ($lines.Count -gt $limit) {
Write-Host "[... показаны первые $limit строк из $($lines.Count); полный отчёт в файле ...]" -ForegroundColor Yellow
$lines = @($txt.TrimEnd() -split "`r?`n")
# Короткий отчёт печатаем целиком, длинный — не печатаем ВОВСЕ. Обрезанный отчёт
# по версиям опаснее длинного: он читается как полный ответ, и по куску легко
# заключить «объект не менялся». Список объектов при обрезке хотя бы очевидно неполон.
if ($lines.Count -le 100) {
Write-Host "--- $OutputFile ---"
Write-Host ($lines -join [Environment]::NewLine)
Write-Host "--- End ---"
} else {
Write-Host "Отчёт не печатается целиком (строк: $($lines.Count)): $OutputFile" -ForegroundColor Yellow
Write-Host "Сузьте выборку: -NBegin -1 (только последняя версия), -NBegin/-NEnd (диапазон)," -ForegroundColor Yellow
Write-Host "-DateBegin/-DateEnd (период), -GroupByObject (сводка по объектам)." -ForegroundColor Yellow
}
Write-Host "--- End ---"
}
return 0
}
+13 -8
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# db-repo v1.7 — 1C configuration repository operations
# db-repo v1.8 — 1C configuration repository operations
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# NB: движок только 1cv8 — ibcmd работу с хранилищем не поддерживает (нет такого режима).
"""Работа с хранилищем конфигурации 1С.
@@ -865,13 +865,18 @@ def write_repo_verdict(cmd, log, platform_exit, requested, report_format="", out
print("Команда '%s' выполнена." % cmd)
if cmd == "report" and report_format == "txt" and os.path.exists(output_file):
with open(output_file, encoding="utf-8-sig") as f:
lines = f.read().splitlines()
limit = 200
print("--- %s ---" % output_file)
print("\n".join(lines[:limit]))
if len(lines) > limit:
print("[... показаны первые %d строк из %d; полный отчёт в файле ...]" % (limit, len(lines)))
print("--- End ---")
lines = f.read().rstrip().splitlines()
# Короткий отчёт печатаем целиком, длинный — не печатаем ВОВСЕ. Обрезанный отчёт
# по версиям опаснее длинного: он читается как полный ответ, и по куску легко
# заключить «объект не менялся». Список объектов при обрезке хотя бы очевидно неполон.
if len(lines) <= 100:
print("--- %s ---" % output_file)
print(chr(10).join(lines))
print("--- End ---")
else:
print("Отчёт не печатается целиком (строк: %d): %s" % (len(lines), output_file))
print("Сузьте выборку: -NBegin -1 (только последняя версия), -NBegin/-NEnd (диапазон),")
print("-DateBegin/-DateEnd (период), -GroupByObject (сводка по объектам).")
return 0
def main():