diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" index 6419cff..60b6992 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" @@ -9,13 +9,16 @@ Перем URLРепозитория; Перем ИмяВетки; +Перем ИмяЦелевойВетки; Перем ПолучитьИзменения; Перем ОтправитьИзменения; +Перем ОтправитьЗапросНаСлияние; Перем КоличествоКоммитовДоPush; Перем СчетчикКоммитов; Перем ОтправлятьТеги; Перем PushOptions; +Перем MergeOptions; Перем ГитРепозиторий; @@ -85,10 +88,13 @@ URLРепозитория = ""; ИмяВетки = ""; + ИмяЦелевойВетки = ""; ПолучитьИзменения = Ложь; ОтправитьИзменения = Ложь; + ОтправитьЗапросНаСлияние = Ложь; ОтправлятьТеги = Ложь; PushOptions = ""; + MergeOptions = ""; КоличествоКоммитовДоPush = 0; СчетчикКоммитов = 0; @@ -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"); @@ -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") @@ -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, ", ")); КонецПроцедуры @@ -159,11 +180,12 @@ Лог.Информация("Получение изменений с удаленного узла (pull)"); ГитРепозиторий = ПолучитьГитРепозиторий(КаталогРабочейКопии); + ГитРепозиторий.ПерейтиВВетку(ИмяВетки); ГитРепозиторий.Получить(URLРепозитория, ИмяВетки); КонецПроцедуры -Процедура ПослеОкончанияВыполнения(ПутьКХранилищу, КаталогРабочейКопии) Экспорт +Процедура ПослеОкончанияВыполнения(ПутьКХранилищу, КаталогРабочейКопии, ТекущаяВерсия) Экспорт Если СчетчикКоммитов = 0 Тогда Возврат; @@ -171,16 +193,19 @@ ГитРепозиторий = ПолучитьГитРепозиторий(КаталогРабочейКопии); ВыполнитьGitPush(ГитРепозиторий, КаталогРабочейКопии); + ВыполнитьGitMergeRequest(ГитРепозиторий, КаталогРабочейКопии, ТекущаяВерсия); КонецПроцедуры -Процедура ПослеКоммита(ГитРепозиторий, КаталогРабочейКопии) Экспорт +Процедура ПослеКоммита(ГитРепозиторий, КаталогРабочейКопии, ТекущаяВерсия) Экспорт СчетчикКоммитов = СчетчикКоммитов + 1; Если СчетчикКоммитов = КоличествоКоммитовДоPush Тогда ВыполнитьGitPush(ГитРепозиторий, КаталогРабочейКопии); + ВыполнитьGitMergeRequest(ГитРепозиторий, КаталогРабочейКопии, ТекущаяВерсия); + СчетчикКоммитов = 0; КонецЕсли; @@ -206,13 +231,15 @@ ПараметрыКомандыPush.Добавить("push -u"); ПараметрыКомандыPush.Добавить(СтрЗаменить(URLРепозитория, "%", "%%")); ПараметрыКомандыPush.Добавить("-v"); - + ПараметрыКомандыPush.Добавить(ИмяВетки); + Для Каждого Опция Из PushOptions Цикл Если Не ПустаяСтрока(Опция) Тогда ПараметрыКомандыPush.Добавить("-o " + Опция); КонецЕсли; КонецЦикла; + //ГитРепозиторий.ПерейтиВВетку(ИмяВетки); ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыPush); Если ОтправлятьТеги Тогда @@ -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", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды()))); + +КонецПроцедуры + Функция ПолучитьГитРепозиторий(Знач КаталогРабочейКопии) Если Не ГитРепозиторий = Неопределено Тогда @@ -257,8 +315,10 @@ URLРепозитория = ""; ИмяВетки = ""; + ИмяЦелевойВетки = ""; ПолучитьИзменения = Ложь; ОтправитьИзменения = Ложь; + ОтправитьЗапросНаСлияние = Ложь; ОтправлятьТеги = Ложь; КоличествоКоммитовДоPush = 0;