Skip to content

Commit 918dbf2

Browse files
committed
Добавлена функциональность установки меток (tags) при изменении версии конфигруации в хранилище
1 parent 6a515d2 commit 918dbf2

File tree

5 files changed

+81
-10
lines changed

5 files changed

+81
-10
lines changed

src/core/Классы/КомандаExport.os

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030

3131
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-amount-look-for-license", "<число> количество повторов получения лицензии (попытка подключения каждые 10 сек), 0 - без ограничений");
3232
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой");
33+
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-auto-set-tags", "Автоматическая установка тэгов по версия конфиграции");
34+
3335

3436
Парсер.ДобавитьКоманду(ОписаниеКоманды);
3537

@@ -44,6 +46,7 @@
4446
Лимит = ПараметрыКоманды["-limit"];
4547
ПереименовыватьФайлМодуляОбычнойФормы = ПараметрыКоманды["-process-fatform-modules"];
4648
ПрерватьВыполнениеБезКомментарияКВерсии = ПараметрыКоманды["-stop-if-empty-comment"];
49+
АвтоматическаяУстановкаТэговПоВерсиям = ПараметрыКоманды["-auto-set-tags"];
4750

4851
Если ЛокальныйКаталогГит = Неопределено Тогда
4952

@@ -81,6 +84,12 @@
8184

8285
КонецЕсли;
8386

87+
Если АвтоматическаяУстановкаТэговПоВерсиям = Неопределено Тогда
88+
89+
АвтоматическаяУстановкаТэговПоВерсиям = Ложь;
90+
91+
КонецЕсли;
92+
8493
МаксВерсия = Число(МаксВерсия);
8594
МинВерсия = Число(МинВерсия);
8695
Лимит = Число(Лимит);
@@ -99,7 +108,9 @@
99108
,
100109
,
101110
Лимит,
102-
ПрерватьВыполнениеБезКомментарияКВерсии);
111+
ПрерватьВыполнениеБезКомментарияКВерсии,
112+
,
113+
АвтоматическаяУстановкаТэговПоВерсиям);
103114
ДополнительныеПараметры.Лог.Информация("Выгрузка завершена");
104115

105116
Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех;

src/core/Классы/КомандаSync.os

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-amount-look-for-license", "<число> количество повторов получения лицензии (попытка подключения каждые 10 сек), 0 - без ограничений");
3232
Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl");
3333
Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой");
34+
Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-auto-set-tags", "Автоматическая установка тэгов по версия конфиграции");
3435

3536
Парсер.ДобавитьКоманду(ОписаниеКоманды);
3637

@@ -49,6 +50,7 @@
4950
Парсер.ДобавитьИменованныйПараметр("-push-every-n-commits", "<число> количество коммитов до промежуточной отправки на удаленный сервер");
5051
Парсер.ДобавитьПараметрФлаг ("-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl");
5152
Парсер.ДобавитьПараметрФлагКоманды("-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой");
53+
Парсер.ДобавитьПараметрФлагКоманды("-auto-set-tags", "Автоматическая установка тэгов по версия конфиграции");
5254

5355
КонецПроцедуры // ЗарегистрироватьКоманду
5456

@@ -70,6 +72,7 @@
7072
КоличествоКоммитовДоPush = ПараметрыКоманды["-push-every-n-commits"];
7173
ПереименовыватьФайлМодуляОбычнойФормы = ПараметрыКоманды["-process-fatform-modules"];
7274
ПрерватьВыполнениеБезКомментарияКВерсии = ПараметрыКоманды["-stop-if-empty-comment"];
75+
АвтоматическаяУстановкаТэговПоВерсиям = ПараметрыКоманды["-auto-set-tags"];
7376

7477
Если НачальнаяВерсия = Неопределено Тогда
7578

@@ -101,6 +104,12 @@
101104

102105
КонецЕсли;
103106

107+
Если АвтоматическаяУстановкаТэговПоВерсиям = Неопределено Тогда
108+
109+
АвтоматическаяУстановкаТэговПоВерсиям = Ложь;
110+
111+
КонецЕсли;
112+
104113
НачальнаяВерсия = Число(НачальнаяВерсия);
105114
КонечнаяВерсия = Число(КонечнаяВерсия);
106115
Лимит = Число(Лимит);
@@ -159,10 +168,12 @@
159168
КоличествоКоммитовДоPush,
160169
URLРепозитория,
161170
Лимит,
162-
ПрерватьВыполнениеБезКомментарияКВерсии);
171+
ПрерватьВыполнениеБезКомментарияКВерсии,
172+
ИмяВетки,
173+
АвтоматическаяУстановкаТэговПоВерсиям);
163174

