Лирическое вступление
На днях довелось заниматься настройкой синхронизации Хранилища с репозиторием Git на новом проекте. Делал я это не первый раз, наработки кое-какие уже есть, поэтому каких-то больших временных затрат не предполагалось. Всё начиналось стандартно: установка oscript, обновление всех пакетов менеджером opm, инсталляция gitsync. И на этом шаге возник нюанс, имя которому "gitsync 3.0". Как оказалось, уже полгода как он вышел в релиз и заменил собой прежнюю версию 2.4.3.
Обратившись к странице приложения на github, можно узнать, что от прежней версии 2.4.3, наряду с новыми возможностями, версия 3.0 отличается полностью другой строкой вызова приложения, а также переносом некоторых функциональностей в плагины.
Как строится новая строка вызова, удалось понять достаточно быстро. А вот разбирательство с плагинами, которые мне требовалось задействовать, затянулось на несколько часов.
Сначала в ход был пущен всеми любимый метод научного тыка. Пробовал подставлять параметры (те, что раньше применял в 2.4.3) и так и этак, чувствуя себя при этом героем басни "Мартышка и очки". Следующим пошел в ход метод "Если ничто не помогает, попробуй прочитать Инструкцию", но и он не принес желаемых результатов. После этого последовал гуглинг, оказавшийся столь же безрезультатным. Увенчалось всё погружением в исходники.
Как обычно, всё оказалось очень просто. Но... не очевидно. И документация (на текущий момент) не очень помогает. Потому и родилась сия шпаргалка.
Новшества GitSync 3.0
Для начала, буквально парой слов, отмечу чем же примечательна и полезна новая версия (на свой субъективный взгляд).
Одно из важнейших изменений, это то, что в новой версии есть возможность работы с сервером хранилищ Конфигураций по tcp и http за счет подключения к Хранилищам посредством библиотеки v8storage.
Второе - теперь возможно указать информационную базу, используемую в качестве временной, для загрузки Конфигурации из Хранилища и выгрузки в файлы. Ранее для этого каждый раз создавалась временная файловая база. Проблемой это становилось, если на сервере, где происходит работа, нет возможности получить клиентскую лицензию. Например, клиентские лицензии выдает сервер приложений 1С.
Кроме того, теперь можно создавать собственные плагины к GitSync для реализации необходимой функциональности.
Командная строка
Строка запуска приложения прежней версии выглядела следующим образом:
>gitsync export D:\1c\repos\project_rep\ ./sources/config -tempdir D:\tempfiles\ -v8version 8.3.10.2561
Сначала указывалась Команда (в примере - export), далее шли позиционные параметры (в примере - путь к Хранилищу и к репозиторию), затем все опциональные параметры.
В новой версии кроме изменения имени самой команды (export -> sync), меняется и необходимый порядок указания параметров.
Выведем справку по приложению gitsync:
В выводе мы видим, что для приложения теперь есть общие опции, которые нужно указывать перед командой.
После команды указываются опции, относящиеся непосредственно к этой команде.
Например, для команды sync:
Здесь видим, что опции команды переместились и теперь располагаются перед позиционными параметрами.
Таким образом вызов приложения без функциональностей плагинов, будет выглядеть примерно следующим образом:
>gitsync --tempdir Z:\tempfiles\gitsync --v8version 8.3.14.1630 sync --storage-user gitbot tcp://test_1c_app/uh_main_rep Z:\git_repos\uh_main\config
Плагины
Как уже говорилось, часть привычной функциональности, например ограничение количества или границ выгружаемых версий (ранее определявшиеся опциями -limit, -minversion, -maxversion) вынесено в плагины. В поставку приложения уже включены эти плагины. Отдельно их скачивать и устанавливать не требуется.
- increment - обеспечивает инкрементальную выгрузку конфигурации в исходники
- sync-remote - добавляет функциональность синхронизации с удаленным репозиторием git (команды git pull и git push)
- limit - добавляет возможность ограничения на минимальный, максимальный номер версии хранилища, а так же на лимит на количество выгружаемых версий за один запуск
- check-authors - добавляет функциональность проверки автора версии в хранилище на наличие соответствия в файле AUTHORS
- check-comments - добавляет функциональность проверки на заполненность комментариев в хранилище
- smart-tags - добавляет функциональность автоматической расстановки меток в git (команда git tag) при изменении версии конфигурации
- unpackForm - добавляет функциональность распаковки обычных форм на исходники
- tool1CD - заменяет использование штатных механизмов 1С на приложение tool1CD при синхронизации
- disable-support - снимает конфигурацию с поддержки перед выгрузкой в исходники
После установки gitsync поставляемые плагины содержатся в файле "\embedded_plugins\gitsync-plugins-1.0.5.ospx" в заархивированном виде.
Для того, чтобы ими воспользоваться, первым делом нужно инициализировать предустановленные плагины, выполнив команду:
>gitsync plugins init
При инициализации плагины будут распакованы в каталог данных приложения - %localappdata%\gitsync\plugins
Но этого еще недостаточно.
Если выполнить команду, выводящую список всех установленных плагинов, увидим, что все плагины выключены:
Теперь требуется активировать нужные плагины.
В моем примере, необходимые плагины - limit и check-comments:
C:\>gitsync plugins enable limit Включен плагин: limit C:\>gitsync plugins enable check-comments Включен плагин: check-comments
Теперь команда вывода списка подключенных плагинов покажет что плагины limit и check-comments включены:
C:\>gitsync plugins list
Каталог плагинов: <C:\Users\1c_dev2\AppData\Local\gitsync\plugins>
Список плагинов:
[on] [1.0.5] - limit - Плагин добавляет возможность ограничения на минимальный, максимальный номер версии хранилища, а так же на лимит на количество выгружаемых версий за один запуск
[on] [1.0.5] - check-comments - Плагин добавляет функциональность проверки комментариев в хранилище
Промежуточное "Ура!". Осталось выяснить, каким же образом эти плагины теперь использовать. Какие параметры? В каком месте нужно указывать? Где смотреть справку по ним?
Попытки получить справку по плагину возвращают ошибку:
C:\>gitsync plugins limit --help
КРИТИЧНАЯОШИБКА - Ошибка чтения параметров команды
Команда: plugins, p
Управление плагинами gitsync
Указанная в документации команда с примерами возвращает пустой результат, т.к. на текущий момент не реализована.
>gitsync usage plugins
На самом деле всё оказывается достаточно просто. Но нигде не описано.
Для того, чтобы увидеть ключи параметров плагина, нужно вывести справку о команде.
C:\>gitsync sync --help
Команда: sync, s
Выполняет синхронизацию хранилища 1С с git-репозиторием
Строка запуска: gitsync sync [ОПЦИИ] PATH [WORKDIR]
Аргументы:
PATH Путь к хранилищу конфигурации 1С. (env $GITSYNC_STORAGE_PATH)
WORKDIR Каталог исходников внутри локальной копии git-репозитория. (env $GITSYNC_WORKDIR)
Опции:
-u, --storage-user пользователь хранилища конфигурации (env $GITSYNC_STORAGE_USER) (по умолчанию Администратор)
-p, --storage-pwd пароль пользователя хранилища конфигурации (env $GITSYNC_STORAGE_PASSWORD, $GITSYNC_STORAGE_PWD)
-e, --ext, --extension имя расширения для работы с хранилищем расширения (env $GITSYNC_EXTENSION)
-l, --limit [*limit] выгрузить не более <Количества> версий от текущей выгруженной (env $GITSYNC_LIMIT) (по умолчанию 0)
--minversion [*limit] <номер> минимальной версии для выгрузки (по умолчанию 0)
--maxversion [*limit] <номер> максимальной версии для выгрузки (по умолчанию 0)
-C, --error-comment [*check-comments] флаг вызова ошибки при отсутствии текста комментари
Теперь видим, что по сравнению с первоначальным выводом этой команды, в результатах появились строки с указанием ключей плагинов limit и check-comments. И размещать их нужно вместе с опциональными параметрами команды, перед позиционными параметрами.
Таким образом, с учетом необходимых параметров плагинов, строка запуска будет выглядеть примерно так:
>gitsync --tempdir Z:\tempfiles\gitsync --v8version 8.3.14.1630 sync --storage-user gitbot --limit 1 --error-comment tcp://test_1c_app/uh_main_rep Z:\git_repos\uh_main\config
Теперь всё работает так, как и требовалось.
Эпилог
Надеюсь что кому-то моя заметка поможет сэкономить пару часов поисков и разбирательств с новым синтаксисом.
Также, надеюсь что документация к этому замечательному инструменту будет актуализирована и полезность моей шпаргалки сойдет на нет.
Хотелось бы также разобраться с написанием самих плагинов. Сейчас недостающую функциональность приходится добавлять непосредственной правкой кода приложения. Например, при каждой настройке синхронизации, вношу изменения в модуль, с тем, чтобы можно было добавлять в начало каждого комментария git номер версии Хранилища, для возможности быстрого сопоставления.