From 753c639ba45e1602d25fd65711fd08d7e2568e61 Mon Sep 17 00:00:00 2001 From: dmedvedev Date: Tue, 9 Apr 2019 12:50:40 +0300 Subject: [PATCH] Feature/onecicd 6 --- README.md | 1 + features/ВыполнениеПрекоммита.feature | 41 ++ features/Конфигурирование.feature | 3 +- src/Классы/КомандаКонфигуратион.os | 30 +- src/Классы/НастройкиРепозитория.os | 30 +- src/Модули/ТипыФайлов.os | 108 ++++- .../ДобавлениеПробеловПередКлючевымиСловами.os | 2 +- .../ЗапретИспользованияПерейти.os | 2 +- src/СценарииОбработки/КорректировкаXMLФорм.os | 2 +- .../ОтключениеПолнотекстовогоПоиска.os | 274 +++++++++++++ .../ПроверкаДублейПроцедурИФункций.os | 4 +- .../ПроверкаКорректностиОбластей.os | 2 +- .../РазборОбычныхФормНаИсходники.os | 16 +- .../РазборОтчетовОбработокРасширений.os | 20 +- .../СинхронизацияОбъектовМетаданныхИФайлов.os | 2 +- .../СортировкаДереваМетаданных.os | 10 +- .../УдалениеДублейМетаданных.os | 2 +- .../УдалениеЛишнихКонцевыхПробелов.os | 2 +- .../УдалениеЛишнихПустыхСтрок.os | 2 +- src/СценарииОбработки/ШаблонСценария.os | 75 +++- tests/fixtures/Документ.mdo | 105 +++++ tests/fixtures/Документ.xml | 376 ++++++++++++++++++ .../ПроверкаДублейПроцедурСПараметрами.bsl | 16 + tests/ПроверкаСцераниевОбработки.os | 106 ++++- v8config.json | 9 + 25 files changed, 1146 insertions(+), 94 deletions(-) create mode 100644 src/СценарииОбработки/ОтключениеПолнотекстовогоПоиска.os create mode 100644 tests/fixtures/Документ.mdo create mode 100644 tests/fixtures/Документ.xml create mode 100644 tests/fixtures/ПроверкаДублейПроцедурСПараметрами.bsl diff --git a/README.md b/README.md index 253c89a..aa116e7 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ - `УдалениеЛишнихПустыхСтрок` - выполняет очистку модуля от лишних пустых строк (лишними считаются 2 и более идущих подряд пустых строках) - `ПроверкаКорректностиОбластей` - выполняет проверку на корректность скобок областей: `на парность` и `перед окончание области должно быть ее определение` - `ПроверкаДублейПроцедурИФункций` - выполняет поиск одинаковых названий процедур и функций в модуле. +- `ОтключениеПолнотекстовогоПоиска` - По умолчанию отключает полнотекстовый поиск в файлах описания метаданных. Имеет настройку для исключения файлов из обработки. Для исключения необходимо указать относительный путь в репозитории до файла описания метаданного. Можно выключать из обработки отдельные реквизиты метаданного, для этого надо задать массив реквизитов в конфигурационном файле. ## Изменение настроек diff --git a/features/ВыполнениеПрекоммита.feature b/features/ВыполнениеПрекоммита.feature index 81686b4..08870a1 100644 --- a/features/ВыполнениеПрекоммита.feature +++ b/features/ВыполнениеПрекоммита.feature @@ -88,3 +88,44 @@ И я создаю файл "РабочийКаталог\src\epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form\Module.bsl" с текстом "текст178" И я выполняю команду "git" с параметрами "commit -m addFile" Тогда Вывод команды "git" не содержит "Module.bsl" + +Сценарий: По умолчанию прекоммит убирает полнотекстовый поиск в исходниках конфигуратора + Когда Я копирую файл "tests\fixtures\Документ.xml" в каталог репозитория "РабочийКаталог" + И Файл "Документ.xml" в рабочем каталоге содержит "FullTextSearch>Use<" + И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит" + Тогда Файл "Документ.xml" в рабочем каталоге не содержит "FullTextSearch>Use<" + +Сценарий: По умолчанию прекоммит убирает полнотекстовый поиск в исходниках EDT + Когда Я копирую файл "tests\fixtures\Документ.mdo" в каталог репозитория "РабочийКаталог" + И Файл "Документ.mdo" в рабочем каталоге содержит "fullTextSearch>Use<" + И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит" + Тогда Файл "Документ.mdo" в рабочем каталоге не содержит "fullTextSearch>Use<" + +Сценарий: Отключение полнотекстового поиска игнорирует файл в исключении + Когда Я создаю каталог "src" в рабочем каталоге + И Я копирую файл "Документ.mdo" из каталога "tests\fixtures" проекта в подкаталог "src" рабочего каталога + И Я копирую файл "Документ.xml" из каталога "tests\fixtures" проекта в подкаталог "src" рабочего каталога + И Файл "src\Документ.mdo" в рабочем каталоге содержит "fullTextSearch>Use<" + И Файл "src\Документ.xml" в рабочем каталоге содержит "FullTextSearch>Use<" + И я создаю файл "РабочийКаталог\v8config.json" с текстом + """ + { + "Precommt4onecСценарии": { + "ИспользоватьСценарииРепозитория": false, + "КаталогЛокальныхСценариев": "", + "ГлобальныеСценарии": [ + "ОтключениеПолнотекстовогоПоиска.os" + ], + "НастройкиСценариев": { + "ОтключениеПолнотекстовогоПоиска": { + "МетаданныеДляИсключения": { + "src\\Документ.mdo": [] + } + } + } + } + } + """ + И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит" + Тогда Файл "\src\Документ.mdo" в рабочем каталоге содержит "fullTextSearch>Use<" + И Файл "\src\Документ.xml" в рабочем каталоге не содержит "FullTextSearch>Use<" \ No newline at end of file diff --git a/features/Конфигурирование.feature b/features/Конфигурирование.feature index 9a7dc51..80a5b0e 100644 --- a/features/Конфигурирование.feature +++ b/features/Конфигурирование.feature @@ -28,5 +28,6 @@ Установленные настройки: ИспользоватьСценарииРепозитория = Нет КаталогЛокальныхСценариев = - ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ЗапретИспользованияПерейти.os,КорректировкаXMLФорм.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиОбластей.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os + ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ЗапретИспользованияПерейти.os,КорректировкаXMLФорм.os,ОтключениеПолнотекстовогоПоиска.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиОбластей.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os """ + diff --git a/src/Классы/КомандаКонфигуратион.os b/src/Классы/КомандаКонфигуратион.os index e4a5f91..53c24e1 100644 --- a/src/Классы/КомандаКонфигуратион.os +++ b/src/Классы/КомандаКонфигуратион.os @@ -33,7 +33,7 @@ Если НЕ ПараметрыКоманды["-global"] И НЕ ЗначениеЗаполнено(ПараметрыКоманды["-rep-path"]) Тогда - Лог.Ошибка("Для конфгурирования необходимо передать флаг -global или указать каталог репозитория параметром -rep-path"); + Лог.Ошибка("Для конфигурирования необходимо передать флаг -global или указать каталог репозитория параметром -rep-path"); Возврат Приложение.РезультатыКоманд().НеверныеПараметры; КонецЕсли; @@ -124,7 +124,7 @@ ГлобальныеСценарии = ПолучитьИменаСценариев(ТекущийКаталогСценариев); УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии); - НастройкиСценариев = СформироватьНастройкиСценариев(); + НастройкиСценариев = СформироватьНастройкиСценариев(ГлобальныеСценарии, ТекущийКаталогСценариев); УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\НастройкиСценариев", НастройкиСценариев); КонецПроцедуры @@ -162,17 +162,23 @@ КонецФункции -Функция СформироватьНастройкиСценариев() +Функция СформироватьНастройкиСценариев(МассивСценариев, КаталогСценариев) - // todo: Надо будет доработать таким образом, чтобы настройки считывались из сценария + НастройкиСценариев = Новый Соответствие; + Рефлектор = Новый Рефлектор; - // для сценария РазборОтчетовОбработокРасширений - НастройкиСценария = Новый Соответствие; - НастройкиСценария.Вставить("ИспользоватьНастройкиПоУмолчанию", Истина); - НастройкиСценария.Вставить("ВерсияПлатформы", ""); + Для Каждого Сценарий Из МассивСценариев Цикл + + ОбъектСценария = ЗагрузитьСценарий(ОбъединитьПути(КаталогСценариев, Сценарий)); + + Если Рефлектор.МетодСуществует(ОбъектСценария, "ПолучитьСтандартныеНастройкиСценария") Тогда + + СтруктураНастроек = Рефлектор.ВызватьМетод(ОбъектСценария, "ПолучитьСтандартныеНастройкиСценария"); + НастройкиСценариев.Вставить(СтруктураНастроек.ИмяСценария, СтруктураНастроек.Настройка); - НастройкиСценариев = Новый Соответствие; - НастройкиСценариев.Вставить("РазборОтчетовОбработокРасширений", НастройкиСценария); + КонецЕсли; + + КонецЦикла; Возврат НастройкиСценариев; @@ -212,8 +218,8 @@ УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\КаталогЛокальныхСценариев", КаталогЛокальныхСценариев); УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии); - - УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\НастройкиСценариев", СформироватьНастройкиСценариев()); + НастройкиСценариев = СформироватьНастройкиСценариев(ГлобальныеСценарии, КаталогГлобальныхСценариев); + УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\НастройкиСценариев", ); КонецПроцедуры diff --git a/src/Классы/НастройкиРепозитория.os b/src/Классы/НастройкиРепозитория.os index 13c6b50..6f3f5c9 100644 --- a/src/Классы/НастройкиРепозитория.os +++ b/src/Классы/НастройкиРепозитория.os @@ -11,7 +11,7 @@ /////////////////////////////////////////////////////////////////// -Перем ИнициализацияВыпонена; // содержит признак инициализации репозитория +Перем ИнициализацияВыполнена; // содержит признак инициализации репозитория Перем НовыйКонфиг; // содержит признак нового конфига Перем Конфигурация; // описание конфигурации Перем АдресКонфигурационногоФайла; // адрес нахождения конфигурационного файла @@ -34,31 +34,31 @@ КонецФункции // ЭтоНовый() // ГлобальныеНастройки -// Возврает набор глобальных настроек +// Возвращает набор глобальных настроек // // Возвращаемое значение: // Соответствие - Набор глобальных настроек при их наличии, если настроек нет то будет возвращено пустое соответствие // Функция ГлобальныеНастройки() Экспорт - ПроверкаИницализации(); + ПроверкаИнициализации(); Возврат НастройкиПриложения("GLOBAL"); КонецФункции // ГлобальныеНастройки() Экспорт // НастройкиПриложения -// Возврает набор настроек для приложения +// Возвращает набор настроек для приложения // // Параметры: // ИмяПриложения - Строка - Имя приложения // // Возвращаемое значение: -// Соответствие - Набор гнастроек при их наличии, если настроек нет то будет возвращено пустое соответствие +// Соответствие - Набор настроек при их наличии, если настроек нет то будет возвращено пустое соответствие // Функция НастройкиПриложения(ИмяПриложения) Экспорт - ПроверкаИницализации(); + ПроверкаИнициализации(); Если ПустаяСтрока(ИмяПриложения) Тогда ВызватьИсключение "Не указано имя приложения"; @@ -89,7 +89,7 @@ // Функция Настройка(ИмяНастройки)Экспорт - ПроверкаИницализации(); + ПроверкаИнициализации(); РазложенноеИмяНастройки = РазобратьИмяНастройки(ИмяНастройки); ИскомоеПриложение = НастройкиПриложения(РазложенноеИмяНастройки.ИмяПриложения); @@ -109,7 +109,7 @@ // Процедура ЗаписатьНастройку(ИмяНастройки, Значение) Экспорт - ПроверкаИницализации(); + ПроверкаИнициализации(); РазложенноеИмяНастройки = РазобратьИмяНастройки(ИмяНастройки); ИскомоеПриложение = НастройкиПриложения(РазложенноеИмяНастройки.ИмяПриложения); @@ -133,7 +133,7 @@ // Процедура ЗаписатьНастройкиПриложения(ИмяПриложения, Значение) Экспорт - ПроверкаИницализации(); + ПроверкаИнициализации(); Если ПустаяСтрока(ИмяПриложения) Тогда @@ -161,7 +161,7 @@ // Процедура УдалитьНастройкиПриложения(ИмяПриложения) Экспорт - ПроверкаИницализации(); + ПроверкаИнициализации(); Если ПустаяСтрока(ИмяПриложения) Тогда @@ -179,15 +179,15 @@ // Служебный функционал /////////////////////////////////////////////////////////////////// -Функция ПроверкаИницализации() +Функция ПроверкаИнициализации() - Если Не ИнициализацияВыпонена Тогда + Если Не ИнициализацияВыполнена Тогда ВызватьИсключение "Необходимо выполнить инициализацию" КонецЕсли; -КонецФункции // ПроверкаИницализации() +КонецФункции // ПроверкаИнициализации() Функция РазобратьИмяНастройки(Знач ИмяНастройки) @@ -233,7 +233,7 @@ // Процедура ПриСозданииОбъекта(КаталогРепозитория, ОбновлятьКонф = ЛОЖЬ) - ИнициализацияВыпонена = ЛОЖЬ; + ИнициализацияВыполнена = ЛОЖЬ; НовыйКонфиг = ЛОЖЬ; Конфигурация = Неопределено; АдресКонфигурационногоФайла = ""; @@ -264,6 +264,6 @@ КонецЕсли; - ИнициализацияВыпонена = ИСТИНА; + ИнициализацияВыполнена = ИСТИНА; КонецПроцедуры // ПриСозданииОбъекта() \ No newline at end of file diff --git a/src/Модули/ТипыФайлов.os b/src/Модули/ТипыФайлов.os index 6f10044..cd71349 100644 --- a/src/Модули/ТипыФайлов.os +++ b/src/Модули/ТипыФайлов.os @@ -9,7 +9,7 @@ // ЭтоФайлИсходников // Возвращает истину, если файл является файлом исходных кодов // Параметры: -// Файл - Строка - Полный путь к файлу +// Файл - Файл - Полный путь к файлу // // Возвращаемое значение: // Булево - Признак @@ -29,7 +29,7 @@ // ЭтоФайлОписанияКонфигурации // Возвращает истину, если файл является файлом описания конфигурации // Параметры: -// Файл - Строка - Полный путь к файлу +// Файл - Файл - Полный путь к файлу // // Возвращаемое значение: // Булево - Признак @@ -49,7 +49,7 @@ // ЭтоФайлОписанияКонфигурацииEDT // Возвращает истину, если файл является файлом описания конфигурации в формате EDT // Параметры: -// Файл - Строка - Полный путь к файлу +// Файл - Файл - Полный путь к файлу // // Возвращаемое значение: // Булево - Признак @@ -66,10 +66,102 @@ КонецФункции -// ЭтоФайлОписанияКонфигурации +// ЭтоФайлОбычнойФормы +// Возвращает истину, если файл является файлом обычной формы +// Параметры: +// Файл - Файл - Полный путь к файлу +// +// Возвращаемое значение: +// Булево - Признак +// +Функция ЭтоФайлОбычнойФормы(Файл) Экспорт + + Если ПустаяСтрока(Файл.Расширение) Тогда + + Возврат Ложь; + + КонецЕсли; + + Возврат СтрСравнить(Файл.Имя, "Form.bin") = 0; + +КонецФункции // ЭтоФайлОбычнойФормы + +// ЭтоФайлОписанияМетаданных +// Возвращает истину, если файл является описанием метаданных, исключая файлы описания конфигурации. +// Параметры: +// Файл - Файл - Полный путь к файлу +// +// Возвращаемое значение: +// Булево - Признак +// +Функция ЭтоФайлОписанияМетаданных(Файл) Экспорт + + Если ПустаяСтрока(Файл.Расширение) Тогда + + Возврат Ложь; + + КонецЕсли; + + Возврат ЭтоФайлОписанияМетаданныхКонфигуратора(Файл) ИЛИ ЭтоФайлОписанияМетаданныхEDT(Файл); + +КонецФункции // ЭтоФайлОписанияМетаданных + +// ЭтоФайлОписанияМетаданныхКонфигуратора +// Возвращает истину, если файл является описанием метаданных конфигуратора, исключая Configuration.xml +// Параметры: +// Файл - Файл - Полный путь к файлу +// +// Возвращаемое значение: +// Булево - Признак +// +Функция ЭтоФайлОписанияМетаданныхКонфигуратора(Файл) Экспорт + + Если ПустаяСтрока(Файл.Расширение) Тогда + + Возврат Ложь; + + КонецЕсли; + + Если ЭтоФайлОписанияКонфигурации(Файл) Тогда + + Возврат Ложь; + + КонецЕсли; + + Возврат СтрСравнить(Файл.Расширение, ".xml") = 0; + +КонецФункции // ЭтоФайлОписанияМетаданныхКонфигуратора + +// ЭтоФайлОписанияМетаданныхEDT +// Возвращает истину, если файл является описанием метаданных конфигуратора, исключая Configuration.mdo +// Параметры: +// Файл - Файл - Полный путь к файлу +// +// Возвращаемое значение: +// Булево - Признак +// +Функция ЭтоФайлОписанияМетаданныхEDT(Файл) Экспорт + + Если ПустаяСтрока(Файл.Расширение) Тогда + + Возврат Ложь; + + КонецЕсли; + + Если ЭтоФайлОписанияКонфигурацииEDT(Файл) Тогда + + Возврат Ложь; + + КонецЕсли; + + Возврат СтрСравнить(Файл.Расширение, ".mdo") = 0; + +КонецФункции // ЭтоФайлОписанияМетаданныхEDT + +// ЭтоФайлОписанияФормы // Возвращает истину, если файл является файлом описания формы // Параметры: -// Файл - Строка - Полный путь к файлу +// Файл - Файл - Полный путь к файлу // // Возвращаемое значение: // Булево - Признак @@ -86,10 +178,10 @@ КонецФункции -// ЭтоФайлОписанияКонфигурации +// ЭтоФайлОписанияФормыEDT // Возвращает истину, если файл является файлом описания формы в формате EDT // Параметры: -// Файл - Строка - Полный путь к файлу +// Файл - Файл - Полный путь к файлу // // Возвращаемое значение: // Булево - Признак @@ -104,4 +196,4 @@ Возврат СтрСравнить(Файл.Имя, "Form.form") = 0; -КонецФункции +КонецФункции \ No newline at end of file diff --git a/src/СценарииОбработки/ДобавлениеПробеловПередКлючевымиСловами.os b/src/СценарииОбработки/ДобавлениеПробеловПередКлючевымиСловами.os index 09c78f6..be710e2 100644 --- a/src/СценарииОбработки/ДобавлениеПробеловПередКлючевымиСловами.os +++ b/src/СценарииОбработки/ДобавлениеПробеловПередКлючевымиСловами.os @@ -27,7 +27,7 @@ // * Лог - Объект - Текущий лог // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * КаталогРепозитория - Строка - Адрес каталога репозитория -// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария // и которые необходимо дообработать // // Возвращаемое значение: diff --git a/src/СценарииОбработки/ЗапретИспользованияПерейти.os b/src/СценарииОбработки/ЗапретИспользованияПерейти.os index 30a331d..d22e31b 100644 --- a/src/СценарииОбработки/ЗапретИспользованияПерейти.os +++ b/src/СценарииОбработки/ЗапретИспользованияПерейти.os @@ -28,7 +28,7 @@ // * Лог - Объект - Текущий лог // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * КаталогРепозитория - Строка - Адрес каталога репозитория -// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария // и которые необходимо дообработать // // Возвращаемое значение: diff --git a/src/СценарииОбработки/КорректировкаXMLФорм.os b/src/СценарииОбработки/КорректировкаXMLФорм.os index 920731f..95be56e 100644 --- a/src/СценарииОбработки/КорректировкаXMLФорм.os +++ b/src/СценарииОбработки/КорректировкаXMLФорм.os @@ -26,7 +26,7 @@ // * Лог - Объект - Текущий лог // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * КаталогРепозитория - Строка - Адрес каталога репозитория -// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария // и которые необходимо дообработать // // Возвращаемое значение: diff --git a/src/СценарииОбработки/ОтключениеПолнотекстовогоПоиска.os b/src/СценарииОбработки/ОтключениеПолнотекстовогоПоиска.os new file mode 100644 index 0000000..b949183 --- /dev/null +++ b/src/СценарииОбработки/ОтключениеПолнотекстовогоПоиска.os @@ -0,0 +1,274 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Служебный модуль с реализацией сценариев обработки файлов <ОтключениеПолнотекстовогоПоиска> +// +/////////////////////////////////////////////////////////////////////////////// + +Перем ЗначениеПоиска; + +// ИмяСценария +// Возвращает имя сценария обработки файлов +// +// Возвращаемое значение: +// Строка - Имя текущего сценария обработки файлов +// +Функция ИмяСценария() Экспорт + + Возврат "ОтключениеПолнотекстовогоПоиска"; + +КонецФункции // ИмяСценария() + +// ПолучитьСтандартныеНастройкиСценария +// Возвращает структуру настроек сценария +// +// Возвращаемое значение: +// Структура - Структура с настройками сценария +// * ИмяСценария - Строка - Имя, с которым сохранятся настройки +// * Настройка - Соответствие - настройки +// +Функция ПолучитьСтандартныеНастройкиСценария() Экспорт + + НастройкиСценария = Новый Соответствие; + ПутьИРеквизиты = Новый Соответствие; + МассивРеквизитов = Новый Массив; + МассивРеквизитов.Добавить("Номер"); + МассивРеквизитов.Добавить("ТабличнаяЧасть1.Реквизит"); + + ПутьИРеквизиты.Вставить("src\_example.xml", МассивРеквизитов); + ПутьИРеквизиты.Вставить("src\_example2.xml", Новый Массив); + + НастройкиСценария.Вставить("МетаданныеДляИсключения", ПутьИРеквизиты); + + Возврат Новый Структура("ИмяСценария, Настройка", ИмяСценария(), НастройкиСценария); + +КонецФункции + +// ОбработатьФайл +// Выполняет обработку файла +// +// Параметры: +// АнализируемыйФайл - Файл - Файл из журнала git для анализа +// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория +// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать +// * Лог - Объект - Текущий лог +// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс +// * КаталогРепозитория - Строка - Адрес каталога репозитория +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария +// и которые необходимо дообработать +// +// Возвращаемое значение: +// Булево - Признак выполненной обработки файла +// +Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт + + Лог = ДополнительныеПараметры.Лог; + НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария()); + + Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлОписанияМетаданных(АнализируемыйФайл) Тогда + + МетаданныеДляИсключения = НастройкиСценария.Получить("МетаданныеДляИсключения"); + + ОтносительныйПуть = СтрЗаменить(АнализируемыйФайл.ПолноеИмя, ДополнительныеПараметры.КаталогРепозитория, ""); + МассивРеквизитов = МетаданныеДляИсключения.Получить(ОтносительныйПуть); + + Если МассивРеквизитов = Неопределено ИЛИ ЗначениеЗаполнено(МассивРеквизитов) Тогда + //Неопределено - нет файла в исключении, массив не пустой - исключение только по реквизитам + Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); + + ЭтоEDT = ТипыФайлов.ЭтоФайлОписанияМетаданныхEDT(АнализируемыйФайл); + + Если ОтключитьПолнотекстовыйПоиск(АнализируемыйФайл.ПолноеИмя, МассивРеквизитов, ЭтоEDT) Тогда + + ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя); + + КонецЕсли; + + Возврат Истина; + + КонецЕсли; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции // ОбработатьФайл() + +Функция ОтключитьПолнотекстовыйПоиск(Знач ИмяФайла, МассивРеквизитов, ЭтоEDT) + + ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла); + СодержимоеФайла = ТекстФайла; + + Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда + + Возврат Ложь; + + КонецЕсли; + + Если ЗначениеЗаполнено(МассивРеквизитов) Тогда + + // получение текста файла до табличных частей + Регексп = Новый РегулярноеВыражение("(<\?xml version[\w\W]+?)(|<\/mdclass:Document>)([\w\W]+)?"); + Регексп.ИгнорироватьРегистр = Истина; + Регексп.Многострочный = Истина; + Совпадения = Регексп.НайтиСовпадения(СодержимоеФайла); + + Если Совпадения.Количество() = 0 Тогда + + Возврат Ложь; + + КонецЕсли; + + СекцияДоТаблиц = Совпадения[0].Группы[1].Значение; + ЗакрывающаяСекция = Совпадения[0].Группы[2].Значение; + СекцияТаблиц = Совпадения[0].Группы[3].Значение; + + СекцияДоТаблиц = ОбработатьСтандартныеАтрибуты(СекцияДоТаблиц, МассивРеквизитов); + СекцияДоТаблиц = ОбработатьРеквизиты(СекцияДоТаблиц, МассивРеквизитов); + + ЕстьСекцияТаблиц = СекцияТаблиц <> ""; + + Если ЕстьСекцияТаблиц Тогда + + ОбработатьТабличныеЧасти(СекцияТаблиц, МассивРеквизитов, ЭтоEDT); + + КонецЕсли; + + СодержимоеФайла = СекцияДоТаблиц + ?(ЕстьСекцияТаблиц, ЗакрывающаяСекция + СекцияТаблиц, ЗакрывающаяСекция); + + Иначе // Обработается весь файл целиком + + СодержимоеФайла = ЗаменитьПоиск(СодержимоеФайла); + + КонецЕсли; + + Если СтрСравнить(ТекстФайла, СодержимоеФайла) = 0 Тогда + + Возврат Ложь; + + КонецЕсли; + + ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла); + + Возврат Истина; + +КонецФункции + +Функция ЗаменитьПоиск(СодержимоеФайла, Знач ПоискРеквизита = "") + + ПолнотекстовыйПоиск = "(<(?:xr\:)?fullTextSearch>)(Use)(<\/(?:xr\:)?fullTextSearch>)"; + Выражение = ПоискРеквизита + ПолнотекстовыйПоиск; + + Регексп = Новый РегулярноеВыражение(Выражение); + Регексп.ИгнорироватьРегистр = Истина; + Регексп.Многострочный = Истина; + ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла); + + Если ГруппыИндексов.Количество() <> 0 Тогда + + Если ЗначениеЗаполнено(ПоискРеквизита) Тогда + + СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1$2DontUse$4"); + + Иначе + + СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1DontUse$3"); + + КонецЕсли; + + КонецЕсли; + + Возврат СодержимоеФайла; + +КонецФункции + +Функция ОбработатьСтандартныеАтрибуты(СодержимоеФайла, Исключения) + + СтандартныеАтрибуты = "Attribute name=""([а-яa-zA-ZА-Я0-9_]+)"">[\w\W]+?(((Use)<\/xr:FullTextSearch>)|<\/xr:StandardAttribute>)"; + + Регексп = Новый РегулярноеВыражение(СтандартныеАтрибуты); + Регексп.ИгнорироватьРегистр = Истина; + Регексп.Многострочный = Истина; + КоллекцияСовпадений = Регексп.НайтиСовпадения(СодержимоеФайла); + + Для Каждого Совпадение Из КоллекцияСовпадений Цикл + + Если Совпадение.Группы[4].Значение = ЗначениеПоиска.Use И Исключения.Найти(Совпадение.Группы[1].Значение) = Неопределено Тогда + + ПоискРеквизита = СтрШаблон("(Attribute name=""%1"">[\w\W]+?)", Совпадение.Группы[1].Значение); + СодержимоеФайла = ЗаменитьПоиск(СодержимоеФайла, ПоискРеквизита); + + КонецЕсли; + + КонецЦикла; + + Возврат СодержимоеФайла; + +КонецФункции + +Функция ОбработатьРеквизиты(СодержимоеФайла, Исключения) + + ПоискРеквизиты = "([а-яa-zA-ZА-Я0-9_]+)<\/Name>[\w\W]+?((Use)<\/FullTextSearch>)|<\/Properties>|<\/attributes>"; + + Регексп = Новый РегулярноеВыражение(ПоискРеквизиты); + Регексп.ИгнорироватьРегистр = Истина; + Регексп.Многострочный = Истина; + КоллекцияСовпадений = Регексп.НайтиСовпадения(СодержимоеФайла); + + Для Каждого Совпадение Из КоллекцияСовпадений Цикл + + Если Совпадение.Группы[3].Значение = ЗначениеПоиска.Use И Исключения.Найти(Совпадение.Группы[1].Значение) = Неопределено Тогда + + ПоискРеквизита = СтрШаблон("(%1<\/Name>[\w\W]+?)", Совпадение.Группы[1].Значение); + СодержимоеФайла = ЗаменитьПоиск(СодержимоеФайла, ПоискРеквизита); + + КонецЕсли; + + КонецЦикла; + + Возврат СодержимоеФайла; + +КонецФункции + +Функция ОбработатьТабличныеЧасти(ТекстФайла, Исключения, ЭтоEDT) + + Если ЭтоEDT Тогда + + Шаблон = "<\/producedTypes>\s+([а-яa-zA-ZА-Я0-9_]+)<\/name>|()([а-яa-zA-ZА-Я0-9_]+)<\/Name>|()(Use)<\/FullTextSearch>"; + ШаблонЗамены = "(<\/producedTypes>\s+%1<\/name>[\w\W]+?%2<\/Name>[\w\W]+?)"; + + Иначе + + Шаблон = "TabularSection\.[\w\W]+?\.([\w\W]+?)""|()([а-яa-zA-ZА-Я0-9_]+)<\/Name>|()(Use)<\/FullTextSearch>"; + ШаблонЗамены = "(TabularSection\.[\w\W]+?\.%1""[\w\W]+?%2<\/Name>[\w\W]+?)"; + + КонецЕсли; + + Регексп = Новый РегулярноеВыражение(Шаблон); + Регексп.ИгнорироватьРегистр = Истина; + Регексп.Многострочный = Истина; + КоллекцияСовпадений = Регексп.НайтиСовпадения(ТекстФайла); + + Таблица = ""; + Реквизит = ""; + + Для Каждого Совпадение Из КоллекцияСовпадений Цикл + + Таблица = ?(ЗначениеЗаполнено(Совпадение.Группы[1].Значение), Совпадение.Группы[1].Значение, Таблица); + Реквизит = ?(ЗначениеЗаполнено(Совпадение.Группы[3].Значение), Совпадение.Группы[3].Значение, Реквизит); + ИспользованиеПоиска = Совпадение.Группы[4].Значение; + + Если ЗначениеЗаполнено(ИспользованиеПоиска) И Исключения.Найти(Таблица + "." + Реквизит) = Неопределено Тогда + + ПолнотекстовыйПоиск = СтрШаблон(ШаблонЗамены, Таблица, Реквизит); + + ТекстФайла = ЗаменитьПоиск(ТекстФайла, ПолнотекстовыйПоиск) + + КонецЕсли; + + КонецЦикла; + + Возврат ТекстФайла; + +КонецФункции + +ЗначениеПоиска = Новый Структура ("Use, DontUse", "Use", "DontUse"); diff --git a/src/СценарииОбработки/ПроверкаДублейПроцедурИФункций.os b/src/СценарииОбработки/ПроверкаДублейПроцедурИФункций.os index 755a6f3..79cd235 100644 --- a/src/СценарииОбработки/ПроверкаДублейПроцедурИФункций.os +++ b/src/СценарииОбработки/ПроверкаДублейПроцедурИФункций.os @@ -27,7 +27,7 @@ // * Лог - Объект - Текущий лог // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * КаталогРепозитория - Строка - Адрес каталога репозитория -// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария // и которые необходимо дообработать // // Возвращаемое значение: @@ -67,7 +67,7 @@ ТекстОшибки = ""; - ШаблонПоиска = Новый РегулярноеВыражение("^\s*(?:Процедура|Функция|procedure|function)\s+?([а-яА-ЯёЁ0-9_\w]+?)\s*?\(\)"); + ШаблонПоиска = Новый РегулярноеВыражение("^\s*(?:Процедура|Функция|procedure|function)\s+?([а-яА-ЯёЁ0-9_\w]+?)\s*?\("); ШаблонПоиска.Многострочный = Истина; ШаблонПоиска.ИгнорироватьРегистр = Истина; diff --git a/src/СценарииОбработки/ПроверкаКорректностиОбластей.os b/src/СценарииОбработки/ПроверкаКорректностиОбластей.os index 9ad6dab..1788315 100644 --- a/src/СценарииОбработки/ПроверкаКорректностиОбластей.os +++ b/src/СценарииОбработки/ПроверкаКорректностиОбластей.os @@ -28,7 +28,7 @@ // * Лог - Объект - Текущий лог // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * КаталогРепозитория - Строка - Адрес каталога репозитория -// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария // и которые необходимо дообработать // // Возвращаемое значение: diff --git a/src/СценарииОбработки/РазборОбычныхФормНаИсходники.os b/src/СценарииОбработки/РазборОбычныхФормНаИсходники.os index c9545a2..3a4713e 100644 --- a/src/СценарииОбработки/РазборОбычныхФормНаИсходники.os +++ b/src/СценарииОбработки/РазборОбычныхФормНаИсходники.os @@ -31,7 +31,7 @@ // * Лог - Объект - Текущий лог // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * КаталогРепозитория - Строка - Адрес каталога репозитория -// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария // и которые необходимо дообработать // // Возвращаемое значение: @@ -42,7 +42,7 @@ Лог = ДополнительныеПараметры.Лог; НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария()); - Если ЭтоФайлОбычнойФормы(АнализируемыйФайл) Тогда + Если ТипыФайлов.ЭтоФайлОбычнойФормы(АнализируемыйФайл) Тогда Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); @@ -78,18 +78,6 @@ КонецФункции // ОбработатьФайл() -Функция ЭтоФайлОбычнойФормы(Файл) - - Если ПустаяСтрока(Файл.Расширение) Тогда - - Возврат Ложь; - - КонецЕсли; - - Возврат СтрСравнить(Файл.Имя, "Form.bin") = 0; - -КонецФункции - Функция ПодготовитьКаталогВыгрузки(КаталогИсходныхФайлов, ОбрабатываемыйФайл, ДополнительныеПараметры) ФайлУдален = НЕ ОбрабатываемыйФайл.Существует(); diff --git a/src/СценарииОбработки/РазборОтчетовОбработокРасширений.os b/src/СценарииОбработки/РазборОтчетовОбработокРасширений.os index 478a748..5f7845b 100644 --- a/src/СценарииОбработки/РазборОтчетовОбработокРасширений.os +++ b/src/СценарииОбработки/РазборОтчетовОбработокРасширений.os @@ -27,6 +27,24 @@ КонецФункции // ИмяСценария() +// ПолучитьСтандартныеНастройкиСценария +// Возвращает структуру настроек сценария +// +// Возвращаемое значение: +// Структура - Структура с настройками сценария +// * ИмяСценария - Строка - Имя, с которым сохранятся настройки +// * Настройка - Соответствие - настройки +// +Функция ПолучитьСтандартныеНастройкиСценария() Экспорт + + НастройкиСценария = Новый Соответствие; + НастройкиСценария.Вставить("ИспользоватьНастройкиПоУмолчанию", Истина); + НастройкиСценария.Вставить("ВерсияПлатформы", ""); + + Возврат Новый Структура("ИмяСценария, Настройка", ИмяСценария(), НастройкиСценария); + +КонецФункции + // ОбработатьФайл // Выполняет обработку файла // @@ -37,7 +55,7 @@ // * Лог - Объект - Текущий лог // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * КаталогРепозитория - Строка - Адрес каталога репозитория -// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария // и которые необходимо дообработать // // Возвращаемое значение: diff --git a/src/СценарииОбработки/СинхронизацияОбъектовМетаданныхИФайлов.os b/src/СценарииОбработки/СинхронизацияОбъектовМетаданныхИФайлов.os index b5819d8..dd2c43a 100644 --- a/src/СценарииОбработки/СинхронизацияОбъектовМетаданныхИФайлов.os +++ b/src/СценарииОбработки/СинхронизацияОбъектовМетаданныхИФайлов.os @@ -26,7 +26,7 @@ // * Лог - Объект - Текущий лог // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * КаталогРепозитория - Строка - Адрес каталога репозитория -// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария // и которые необходимо дообработать // // Возвращаемое значение: diff --git a/src/СценарииОбработки/СортировкаДереваМетаданных.os b/src/СценарииОбработки/СортировкаДереваМетаданных.os index 21e5979..e6629c9 100644 --- a/src/СценарииОбработки/СортировкаДереваМетаданных.os +++ b/src/СценарииОбработки/СортировкаДереваМетаданных.os @@ -26,7 +26,7 @@ // * Лог - Объект - Текущий лог // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * КаталогРепозитория - Строка - Адрес каталога репозитория -// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария // и которые необходимо дообработать // // Возвращаемое значение: @@ -133,7 +133,8 @@ Возврат Ложь; КонецЕсли; - + + СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СтрокаЗамены + "$3"); ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла); Возврат Истина; @@ -208,10 +209,7 @@ КонецЕсли; СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СокрЛП(СтрокаЗамены) + Символы.ПС + "$3"); - ЗаписьТекста = Новый ЗаписьТекста; - ЗаписьТекста.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM); - ЗаписьТекста.Записать(СодержимоеФайла); - ЗаписьТекста.Закрыть(); + ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла); Возврат Истина; diff --git a/src/СценарииОбработки/УдалениеДублейМетаданных.os b/src/СценарииОбработки/УдалениеДублейМетаданных.os index 9c863f6..31b84a9 100644 --- a/src/СценарииОбработки/УдалениеДублейМетаданных.os +++ b/src/СценарииОбработки/УдалениеДублейМетаданных.os @@ -26,7 +26,7 @@ // * Лог - Объект - Текущий лог // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * КаталогРепозитория - Строка - Адрес каталога репозитория -// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария // и которые необходимо дообработать // // Возвращаемое значение: diff --git a/src/СценарииОбработки/УдалениеЛишнихКонцевыхПробелов.os b/src/СценарииОбработки/УдалениеЛишнихКонцевыхПробелов.os index dc120f1..db5fd5f 100644 --- a/src/СценарииОбработки/УдалениеЛишнихКонцевыхПробелов.os +++ b/src/СценарииОбработки/УдалениеЛишнихКонцевыхПробелов.os @@ -26,7 +26,7 @@ // * Лог - Объект - Текущий лог // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * КаталогРепозитория - Строка - Адрес каталога репозитория -// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария // и которые необходимо дообработать // // Возвращаемое значение: diff --git a/src/СценарииОбработки/УдалениеЛишнихПустыхСтрок.os b/src/СценарииОбработки/УдалениеЛишнихПустыхСтрок.os index c1d6962..0e9a85f 100644 --- a/src/СценарииОбработки/УдалениеЛишнихПустыхСтрок.os +++ b/src/СценарииОбработки/УдалениеЛишнихПустыхСтрок.os @@ -26,7 +26,7 @@ // * Лог - Объект - Текущий лог // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * КаталогРепозитория - Строка - Адрес каталога репозитория -// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария // и которые необходимо дообработать // // Возвращаемое значение: diff --git a/src/СценарииОбработки/ШаблонСценария.os b/src/СценарииОбработки/ШаблонСценария.os index 9b0b343..b714e8f 100644 --- a/src/СценарииОбработки/ШаблонСценария.os +++ b/src/СценарииОбработки/ШаблонСценария.os @@ -17,6 +17,28 @@ КонецФункции // ИмяСценария() +// ПолучитьСтандартныеНастройкиСценария +// Возвращает структуру настроек сценария +// +// Возвращаемое значение: +// Структура - Структура с настройками сценария +// * ИмяСценария - Строка - Имя, с которым сохранятся настройки +// * Настройка - Соответствие - настройки +// +Функция ПолучитьСтандартныеНастройкиСценария() Экспорт + + ВызватьИсключение "Настройки отсутствуют"; + + НастройкиСценария = Новый Соответствие; + НастройкиСценария.Вставить("ИспользоватьПоУмолчанию", Истина); + НастройкиСценария.Вставить("Версия", ""); + НастройкиСценария.Вставить("КоличествоПопыток", 5); + НастройкиСценария.Вставить("МассивПараметров", Новый Массив); + + Возврат Новый Структура("ИмяСценария, Настройка", ИмяСценария(), НастройкиСценария); + +КонецФункции + // ОбработатьФайл // Выполняет обработку файла // @@ -27,8 +49,9 @@ // * Лог - Объект - Текущий лог // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * КаталогРепозитория - Строка - Адрес каталога репозитория -// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария // и которые необходимо дообработать +// * ИзмененныеКаталоги - Массив - Каталоги / файлы которые необходимо добавить в индекс // // Возвращаемое значение: // Булево - Признак выполненной обработки файла @@ -39,21 +62,41 @@ Лог = ДополнительныеПараметры.Лог; НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария()); + // анализ файла без изменения его содержимого Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); - ШаблоннаяОбрабткаФайла(АнализируемыйФайл); - + ШаблоннаяОбработкаФайла(АнализируемыйФайл); + Возврат Истина; КонецЕсли; + // анализ файла с изменением его содержимого + Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда + + Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); + + Если ШаблоннаяОбработкаФайлаСИзменением(АнализируемыйФайл) Тогда + + //Добавим измененный каталог или файл в индекс, чтобы он закоммитился с изменениями + ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя); + + //Добавим измененный файл в журнал изменений без добавления в индекс, чтобы сценарии прошли снова + ДополнительныеПараметры.ФайлыДляПостОбработки.Добавить(АнализируемыйФайл.ПолноеИмя); + + Возврат Истина; + + КонецЕсли; + + КонецЕсли; + Возврат Ложь; КонецФункции // ОбработатьФайл() -Процедура ШаблоннаяОбрабткаФайла(ИмяФайла); +Процедура ШаблоннаяОбработкаФайла(ИмяФайла) СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла); @@ -63,6 +106,26 @@ КонецЕсли; - ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла); + Если СодержимоеФайла = СодержимоеФайла Тогда + + ВызватьИсключение "Содержимое файла равно содержимому файла"; + + КонецЕсли; + +КонецПроцедуры -КонецПроцедуры; \ No newline at end of file +Функция ШаблоннаяОбработкаФайлаСИзменением(ИмяФайла) + + СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла); + + Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда + + Возврат Ложь; + + КонецЕсли; + + ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла + "1"); + + Возврат Истина; + +КонецФункции \ No newline at end of file diff --git a/tests/fixtures/Документ.mdo b/tests/fixtures/Документ.mdo new file mode 100644 index 0000000..84118fb --- /dev/null +++ b/tests/fixtures/Документ.mdo @@ -0,0 +1,105 @@ + + + + + + + + + + Документ + + ru + Документ + + true + Document.Документ.StandardAttribute.Number + Use + Managed + Use + String + 9 + Variable + true + true + true + true + + Реквизит + + ru + Реквизит + + + String + + 10 + + + Use + + + + + + + ТабличнаяЧасть + + ru + Табличная часть + + + Реквизит + + ru + Реквизит + + + String + + 10 + + + Use + + + Реквизит1 + + ru + Реквизит1 + + + String + + 10 + + + Use + + + + + + + + ТабличнаяЧасть1 + + ru + Табличная часть1 + + + Реквизит + + ru + Реквизит + + + String + + 10 + + + Use + + + diff --git a/tests/fixtures/Документ.xml b/tests/fixtures/Документ.xml new file mode 100644 index 0000000..20fbe49 --- /dev/null +++ b/tests/fixtures/Документ.xml @@ -0,0 +1,376 @@ + + + + + + 0a63ee71-6357-4a50-b082-35f60b3be0e0 + 10bc61a2-ef43-4627-9748-ae6089c9bde1 + + + e1fe1cb5-e8cb-441e-b2e3-a72ee43a4038 + 6e4dfc1f-8cc4-4fd9-9331-532a9b25b94a + + + 86597e09-2004-4fcc-9c8f-7b1e35aa1431 + 0dc19544-4f64-4479-ad60-e06dda1298ee + + + 855d48d4-5dce-4629-9998-d7a693d9d8d2 + c74d8db3-5efd-4832-b863-6f8678445184 + + + 0cb5077c-9a73-4650-b93c-9d489b897d3b + 5d3b3e0c-fb2e-45a8-b528-d257f903e7bc + + + + Документ + + + ru + Документ + + + Документ + true + + String + 10 + Fixed + Year + true + true + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + + Document.ВводНачальныхОстатков + Document.РКО + Document.ПКО + Document.АвансовыйОтчет + Document.ВозмещениеШтрафы + + + Document.РКО.StandardAttribute.Number + + Use + Begin + Use + Directly + Document.РКО.Form.ФормаДокумента + Document.РКО.Form.ФормаСписка + Document.РКО.Form.ФормаСписка + + + + Allow + Deny + AutoDeleteOff + WriteModified + AutoFill + + false + false + true + + Automatic + Use + + + + + + Auto + DontUse + + + + + UID + + + ru + UID + + + + + xs:string + + 36 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + Index + Use + Use + + + + + Автор + + + ru + Автор + + + + + cfg:CatalogRef.Пользователи + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + Index + DontUse + Use + + +
ФормаДокумента
+
ФормаСписка
+ + + + 80865b81-ba79-4e7f-bbb6-c9817e08f4dd + 3608b01d-e050-453f-ae0a-93e3eea243c3 + + + 7720174e-1f6c-4639-98d8-9a488f6488a5 + 73fe98f8-8875-49ef-ac49-37806daf575b + + + + ТабличнаяЧасть1 + + + ru + ТабличнаяЧасть1 + + + ТабличнаяЧасть1 + + DontCheck + + + + + Субконто + + + ru + Субконто + + + + + cfg:CatalogRef.ВидыОпераций + cfg:CatalogRef.Сотрудники + cfg:CatalogRef.СтатьиЗатрат + cfg:CatalogRef.Пользователи + cfg:CatalogRef.Контрагенты + cfg:CatalogRef.ЕдиницыИзмерения + cfg:CatalogRef.БанковскиеСчета + cfg:CatalogRef.Номенклатура + cfg:CatalogRef.Кассы + cfg:CatalogRef.Машины + cfg:CatalogRef.Подразделения + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + Index + Use + Use + + + + +
+
+
\ No newline at end of file diff --git a/tests/fixtures/ПроверкаДублейПроцедурСПараметрами.bsl b/tests/fixtures/ПроверкаДублейПроцедурСПараметрами.bsl new file mode 100644 index 0000000..d11e38d --- /dev/null +++ b/tests/fixtures/ПроверкаДублейПроцедурСПараметрами.bsl @@ -0,0 +1,16 @@ + +Процедура РадномныеВычисления (парам1) +КонецПроцедуры; + +Функция РадномныеВычисления() Экспорт +КонецФункции + +Процедура Изменить(Парам1, Парам2) +КонецПроцедуры + +Процедура Изменить(Парам 1 = Неопределено) +КонецФункции + +Функция _Функ1() +КонецФункции + diff --git a/tests/ПроверкаСцераниевОбработки.os b/tests/ПроверкаСцераниевОбработки.os index d37870a..9582eb6 100644 --- a/tests/ПроверкаСцераниевОбработки.os +++ b/tests/ПроверкаСцераниевОбработки.os @@ -8,15 +8,19 @@ // Основная точка входа Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт - - юТест = ЮнитТестирование; - - ВсеТесты = Новый Массив; - + + юТест = ЮнитТестирование; + + ВсеТесты = Новый Массив; + ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки"); Возврат ВсеТесты; @@ -28,7 +32,7 @@ Лог = Логирование.ПолучитьЛог(ВремТестер.ИмяЛога()); ВключитьПоказОтладки(); - + МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов; КонецПроцедуры @@ -37,46 +41,81 @@ МенеджерВременныхФайлов.Удалить(); МенеджерВременныхФайлов = Неопределено; + +КонецПроцедуры +Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек() Экспорт + + ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os"); + + СценарийИмеетМетод(ОбъектСценария, НазваниеМетодаНастроек()); + +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек() Экспорт + + ОбъектСценария = ПолучитьСценарий("РазборОтчетовОбработокРасширений.os"); + + СценарийИмеетМетод(ОбъектСценария, НазваниеМетодаНастроек()); + +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки() Экспорт + + ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os"); + + СценарийВозвращаетНастройки(ОбъектСценария, "ОтключениеПолнотекстовогоПоиска"); + +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки() Экспорт + + ОбъектСценария = ПолучитьСценарий("РазборОтчетовОбработокРасширений.os"); + + СценарийВозвращаетНастройки(ОбъектСценария, "РазборОтчетовОбработокРасширений"); + КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение() Экспорт - ОбъектСценария = ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций(); + ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os"); Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурНегативныйТест.bsl")); - - ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "обнаружены неуникальные имена методов"); + СПараметрами = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурСПараметрами.bsl")); + ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "обнаружены неуникальные имена методов"); + ВызываетсяИсключениеСТекстом(ОбъектСценария, СПараметрами, "обнаружены неуникальные имена методов"); + + КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл() Экспорт Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурПоложительныйТест.bsl")); - ОбъектСценария = ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций(); + ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os"); Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки()); Ожидаем.Что(Результат, Истина).ЭтоИстина(); - + КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл() Экспорт Файл = Новый Файл(ПолучитьИмяВременногоФайла("bsl")); - ОбъектСценария = ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций(); + ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os"); Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки()); Ожидаем.Что(Результат, Истина).ЭтоЛожь(); - + КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник() Экспорт Файл = Новый Файл(МенеджерВременныхФайлов.СоздатьФайл("xml")); - ОбъектСценария = ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций(); + ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os"); Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки()); Ожидаем.Что(Результат, Истина).ЭтоЛожь(); - + КонецПроцедуры Процедура ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, ТекстИсключения) @@ -87,20 +126,39 @@ ПараметрыМетода.Добавить(Файл); ПараметрыМетода.Добавить(Файл.Путь); ПараметрыМетода.Добавить(ДополнительныеНастройки); - + Ожидаем.Что(ОбъектСценария).Метод("ОбработатьФайл", ПараметрыМетода).ВыбрасываетИсключение(ТекстИсключения); - + КонецПроцедуры -Функция ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций() +Процедура СценарийИмеетМетод(ОбъектСценария, ИмяМетода) - Сценарий = ОбъединитьПути(КаталогИсходников(), "src", "СценарииОбработки", "ПроверкаДублейПроцедурИФункций.os"); + Рефлектор = Новый Рефлектор; + ЕстьМетод = Рефлектор.МетодСуществует(ОбъектСценария, ИмяМетода); + + Ожидаем.Что(ЕстьМетод, Истина).ЭтоИстина(); + +КонецПроцедуры + +Функция ПолучитьСценарий(ИмяСценария) + + Сценарий = ОбъединитьПути(КаталогИсходников(), "src", "СценарииОбработки", ИмяСценария); ОбъектСценария = ЗагрузитьСценарий(Сценарий); Возврат ОбъектСценария; - + КонецФункции +Процедура СценарийВозвращаетНастройки(ОбъектСценария, ИмяНастройки) + + Рефлектор = Новый Рефлектор; + СтруктураНастроек = Рефлектор.ВызватьМетод(ОбъектСценария, НазваниеМетодаНастроек()); + + Утверждения.ПроверитьРавенство(СтруктураНастроек.ИмяСценария, ИмяНастройки); + Утверждения.ПроверитьРавенство(ТипЗнч(СтруктураНастроек.Настройка), Тип("Соответствие")); + +КонецПроцедуры + Процедура ВключитьПоказОтладки() Лог.УстановитьУровень(УровниЛога.Отладка); КонецПроцедуры @@ -117,11 +175,17 @@ Возврат ОбъединитьПути(ТекущийСценарий().Каталог, ".."); КонецФункции +Функция НазваниеМетодаНастроек() + + Возврат "ПолучитьСтандартныеНастройкиСценария"; + +КонецФункции + Функция ПолучитьДополнительныеНастройки() УправлениеНастройками = Новый НастройкиРепозитория(ТекущийКаталог()); ДополнительныеНастройки = Новый Структура("Лог, УправлениеНастройками", Лог, УправлениеНастройками); Возврат ДополнительныеНастройки; - + КонецФункции diff --git a/v8config.json b/v8config.json index 3d15b2d..8407c97 100644 --- a/v8config.json +++ b/v8config.json @@ -6,6 +6,7 @@ "ДобавлениеПробеловПередКлючевымиСловами.os", "ЗапретИспользованияПерейти.os", "КорректировкаXMLФорм.os", + "ОтключениеПолнотекстовогоПоиска.os", "ПроверкаДублейПроцедурИФункций.os", "ПроверкаКорректностиОбластей.os", "РазборОбычныхФормНаИсходники.os", @@ -17,6 +18,14 @@ "УдалениеЛишнихПустыхСтрок.os" ], "НастройкиСценариев": { + "ОтключениеПолнотекстовогоПоиска": { + "МетаданныеДляИсключения": { + "src\\_example.xml": [ + "Номер" + ], + "src\\_example2.xml": [] + } + }, "РазборОтчетовОбработокРасширений": { "ИспользоватьНастройкиПоУмолчанию": true, "ВерсияПлатформы": ""