164175
Лог.Информация("Отправка изменений на удаленный узел");
165-
КодВозврата = Распаковщик.ВыполнитьGitPush(ЛокальныйКаталогГит, URLРепозитория, ИмяВетки);
176+
КодВозврата = Распаковщик.ВыполнитьGitPush(ЛокальныйКаталогГит, URLРепозитория, ИмяВетки, АвтоматическаяУстановкаТэговПоВерсиям);
166177
Если КодВозврата <> 0 Тогда
167178
ВызватьИсключение "Не удалось отправить изменения на удаленный узел (код: " + КодВозврата + ")";
168179
КонецЕсли;

src/core/Классы/МенеджерСинхронизации.os

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@
431431

432432
// Выполняет фиксацию изменений в локальном каталоге git
433433
//
434-
Процедура ВыполнитьКоммитГит(Знач КаталогРабочейКопии, Знач Комментарий, Знач Автор, Знач Дата=Неопределено) Экспорт
434+
Процедура ВыполнитьКоммитГит(Знач КаталогРабочейКопии, Знач Комментарий, Знач Автор, Знач Дата=Неопределено, Знач НоваяМетка = "") Экспорт
435435

436436
Если Дата = Неопределено Тогда
437437
Дата = ТекущаяДата();
@@ -465,6 +465,12 @@
465465
КомандаКоммита = СтрШаблон("git commit -a --file=""%1"" --author=""%2"" ", ИмяФайлаКомментария, Автор);
466466

467467
КомандныйФайл.ДобавитьКоманду(КомандаКоммита);
468+
469+
Если ЗначениеЗаполнено(НоваяМетка) Тогда
470+
471+
ДобавитьКоманду(КомандныйФайл, "git tag " + Строка(НоваяМетка));
472+
473+
КонецЕсли;
468474

469475
Если Не ЭтоWindows Тогда
470476
КомандныйФайл.ДобавитьКоманду("exit $#");
@@ -509,7 +515,7 @@
509515

510516
// Cтандартная процедура git push
511517
//
512-
Функция ВыполнитьGitPush(Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки = Неопределено) Экспорт
518+
Функция ВыполнитьGitPush(Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки = Неопределено, Знач ОтправитьМетки = Ложь) Экспорт
513519

514520
КомандныйФайл = Новый КомандныйФайл;
515521
ИмяФайлаЛогаКоммита = ВременныеФайлы.СоздатьФайл("log");
@@ -534,6 +540,9 @@
534540
КонецЕсли;
535541

536542
КомандныйФайл.ДобавитьКоманду(СтрокаКоманды);
543+
Если ОтправитьМетки Тогда
544+
КомандныйФайл.ДобавитьКоманду(ПолучитьСтрокуКомандыPushTags(ЛокальныйРепозиторий,УдаленныйРепозиторий));
545+
КонецЕсли;
537546
КомандныйФайл.ДобавитьКоманду("exit " + ?(ЭтоWindows, "/b %ERRORLEVEL%", "$#"));
538547

539548
Результат = КомандныйФайл.Исполнить();
@@ -546,6 +555,25 @@
546555

547556
КонецФункции
548557

558+
Функция ПолучитьСтрокуКомандыPushTags(Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки = Неопределено))
559+
560+
ПараметрыКоманды = Новый Массив;
561+
ПараметрыКоманды.Добавить("git push -u");
562+
ПараметрыКоманды.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%"));
563+
ПараметрыКоманды.Добавить("--tags ");
564+
ПараметрыКоманды.Добавить(КомандныйФайл.СуффиксПеренаправленияВывода(ИмяФайлаЛогаКоммита, Истина));
565+
566+
СтрокаКоманды = СобратьКоманднуюСтроку(ПараметрыКоманды);
567+
Если Лог.Уровень() = УровниЛога.Отладка Тогда
568+
сообщение = "строкаКоманды push tags= <"+?(строкаКоманды = Неопределено, "Неопределено", строкаКоманды)+">";
569+
Лог.Отладка(сообщение);
570+
КонецЕсли;
571+
572+
Возврат СтрокаКоманды;
573+
574+
КонецФункции
575+
576+
549577
// Cтандартная процедура git pull
550578
//
551579
Функция ВыполнитьGitPull(Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки) Экспорт
@@ -919,7 +947,9 @@
919947
Знач КоличествоКоммитовДоPush = 0,
920948
Знач URLРепозитория = Неопределено,
921949
Знач Лимит = 0,
922-
Знач ПрерватьВыполнениеБезКомментарияКВерсии = Ложь) Экспорт
950+
Знач ПрерватьВыполнениеБезКомментарияКВерсии = Ложь,
951+
Знач ИмяВетки = Неопределено,
952+
Знач АвтоматическаяУстановкаТэговПоВерсиям = Ложь) Экспорт
923953

924954
Лог.Информация("Начало синхронизации с git");
925955
ТаблицаИсторииХранилища = ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ФайлХранилища);
@@ -964,6 +994,11 @@
964994
ИспользоватьПромежуточныйPUSH = КоличествоКоммитовДоPush > 0;
965995
СчетчикКоммитов = 0;
966996

