Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 63 additions & 3 deletions src/Классы/syncRemote.os
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,16 @@

Перем URLРепозитория;
Перем ИмяВетки;
Перем ИмяЦелевойВетки;
Перем ПолучитьИзменения;
Перем ОтправитьИзменения;
Перем ОтправитьЗапросНаСлияние;

Перем КоличествоКоммитовДоPush;
Перем СчетчикКоммитов;
Перем ОтправлятьТеги;
Перем PushOptions;
Перем MergeOptions;

Перем ГитРепозиторий;

Expand Down Expand Up @@ -85,10 +88,13 @@

URLРепозитория = "";
ИмяВетки = "";
ИмяЦелевойВетки = "";
ПолучитьИзменения = Ложь;
ОтправитьИзменения = Ложь;
ОтправитьЗапросНаСлияние = Ложь;
ОтправлятьТеги = Ложь;
PushOptions = "";
MergeOptions = "";

КоличествоКоммитовДоPush = 0;
СчетчикКоммитов = 0;
Expand All @@ -110,9 +116,15 @@
КлассРеализации.Опция("G pull", Ложь, "[*sync-remote] Флаг получения изменений из удаленный репозитория перед синхронизацией")
.Флаг()
.ВОкружении("GITSYNC_REMOTE_PULL");
КлассРеализации.Опция("MR merge-request", Ложь, "[*sync-remote] Флаг запроса на слияние при отправке изменений на удаленный репозиторий")
.Флаг()
.ВОкружении("GITSYNC_REMOTE_MERGE_REQUEST");
КлассРеализации.Опция("b branch", "master", "[*sync-remote] Имя ветки")
.ТСтрока()
.ВОкружении("GITSYNC_REMOTE_BRANCH");
КлассРеализации.Опция("tb target-branch", "master", "[*sync-remote] Имя целевой ветки для слияния")
.ТСтрока()
.ВОкружении("GITSYNC_REMOTE_TARGET_BRANCH");
КлассРеализации.Опция("T push-tags", Ложь, "[*sync-remote] Флаг отправки тегов по версиям")
.Флаг()
.ВОкружении("GITSYNC_REMOTE_PUSH_TAGS");
Expand All @@ -122,6 +134,9 @@
КлассРеализации.Опция("O push-options", "", "[*sync-remote] Дополнительные параметры для команды push, разделенные ;")
.ТСтрока()
.ВОкружении("GITSYNC_PUSH_OPTIONS");
КлассРеализации.Опция("mo merge-options", "", "[*sync-remote] Дополнительные параметры для команды merge, разделенные ;")
.ТСтрока()
.ВОкружении("GITSYNC_MERGE_OPTIONS");

КлассРеализации.Аргумент("URL", "", "[*sync-remote] Адрес удаленного репозитория GIT.")
.ВОкружении("GITSYNC_REPO_URL")
Expand All @@ -133,20 +148,26 @@

URLРепозитория = ПараметрыКоманды.Параметр("URL", "");
ИмяВетки = ПараметрыКоманды.Параметр("branch", "");
ИмяЦелевойВетки = ПараметрыКоманды.Параметр("target-branch", "");

ПолучитьИзменения = ПараметрыКоманды.Параметр("pull", Ложь);
ОтправитьИзменения = ПараметрыКоманды.Параметр("push", Ложь);
ОтправитьЗапросНаСлияние = ПараметрыКоманды.Параметр("merge-request", Ложь);
ОтправлятьТеги = ПараметрыКоманды.Параметр("push-tags", Ложь);
PushOptions = СтрРазделить(ПараметрыКоманды.Параметр("push-options", ""), ";");
MergeOptions = СтрРазделить(ПараметрыКоманды.Параметр("merge-options", ""), ";");

КоличествоКоммитовДоPush = ПараметрыКоманды.Параметр("push-n-commits", 0);

Лог.Отладка("Установлено получение изменений <%1> ", ПолучитьИзменения);
Лог.Отладка("Установлено имя ветки <%1> ", ИмяВетки);
Лог.Отладка("Установлено имя целевой ветки для слияния <%1> ", ИмяЦелевойВетки);
Лог.Отладка("Установлена отправка изменений <%1> ", ОтправитьИзменения);
Лог.Отладка("Установлен запрос на слияние <%1> ", ОтправитьЗапросНаСлияние);
Лог.Отладка("Установлено количество коммитов <%1>, после которых осуществляется отправка", КоличествоКоммитовДоPush);
Лог.Отладка("Установлен флаг отправки меток в значение <%1> выгрузки версий", ОтправлятьТеги);
Лог.Отладка("Установлены дополнительные параметры команды push: <%1>", СтрСоединить(PushOptions, ", "));
Лог.Отладка("Установлены дополнительные параметры команды merge: <%1>", СтрСоединить(MergeOptions, ", "));

