Skip to content

Commit 284f6ab

Browse files
authored
Merge pull request #73 from Khorevaa/feature/check_authors_before_run
Добавлен функционал остановки синхронизации, если автор коммита не найден в AUTHOR
2 parents 50d70fc + a0d03f4 commit 284f6ab

9 files changed

+174
-47
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# language: ru
2+
3+
Функциональность: Выполнение команды продукта
4+
5+
Как разработчик
6+
Я хочу иметь возможность выполнять команды продукта
7+
Чтобы выполнять коллективную разработку приложения для OneScript
8+
9+
Контекст:
10+
Допустим Я очищаю параметры команды "oscript" в контексте
11+
И я включаю отладку лога с именем "oscript.app.gitsync"
12+
# И я включаю отладку лога с именем "bdd"
13+
14+
Сценарий: Получение версии продукта
15+
Когда Я выполняю команду "oscript" c параметрами "src/gitsync.os version"
16+
Тогда Я сообщаю вывод команды "oscript"
17+
И Вывод команды "oscript" содержит "2.1.1"
18+
И Вывод команды "oscript" не содержит "GitSync v"
19+
И Код возврата команды "oscript" равен 0
20+
21+
Сценарий: Получение помощи продукта
22+
Когда Я выполняю команду "oscript" c параметрами "src/gitsync.os help"
23+
Тогда Вывод команды "oscript" содержит
24+
"""
25+
GitSync v2.1.1
26+
Возможные команды:
27+
"""
28+
И Код возврата команды "oscript" равен 0
29+
30+
Сценарий: Вызов исполняемого файла без параметров
31+
Когда Я выполняю команду "oscript" c параметрами "src/gitsync.os"
32+
Тогда Вывод команды "oscript" содержит
33+
"""
34+
GitSync v2.1.1
35+
ОШИБКА - Некорректные аргументы командной строки
36+
Возможные команды:
37+
"""
38+
И Код возврата команды "oscript" равен 5
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# language: ru
2+
3+
Функционал: Проверка сборки продукта
4+
Как Пользователь
5+
Я хочу автоматически проверять сборку моего продукта
6+
Чтобы гарантировать возможность установку моего продукта у пользователей
7+
8+
Контекст: Отключение отладки в логах
9+
Допустим Я выключаю отладку лога с именем "oscript.lib.gitsync"
10+
И Я очищаю параметры команды "opm" в контексте
11+
12+
Сценарий: Выполнение команды без параметров
13+
Когда Я добавляю параметр "build ." для команды "opm"
14+
И Я выполняю команду "opm"
15+
Тогда Вывод команды "opm" содержит "Сборка пакета завершена"
16+
И Вывод команды "opm" не содержит "Внешнее исключение"
17+
И Код возврата команды "opm" равен 0

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-limit", "<выгрузить неболее limit версий от текущей выгруженной>");
2828
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-tempdir", "<Путь к каталогу временных файлов>");
2929
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl");
30+
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-check-authors", "Проверка файла AUTHORS, на наличие всех авторов коммитов ");
3031

3132
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-amount-look-for-license", "<число> количество повторов получения лицензии (попытка подключения каждые 10 сек), 0 - без ограничений");
3233
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой");
@@ -45,6 +46,7 @@
4546
МаксВерсия = ПараметрыКоманды["-maxversion"];
4647
Лимит = ПараметрыКоманды["-limit"];
4748
ПереименовыватьФайлМодуляОбычнойФормы = ПараметрыКоманды["-process-fatform-modules"];
49+
ПроверитьАвторовХранилища = ПараметрыКоманды["-check-authors"];
4850
ПрерватьВыполнениеБезКомментарияКВерсии = ПараметрыКоманды["-stop-if-empty-comment"];
4951
АвтоматическаяУстановкаТэговПоВерсиям = ПараметрыКоманды["-auto-set-tags"];
5052

@@ -54,6 +56,12 @@
5456

5557
КонецЕсли;
5658

59+
Если ПроверитьАвторовХранилища = Неопределено Тогда
60+
61+
ПроверитьАвторовХранилища = Ложь;
62+
63+
КонецЕсли;
64+
5765
Если Формат = Неопределено Тогда
5866

5967
Формат = РежимВыгрузкиФайлов.Авто;
@@ -110,7 +118,8 @@
110118
Лимит,
111119
ПрерватьВыполнениеБезКомментарияКВерсии,
112120
,
113-
АвтоматическаяУстановкаТэговПоВерсиям);
121+
АвтоматическаяУстановкаТэговПоВерсиям,
122+
ПроверитьАвторовХранилища);
114123
ДополнительныеПараметры.Лог.Информация("Выгрузка завершена");
115124

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

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-push-every-n-commits", "<число> количество коммитов до промежуточной отправки на удаленный сервер");
3131
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-amount-look-for-license", "<число> количество повторов получения лицензии (попытка подключения каждые 10 сек), 0 - без ограничений");
3232
Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl");
33+
Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-check-authors", "Проверка файла AUTHORS, на наличие всех авторов коммитов ");
3334
Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой");
3435
Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-auto-set-tags", "Автоматическая установка тэгов по версия конфиграции");
3536

