Skip to content

Commit

Permalink
Merge branch 'release/1.1.3'
Browse files Browse the repository at this point in the history
  • Loading branch information
theshadowco committed Mar 25, 2019
2 parents e058388 + 2327510 commit 270b13e
Show file tree
Hide file tree
Showing 9 changed files with 325 additions and 82 deletions.
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# модули
* text=auto
*.os text eol=lf
7 changes: 4 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
build/
*.log
*.ospx
build/
*.log
*.ospx
*.back
21 changes: 21 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,24 @@
Часто возникают ситуации, когда в разных проектах используется общая кодовая база и есть потребность исключить замечания родительского проекта, т.к. исправление их в дочернем самостоятельно не планируется. Переносить руками все замечания достаточно проблематично.

Для закрытия замечаний необходимо вызвать команду `issue-resolver` и передать ей информацию для авторизации, данные родительского и дочерних проектов.

#### Логика закрытия замечаний

SonarQube может создавать несколько замечаний по одному правилу на одну строку, на один символ / подстроку, что приводит к формированию одноко хэша строки. Примером таких замечаний например являются правила наличия пробелов у знаков математических операций и отсутствие описаний параметров методов.

Для гарантии корректрого закрытия замечаний дочернего проекта ввене алгоритм, при котором закрытие в довернем проекте замечний возможно только при выполнении следующих условий:

- количество одинаковых замечаний (с одинаковым хэшем и правилом) должно совпадать с родительским
- количество одинаковых незакрытых замечаний в дочернем проекте должны быть большим или равным количеству закрываемых замечаний из родительского проекта

В дочернем проекте будет закрыто то количество замечаний, которое неоьбходимо для выравнивая по количеству с родительским.

**Примеры:**

**Пример 1:** В родительском проекте есть 3 замечания на строке, исправлено одно. В дочернем тоже 3 замечания, исправленных нет. В результате - бцдет закрыто одно замечание в дочернем проекте.

**Пример 2:** В родительском проекте есть 3 замечания на строке, исправлено одно. В дочернем тоже 3 замечания, исправленных 2. В результате - в дочернем проекте не будет закрыто ни одного нового замечания.

**Пример 3:** В родительском проекте есть 3 замечания на строке, исправлено два. В дочернем тоже 3 замечания, исправленных 1. В результате - в дочернем проекте будет закрыто еще одно замечание, и общее количество закрых станет 2.

**Пример 4:** В родительском проекте есть 3 замечания на строке, исправлено два. В дочернем 4 замечания, исправленных 1. В результате - в дочернем проекте не будет закрыто ни одного нового замечния.
3 changes: 2 additions & 1 deletion examples/example.cfg-file.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
"--child-projects": "zarplataiupravleniepersonalomkorp:master,zarplataiupravleniepersonalomprof:develop",
"--exclude-projects": "upravleniepredpriiatiem:develop",
"--statuses": "CLOSED",
"--edt2cfg": false
"--edt2cfg": false,
"--tags": "vendor"
}
12 changes: 12 additions & 0 deletions installlocalhost.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
@echo off
call del "*.ospx"

for /f %%i in ('"oscript -version"') do set result=%%i

if %result%==1.0.19.105 (
call opm build . -mf ./packagedef -out .
) else (
call opm build -m ./packagedef -o .
)

call opm install -f *.ospx
9 changes: 4 additions & 5 deletions packagedef
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
ПутьКСценариюПараметров = ОбъединитьПути(ТекущийСценарий().Каталог, "src", "Модули", "ПараметрыСистемы.os");
ПутьКСценариюПараметров = ОбъединитьПути(ТекущийСценарий().Каталог, "src", "Модули", "ПараметрыСистемы.os");

ПараметрыСистемы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюПараметров);

Описание.Имя(ПараметрыСистемы_ЛокальнаяВерсия.ИмяПродукта())
.Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта())
.ВерсияСреды("1.0.20")
.ВерсияСреды("1.0.21")
.ЗависитОт("logos", "1.2.0")
.ЗависитОт("cmdline", "1.0.0")
.ЗависитОт("1commands", "1.3.5")

.ВключитьФайл("src")
.ВключитьФайл("packagedef")
.ВключитьФайл("readme.md")
.ВключитьФайл("README.md")
.ВключитьФайл("LICENSE")
.ВключитьФайл("examples")

.ИсполняемыйФайл("src/main.os", "sonar-helper")
47 changes: 41 additions & 6 deletions src/Классы/КомандаЗакрытьИшузы.os
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
Перем ИсключаемыеПроекты;
Перем Статусы;
Перем ИзEDTВКонфигуратор;
Перем Теги;
Перем МаксимальноеКоличествоСтатусов;

///////////////////////////////////////////////////////////////////////////////////////////////////
// Прикладной интерфейс
Expand All @@ -32,6 +34,8 @@
|
| По умолчанию выбираются только RESOLVED и CLOSED");
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--edt2cfg", "Необходимо использовать тогда, когда родительский проект в формате EDT, а дочерний в формате конфигуратора");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--tags", "Список тегов, которые будут добавлены к закрываемым замечаниям.
| Необходимые теги необходимо передавать строкой через запятую.");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--cfg-file", "Путь к конфигурационному файлу в формате json (utf-8), свойства объекта соответствуют ключам запуска.
| Пример конфигурационного файла находится в каталоге examples");

