1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2024-11-24 08:32:25 +02:00

Реализован функционал сценария разбора обычных форм

This commit is contained in:
Maxmov Valery 2017-09-05 17:12:07 +03:00
parent a0a9266253
commit 6a9b105266
5 changed files with 167 additions and 16 deletions

View File

@ -11,7 +11,7 @@
.ЗависитОт("1bdd", "1.5.2")
.ЗависитОт("gitrunner", "1.4.0")
.ЗависитОт("v8runner", "0.4.1")
.ЗависитОт("v8unpack", "1.0.1")
.ВключитьФайл("src")
.ВключитьФайл("features")
.ИсполняемыйФайл("src/main.os", ИмяПродукта);

View File

@ -61,19 +61,25 @@
ЖурналИзменений = ПолучитьЖурналИзменений();
Ит = 0;
ИзмененныеКаталоги = Новый Массив;
ПараметрыОбработки = Новый Структура("Лог, ЖурналИзменений, ИзмененныеКаталоги, КаталогРепозитория", Лог, ЖурналИзменений, ИзмененныеКаталоги, КаталогРепозитория);
ПараметрыОбработки = Новый Структура("Лог, ФайлыДляПостОбработки, ИзмененныеКаталоги, КаталогРепозитория", Лог, Новый Массив, Новый Массив, КаталогРепозитория);
Пока Ит < ЖурналИзменений.Количество() Цикл
АнализируемыйФайл = Новый Файл(ОбъединитьПути(КаталогРепозитория, ЖурналИзменений[Ит].ИмяФайла));
Лог.Отладка("Анализируется файл <%1>", АнализируемыйФайл.Имя);
ПараметрыОбработки.Вставить("ЖурналИзменений", ЖурналИзменений);
Для Каждого СценарийОбработки Из СценарииОбработки Цикл
ФайлОбработан = СценарийОбработки.Сценарий.ОбработатьФайл(АнализируемыйФайл, ТекущийКаталогИсходныхФайлов, ПараметрыОбработки);
Если ФайлОбработан Тогда
Для каждого ФайлДляДопОбработки Из ПараметрыОбработки.ФайлыДляПостОбработки Цикл
ЖурналИзменений.Добавить(Новый Структура("ИмяФайла, ТипИзменения", СтрЗаменить(ФайлДляДопОбработки, КаталогИсходныхФайлов, ""), ВариантИзмененийФайловGit.Изменен));
КонецЦикла;
ПараметрыОбработки.ФайлыДляПостОбработки.Очистить();
Продолжить;
КонецЕсли;
@ -109,7 +115,7 @@
ЖурналИзменений = Новый Массив;
Для Каждого СтрокаВывода Из СтрокиВывода Цикл
Лог.Информация(" <%1>", СтрокаВывода);
Лог.Отладка(" <%1>", СтрокаВывода);
СтрокаВывода = СокрЛП(СтрокаВывода);
ПозицияПробела = СтрНайти(СтрокаВывода, " ");
СимволИзменения = Лев(СтрокаВывода, 1);

View File