@@ -49,6 +50,7 @@
4950
Парсер.ДобавитьИменованныйПараметр("-tempdir", "<Путь к каталогу временных файлов>");
5051
Парсер.ДобавитьИменованныйПараметр("-push-every-n-commits", "<число> количество коммитов до промежуточной отправки на удаленный сервер");
5152
Парсер.ДобавитьПараметрФлаг ("-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl");
53+
Парсер.ДобавитьПараметрФлаг ("-check-authors", "Проверка файла AUTHORS, на наличие всех авторов коммитов ");
5254

5355
Парсер.ДобавитьПараметрФлагКоманды("-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой");
5456
Парсер.ДобавитьПараметрФлагКоманды("-auto-set-tags", "Автоматическая установка тэгов по версия конфиграции");
@@ -72,6 +74,7 @@
7274
Лимит = ПараметрыКоманды["-limit"];
7375
КоличествоКоммитовДоPush = ПараметрыКоманды["-push-every-n-commits"];
7476
ПереименовыватьФайлМодуляОбычнойФормы = ПараметрыКоманды["-process-fatform-modules"];
77+
ПроверитьАвторовХранилища = ПараметрыКоманды["-check-authors"];
7578
ПрерватьВыполнениеБезКомментарияКВерсии = ПараметрыКоманды["-stop-if-empty-comment"];
7679
АвтоматическаяУстановкаТэговПоВерсиям = ПараметрыКоманды["-auto-set-tags"];
7780

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

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

87+
Если ПроверитьАвторовХранилища = Неопределено Тогда
88+
89+
ПроверитьАвторовХранилища = Ложь;
90+
91+
КонецЕсли;
92+
8493
Если КонечнаяВерсия = Неопределено Тогда
8594

8695
КонечнаяВерсия = 0;
@@ -145,6 +154,7 @@
145154
Лог.Отладка("КонечнаяВерсия = " + КонечнаяВерсия);
146155
Лог.Отладка("Лимит = " + Лимит);
147156
Лог.Отладка("КоличествоКоммитовДоPush = " + КоличествоКоммитовДоPush);
157+
Лог.Отладка("ПроверитьАвторовХранилища = " + ПроверитьАвторовХранилища);
148158

149159
Распаковщик = РаспаковщикКонфигурации.ПолучитьРаспаковщик(ДополнительныеПараметры);
150160
Распаковщик.ВерсияПлатформы = ВерсияПлатформы;
@@ -171,7 +181,8 @@
171181
Лимит,
172182
ПрерватьВыполнениеБезКомментарияКВерсии,
173183
ИмяВетки,
174-
АвтоматическаяУстановкаТэговПоВерсиям);
184+
АвтоматическаяУстановкаТэговПоВерсиям,
185+
ПроверитьАвторовХранилища);
175186

176187
Лог.Информация("Отправка изменений на удаленный узел");
177188
КодВозврата = Распаковщик.ВыполнитьGitPush(ЛокальныйКаталогГит, URLРепозитория, ИмяВетки, АвтоматическаяУстановкаТэговПоВерсиям);

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

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -633,17 +633,21 @@
633633

634634
// Прописывает в таблицы пользователей и версий информацию о git auth вида user <[email protected]>
635635
//
636-
Процедура ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(Знач ТаблицаХранилища, Знач КаталогРепо) Экспорт
636+
Процедура ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(Знач ТаблицаХранилища, Знач КаталогРепо, Знач ПроверитьАвторовХранилища = Ложь) Экспорт
637637

638638
ПутьКФайлуСопоставления = ОбъединитьПути(КаталогРепо, ИмяФайлаАвторов());
639639
ТаблицаСопоставления = ПрочитатьФайлАвторовГитВТаблицуПользователей(ПутьКФайлуСопоставления);
640-
640+
МассивСообщенийОбОшибочныхАвторах = Новый Массив;
641641
Для Каждого Строка Из ТаблицаХранилища Цикл
642642

643643
СтрокаПользователя = ТаблицаСопоставления.Найти(строка.Автор, "Автор");
644644
Если СтрокаПользователя = Неопределено Тогда
645-
СтрокаСообщения = "Пользователю хранилища <%1> не сопоставлен пользователь git. Использую сопоставление по умолчанию";
646-
Лог.Отладка(СтроковыеФункции.ПодставитьПараметрыВСтроку(СтрокаСообщения, строка.Автор));
645+
646+
СтрокаСообщения = СтрШаблон("Пользователю хранилища <%1> не сопоставлен пользователь git.",строка.Автор);
647+
Если ПроверитьАвторовХранилища Тогда
648+
МассивСообщенийОбОшибочныхАвторах.Добавить(СтрокаСообщения);
649+
КонецЕсли;
650+
Лог.Отладка(СтрокаСообщения + " Использую сопоставление по умолчанию");
647651
ПредставлениеАвтора = СтроковыеФункции.ПодставитьПараметрыВСтроку("%1 <%1@%2>", строка.Автор, Строка(ДоменПочтыДляGit()));
648652
Иначе
649653
ПредставлениеАвтора = строкаПользователя.ПредставлениеАвтора;
@@ -653,6 +657,15 @@
653657

