На самом деле, поиск инструментов, которые удовлетворяли бы некоторым базовым требованиям велись уже давно. Но решение всегда ускользало от нас, мы участвовали в большом количестве вебинаров, встреч, обсуждений и дело не сдвигалось с места. После участия в infostart-ивенте к нам на глаза попал очень интересный проект Евгения Сосны (github).
Суть проекта Евгения заключается в том, что при выполнении команды "git commit" обработки\отчеты автоматически распаковываются и добавляются в репозиторий. Соответственно можно смотреть версии и изменения модулей и множество других полезностей. Вроде все что нужно, но не тут то было. По сути мы сделали свой fork с блекджеком и ...
Какие проблемы были решены:
- Как оказалось нормально распаковываются только обработки для обычного приложения, а у нас вся работа с УФ. Посидев с бубнами и разобравшись с V8Reader - внесли небольшие изменения;
- Скорость парсинга была не ахти. Решено было написать новую обработку за основу взяли часть кода, оптимизировали, лишнее выкинули по дороге дописали что-то свое;
- Последней неприятностью было то, что при добавлении файлов распаковки (git commit) они всем скопом заменялись и было сложно сразу понять что же у нас изменилось, хотя по своей сути изменялось 1-2 модуля из 40. Тут на помощь пришла 1С 8.3 с встроенными функциями хеширования. Перед записью файлов модулей мы начали сверять их хеши (по алгоритму SHA-1) и записывали только не совпадающие, а так же удаляли те модули которых уже в обработке нет.
Состав архива:
- pyv8unpack.py - python скрипт, получающий список помещаемых файлов при коммите, фильтрующий по расширению только внешние обработки/отчеты и запускающий внешнюю обработку для распаковки этих файлов;
- V8Commit.epf - внешняя обработка 1С, которая с помощью v8unpack разбирает внешние обработки, определяет нормальные наименования и раскладывает их по папкам;
- V8Commit - сервисная база данных для запуска V8Commit.epf;
- pre-commit - собственно командный файл вызываемый git перед каждым помещением. Выполняет роль простой запускалки скрипта pyv8unpack.py.
Скриншот куда это нужно положить чтобы оно начало работать:
P.S. Посильную помощь оказывал Андрей Комар, youtube, infostart. Ну и ссылка на наш блог.
Так же отдельное спасибо: Евгению Сосне aka PumbaEO