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 2 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
10 changes: 9 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 - без ограничений");

Expand All @@ -42,13 +43,20 @@
МаксВерсия = ПараметрыКоманды["-maxversion"];
Лимит = ПараметрыКоманды["-limit"];
ПереименовыватьФайлМодуляОбычнойФормы = ПараметрыКоманды["-process-fatform-modules"];
ПроверитьАвторовХранилища = ПараметрыКоманды["-check-authors"];

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

ЛокальныйКаталогГит = ТекущийКаталог();

КонецЕсли;

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

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

КонецЕсли;

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

Формат = РежимВыгрузкиФайлов.Авто;
Expand Down Expand Up @@ -82,7 +90,7 @@
Распаковщик.ДоменПочтыДляGitПоУмолчанию = ПараметрыКоманды["-email"];
Распаковщик.ПереименовыватьФайлМодуляОбычнойФормы = ПереименовыватьФайлМодуляОбычнойФормы;
ДополнительныеПараметры.Лог.Информация("Начинаю выгрузку исходников");
РаспаковщикКонфигурации.ВыполнитьЭкспортИсходников(Распаковщик, ПараметрыКоманды["ПутьКХранилищу"], ЛокальныйКаталогГит, МинВерсия, МаксВерсия, Формат,,, Лимит);
РаспаковщикКонфигурации.ВыполнитьЭкспортИсходников(Распаковщик, ПараметрыКоманды["ПутьКХранилищу"], ЛокальныйКаталогГит, МинВерсия, МаксВерсия, Формат,,, Лимит, ПроверитьАвторовХранилища);
ДополнительныеПараметры.Лог.Информация("Выгрузка завершена");

Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех;
Expand Down
14 changes: 13 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, на наличие всех авторов коммитов ");

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

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

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

Expand All @@ -67,13 +69,21 @@
Лимит = ПараметрыКоманды["-limit"];
КоличествоКоммитовДоPush = ПараметрыКоманды["-push-every-n-commits"];
ПереименовыватьФайлМодуляОбычнойФормы = ПараметрыКоманды["-process-fatform-modules"];
ПроверитьАвторовХранилища = ПараметрыКоманды["-check-authors"];


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

НачальнаяВерсия = 0;

КонецЕсли;

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

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

КонецЕсли;

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

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

Распаковщик = РаспаковщикКонфигурации.ПолучитьРаспаковщик(ДополнительныеПараметры);
Распаковщик.ВерсияПлатформы = ВерсияПлатформы;
Expand All @@ -149,7 +160,8 @@
Формат,
КоличествоКоммитовДоPush,
URLРепозитория,
Лимит);
Лимит,
ПроверитьАвторовХранилища);

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

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

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

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

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

СтрокаСообщения = СтрШаблон("Пользователю хранилища <%1> не сопоставлен пользователь git.",строка.Автор);
Если ПроверитьАвторовХранилища Тогда
МассивСообщенийОбОшибочныхАвторах.Добавить(СтрокаСообщения);
КонецЕсли;
Лог.Отладка(СтрокаСообщения + " Использую сопоставление по умолчанию");
ПредставлениеАвтора = СтроковыеФункции.ПодставитьПараметрыВСтроку("%1 <%1@%2>", строка.Автор, Строка(ДоменПочтыДляGit()));
Иначе
ПредставлениеАвтора = строкаПользователя.ПредставлениеАвтора;
Expand All @@ -681,6 +685,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 @@ -910,12 +923,13 @@
Знач Формат = Неопределено,
Знач КоличествоКоммитовДоPush = 0,
Знач URLРепозитория = Неопределено,
Знач Лимит = 0
Знач Лимит = 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";

КонецФункции // ИмяКомандыВерсия
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@
Знач Формат = Неопределено,
Знач КоличествоКоммитовДоPush = 0,
Знач URLРепозитория = Неопределено,
Знач Лимит = 0) Экспорт
Знач Лимит = 0,
Знач ПроверитьАвторовХранилища = Ложь) Экспорт

ФайлБазыДанныхХранилища = ПолучитьПутьКБазеДанныхХранилища(ПутьКХранилищу);
Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(ЛокальныйКаталогГит,
Expand All @@ -88,7 +89,8 @@
Формат,
КоличествоКоммитовДоPush,
URLРепозитория,
Лимит);
Лимит,
ПроверитьАвторовХранилища);

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

Expand Down
Loading