forked from bia-tech/precommit4onec
-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add new scenario ПроверкаКорректностиXML #38
Open
Kirill
wants to merge
2
commits into
bia-technologies:develop
Choose a base branch
from
Kirill:develop
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
157 changes: 157 additions & 0 deletions
157
src/СценарииОбработки/ПроверкаДублейУникальныхИдентификаторов.os
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,157 @@ | ||
/////////////////////////////////////////////////////////////////////////////// | ||
// | ||
// Служебный модуль с реализацией сценариев обработки файлов <ПроверкаДублейУникальныхИдентификаторов> | ||
// | ||
/////////////////////////////////////////////////////////////////////////////// | ||
|
||
// Лог - Объект - Текущий лог | ||
Перем Лог; | ||
|
||
// ИмяСценария | ||
// Возвращает имя сценария обработки файлов | ||
// | ||
// Возвращаемое значение: | ||
// Строка - Имя текущего сценария обработки файлов | ||
// | ||
Функция ИмяСценария() Экспорт | ||
|
||
Возврат "ПроверкаДублейУникальныхИдентификаторов"; | ||
|
||
КонецФункции // ИмяСценария() | ||
|
||
// ОбработатьФайл | ||
// Выполняет обработку файла | ||
// | ||
// Параметры: | ||
// АнализируемыйФайл - Файл - Файл из журнала git для анализа | ||
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория | ||
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать | ||
// * Лог - Объект - Текущий лог | ||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс | ||
// * КаталогРепозитория - Строка - Адрес каталога репозитория | ||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария | ||
// и которые необходимо дообработать | ||
// | ||
// Возвращаемое значение: | ||
// Булево - Признак выполненной обработки файла | ||
// | ||
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт | ||
|
||
Лог = ДополнительныеПараметры.Лог; | ||
|
||
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлОписанияМетаданных(АнализируемыйФайл) Тогда | ||
|
||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); | ||
|
||
ПроверитьНаличиеДублейУникальныхИдентификаторов(АнализируемыйФайл, КаталогИсходныхФайлов); | ||
Возврат Истина; | ||
|
||
КонецЕсли; | ||
|
||
Возврат Ложь; | ||
|
||
КонецФункции // ОбработатьФайл() | ||
|
||
Процедура ПроверитьНаличиеДублейУникальныхИдентификаторов(АнализируемыйФайл, КаталогКонфигурации) | ||
|
||
Идентификаторы = ИдентификаторыПроверяемогоФайла(АнализируемыйФайл); | ||
Если Идентификаторы.Количество() = 0 Тогда | ||
Возврат; | ||
КонецЕсли; | ||
|
||
ЭтоEDT = ТипыФайлов.ЭтоФайлОписанияМетаданныхEDT(АнализируемыйФайл); | ||
ПроверяемыеФайлы = ФайлыОписанияМетаданных(КаталогКонфигурации, ЭтоEDT); | ||
Если ПроверяемыеФайлы.Количество() = 0 Тогда | ||
Возврат; | ||
КонецЕсли; | ||
|
||
Для каждого ФайлНаПроверку Из ПроверяемыеФайлы Цикл | ||
|
||
Если ФайлНаПроверку.ПолноеИмя = АнализируемыйФайл.ПолноеИмя Тогда | ||
Продолжить; | ||
КонецЕсли; | ||
|
||
УникальныйИдентификатор = НайтиДубликатыУникальногоИдентификатора(ФайлНаПроверку, Идентификаторы); | ||
Если УникальныйИдентификатор = Неопределено Тогда | ||
Продолжить; | ||
КонецЕсли; | ||
|
||
ТекстОшибки = СтрШаблон("В файле '%1' обнаружен uuid %2 из проверяемого файла %3", | ||
ФайлНаПроверку.ПолноеИмя, УникальныйИдентификатор, АнализируемыйФайл.ПолноеИмя); | ||
Лог.Ошибка(ТекстОшибки); | ||
|
||
ВызватьИсключение ТекстОшибки; | ||
|
||
КонецЦикла; | ||
|
||
КонецПроцедуры | ||
|
||
Функция ИдентификаторыПроверяемогоФайла(АнализируемыйФайл) | ||
|
||
Идентификаторы = Новый Массив; | ||
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(АнализируемыйФайл.ПолноеИмя); | ||
Если ПустаяСтрока(ТекстМодуля) Тогда | ||
Возврат Идентификаторы; | ||
КонецЕсли; | ||
|
||
ТекстРегулярногоВыряжения = ТекстРегулярногоВыряжения(); | ||
ШаблонПоиска = Новый РегулярноеВыражение(ТекстРегулярногоВыряжения); | ||
ШаблонПоиска.Многострочный = Ложь; | ||
ШаблонПоиска.ИгнорироватьРегистр = Истина; | ||
|
||
Совпадения = ШаблонПоиска.НайтиСовпадения(ТекстМодуля); | ||
Если Совпадения.Количество() = 0 Тогда | ||
Возврат Идентификаторы; | ||
КонецЕсли; | ||
|
||
Для каждого Совпадение Из Совпадения Цикл | ||
Если Совпадение.Группы.Количество() < 2 Тогда | ||
Продолжить; | ||
КонецЕсли; | ||
НайденныйУникальныйИдентификатор = Совпадение.Группы[1].Значение; | ||
Идентификаторы.Добавить(НайденныйУникальныйИдентификатор); | ||
КонецЦикла; | ||
|
||
Возврат Идентификаторы; | ||
|
||
КонецФункции | ||
|
||
Функция ФайлыОписанияМетаданных(КаталогКонфигурации, ЭтоEDT) | ||
|
||
ФайлыОписания = Новый Массив; | ||
ФильтрФайлов = ?(ЭтоEDT, "*.mdo", "*.xml"); | ||
ФайлыНаПроверку = НайтиФайлы(КаталогКонфигурации, ФильтрФайлов, Истина); | ||
Для каждого Файл Из ФайлыНаПроверку Цикл | ||
Если Не Файл.Существует() Или | ||
Не ТипыФайлов.ЭтоФайлОписанияМетаданных(Файл) Тогда | ||
Продолжить; | ||
КонецЕсли; | ||
ФайлыОписания.Добавить(Файл); | ||
КонецЦикла; | ||
|
||
Возврат ФайлыОписания; | ||
|
||
КонецФункции | ||
|
||
Функция НайтиДубликатыУникальногоИдентификатора(АнализируемыйФайл, УникальныеИдентификаторы) | ||
|
||
ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(АнализируемыйФайл.ПолноеИмя); | ||
Если ПустаяСтрока(ТекстФайла) Тогда | ||
Возврат Неопределено; | ||
КонецЕсли; | ||
|
||
Для каждого УИД Из УникальныеИдентификаторы Цикл | ||
|
||
ТекстУИД = СтрШаблон("uuid=""%1", УИД); | ||
Если СтрНайти(ТекстФайла, ТекстУИД) > 0 Тогда | ||
Возврат УИД; | ||
КонецЕсли; | ||
КонецЦикла; | ||
|
||
Возврат Неопределено; | ||
|
||
КонецФункции | ||
|
||
Функция ТекстРегулярногоВыряжения() | ||
Возврат "uuid=\W([0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12})"; | ||
КонецФункции |
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,79 @@ | ||
/////////////////////////////////////////////////////////////////////////////// | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Лучше разделить на отдельные реквесты, в каждом свой сценарий |
||
// | ||
// Служебный модуль с реализацией сценариев обработки файлов <ПроверкаКорректностиXML> | ||
// | ||
/////////////////////////////////////////////////////////////////////////////// | ||
|
||
Перем Лог; | ||
|
||
// ИмяСценария | ||
// Возвращает имя сценария обработки файлов | ||
// | ||
// Возвращаемое значение: | ||
// Строка - Имя текущего сценария обработки файлов | ||
// | ||
Функция ИмяСценария() Экспорт | ||
|
||
Возврат "ПроверкаКорректностиXML"; | ||
|
||
КонецФункции // ИмяСценария() | ||
|
||
// ОбработатьФайл | ||
// Выполняет обработку файла | ||
// | ||
// Параметры: | ||
// АнализируемыйФайл - Файл - Файл из журнала git для анализа | ||
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория | ||
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать | ||
// * Лог - Объект - Текущий лог | ||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс | ||
// * КаталогРепозитория - Строка - Адрес каталога репозитория | ||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария | ||
// и которые необходимо дообработать | ||
// | ||
// Возвращаемое значение: | ||
// Булево - Признак выполненной обработки файла | ||
// | ||
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт | ||
|
||
Лог = ДополнительныеПараметры.Лог; | ||
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария()); | ||
Если АнализируемыйФайл.Существует() И ( | ||
ТипыФайлов.ЭтоФайлОписанияКонфигурации(АнализируемыйФайл) ИЛИ | ||
ТипыФайлов.ЭтоФайлОписанияКонфигурацииEDT(АнализируемыйФайл) ИЛИ | ||
ТипыФайлов.ЭтоФайлОписанияМетаданных(АнализируемыйФайл) ИЛИ | ||
ТипыФайлов.ЭтоФайлОписанияФормы(АнализируемыйФайл) ИЛИ | ||
ТипыФайлов.ЭтоФайлОписанияПланаОбмена(АнализируемыйФайл) ИЛИ | ||
ТипыФайлов.ЭтоФайлОписанияФункциональнойОпции(АнализируемыйФайл) | ||
) Тогда | ||
|
||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); | ||
|
||
ПроверитьНаКорректностьXML(АнализируемыйФайл.ПолноеИмя); | ||
Возврат Истина; | ||
|
||
КонецЕсли; | ||
|
||
Возврат Ложь; | ||
|
||
КонецФункции // ОбработатьФайл() | ||
|
||
Процедура ПроверитьНаКорректностьXML(ПутьКФайлуМодуля) | ||
|
||
ФайлXML = Новый ЧтениеXML(); | ||
Попытка | ||
ФайлXML.ОткрытьФайл(ПутьКФайлуМодуля); | ||
ФайлXML.ПерейтиКСодержимому(); | ||
Пока ФайлXML.Прочитать() Цикл | ||
КонецЦикла; | ||
ФайлXML.Закрыть(); | ||
Исключение | ||
Инфо = ИнформацияОбОшибке(); | ||
ТекстОшибки = СтрШаблон("В файле '%1' нарушена корректность XML: %2", ПутьКФайлуМодуля, Инфо.Описание); | ||
Лог.Ошибка(ТекстОшибки); | ||
|
||
ВызватьИсключение ТекстОшибки; | ||
|
||
КонецПопытки; | ||
|
||
КонецПроцедуры |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
можно проверять регулярным выражением, собрав UID в одну строку через |