feat: добавлен скрипт build_bundle.py для сборки source-bundle.md и source-toc.md
This commit is contained in:
@@ -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} — готово')
|
||||
Reference in New Issue
Block a user