mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2024-11-30 08:36:50 +02:00
a6e0e51ab1
2. исправил именование метода подключения сервисной компоненты 3. Добавил пару строк в руководство контрибьютера
174 lines
9.3 KiB
Plaintext
174 lines
9.3 KiB
Plaintext
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Служебный модуль с реализацией сценариев обработки файлов ВставкаКопирайтов
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
Перем Лог;
|
|
|
|
// ИмяСценария
|
|
// Возвращает имя сценария обработки файлов
|
|
//
|
|
// Возвращаемое значение:
|
|
// Строка - Имя текущего сценария обработки файлов
|
|
//
|
|
Функция ИмяСценария() Экспорт
|
|
|
|
Возврат "ВставкаКопирайтов";
|
|
|
|
КонецФункции // ИмяСценария()
|
|
|
|
// ОбработатьФайл
|
|
// Выполняет обработку файла
|
|
//
|
|
// Параметры:
|
|
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
|
|
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
|
|
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
|
|
// * Лог - Объект - Текущий лог
|
|
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
|
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
|
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
|
// и которые необходимо дообработать
|
|
//
|
|
// Возвращаемое значение:
|
|
// Булево - Признак выполненной обработки файла
|
|
//
|
|
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
|
|
|
|
Лог = ДополнительныеПараметры.Лог;
|
|
Если АнализируемыйФайл.Существует() И ЭтоФайлИсходников(АнализируемыйФайл) Тогда
|
|
|
|
ПутьКФайлуКопирайта = ОбъединитьПути(ДополнительныеПараметры.КаталогРепозитория, "COPYRIGHT");
|
|
ФайлКопирайта = Новый Файл(ПутьКФайлуКопирайта);
|
|
Если НЕ ФайлКопирайта.Существует() Тогда
|
|
|
|
Возврат ЛОЖЬ;
|
|
|
|
КонецЕсли;
|
|
|
|
Если Не ДополнительныеПараметры.Свойство("АктуальныйКопирайт") Тогда
|
|
|
|
Текст = Новый ЧтениеТекста();
|
|
Текст.Открыть(ПутьКФайлуКопирайта, КодировкаТекста.UTF8NoBOM);
|
|
|
|
ТекстКопирайта = Текст.Прочитать();
|
|
ТекстКопирайта = СокрЛП(ТекстКопирайта);
|
|
Текст.Закрыть();
|
|
|
|
РегуляркаДатыКопирайта = Новый РегулярноеВыражение("\)\.\s\d{4}-(\d{4})\.");
|
|
РегуляркаДатыКопирайта.Многострочный = Истина;
|
|
РегуляркаДатыКопирайта.ИгнорироватьРегистр = Истина;
|
|
|
|
ТекстКопирайта = РегуляркаДатыКопирайта.Заменить(ТекстКопирайта, "). 2021-" + Год(ТекущаяУниверсальнаяДата()) + ".");
|
|
|
|
ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлуКопирайта, КодировкаТекста.UTF8NoBOM, , , Символы.ПС);
|
|
ЗаписьТекста.Записать(ТекстКопирайта);
|
|
ЗаписьТекста.Закрыть();
|
|
|
|
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(ПутьКФайлуКопирайта);
|
|
ДополнительныеПараметры.Вставить("АктуальныйКопирайт", Истина);
|
|
|
|
КонецЕсли;
|
|
|
|
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
|
|
|
Если УстановитьКопирайтПриНеобходимости(АнализируемыйФайл.ПолноеИмя, ФайлКопирайта.ПолноеИмя) Тогда
|
|
|
|
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
|
|
|
|
// для постобработки другим сценарием
|
|
ДополнительныеПараметры.ФайлыДляПостОбработки.Добавить(АнализируемыйФайл.ПолноеИмя);
|
|
Возврат ИСТИНА;
|
|
|
|
КонецЕсли;
|
|
|
|
КонецЕсли;
|
|
|
|
Возврат ЛОЖЬ;
|
|
|
|
КонецФункции // ОбработатьФайл()
|
|
|
|
Функция ЭтоФайлИсходников(Файл)
|
|
|
|
Если ПустаяСтрока(Файл.Расширение) Тогда
|
|
|
|
Возврат Ложь;
|
|
|
|
КонецЕсли;
|
|
|
|
Возврат СтрСравнить(Файл.Расширение, ".bsl") = 0;
|
|
|
|
КонецФункции
|
|
|
|
Функция УстановитьКопирайтПриНеобходимости(ПутьКФайлуМодуля, ПутьКФайлуКопирайта)
|
|
|
|
Текст = Новый ЧтениеТекста();
|
|
Текст.Открыть(ПутьКФайлуКопирайта, КодировкаТекста.UTF8NoBOM);
|
|
|
|
ТекстКопирайта = Текст.Прочитать();
|
|
ТекстКопирайта = СокрЛП(ТекстКопирайта);
|
|
Текст.Закрыть();
|
|
|
|
ТекстОшибки = "";
|
|
РегуляркаСтороннийКод = Новый РегулярноеВыражение("(// IMPORT\s)");
|
|
РегуляркаСтороннийКод.Многострочный = Истина;
|
|
РегуляркаСтороннийКод.ИгнорироватьРегистр = Истина;
|
|
|
|
РегуляркаКопирайта = Новый РегулярноеВыражение("([\/]{2}©[\/]{2,}©[\/]{2}\s?)");
|
|
РегуляркаКопирайта.Многострочный = Истина;
|
|
РегуляркаКопирайта.ИгнорироватьРегистр = Истина;
|
|
|
|
НовыйТекстМодуля = "";
|
|
|
|
Текст = Новый ЧтениеТекста();
|
|
Текст.Открыть(ПутьКФайлуМодуля, КодировкаТекста.UTF8NoBOM);
|
|
ТекстМодуля = Текст.Прочитать();
|
|
Текст.Закрыть();
|
|
|
|
Если НЕ ПустаяСтрока(ТекстМодуля) И Не РегуляркаСтороннийКод.Совпадает(ТекстМодуля) Тогда
|
|
|
|
КоллекцияСовпадений = РегуляркаКопирайта.НайтиСовпадения(ТекстМодуля);
|
|
|
|
Если КоллекцияСовпадений.Количество() = 0 Тогда
|
|
|
|
ТекстОшибки = "Нет копирайта в модуле";
|
|
НовыйТекстМодуля = ТекстКопирайта + Символы.ПС + Символы.ПС + СокрЛП(ТекстМодуля);
|
|
|
|
ИначеЕсли КоллекцияСовпадений.Количество() <> 2 Тогда
|
|
|
|
Лог.Ошибка("Модуль '%1'
|
|
|содержит несколько блоков, похожих на части копирайта.
|
|
|Удалите лишние (либо все) блоки относящиеся к копирайту.", ПутьКФайлуМодуля);
|
|
ВызватьИсключение "Копирайт не может быть проверен/скорректирован";
|
|
|
|
Иначе
|
|
|
|
КонецКопирайта = КоллекцияСовпадений[1].Индекс + КоллекцияСовпадений[1].Длина;
|
|
|
|
Если СтрСравнить(ТекстКопирайта, СокрЛП(СтрЗаменить(Лев(ТекстМодуля, КонецКопирайта), Символы.ВК, ""))) <> 0 Тогда
|
|
|
|
ТекстОшибки = "Неактульный копирайт";
|
|
|
|
НовыйТекстМодуля = ТекстКопирайта + Символы.ПС + Символы.ПС + СокрЛП(Прав(ТекстМодуля, СтрДлина(ТекстМодуля) - КонецКопирайта));
|
|
|
|
КонецЕсли;
|
|
|
|
КонецЕсли;
|
|
|
|
КонецЕсли;
|
|
|
|
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
|
|
|
|
ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлуМодуля, КодировкаТекста.UTF8NoBOM, , , Символы.ПС);
|
|
ЗаписьТекста.Записать(НовыйТекстМодуля);
|
|
ЗаписьТекста.Закрыть();
|
|
|
|
Возврат ИСТИНА;
|
|
|
|
КонецЕсли;
|
|
|
|
Возврат ЛОЖЬ;
|
|
|
|
КонецФункции
|