Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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})";
КонецФункции
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:v8="http://v8.1c.ru/8.1/data/core" version="2.7">
<Catalog uuid="11111111-1111-1111-1111-111111111111">
<Properties>
<Name>Справочник1</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Справочник1</v8:content>
</v8:item>
</Synonym>
</Properties>
</Catalog>
</MetaDataObject>

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:v8="http://v8.1c.ru/8.1/data/core" version="2.7">
<Catalog uuid="22222222-2222-2222-2222-222222222222">
<Properties>
<Name>Справочник2</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Справочник2</v8:content>
</v8:item>
</Synonym>
</Properties>
</Catalog>
</MetaDataObject>

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:v8="http://v8.1c.ru/8.1/data/core" version="2.7">
<Catalog uuid="33333333-3333-3333-3333-333333333333">
<Properties>
<Name>Справочник3</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Справочник3</v8:content>
</v8:item>
</Synonym>
</Properties>
</Catalog>
</MetaDataObject>

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:v8="http://v8.1c.ru/8.1/data/core" version="2.7">
<Catalog uuid="11111111-1111-1111-1111-111111111111">
<Properties>
<Name>СправочникСДублем</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>СправочникСДублем</v8:content>
</v8:item>
</Synonym>
</Properties>
</Catalog>
</MetaDataObject>

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:v8="http://v8.1c.ru/8.1/data/core" version="2.7">
<Catalog uuid="11111111-1111-1111-1111-111111111111">
<Properties>
<Name>СправочникСОригинальнымUUID</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>СправочникСОригинальнымUUID</v8:content>
</v8:item>
</Synonym>
</Properties>
</Catalog>
</MetaDataObject>

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:v8="http://v8.1c.ru/8.1/data/core" version="2.7">
<Catalog uuid="44444444-4444-4444-4444-444444444444">
<Properties>
<Name>СправочникСУникальнымUUID</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>СправочникСУникальнымUUID</v8:content>
</v8:item>
</Synonym>
</Properties>
</Catalog>
</MetaDataObject>

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Catalog xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa">
<name>Справочник1</name>
<synonym>
<key>ru</key>
<value>Справочник1</value>
</synonym>
</mdclass:Catalog>

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Catalog xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb">
<name>Справочник2</name>
<synonym>
<key>ru</key>
<value>Справочник2</value>
</synonym>
</mdclass:Catalog>

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Catalog xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa">
<name>СправочникСДублем</name>
<synonym>
<key>ru</key>
<value>СправочникСДублем</value>
</synonym>
</mdclass:Catalog>

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Catalog xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa">
<name>СправочникСОригинальнымUUID</name>
<synonym>
<key>ru</key>
<value>СправочникСОригинальнымUUID</value>
</synonym>
</mdclass:Catalog>

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Catalog xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="cccccccc-cccc-cccc-cccc-cccccccccccc">
<name>СправочникСУникальнымUUID</name>
<synonym>
<key>ru</key>
<value>СправочникСУникальнымUUID</value>
</synonym>
</mdclass:Catalog>

Loading