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