Skip to content

Добавлен функционал остановки синхронизации, если автор коммита не найден в AUTHOR #73

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Oct 10, 2017
Merged
Show file tree
Hide file tree
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
38 changes: 38 additions & 0 deletions features/ПростыеКоманды.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# language: ru

Функциональность: Выполнение команды продукта

Как разработчик
Я хочу иметь возможность выполнять команды продукта
Чтобы выполнять коллективную разработку приложения для OneScript

Контекст:
Допустим Я очищаю параметры команды "oscript" в контексте
И я включаю отладку лога с именем "oscript.app.gitsync"
# И я включаю отладку лога с именем "bdd"

Сценарий: Получение версии продукта
Когда Я выполняю команду "oscript" c параметрами "src/gitsync.os version"
Тогда Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "2.1.1"
И Вывод команды "oscript" не содержит "GitSync v"
И Код возврата команды "oscript" равен 0

Сценарий: Получение помощи продукта
Когда Я выполняю команду "oscript" c параметрами "src/gitsync.os help"
Тогда Вывод команды "oscript" содержит
"""
GitSync v2.1.1
Возможные команды:
"""
И Код возврата команды "oscript" равен 0

Сценарий: Вызов исполняемого файла без параметров
Когда Я выполняю команду "oscript" c параметрами "src/gitsync.os"
Тогда Вывод команды "oscript" содержит
"""
GitSync v2.1.1
ОШИБКА - Некорректные аргументы командной строки
Возможные команды:
"""
И Код возврата команды "oscript" равен 5
17 changes: 17 additions & 0 deletions features/СборкаПакетаБиблиотеки.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# language: ru

Функционал: Проверка сборки продукта
Как Пользователь
Я хочу автоматически проверять сборку моего продукта
Чтобы гарантировать возможность установку моего продукта у пользователей

Контекст: Отключение отладки в логах
Допустим Я выключаю отладку лога с именем "oscript.lib.gitsync"
И Я очищаю параметры команды "opm" в контексте

Сценарий: Выполнение команды без параметров
Когда Я добавляю параметр "build ." для команды "opm"
И Я выполняю команду "opm"
Тогда Вывод команды "opm" содержит "Сборка пакета завершена"
И Вывод команды "opm" не содержит "Внешнее исключение"
И Код возврата команды "opm" равен 0
11 changes: 10 additions & 1 deletion src/core/Классы/КомандаExport.os
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-limit", "<выгрузить неболее limit версий от текущей выгруженной>");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-tempdir", "<Путь к каталогу временных файлов>");
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl");
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-check-authors", "Проверка файла AUTHORS, на наличие всех авторов коммитов ");

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

Expand All @@ -54,6 +56,12 @@

КонецЕсли;

Если ПроверитьАвторовХранилища = Неопределено Тогда

ПроверитьАвторовХранилища = Ложь;

КонецЕсли;

Если Формат = Неопределено Тогда

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

Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех;
Expand Down
13 changes: 12 additions & 1 deletion src/core/Классы/КомандаSync.os
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-push-every-n-commits", "<число> количество коммитов до промежуточной отправки на удаленный сервер");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-amount-look-for-license", "<число> количество повторов получения лицензии (попытка подключения каждые 10 сек), 0 - без ограничений");
Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl");
Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-check-authors", "Проверка файла AUTHORS, на наличие всех авторов коммитов ");
Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой");
Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-auto-set-tags", "Автоматическая установка тэгов по версия конфиграции");

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

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

Expand All @@ -81,6 +84,12 @@

КонецЕсли;

Если ПроверитьАвторовХранилища = Неопределено Тогда

ПроверитьАвторовХранилища = Ложь;

КонецЕсли;

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

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

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

Лог.Информация("Отправка изменений на удаленный узел");
КодВозврата = Распаковщик.ВыполнитьGitPush(ЛокальныйКаталогГит, URLРепозитория, ИмяВетки, АвтоматическаяУстановкаТэговПоВерсиям);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -633,17 +633,21 @@

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

ПутьКФайлуСопоставления = ОбъединитьПути(КаталогРепо, ИмяФайлаАвторов());
ТаблицаСопоставления = ПрочитатьФайлАвторовГитВТаблицуПользователей(ПутьКФайлуСопоставления);

