feat: добавлен скрипт build_bundle.py для сборки source-bundle.md и source-toc.md

This commit is contained in:
“Naeel”
2026-05-19 17:39:58 +04:00
parent e78a930ab4
commit 1497940812
+91
View File
@@ -0,0 +1,91 @@
"""
Пересобирает results/source-bundle.md и results/source-toc.md
из очищенных исходников v1/ (без taffy и без backup-каталогов).
Запуск:
python3 build_bundle.py
Что делает:
1. Обходит v1/ рекурсивно, собирает все .cfc и .cfm файлы
(исключая taffy/ и bk/)
2. Формирует results/source-bundle.md — один большой MD,
каждый файл как раздел ## filepath + код в блоке ```cfml
3. Формирует results/source-toc.md — оглавление с номерами строк
в bundle (не страниц)
Настройки:
ROOT — корневая директория исходников
SKIP — папки, которые исключаются из обхода
OUT_DIR — куда писать результирующие файлы
"""
import os
import re
from datetime import date
ROOT = 'v1'
SKIP = ['taffy', 'bk']
OUT_DIR = 'results'
BUILD_DATE = date.today().isoformat()
def collect_files(root, skip):
files = []
for dirpath, dirnames, filenames in os.walk(root):
dirnames[:] = sorted([d for d in dirnames if d not in skip])
for fname in sorted(filenames):
if fname.endswith('.cfc') or fname.endswith('.cfm'):
files.append(os.path.join(dirpath, fname))
return files
def build_bundle(files):
lines = []
lines.append(f'# Исходники svc-api-x\n')
lines.append(f'Дата сборки: {BUILD_DATE}\n')
lines.append('Прикладной слой после cleanup: v1/ без taffy и без backup-каталогов.\n')
for fpath in files:
with open(fpath, encoding='utf-8', errors='ignore') as f:
code = f.read().rstrip('\n')
lines.append(f'\n## {fpath}\n')
lines.append(f'\n```cfml\n{code}\n```\n')
return '\n'.join(lines)
def build_toc(bundle_content):
bundle_lines = bundle_content.split('\n')
toc_entries = []
for i, line in enumerate(bundle_lines, 1):
m = re.match(r'^## (.+)$', line)
if m:
toc_entries.append((m.group(1).strip(), i))
out = []
out.append(f'# Оглавление исходников svc-api-x\n')
out.append(f'Дата сборки: {BUILD_DATE}\n')
out.append('\n## Прикладной слой\n')
out.append('```text')
for rel, lineno in toc_entries:
dots = '.' * max(1, 55 - len(rel) - len(str(lineno)))
out.append(f'{rel} {dots} {lineno}')
out.append('```')
return '\n'.join(out) + '\n'
if __name__ == '__main__':
files = collect_files(ROOT, SKIP)
bundle = build_bundle(files)
bundle_path = os.path.join(OUT_DIR, 'source-bundle.md')
with open(bundle_path, 'w', encoding='utf-8') as f:
f.write(bundle)
toc = build_toc(bundle)
toc_path = os.path.join(OUT_DIR, 'source-toc.md')
with open(toc_path, 'w', encoding='utf-8') as f:
f.write(toc)
print(f'Файлов в bundle: {len(files)}')
print(f'{bundle_path} — готово')
print(f'{toc_path} — готово')