@ -0,0 +1,141 @@
///////////////////////////////////////////////////////////////////////////////
// Служебный модуль с реализацией сценариев обработки файлов
// "РазборОбычныхФормНаИсходники"
///////////////////////////////////////////////////////////////////////////////
#Использовать v8unpack
// ИмяСценария
// Возвращает имя сценария обработки файлов
//
// Возвращаемое значение:
// Строка - Имя текущего сценария обработки файлов
//
Функция ИмяСценария() Экспорт
Возврат "РазборОбычныхФормНаИсходники";
КонецФункции // ИмяСценария()
// ОбработатьФайл
// Выполняет обработку файла
//
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
Если ЭтоФайлОбычнойФормы(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
КаталогаВыгрузки = ПодготовитьКаталогВыгрузки(КаталогИсходныхФайлов, АнализируемыйФайл, ДополнительныеПараметры);
Если Не ПустаяСтрока(КаталогаВыгрузки) Тогда
ЧтениеФайла = Новый ЧтениеФайла8(АнализируемыйФайл.ПолноеИмя);
ЧтениеФайла.ExtractAll(КаталогаВыгрузки, Истина);
ЧтениеФайла = Неопределено;
ФайлыМодулей = НайтиФайлы(КаталогаВыгрузки, "module", ИСТИНА);
Для Каждого ФайлМодуля Из ФайлыМодулей Цикл
Файл = Новый Файл(ОбъединитьПути(ФайлМодуля.Путь, "Module") + ".bsl");
Если Файл.Существует() Тогда
УдалитьФайлы(Файл.ПолноеИмя);
КонецЕсли;
ПереместитьФайл(ФайлМодуля.ПолноеИмя, Файл.ПолноеИмя);
ДополнительныеПараметры.ФайлыДляПостОбработки.Добавить(Файл.ПолноеИмя);
КонецЦикла;
КонецЕсли;
Возврат ИСТИНА;
КонецЕсли;
Возврат ЛОЖЬ;
КонецФункции // ОбработатьФайл()
Функция ЭтоФайлОбычнойФормы(Файл)
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Имя, "Form.bin") = 0;
КонецФункции
Функция ПодготовитьКаталогВыгрузки(КаталогИсходныхФайлов, ОбрабатываемыйФайл, ДополнительныеПараметры)
ФайлУдален = НЕ ОбрабатываемыйФайл.Существует();
ИмяКаталогаВыгрузки = ОбъединитьПути(ОбрабатываемыйФайл.Путь, ОбрабатываемыйФайл.ИмяБезРасширения);
ФайлИмяКаталогаВыгрузки = Новый Файл(ИмяКаталогаВыгрузки);
Если НЕ ФайлИмяКаталогаВыгрузки.Существует() Тогда
Если ФайлУдален Тогда
ИмяКаталогаВыгрузки = "";
Иначе
СоздатьКаталог(ИмяКаталогаВыгрузки);
КонецЕсли;
Иначе
ФайлыВКаталогеТВФ = НайтиФайлы(ИмяКаталогаВыгрузки, "*", ИСТИНА);
Для каждого ФайлВКателогеТВФ Из ФайлыВКаталогеТВФ Цикл
Если НЕ ФайлВКателогеТВФ.Существует() Тогда
Продолжить;
КонецЕсли;
УдалитьФайлы(ФайлВКателогеТВФ.ПолноеИмя);
КонецЦикла;
Если ФайлУдален Тогда
УдалитьФайлы(ИмяКаталогаВыгрузки);
КонецЕсли;
КонецЕсли;
Если НЕ ПустаяСтрока(ИмяКаталогаВыгрузки) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(ИмяКаталогаВыгрузки);
КонецЕсли;
Если Не ФайлУдален Тогда
Возврат ИмяКаталогаВыгрузки;
КонецЕсли;
Возврат "";
КонецФункции // ПодготовитьКаталогВыгрузки()

View File

@ -30,10 +30,11 @@
// АнализиремыйАнализируемыйФайлФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * ЖурналИзменений - Массив - Набор описаний анализируемых файлов
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
@ -43,6 +44,7 @@
Лог = ДополнительныеПараметры.Лог;
Если ТипФайлаПоддерживается(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
КаталогВыгрузки = ПодготовитьКаталогВыгрузки(КаталогИсходныхФайлов, АнализируемыйФайл, ДополнительныеПараметры);
@ -62,15 +64,14 @@
КонецЕсли;
// // Добавим файлы для дальнейшей обработки
// // Понятно, что добавить удаленные не получится
// ФайлыВКаталогеТВФ = НайтиФайлы(КаталогВыгрузки, "*", ИСТИНА);
// Для каждого ФайлВКателогеТВФ Из ФайлыВКаталогеТВФ Цикл
// Добавим файлы для дальнейшей обработки
// Понятно, что добавить удаленные не получится
ФайлыВКаталогеТВФ = НайтиФайлы(КаталогВыгрузки, "*", ИСТИНА);
Для каждого ФайлВКателогеТВФ Из ФайлыВКаталогеТВФ Цикл
// ДополнительныеПараметры.ЖурналИзменений.Добавить(
// Новый Структура("Имя")СтрЗаменить(ФайлВКателогеТВФ.ПолноееИмя, ДополнительныеПараметры.КаталогРепозитория, ""));
ДополнительныеПараметры.ФайлыДляПостОбработки.Добавить(ФайлВКателогеТВФ.ПолноеИмя);
// КонецЦикла;
КонецЦикла;
Возврат ИСТИНА;
@ -108,6 +109,7 @@
Прервать;
КонецЦикла;
Если ИмяКаталогаВыгрузки <> ОбрабатываемыйФайл.ИмяБезРасширения Тогда
ИмяКаталогаВыгрузки = ОбъединитьПути(ИмяКаталогаВыгрузки, ОбрабатываемыйФайл.ИмяБезРасширения);

View File

@ -22,17 +22,19 @@
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * ЖурналИзменений - Массив - Набор описаний анализируемых файлов
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
ВызватьИсключение "Обработка файла не реализована"
ВызватьИсключение "Обработка файла не реализована";
Лог = ДополнительныеПараметры.Лог;
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Возврат ЛОЖЬ;