diff --git a/.claude/skills/db-load-git/scripts/db-load-git.ps1 b/.claude/skills/db-load-git/scripts/db-load-git.ps1 index 5f203962..576e7ced 100644 --- a/.claude/skills/db-load-git/scripts/db-load-git.ps1 +++ b/.claude/skills/db-load-git/scripts/db-load-git.ps1 @@ -1,4 +1,4 @@ -# db-load-git v1.2 — Load Git changes into 1C database +# db-load-git v1.3 — Load Git changes into 1C database # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills <# .SYNOPSIS @@ -107,8 +107,8 @@ param( $OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 -# --- Helper: map BSL path to object XML --- -function Get-ObjectXmlFromBsl { +# --- Helper: map sub-file path (BSL, HTML, etc.) to object XML --- +function Get-ObjectXmlFromSubFile { param([string]$RelativePath) $parts = $RelativePath -split '[\\/]' @@ -224,40 +224,38 @@ foreach ($file in $changedFiles) { # Skip service files if ($file -eq "ConfigDumpInfo.xml") { continue } - # Only process .xml and .bsl files - if ($file -match '\.(xml|bsl)$') { - # Check file exists in config dir - $fullPath = Join-Path $ConfigDir $file - if ($file -match '\.xml$') { - if (Test-Path $fullPath) { - if ($configFiles -notcontains $file) { - $configFiles += $file - } + $fullPath = Join-Path $ConfigDir $file + + if ($file -match '\.xml$') { + # XML file — add directly if exists + if (Test-Path $fullPath) { + if ($configFiles -notcontains $file) { + $configFiles += $file } } - elseif ($file -match '\.bsl$') { - # For BSL: add the BSL itself + parent object XML + all Ext/ files - $objectXml = Get-ObjectXmlFromBsl -RelativePath $file - if ($objectXml) { - $fullXmlPath = Join-Path $ConfigDir $objectXml - if (Test-Path $fullXmlPath) { - if ($configFiles -notcontains $objectXml) { - $configFiles += $objectXml - } - if ($configFiles -notcontains $file) { - $configFiles += $file - } + } + else { + # Non-XML (BSL, HTML, etc.) — map to parent object XML + include all Ext/ files + $objectXml = Get-ObjectXmlFromSubFile -RelativePath $file + if ($objectXml) { + $fullXmlPath = Join-Path $ConfigDir $objectXml + if (Test-Path $fullXmlPath) { + if ($configFiles -notcontains $objectXml) { + $configFiles += $objectXml + } + if ((Test-Path $fullPath) -and $configFiles -notcontains $file) { + $configFiles += $file + } - # Add all files from Ext/ directory of the object - $parts = $file -split '[\\/]' - if ($parts.Count -ge 2) { - $extDir = Join-Path (Join-Path $ConfigDir $parts[0]) "$($parts[1])\Ext" - if (Test-Path $extDir) { - Get-ChildItem -Path $extDir -Recurse -File | ForEach-Object { - $extRelPath = $_.FullName.Replace("$ConfigDir\", '').Replace('\', '/') - if ($configFiles -notcontains $extRelPath) { - $configFiles += $extRelPath - } + # Add all files from Ext/ directory of the object + $parts = $file -split '[\\/]' + if ($parts.Count -ge 2) { + $extDir = Join-Path (Join-Path $ConfigDir $parts[0]) "$($parts[1])\Ext" + if (Test-Path $extDir) { + Get-ChildItem -Path $extDir -Recurse -File | ForEach-Object { + $extRelPath = $_.FullName.Replace("$ConfigDir\", '').Replace('\', '/') + if ($configFiles -notcontains $extRelPath) { + $configFiles += $extRelPath } } } diff --git a/.claude/skills/db-load-git/scripts/db-load-git.py b/.claude/skills/db-load-git/scripts/db-load-git.py index 35665726..c032e9c0 100644 --- a/.claude/skills/db-load-git/scripts/db-load-git.py +++ b/.claude/skills/db-load-git/scripts/db-load-git.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-load-git v1.2 — Load Git changes into 1C database +# db-load-git v1.3 — Load Git changes into 1C database # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -33,8 +33,8 @@ def resolve_v8path(v8path): return v8path -def get_object_xml_from_bsl(relative_path): - """Map BSL path to object XML path.""" +def get_object_xml_from_subfile(relative_path): + """Map sub-file path (BSL, HTML, etc.) to object XML path.""" parts = re.split(r"[\\/]", relative_path) if len(parts) >= 2: return f"{parts[0]}/{parts[1]}.xml" @@ -47,6 +47,7 @@ def run_git(config_dir, git_args): ["git"] + git_args, capture_output=True, text=True, + encoding="utf-8", cwd=config_dir, ) if result.returncode == 0: @@ -155,26 +156,22 @@ def main(): if file == "ConfigDumpInfo.xml": continue - # Only process .xml and .bsl files - if not re.search(r"\.(xml|bsl)$", file): - continue - - # Check file exists in config dir full_path = os.path.join(args.ConfigDir, file) if file.endswith(".xml"): + # XML file — add directly if exists if os.path.exists(full_path): if file not in config_files: config_files.append(file) - elif file.endswith(".bsl"): - # For BSL: add the BSL itself + parent object XML + all Ext/ files - object_xml = get_object_xml_from_bsl(file) + else: + # Non-XML (BSL, HTML, etc.) — map to parent object XML + include all Ext/ files + object_xml = get_object_xml_from_subfile(file) if object_xml: full_xml_path = os.path.join(args.ConfigDir, object_xml) if os.path.exists(full_xml_path): if object_xml not in config_files: config_files.append(object_xml) - if file not in config_files: + if os.path.exists(full_path) and file not in config_files: config_files.append(file) # Add all files from Ext/ directory of the object @@ -185,7 +182,6 @@ def main(): for root, dirs, files in os.walk(ext_dir): for fname in files: abs_path = os.path.join(root, fname) - # Build relative path from ConfigDir rel_path = os.path.relpath(abs_path, args.ConfigDir).replace("\\", "/") if rel_path not in config_files: config_files.append(rel_path)