gifts2017

Скрипт выгрузки хранилища в GIT на Python (beta)

Опубликовал Биос Team (team bios) в раздел Программирование - Инструментарий

Скрипт для выгрузки хранилища 1С в GIT для платформ 8.1, 8.2(не тестировалось), 8.3

Решили мы как-то подружить 1С (и себя) с GIT. Основной задачей этой дружбы является анализ истории объектов, быстро найти, "откуда ноги растут" той или иной строчки кода. Есть желание попробовать Git-flow в контексте 1С. Но, на данном этапе, нужно было перегрузить модули различных конфигураций 1С с комментариями из хранилища в GIT.

На данный момент есть несколько разработок, позволяющих это сделать 

  • Gitter от rtmn, - конфигурация для автоматизации процесса выгрузки изменений из хранилища 1С в систему версионирования Git.
  • gitsync на OneScript от Evil Beaver - представляет собой отдельное (standalone) приложение на 1Script, и предназначено для синхронизации хранилища конфигураций 1С с репозитарием git.
Алгоритмы работы у них схожи  - извлечь версию конфигурации, загрузить в базу, выгрузить в файлы используя платформу. За счет использования платформы тратится много времени.

Мы выбрали gitsync, это было субъективное решение, желание поработать с OneScript, более легкое и гибкое решение.

Сначала тестирование проводилось на небольших хранилищах 8.3, все отлично отработало и работает сейчас.

Следующим шагом была выгрузка хранилище на 8.1. Немного подправив скрипты, запустили процесс выгрузки. По примерным расчетам, для переноса данных хранилища в git, потребовалось бы чуть меньше месяца (проекту 8 лет, большая конфигурация, много версий, на 1 commit требовалось около 8 минут). Смирились с производительностью и решили подождать месяц. Но стали возникатоь ошибкой 1с конфигуратора. Не долго разбираясь, решили попробовать написать свой велосипед. Были наработки на C# и python по чтению 1CD и разбору контейнеров(cf)

Велосипед

Получился скрипт, который распаковывает версию и выгружает как есть, за некоторым исключением - формирует нормальные имена файлов, раскладывает данные по каталогам.

 

Спасибо 

 


Плюсы:

  • скорость - 1 commit ~ 0,7 сек, выгрузка всей истории хранилища(4600 версий) заняла примерно 1 час, без выполнения git -commit 22 сек.
  • эстетическая - нет дополнительных окон (конфигуратор, tool_1cd, cmd)

Минусы:

  • "обратно не засунешь" - нет возможности собрать из выгрузки cf или загрузить в базу (но у нас не было такой задачи), 
  • трудно читаемое описание объектов - объекты выгружаются как есть (в скобочном формате "{"), а не в XML (опять же, задача была быстро выгрузить код)

 

Итог: данное решение подходит, если хранилище на 8.1/8.2, если основной целью выгрузки является код.

8.3 умеет выгружать конфигурацию в XML, тут лучше подойдет gitsync на OneScript.


Исходники выложены на GitHub и на своем Git-сервере, кто хочет помочь, присоединяйтесь.

 

Требования:

Сценарий использования:

  1. Создаем файл настроек
    [LOG]
    level = ERROR
    file = %%Y-%%m-%%d.log
    [BASE]
    store = Путь к файлу хранилища
    local_repo = Путь к локальному каталогу репозитория
    remote_repo = URL удаленного репозитория
  2. Запускаем для создания репозтитория и служебных файлов.
    python rup.py init <файл настроек>
  3. Настраиваем соответствие пользователей и пользователей GIT в файле <Каталог локального репозитория>\authors.cs
  4. Запускаем для выгрузки истории
    python rup.py export <файл настроек>

Актуальная версия и подробный мануал тут и на GitHub 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
cfg_tools-master.zip
.zip 25,99Kb
25.01.16
5
.zip 25,99Kb 5 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Артур Аюханов (artbear) 26.01.16 16:53
Еще один в клуб разборщиков конфы на исходники :)

Исходники выложены, кто хочет помочь, присоединяйтесь.