КонецПроцедуры

Expand All @@ -159,28 +180,32 @@
Лог.Информация("Получение изменений с удаленного узла (pull)");

ГитРепозиторий = ПолучитьГитРепозиторий(КаталогРабочейКопии);
ГитРепозиторий.ПерейтиВВетку(ИмяВетки);
ГитРепозиторий.Получить(URLРепозитория, ИмяВетки);

КонецПроцедуры

Процедура ПослеОкончанияВыполнения(ПутьКХранилищу, КаталогРабочейКопии) Экспорт
Процедура ПослеОкончанияВыполнения(ПутьКХранилищу, КаталогРабочейКопии, ТекущаяВерсия) Экспорт

Если СчетчикКоммитов = 0 Тогда
Возврат;
КонецЕсли;

ГитРепозиторий = ПолучитьГитРепозиторий(КаталогРабочейКопии);
ВыполнитьGitPush(ГитРепозиторий, КаталогРабочейКопии);
ВыполнитьGitMergeRequest(ГитРепозиторий, КаталогРабочейКопии, ТекущаяВерсия);

КонецПроцедуры

Процедура ПослеКоммита(ГитРепозиторий, КаталогРабочейКопии) Экспорт
Процедура ПослеКоммита(ГитРепозиторий, КаталогРабочейКопии, ТекущаяВерсия) Экспорт

СчетчикКоммитов = СчетчикКоммитов + 1;

Если СчетчикКоммитов = КоличествоКоммитовДоPush Тогда

ВыполнитьGitPush(ГитРепозиторий, КаталогРабочейКопии);
ВыполнитьGitMergeRequest(ГитРепозиторий, КаталогРабочейКопии, ТекущаяВерсия);

СчетчикКоммитов = 0;

КонецЕсли;
Expand All @@ -206,13 +231,15 @@
ПараметрыКомандыPush.Добавить("push -u");
ПараметрыКомандыPush.Добавить(СтрЗаменить(URLРепозитория, "%", "%%"));
ПараметрыКомандыPush.Добавить("-v");

ПараметрыКомандыPush.Добавить(ИмяВетки);

Для Каждого Опция Из PushOptions Цикл
Если Не ПустаяСтрока(Опция) Тогда
ПараметрыКомандыPush.Добавить("-o " + Опция);
КонецЕсли;
КонецЦикла;

//ГитРепозиторий.ПерейтиВВетку(ИмяВетки);
ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыPush);

Если ОтправлятьТеги Тогда
Expand All @@ -236,6 +263,37 @@

КонецПроцедуры

Процедура ВыполнитьGitMergeRequest(Знач ГитРепозиторий, Знач ЛокальныйРепозиторий, Знач ТекущаяВерсия)

Если Не ОтправитьЗапросНаСлияние Тогда
Возврат;
КонецЕсли;

Лог.Информация("Создаю запрос на слияние в удаленном url (merge request)");

ГитРепозиторий.ВыполнитьКоманду(СтрРазделить("gc --auto", " "));
Лог.Отладка(СтрШаблон("Вывод команды gc: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды())));

ПараметрыКомандыMerge = Новый Массив;
ПараметрыКомандыMerge.Добавить("push -u");
ПараметрыКомандыMerge.Добавить(СтрЗаменить(URLРепозитория, "%", "%%"));
ПараметрыКомандыMerge.Добавить("-v");
ПараметрыКомандыMerge.Добавить("HEAD:refs/heads"+ "" +"/VERSION-" + ТекущаяВерсия);

Для Каждого Опция Из MergeOptions Цикл
Если Не ПустаяСтрока(Опция) Тогда
ПараметрыКомандыMerge.Добавить("-o " + Опция);
КонецЕсли;
КонецЦикла;

//ГитРепозиторий.ПерейтиВВетку(ИмяЦелевойВетки);
//ГитРепозиторий.Получить(URLРепозитория, ИмяЦелевойВетки);
ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыMerge);

Лог.Отладка(СтрШаблон("Вывод команды Merge Request: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды())));

КонецПроцедуры

Функция ПолучитьГитРепозиторий(Знач КаталогРабочейКопии)

Если Не ГитРепозиторий = Неопределено Тогда
Expand All @@ -257,8 +315,10 @@

URLРепозитория = "";
ИмяВетки = "";
ИмяЦелевойВетки = "";
ПолучитьИзменения = Ложь;
ОтправитьИзменения = Ложь;
ОтправитьЗапросНаСлияние = Ложь;
ОтправлятьТеги = Ложь;

КоличествоКоммитовДоPush = 0;
Expand Down
Loading