Skip to content

Commit

Permalink
Добавлена команда для переноса замечания на указанного пользователя п…
Browse files Browse the repository at this point in the history
…о набору фильтров
  • Loading branch information
theshadowco committed Jul 25, 2019
1 parent 0f7a154 commit 4cc32aa
Show file tree
Hide file tree
Showing 5 changed files with 286 additions and 5 deletions.
8 changes: 8 additions & 0 deletions examples/example-transfer.cfg-file.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"--token": "2ef785ca946170b7086668132175eb01386943a1",
"--server": "http://my.sonar.server:9000",
"--projects": "bsp,mdm",
"--statuses": "OPEN",
"--assigned": "notme,false",
"--assign": "me"
}
167 changes: 167 additions & 0 deletions src/Классы/КомандаПеренестиИшузы.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
///////////////////////////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией работы команды transfer-issues
//
// (C) Maximov Valery (aka theshadowco)
//
///////////////////////////////////////////////////////////////////////////////////////////////////

Перем Лог;

Перем Проекты;
Перем ИсключаемыеПроекты;
Перем Статусы;
Перем МаксимальноеКоличествоСтатусов;

Перем ПрочитанныеПараметры;

///////////////////////////////////////////////////////////////////////////////////////////////////
// Прикладной интерфейс
///////////////////////////////////////////////////////////////////////////////////////////////////

Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт

ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, "Выполняет перенос замечаний на указанного пользователя");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--token", "Токен для авторизации на сервере SonarQube");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--server", "Адрес сервера SonarQube (например http://my.sonar.server:9000)");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--assigned", "Идентификаторы пользователей, с которых необходимо перенести замечания (список через запятую).
|Для выбора 'Не назначено' используйте значение 'false'");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, " - -assign", "Идентификатор пользователя, на которого необходимо назначить замечания.
|Для выбора 'Не назначено' используйте значение 'false'");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--projects", "Ключи проектов, строкой через запятую (например hrm:develop,buh:master).
| Для того, чтобы указать все проекты, необходимо передать #all");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--exclude-projects", "Ключи проектов, которые необходимо исключить из обработки");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--statuses", "Отбор замечаний только соответствующих статусов.
| Необходимые статусы необходимо передавать строкой через запятую.
| Возможные значения:
| OPEN - открытые
| CONFIRMED - подтвержденные:
| REOPENED - переоткрытые
| RESOLVED - решенные
| CLOSED - закрытые
|
| По умолчанию выбираются только RESOLVED и CLOSED");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--cfg-file", "Путь к конфигурационному файлу в формате json (utf-8), свойства объекта соответствуют ключам запуска.
| Пример конфигурационного файла находится в каталоге examples");

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

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

// Выполняет логику команды
//
// Параметры:
// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений
// ДополнительныеПараметры - Соответствие - (необязательно) дополнительные параметры
//
Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт

Лог = ДополнительныеПараметры.Лог;
ОшибокНет = ПрочитатьПараметрыЗапуска(ПараметрыКоманды);
Если НЕ ОшибокНет Тогда
Возврат ОбщегоНазначения.СообщитьОбОшибке("Ошибка запуска");
КонецЕсли;

АдресСервера = ПрочитанныеПараметры.Получить("АдресСервера");
Токен = ПрочитанныеПараметры.Получить("Токен");
РодительскийПроект = ПрочитанныеПараметры.Получить("РодительскийПроект");

Лог.Информация("Получение информации о проектах");
ПроектыSQ = Сонар.ПолучитьПроекты(АдресСервера, Токен);

Если Проекты.Найти("#all") <> Неопределено Тогда
Проекты.Очистить();
Для Каждого ОписаниеПроекта Из ПроектыSQ Цикл
Если ОписаниеПроекта.Ключ <> РодительскийПроект Тогда
Проекты.Добавить(ОписаниеПроекта.Ключ);
КонецЕсли;
КонецЦикла;
КонецЕсли;

Для Каждого ИсключаемыйПроект Из ИсключаемыеПроекты Цикл
Позиция = Проекты.Найти(СокрЛП(ИсключаемыйПроект));
Если Позиция <> Неопределено Тогда
Проекты.Удалить(Позиция);
КонецЕсли;
КонецЦикла;

ПользователиСтрокой = ПрочитанныеПараметры.Получить("Пользователи");
Если ЗначениеЗаполнено(ПользователиСтрокой) Тогда
Пользователи = СтрРазделить(ПользователиСтрокой, ",", Ложь);
ПользовательВСписке = Пользователи.Найти(ПрочитанныеПараметры.Получить("НазначитьНа"));
Если ПользовательВСписке <> Неопределено Тогда
Пользователи.Удалить(ПользовательВСписке);
КонецЕсли;