МассивСообщенийОбОшибочныхАвторах = Новый Массив;
Для Каждого Строка Из ТаблицаХранилища Цикл

СтрокаПользователя = ТаблицаСопоставления.Найти(строка.Автор, "Автор");
Если СтрокаПользователя = Неопределено Тогда
СтрокаСообщения = "Пользователю хранилища <%1> не сопоставлен пользователь git. Использую сопоставление по умолчанию";
Лог.Отладка(СтроковыеФункции.ПодставитьПараметрыВСтроку(СтрокаСообщения, строка.Автор));

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

КонецЦикла;

Если МассивСообщенийОбОшибочныхАвторах.Количество() > 1 Тогда
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Эх, торопимся :(

Ошибочно Если МассивСообщенийОбОшибочныхАвторах.Количество() > 1 Тогда

если всего один неверный автор, то ошибки не будет, что неверно :(

@khorevaa Сделаешь новый PR c исправлением ?

Для каждого СообщениеМассива Из МассивСообщенийОбОшибочныхАвторах Цикл
Лог.КритическаяОшибка(СообщениеМассива);
КонецЦикла;

ВызватьИсключение СтрШаблон("В таблице истории версий найдены авторы (количество %1), которые не сопоставлены в AUTHORS",МассивСообщенийОбОшибочныхАвторах.Количество());

КонецЕсли;

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

Функция КонвертироватьТаблицуВерсийИзФорматаБД(Знач ТаблицаБД)
Expand Down Expand Up @@ -882,14 +895,16 @@
Знач Формат = Неопределено,
Знач КоличествоКоммитовДоPush = 0,
Знач URLРепозитория = Неопределено,

Знач Лимит = 0,
Знач ПрерватьВыполнениеБезКомментарияКВерсии = Ложь,
Знач ИмяВетки = Неопределено,
Знач АвтоматическаяУстановкаТэговПоВерсиям = Ложь) Экспорт
Знач АвтоматическаяУстановкаТэговПоВерсиям = Ложь,
Знач ПроверитьАвторовХранилища = Ложь) Экспорт

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

Лог.Информация("Номер синхронизированной версии: " + ТекущаяВерсия);
Expand Down
36 changes: 29 additions & 7 deletions src/core/Модули/ПараметрыСистемы.os
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,27 @@
//
///////////////////////////////////////////////////////////////////

// ИмяЛогаСистемы
// ИмяПродукта
// Возвращает имя продукта
//
// Возвращаемое значение:
// Строка - Значение имени продукта
//
Функция ИмяПродукта() Экспорт

Возврат "GitSync";

КонецФункции // ИмяПродукта

// Возвращает идентификатор лога приложения
//
// Возвращаемое значение:
// Строка - Значение идентификатора лога приложения
//
Функция ИмяЛогаСистемы() Экспорт

Возврат "oscript.app.gitsync";

Возврат "oscript.app." + ИмяПродукта();
КонецФункции // ИмяЛогаСистемы

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

КлассыРеализацииКоманд["help"] = "КомандаСправкаПоПараметрам";
КлассыРеализацииКоманд[ИмяКомандыВерсия()] = "КомандаVersion";
КлассыРеализацииКоманд["clone"] = "КомандаClone";
КлассыРеализацииКоманд["init"] = "КомандаInit";
КлассыРеализацииКоманд["set-version"] = "КомандаSetVersion";
КлассыРеализацииКоманд["all"] = "КомандаAll";
КлассыРеализацииКоманд["export"] = "КомандаExport";
КлассыРеализацииКоманд["sync"] = "КомандаSync";
КлассыРеализацииКоманд["version"] = "КомандаVersion";


КонецПроцедуры // ПриРегистрацииКомандПриложения

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

Возврат "sync";

КонецФункции // ИмяКомандыПоУмолчанию
КонецФункции // ИмяКомандыПоУмолчанию

// Возвращает имя команды версия (ключ командной строки)
//
// Возвращаемое значение:
// Строка - имя команды
//
Функция ИмяКомандыВерсия() Экспорт

Возврат "version";

КонецФункции // ИмяКомандыВерсия
Loading