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