Если Пользователи.Количество() Тогда
ПользователиСтрокой = СтрСоединить(Пользователи, ",");
Иначе
ПользователиСтрокой = "";
КонецЕсли;
КонецЕсли;

Лог.Информация("Чтение замечаний по фильтру");

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

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

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

///////////////////////////////////////////////////////////////////////////////////////////////////

Функция ПрочитатьПараметрыЗапуска(ПараметрыКоманды)

ПрочитанныеПараметры = ОбщегоНазначения.ПрочитатьПараметрыЗапуска(ПараметрыКоманды, Истина);
ОшибокНет = ПрочитанныеПараметры.Получить("ОшибокНет");
МаксимальноеКоличествоСтатусов = 5;

Если Не ЗначениеЗаполнено(ПрочитанныеПараметры.Получить("НазначитьНа")) Тогда
Лог.Ошибка("Не указан идентификатор пользователя, на которого необходимо перенести замечания");
ОшибокНет = Ложь;
КонецЕсли;

ИсключаемыеПроекты = Новый Массив();
Если ЗначениеЗаполнено(ПрочитанныеПараметры.Получить("ИсключаемыеПроектыСтрокой")) Тогда
ИсключаемыеПроекты = СтрРазделить(ПрочитанныеПараметры.Получить("ИсключаемыеПроектыСтрокой"), ", ", Ложь);
КонецЕсли;

Проекты = Новый Массив();
Если ЗначениеЗаполнено(ПрочитанныеПараметры.Получить("Проекты")) Тогда
Проекты = СтрРазделить(ПрочитанныеПараметры.Получить("Проекты"), ", ", Ложь);
Иначе
Проекты.Добавить("#all");
КонецЕсли;

Если Не ЗначениеЗаполнено(ПрочитанныеПараметры.Получить("СтатусыСтрокой")) Тогда
Статусы = СтрРазделить("OPEN,CONFIRMED,REOPENED", ",", Ложь);
Иначе
Статусы = Новый Массив();
СтатусыВрем = СтрРазделить(ВРЕГ(ПрочитанныеПараметры.Получить("СтатусыСтрокой")), ", ", Ложь);
ВсеСтатусы = СтрРазделить("OPEN,CONFIRMED,REOPENED,RESOLVED,CLOSED", ",");
Для Каждого Статус Из СтатусыВрем Цикл
Если ВсеСтатусы.Найти(Статус) <> Неопределено Тогда
Статусы.Добавить(Статус);
Иначе
Лог.Ошибка("Неопознанный статус `%1`", Статус);
КонецЕсли;
КонецЦикла;
Если Статусы.Количество() = 0 Тогда
Лог.Ошибка("Указанный фильтр по статусам не содержит корректных значений");
ОшибокНет = Ложь;
КонецЕсли;
КонецЕсли;

Возврат ОшибокНет;

КонецФункции
2 changes: 2 additions & 0 deletions src/Модули/ОбщегоНазначения.os
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,8 @@
ВозможныеКлючи.Вставить("Метрики", "--total-metrics");
ВозможныеКлючи.Вставить("ПутьКОтчету", "--report-path");
ВозможныеКлючи.Вставить("ФорматОтчета", "--report-format");
ВозможныеКлючи.Вставить("Пользователи", "--assigned");
ВозможныеКлючи.Вставить("НазначитьНа", "--assign");

Возврат ВозможныеКлючи;

Expand Down
2 changes: 2 additions & 0 deletions src/Модули/ПараметрыСистемы.os
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
ВозможныеКомандыПриложения.Вставить("ЗакрытьИшузы", "issue-resolver");
ВозможныеКомандыПриложения.Вставить("СгенерироватьОтчет", "report");
ВозможныеКомандыПриложения.Вставить("СгенерироватьОтчетПоПользователям", "usr-report");
ВозможныеКомандыПриложения.Вставить("ПеренестиИшузы", "transfer-issues");

ВозможныеКомандыПриложения = Новый ФиксированнаяСтруктура(ВозможныеКомандыПриложения);

Expand All @@ -67,6 +68,7 @@
КлассыРеализацииКоманд[ВозможныеКоманды().ЗакрытьИшузы] = "КомандаЗакрытьИшузы";
КлассыРеализацииКоманд[ВозможныеКоманды().СгенерироватьОтчет] = "КомандаСгенерироватьОтчет";
КлассыРеализацииКоманд[ВозможныеКоманды().СгенерироватьОтчетПоПользователям] = "КомандаСгенерироватьОтчетПоПользователям";
КлассыРеализацииКоманд[ВозможныеКоманды().ПеренестиИшузы] = "КомандаПеренестиИшузы";

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

Expand Down
Loading

0 comments on commit 4cc32aa

Please sign in to comment.