654658
КонецЦикла;
655659

660+
Если МассивСообщенийОбОшибочныхАвторах.Количество() > 1 Тогда
661+
Для каждого СообщениеМассива Из МассивСообщенийОбОшибочныхАвторах Цикл
662+
Лог.КритическаяОшибка(СообщениеМассива);
663+
КонецЦикла;
664+
665+
ВызватьИсключение СтрШаблон("В таблице истории версий найдены авторы (количество %1), которые не сопоставлены в AUTHORS",МассивСообщенийОбОшибочныхАвторах.Количество());
666+
667+
КонецЕсли;
668+
656669
КонецПроцедуры
657670

658671
Функция КонвертироватьТаблицуВерсийИзФорматаБД(Знач ТаблицаБД)
@@ -882,14 +895,16 @@
882895
Знач Формат = Неопределено,
883896
Знач КоличествоКоммитовДоPush = 0,
884897
Знач URLРепозитория = Неопределено,
898+
885899
Знач Лимит = 0,
886900
Знач ПрерватьВыполнениеБезКомментарияКВерсии = Ложь,
887901
Знач ИмяВетки = Неопределено,
888-
Знач АвтоматическаяУстановкаТэговПоВерсиям = Ложь) Экспорт
902+
Знач АвтоматическаяУстановкаТэговПоВерсиям = Ложь,
903+
Знач ПроверитьАвторовХранилища = Ложь) Экспорт
889904

890905
Лог.Информация("Начало синхронизации с git");
891906
ТаблицаИсторииХранилища = ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ФайлХранилища);
892-
ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(ТаблицаИсторииХранилища, КаталогРабочейКопии);
907+
ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(ТаблицаИсторииХранилища, КаталогРабочейКопии, ПроверитьАвторовХранилища);
893908
ТекущаяВерсия = НомерСинхронизированнойВерсии(КаталогРабочейКопии);
894909

895910
Лог.Информация("Номер синхронизированной версии: " + ТекущаяВерсия);

src/core/Модули/ПараметрыСистемы.os

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,27 @@
77
//
88
///////////////////////////////////////////////////////////////////
99

10-
// ИмяЛогаСистемы
10+
// ИмяПродукта
11+
// Возвращает имя продукта
12+
//
13+
// Возвращаемое значение:
14+
// Строка - Значение имени продукта
15+
//
16+
Функция ИмяПродукта() Экспорт
17+
18+
Возврат "GitSync";
19+
20+
КонецФункции // ИмяПродукта
21+
1122
// Возвращает идентификатор лога приложения
1223
//
1324
// Возвращаемое значение:
1425
// Строка - Значение идентификатора лога приложения
1526
//
1627
Функция ИмяЛогаСистемы() Экспорт
17-
18-
Возврат "oscript.app.gitsync";
19-
28+
29+
Возврат "oscript.app." + ИмяПродукта();
30+
2031
КонецФункции // ИмяЛогаСистемы
2132

2233
// ВерсияПродукта
@@ -34,18 +45,29 @@
3445
Процедура ПриРегистрацииКомандПриложения(Знач КлассыРеализацииКоманд) Экспорт
3546

3647
КлассыРеализацииКоманд["help"] = "КомандаСправкаПоПараметрам";
48+
КлассыРеализацииКоманд[ИмяКомандыВерсия()] = "КомандаVersion";
3749
КлассыРеализацииКоманд["clone"] = "КомандаClone";
3850
КлассыРеализацииКоманд["init"] = "КомандаInit";
3951
КлассыРеализацииКоманд["set-version"] = "КомандаSetVersion";
4052
КлассыРеализацииКоманд["all"] = "КомандаAll";
4153
КлассыРеализацииКоманд["export"] = "КомандаExport";
4254
КлассыРеализацииКоманд["sync"] = "КомандаSync";
43-
КлассыРеализацииКоманд["version"] = "КомандаVersion";
44-
55+
4556
КонецПроцедуры // ПриРегистрацииКомандПриложения
4657

4758
Функция ИмяКомандыПоУмолчанию() Экспорт
4859

4960
Возврат "sync";
5061

51-
КонецФункции // ИмяКомандыПоУмолчанию
62+
КонецФункции // ИмяКомандыПоУмолчанию
63+
64+
// Возвращает имя команды версия (ключ командной строки)
65+
//
66+
// Возвращаемое значение:
67+
// Строка - имя команды
68+
//
69+
Функция ИмяКомандыВерсия() Экспорт
70+
71+
Возврат "version";
72+
73+
КонецФункции // ИмяКомандыВерсия

0 commit comments

Comments
 (0)