Expand Down Expand Up @@ -65,7 +69,7 @@
ЗамечанияРодительскогоПроекта = Сонар.ПолучитьЗамечанияПроекта(
АдресСервера, Токен,
ОписаниеРодительскогоПроекта,
Статусы,
СтрСоединить(Статусы, ","),
ИзEDTВКонфигуратор);

Если НЕ ЗамечанияРодительскогоПроекта.Количество() Тогда
Expand All @@ -74,7 +78,13 @@
Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех;

КонецЕсли;


Если Статусы.Количество() <> МаксимальноеКоличествоСтатусов Тогда
Сонар.ЗаполнитьКоличествоОдинаковыхЗамечанийПроекта(
АдресСервера, Токен,
ЗамечанияРодительскогоПроекта);
КонецЕсли;

Если ДочерниеПроекты.Найти("#all") <> Неопределено Тогда
ДочерниеПроекты.Очистить();
Для Каждого ОписаниеПроекта Из ПроектыSQ Цикл
Expand All @@ -93,7 +103,7 @@

Лог.Информация("Закрытие замечаний в дочерних проектах");
Для Каждого ДочернийПроект Из ДочерниеПроекты Цикл
Лог.Информация("Закрытие замечаний в проекте `%1`", ДочернийПроект);
Лог.Информация("Закрытие замечаний в проекте `%1`", ДочернийПроект);
ОписаниеПроекта = ПроектыSQ.Получить(СокрЛП(ДочернийПроект));
Если ОписаниеПроекта = Неопределено Тогда
Лог.Ошибка("Проект `%1` не обнаружен", ДочернийПроект);
Expand All @@ -103,18 +113,21 @@
ЗакрываемыеЗамечания = Сонар.ПолучитьЗакрываемыеЗамечания(АдресСервера, Токен, ОписаниеПроекта, ЗамечанияРодительскогоПроекта);
Если ЗакрываемыеЗамечания.Количество() Тогда
Лог.Информация("Для проекта `%1` будет закрыто замечаний: `%2` ", ДочернийПроект, ЗакрываемыеЗамечания.Количество());
Сонар.ЗакрытьЗамечания(АдресСервера, Токен, ЗакрываемыеЗамечания, "Привнесено '" + РодительскийПроект + "'");
Сонар.ЗакрытьЗамечания(АдресСервера, Токен, ЗакрываемыеЗамечания, "Привнесено '" + РодительскийПроект + "'", Теги);
Иначе
Лог.Информация("Для проекта `%1` нет закрываемых замечаний", ДочернийПроект);
КонецЕсли;
КонецЦикла;

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

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

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

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

МаксимальноеКоличествоСтатусов = 5;
ОшибокНет = Истина;

Токен = ПараметрыКоманды["--token"];
Expand All @@ -123,6 +136,7 @@
ДочерниеПроектыСтрокой = ПараметрыКоманды["--child-projects"];
ИсключаемыеПроектыСтрокой = ПараметрыКоманды["--exclude-projects"];
СтатусыСтрокой = ПараметрыКоманды["--statuses"];
Теги = ПараметрыКоманды["--tags"];
ИзEDTВКонфигуратор = ПараметрыКоманды["--edt2cfg"];

ПутьККонфигурационномуФайлу = ПараметрыКоманды["--cfg-file"];
Expand Down Expand Up @@ -154,6 +168,9 @@
Если СтатусыСтрокой = Неопределено Тогда
СтатусыСтрокой = ПараметрыИзФайла.Получить("--statuses");
КонецЕсли;
Если Теги = Неопределено Тогда
Теги = ПараметрыИзФайла.Получить("--tags");
КонецЕсли;
Если ИзEDTВКонфигуратор = Ложь И ПараметрыИзФайла.Получить("--edt2cfg") <> Неопределено Тогда
ИзEDTВКонфигуратор = ПараметрыИзФайла.Получить("--edt2cfg");
КонецЕсли;
Expand All @@ -171,6 +188,7 @@
Лог.Отладка(" Ключ дочерних проектов (строкой) = `%1`", ОбернутьЗначениеДляПечати(ДочерниеПроектыСтрокой));
Лог.Отладка(" Ключ исключаемых проектов (строкой) = `%1`", ОбернутьЗначениеДляПечати(ИсключаемыеПроектыСтрокой));
Лог.Отладка(" Статусы строкой = `%1`", ОбернутьЗначениеДляПечати(СтатусыСтрокой));
Лог.Отладка(" Устанавливаемые теги = `%1`", ОбернутьЗначениеДляПечати(Теги));
Лог.Отладка(" Нужно переводить из EDT = `%1`", ОбернутьЗначениеДляПечати(ИзEDTВКонфигуратор));

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

Если НЕ ЗначениеЗаполнено(Теги) Тогда
Теги = "";
КонецЕсли;

Возврат ОшибокНет;
Expand Down
2 changes: 1 addition & 1 deletion src/Модули/ПараметрыСистемы.os
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
//
Функция ВерсияПродукта() Экспорт

Версия = "1.0.1";
Версия = "1.1.3";
Возврат Версия;

КонецФункции // ВерсияПродукта()
Expand Down
Loading

0 comments on commit 270b13e

Please sign in to comment.