mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-22 18:25:55 +03:00
feat(db-load-xml,db-load-git): предупреждать о полной загрузке при Configuration.xml в списке
Список частичной загрузки задаёт объекты метаданных: вместе с объектом платформа грузит его дочерние объекты (формы, макеты) и файлы Ext/. Configuration.xml — объект «Конфигурация», поэтому его наличие в списке даёт полную загрузку конфигурации, а не перечисленных объектов. В db-load-git он попадает в список из диффа сам, без участия пользователя. Замерено на обоих движках (1cv8 и ibcmd): правило одинаково. - SKILL.md обоих навыков: строка про цену Configuration.xml в списке; - хинт в выводе обеих веток движка; - два кейса на срабатывание и на отсутствие ложного срабатывания. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
77836f7ada
commit
6eaf3211cc
@@ -13,6 +13,8 @@ allowed-tools:
|
||||
|
||||
Определяет изменённые файлы конфигурации по данным Git и выполняет частичную загрузку в информационную базу.
|
||||
|
||||
> Если в изменениях есть `Configuration.xml`, платформа выполнит **полную загрузку конфигурации**, а не только изменённых объектов.
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# db-load-git v1.27 — Load Git changes into 1C database
|
||||
# db-load-git v1.28 — Load Git changes into 1C database
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# NB: *nix-раскладку платформы (/opt/1cv8/<ver>/1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется.
|
||||
<#
|
||||
@@ -800,6 +800,14 @@ if ($configFiles.Count -eq 0) {
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Корневой Configuration.xml — это объект «Конфигурация»: вместе с объектом платформа грузит его
|
||||
# дочерние объекты, а у конфигурации это весь состав. В список он попадает из диффа сам, поэтому
|
||||
# предупреждаем — пользователь его не выбирал.
|
||||
if (@($configFiles | Where-Object { ($_ -replace '\\', '/') -ieq 'Configuration.xml' }).Count -gt 0) {
|
||||
Write-Host "[ВНИМАНИЕ] В изменениях есть Configuration.xml: платформа выполнит ПОЛНУЮ загрузку" -ForegroundColor Yellow
|
||||
Write-Host " конфигурации, а не только изменённых объектов." -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
Write-Host "Files for loading: $($configFiles.Count)"
|
||||
foreach ($f in $configFiles) { Write-Host " $f" }
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# db-load-git v1.27 — Load Git changes into 1C database
|
||||
# db-load-git v1.28 — Load Git changes into 1C database
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
|
||||
import argparse
|
||||
@@ -850,6 +850,13 @@ def main():
|
||||
print("No configuration files found in changes")
|
||||
sys.exit(0)
|
||||
|
||||
# Корневой Configuration.xml — это объект «Конфигурация»: вместе с объектом платформа грузит
|
||||
# его дочерние объекты, а у конфигурации это весь состав. В список он попадает из диффа сам,
|
||||
# поэтому предупреждаем — пользователь его не выбирал.
|
||||
if any(x.replace("\\", "/").lower() == "configuration.xml" for x in config_files):
|
||||
print("[ВНИМАНИЕ] В изменениях есть Configuration.xml: платформа выполнит ПОЛНУЮ загрузку")
|
||||
print(" конфигурации, а не только изменённых объектов.")
|
||||
|
||||
print(f"Files for loading: {len(config_files)}")
|
||||
for f in config_files:
|
||||
print(f" {f}")
|
||||
|
||||
@@ -71,7 +71,9 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/db-load-xml.ps1" <
|
||||
| Режим | Описание |
|
||||
|-------|----------|
|
||||
| `Full` | Полная загрузка — замена всей конфигурации из каталога XML |
|
||||
| `Partial` | Частичная — загрузка выбранных файлов (с `-partial -updateConfigDumpInfo`) |
|
||||
| `Partial` | Частичная — перечисленные объекты вместе с их дочерними (формы, макеты) и `Ext/` |
|
||||
|
||||
> Если в список файлов включить `Configuration.xml`, платформа выполнит **полную загрузку конфигурации**, а не только перечисленных объектов.
|
||||
|
||||
### Формат файла списка (listFile)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# db-load-xml v1.29 — Load 1C configuration from XML files
|
||||
# db-load-xml v1.30 — Load 1C configuration from XML files
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# NB: *nix-раскладку платформы (/opt/1cv8/<ver>/1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется.
|
||||
<#
|
||||
@@ -564,6 +564,18 @@ function Write-PlatformOutput {
|
||||
Write-Host "--- End ---"
|
||||
}
|
||||
|
||||
function Write-WholeConfigScopeHint {
|
||||
# Список задаёт объекты метаданных, а не только файлы: вместе с объектом платформа грузит его
|
||||
# дочерние объекты. Корневой Configuration.xml — это объект «Конфигурация», поэтому список с ним
|
||||
# загружает конфигурацию целиком. Замерено на 1cv8 и ibcmd; см. docs по навыку.
|
||||
param([string[]]$FileList, [string]$Extension)
|
||||
$hasRoot = @($FileList | Where-Object { ($_ -replace '\\', '/') -ieq 'Configuration.xml' }).Count -gt 0
|
||||
if (-not $hasRoot) { return }
|
||||
$what = if ($Extension) { "расширения" } else { "конфигурации" }
|
||||
Write-Host "[ВНИМАНИЕ] В списке Configuration.xml — платформа выполнит ПОЛНУЮ загрузку $what," -ForegroundColor Yellow
|
||||
Write-Host " а не только перечисленных объектов." -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
# Строки лога, о которых платформа сообщает, НЕ поднимая код возврата: метаданные отброшены или
|
||||
# конфигурация нерабочая, а операция при этом «успешна». Возвращает подошедшие строки.
|
||||
#
|
||||
@@ -735,6 +747,7 @@ try {
|
||||
Write-Host "Error: -Files or -ListFile required for partial import" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
Write-WholeConfigScopeHint -FileList $fileList -Extension $Extension
|
||||
$arguments = @("infobase", "config", "import", "files") + $fileList
|
||||
$arguments += "--base-dir=$ConfigDir", "--db-path=$InfoBasePath"
|
||||
if ($Extension) { $arguments += "--extension=$Extension" }
|
||||
@@ -839,6 +852,7 @@ try {
|
||||
Write-Host "Error: после исключения служебных файлов поддержки загружать нечего. Для смены поддержки используйте -Mode Full." -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
Write-WholeConfigScopeHint -FileList $fileList -Extension $Extension
|
||||
$generatedListFile = Join-Path $tempDir "load_list.txt"
|
||||
$utf8Bom = New-Object System.Text.UTF8Encoding($true)
|
||||
[System.IO.File]::WriteAllLines($generatedListFile, $fileList, $utf8Bom)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# db-load-xml v1.29 — Load 1C configuration from XML files
|
||||
# db-load-xml v1.30 — Load 1C configuration from XML files
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
|
||||
import argparse
|
||||
@@ -493,6 +493,17 @@ def print_platform_output(result):
|
||||
print("--- End ---")
|
||||
|
||||
|
||||
def print_whole_config_scope_hint(file_list, extension=""):
|
||||
"""Список задаёт объекты метаданных, а не только файлы: вместе с объектом платформа грузит его
|
||||
дочерние объекты. Корневой Configuration.xml — это объект «Конфигурация», поэтому список с ним
|
||||
загружает конфигурацию целиком. Замерено на 1cv8 и ibcmd."""
|
||||
if not any(x.replace("\\", "/").lower() == "configuration.xml" for x in file_list):
|
||||
return
|
||||
what = "расширения" if extension else "конфигурации"
|
||||
print(f"[ВНИМАНИЕ] В списке Configuration.xml — платформа выполнит ПОЛНУЮ загрузку {what},")
|
||||
print(" а не только перечисленных объектов.")
|
||||
|
||||
|
||||
def find_silent_rejections(log_text):
|
||||
"""Строки лога, о которых платформа сообщает, НЕ поднимая код возврата.
|
||||
|
||||
@@ -765,6 +776,7 @@ def main():
|
||||
if not file_list:
|
||||
print("Error: -Files or -ListFile required for partial import")
|
||||
sys.exit(1)
|
||||
print_whole_config_scope_hint(file_list, args.Extension)
|
||||
arguments = ["infobase", "config", "import", "files"] + file_list
|
||||
arguments += [f"--base-dir={args.ConfigDir}", f"--db-path={args.InfoBasePath}"]
|
||||
if args.Extension:
|
||||
@@ -873,6 +885,7 @@ def main():
|
||||
if not file_list:
|
||||
print("Error: после исключения служебных файлов поддержки загружать нечего. Для смены поддержки используйте -Mode Full.")
|
||||
sys.exit(1)
|
||||
print_whole_config_scope_hint(file_list, args.Extension)
|
||||
generated_list_file = os.path.join(temp_dir, "load_list.txt")
|
||||
with open(generated_list_file, "w", encoding="utf-8-sig") as f:
|
||||
f.write("\n".join(file_list))
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"name": "Без Configuration.xml в списке предупреждения о полной загрузке нет",
|
||||
"fakePlatform": {
|
||||
"log": ""
|
||||
},
|
||||
"preRun": [
|
||||
{
|
||||
"writeFile": {
|
||||
"path": "src/Configuration.xml",
|
||||
"content": "<?xml version=\"1.0\"?><MetaDataObject/>"
|
||||
}
|
||||
}
|
||||
],
|
||||
"args_extra": [
|
||||
"-V8Path",
|
||||
"{fakePlatform}",
|
||||
"-InfoBasePath",
|
||||
"{workDir}/ib",
|
||||
"-ConfigDir",
|
||||
"{workDir}/src",
|
||||
"-Files",
|
||||
"Catalogs/Номенклатура.xml,Catalogs/Номенклатура/Ext/ObjectModule.bsl"
|
||||
],
|
||||
"expect": {
|
||||
"stdoutContains": "Executing partial configuration load...",
|
||||
"stdoutNotContains": "ПОЛНУЮ загрузку конфигурации"
|
||||
},
|
||||
"noSnapshot": "навык ничего не пишет в рабочий каталог — проверяется отсутствие предупреждения"
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"name": "Configuration.xml в списке: предупреждаем о полной загрузке конфигурации",
|
||||
"fakePlatform": {
|
||||
"log": ""
|
||||
},
|
||||
"preRun": [
|
||||
{
|
||||
"writeFile": {
|
||||
"path": "src/Configuration.xml",
|
||||
"content": "<?xml version=\"1.0\"?><MetaDataObject/>"
|
||||
}
|
||||
}
|
||||
],
|
||||
"args_extra": [
|
||||
"-V8Path",
|
||||
"{fakePlatform}",
|
||||
"-InfoBasePath",
|
||||
"{workDir}/ib",
|
||||
"-ConfigDir",
|
||||
"{workDir}/src",
|
||||
"-Files",
|
||||
"Configuration.xml,Catalogs/Номенклатура.xml"
|
||||
],
|
||||
"expect": {
|
||||
"stdoutContains": [
|
||||
"Executing partial configuration load...",
|
||||
"[ВНИМАНИЕ] В списке Configuration.xml — платформа выполнит ПОЛНУЮ загрузку конфигурации,",
|
||||
"а не только перечисленных объектов."
|
||||
]
|
||||
},
|
||||
"noSnapshot": "навык ничего не пишет в рабочий каталог — проверяется текст предупреждения"
|
||||
}
|
||||
Reference in New Issue
Block a user