Ссылка на исходники не работает.
2. Артур Аюханов (artbear) 26.01.16 17:03
3. Артур Аюханов (artbear) 26.01.16 17:03
Добавьте лицензию к проекту
4. Егор Иванов (Infactum) 26.01.16 17:17
В целом проект радует. После беглого взгляда рекомендовал бы следующее:
- Убрать велосипед git_mng.py. Вместо него есть такая великолепная вещь, как GitPython.
- Заимствуя чужой код не нарушать лицензию :) Намекаю на мой проект. Что мешало просто включить его в качестве зависимости?
- После реализации предыдущих пунктов сделать нормальный setup.py и залить все в pip.
artbear; Evil Beaver; +2 Ответить 2
5. Биос Team (team bios) 26.01.16 17:27
(4) Infactum, GitPython - чтот не взлетел по-быстрому, так что пришлось сделать костыль, а так да, в дальнейшем планируется работа с гитом через него.
по проекту вашему, из него была взята идея и небольшая часть кода, мы боролись за скорость и наше решение выигрывало.
6. Егор Иванов (Infactum) 26.01.16 17:30
(5) team bios, заимствование части кода как бы не отменяет требований лицензии :)
А если отложить занудство в сторону, то был бы рад получить более подробное описание относительно того, какие проблемы скорости работы вы встретили и как они были решены. В идеале можно и pull request, но настаивать конечно не могу.
7. Биос Team (team bios) 26.01.16 17:36
(1) artbear, ссылку поправили, спасибо! И спасибо за интерес!;)
8. Биос Team (team bios) 26.01.16 17:38
(6) Infactum, хорошо, будем внимательнее:) Чуть позже отпишем по подробностям. Спасибо!
9. Биос Team (team bios) 26.01.16 17:41
(6) Infactum, по лицензии и возможности pull request позже. мы только после последнего ивента занялись вопросом git и open source:)
10. Андрей Овсянкин (Evil Beaver) 26.01.16 18:10
Быструю многопоточную разбиралку CF на базе unpackv8 (С++) делал Сергей Батанов (http://infostart.ru/profile/45491/). Оно как бы хорошо, что вы все наши наработки знаете и пробовали, а все ж теперь есть "еще одна", а не развитие существующих.
11. Андрей Овсянкин (Evil Beaver) 26.01.16 18:18
А, ну и чего не на гитхабе-то?

Предложение-дополнение Infactum:

1. Делаете пакет "разбиралки" файлов guid.0 из CF на файлы Справочник.ЧтоТоТам.Форма
2. Оформляете как самостоятельный пакет в pip
3. Делаете пакет вот этого вот синхронизатора
4. Подключаете существующий "читатель" 1CD, как зависимость
5. Опять же создаете пакет в pip
6. Переписываете все это на 1Скрипт :)
8. Выкладываете на гитхаб.
12. Егор Иванов (Infactum) 26.01.16 18:25
(10) Evil Beaver, Ссылка куда-то не туда ведет.
В защиту Python (да и любой скриптовой реализации разбора) скажу, что не смотря на всю быстроту C++ необходимость самостоятельно сборки или наличия готовых бинарников под все системы несколько напрягает. Python например работает везде куда только не посмотри, и в большинстве случаев стоит "по дефолту". Кстати никто так и не решился сделать адекватное сравнение скорости работы распаковки/запаковки на Python и C++. В моем субъективном тесте Python версия как минимум работает так же по скорости.

(11) Evil Beaver, плюсую. НУ разве что кроме последнего пункта :)
А если надумают выйти на совсем взрослый уровень, то крайне желательно наличие тестов и какого-нибудь CI. Тот же Travis например практически идеальный вариант для гитхаба.
13. Артур Аюханов (artbear) 26.01.16 19:07
Я на всякий случай сделал 2 origin-а, один из них ведет на исходный сайт автора, другой на гитхаб https://github.com/artbear/cfg_tools_python
(0) Как только определитесь с лицензией, поправлю репо на гитхабе.
14. Андрей Овсянкин (Evil Beaver) 26.01.16 19:24
(12) Infactum, т.е. с предпоследним пунктом все-таки согласен?
15. Валерий Агеев (awa) 26.01.16 20:32
(11)(14) Предпоследний пункт - это пункт 7 ведь?
16. Биос Team (team bios) 26.01.16 20:38
(10) Evil Beaver, Мы не нашли "наработок"(кроме Tool_1cd, но у него нет исходников в свободном доступе) на основании которых можно было бы сделать быструю выгрузку. Используя несколько инструментов(tool_1cd и unpuck, например) мы бы тратили лишнее время на сборку cf а потом разборку, когда, например, в коммите был 1 файл.
17. Биос Team (team bios) 26.01.16 20:40
(11) Evil Beaver, У нас была одна задача на этом этапе - быстро перекинуть код. В будущем постараемся развить, спасибо за советы! А разработку оставим на питоне, потому как нравится:). А не на гитхабе, потому что после ивента решили познакомиться с гитом, "покурили" тему и выбрали гитлаб, потому что его можно бесплатно развернуть у себя (у нас есть закрытые проекты, такой режим на гитхабе платный). Вот и расшарили этот проект на своем сервере. Создаем учетку на гитхабе, опубликуем там проект. Спасибо!
theshadowco; +1 Ответить 1
18. Андрей Овсянкин (Evil Beaver) 27.01.16 09:54
(17) team bios, судя по недавним тикетам на gitsync и данной статье, вы с theshadowco - коллеги?