997+
СтрокаТекущейВерсии = ТаблицаИсторииХранилища.Найти(СледующаяВерсия, "НомерВерсии");
998+
Если СтрокаТекущейВерсии <> Неопределено Тогда
999+
ПоследнняяВерсияКонфигурации = СтрокаТекущейВерсии.Тэг;
1000+
КонецЕсли;
1001+
9671002
Пока СледующаяВерсия <= МаксимальнаяВерсияДляРазбора Цикл
9681003

9691004
СтрокаВерсии = ТаблицаИсторииХранилища.Найти(СледующаяВерсия, "НомерВерсии");
@@ -978,19 +1013,27 @@
9781013
ВызватьИсключение СтрШаблон("Нашли следующую версию %1, а комментарий не задан! Автор %2.", СледующаяВерсия, СтрокаВерсии.Автор);;
9791014
КонецЕсли;
9801015

1016+
НоваяМетка = "";
1017+
Если ПоследнняяВерсияКонфигурации <> СтрокаВерсии.Тэг
1018+
И АвтоматическаяУстановкаТэговПоВерсиям Тогда
1019+
ОтправитьНовыеМетки = Истина;
1020+
НоваяМетка = СтрокаВерсии.Тэг;
1021+
КонецЕсли;
1022+
9811023
Попытка
9821024
Лог.Информация("Получаем исходники для версии " + СледующаяВерсия + ", " + ТекущаяДата());
9831025

9841026
РазложитьМодулиПоНомеруВерсииХранилища1С(КаталогРабочейКопии, ФайлХранилища, СледующаяВерсия, Формат);
9851027
Лог.Отладка("Фиксируем в файле VERSION версию " + СледующаяВерсия);
9861028
ЗаписатьФайлВерсийГит(КаталогРабочейКопии, СледующаяВерсия);
987-
ВыполнитьКоммитГит(КаталогРабочейКопии, СтрокаВерсии.Комментарий, СтрокаВерсии.ПредставлениеАвтора, СтрокаВерсии.Дата);
1029+
ВыполнитьКоммитГит(КаталогРабочейКопии, СтрокаВерсии.Комментарий, СтрокаВерсии.ПредставлениеАвтора, СтрокаВерсии.Дата, НоваяМетка);
9881030
СчетчикКоммитов = СчетчикКоммитов + 1;
9891031

9901032
Если ИспользоватьПромежуточныйPUSH И
9911033
СчетчикКоммитов = КоличествоКоммитовДоPush Тогда
992-
ВыполнитьGitPush(КаталогРабочейКопии, URLРепозитория);
1034+
ВыполнитьGitPush(КаталогРабочейКопии, URLРепозитория, ИмяВетки, ОтправитьНовыеМетки);
9931035
СчетчикКоммитов = 0;
1036+
ОтправитьНовыеМетки = Ложь;
9941037
КонецЕсли;
9951038

9961039

src/core/Модули/РаспаковщикКонфигурации.os

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@
7979
Знач КоличествоКоммитовДоPush = 0,
8080
Знач URLРепозитория = Неопределено,
8181
Знач Лимит = 0,
82-
Знач ПрерватьВыполнениеБезКомментарияКВерсии) Экспорт
82+
Знач ПрерватьВыполнениеБезКомментарияКВерсии,
83+
Знач ИмяВетки = Неопределено,
84+
Знач АвтоматическаяУстановкаТэговПоВерсиям) Экспорт
8385

8486
ФайлБазыДанныхХранилища = ПолучитьПутьКБазеДанныхХранилища(ПутьКХранилищу);
8587
Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(ЛокальныйКаталогГит,
@@ -90,7 +92,9 @@
9092
КоличествоКоммитовДоPush,
9193
URLРепозитория,
9294
Лимит,
93-
ПрерватьВыполнениеБезКомментарияКВерсии);
95+
ПрерватьВыполнениеБезКомментарияКВерсии,
96+
ИмяВетки,
97+
АвтоматическаяУстановкаТэговПоВерсиям);
9498

9599
КонецПроцедуры // ВыполнитьЭкспортИсходников
96100

src/xml-config.os

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@
9898
Ключ = "КоличествоКоммитовДоPush";
9999
ИначеЕсли КлючИЗначение.Ключ = "stop-if-empty-comment" Тогда
100100
Ключ = "ПрерватьВыполнениеБезКомментарияКВерсии";
101+
ИначеЕсли КлючИЗначение.Ключ = "auto-set-tags" Тогда
102+
Ключ = "АвтоматическаяУстановкаТэговПоВерсиям";
101103
Иначе
102104
ВызватьИсключение НекорректнаяСтруктураНастроек();
103105
КонецЕсли;

0 commit comments

Comments
 (0)