forked from theshadowco/sonar-helper
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Добавлена команда для переноса замечания на указанного пользователя п…
…о набору фильтров
- Loading branch information
1 parent
0f7a154
commit 4cc32aa
Showing
5 changed files
with
286 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 Тогда | ||
Лог.Ошибка("Указанный фильтр по статусам не содержит корректных значений"); | ||
ОшибокНет = Ложь; | ||
КонецЕсли; | ||
КонецЕсли; | ||
|
||
Возврат ОшибокНет; | ||
|
||
КонецФункции |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.