То, что в статье предложено, мне нравится. Я же не с критикой выступаю, а с предложениями. Ну и вообще, я сторонник подхода share the knowledge. Отсюда и желание видеть это в опенсорсе, на сервере, который не будет сегодня-завтра отключен владельцем. Это раз. И хочется видеть это в виде продукта, готового к повторному использованию, с соответствующей документацией и лицензией - это два.
19. Андрей Овсянкин (Evil Beaver) 27.01.16 10:51
(15) awa, нет, предпоследний - это пункт 6. Просто он две единицы занимает ))
20. Евгений Сосна (pumbaE) 27.01.16 11:20
Добавили бы еще в gitsync частичную выгрузку только изменных модулей - цены б не было. Т.е. если в версии поменялся только модуль или толстая форма, тогда только их выгружаем по правильному пути, а в случаи изменения объектов или упр.форм тогда выгружаем все полностью всю конфигурацию.
JohnyDeath; +1 Ответить
21. Биос Team (team bios) 27.01.16 12:53
(18) Evil Beaver, нет, не коллеги и не знакомы)
Очень рады предложениям и с радостью их воспринимаем, спасибо! Про гитхаб все поняли, зарегились, опубликовали там проект https://github.com/TeamBIOS/cfg_tools ((3) artbear, лицензию добавили).
Про готовый продукт обсуждали между собой, чтобы все по-человечески доделать и опубликовать, но решили сделать это сейчас и после доработки обновить (для этого и приписали beta). В общем, оно и хорошо получилось, учтем все предложения при развитии проекта.
22. Биос Team (team bios) 27.01.16 14:00
(4) Infactum, Добавили лицензию и включили в нее Вас
23. Биос Team (team bios) 27.01.16 14:25
(6) Infactum, про проблемы сложно сказать, т.к. проект был написан с нуля с использованием части Вашего кода(разбор описания таблиц и преобразование типов + некоторые идеи) за это вам большое спасибо, уже исправились в части лицензировния:)). В чистом виде Ваше решение у нас не взлетело, решили писать свой велосипед (уже поняли, что это не популярное мероприятие в местных кругах, но интересно же:)). Можно только по итогу сказать - разница в быстродействии - примерно в 2 раза (база ~ 3гб; onec_tools: 06:28.567312; cfg_tools: 03:49.299595). Если есть желание можем попробовать объеденить наши проекты. но это надо обсуждать отдельно.
24. Артур Аюханов (artbear) 27.01.16 15:38
(21) Первый форк у меня :)
Лицензию увидел
team bios; +1 Ответить
25. Егор Иванов (Infactum) 27.01.16 16:16
(23) team bios, опубликуйте код теста, которым вы производительность сравниваете, пожалуйста (например на GIST). Как будет время я обязательно посмотрю, что там с быстродействием.
26. Биос Team (team bios) 27.01.16 16:26
(25) Infactum, текст кода, была идея сначала, что дело в BLOB, но увы они мало влияют. А так, профйлер покажет что надо улучшать.
27. Станислав Крякин (Stas26) 25.07.16 13:09
Разместил хранилище с помощью гит хранилище на сайте bitbucket.org. Загрузка идет прекрассно. Можно ли каким-то образом сделать загрузку обратно в к конфигурацию 1С (хранилище), но не всю целиком (git clone ...), а выборочно? То есть, на сайте bitbucket.org хранится информация в коммитах. Допустим коммит 1 - Справочник Номенклатура, коммит 2 Справочник - Организация, коммит 3 - Справочник контрагенты. Мне нужно загрузить в конфигурацию 2 (хранилище 2) из этих 3 коммитов только 1, коммит 2, а остальные не загружать, так как например имеются там какие-нибудь ошибки. Можно это сделать? Если да, то как?
28. Биос Team (team bios) 25.07.16 13:25
(27) Stas26, На данный момент (в нашем инструменте) нет такой возможности.

Можно посмотреть в строну Tool_1cd, умеет ли он, если да то, можно выгрузить средствами гита нужные коммиты, привести имена файлов к нужному виду(для Tool_1cd) и скормить из ему. А может Tool_1cd уже имеет необходимый функционал.
29. kav kav (alexkmbk) 14.08.16 07:41
(6) Infactum, А равзе MIT лицензия не предусматривает что проект является общественным достоянием и код можно использовать по своем усмотрению, в том числе использовать код в своих проектах?
30. Егор Иванов (Infactum) 14.08.16 10:20
(29) alexkmbk, можно.
У лицензии MIT всего лишь одно условие:
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа