mirror of
https://github.com/bia-technologies/precommit4onec.git
synced 2025-05-27 22:57:59 +02:00
#ARCH-1898
Автоматическая сортировка объектов метаданных
This commit is contained in:
parent
1d426d095d
commit
a09b639535
@ -37,6 +37,7 @@
|
|||||||
- `КорректировкаXMLФорм` - при выполнении данного сценария, файлы описаний форм (`Form.xml`) проверяются на наличие задублируровашихся ндексов элементов, которые образуются при объединениях. Если дубли есть, то они исправляются
|
- `КорректировкаXMLФорм` - при выполнении данного сценария, файлы описаний форм (`Form.xml`) проверяются на наличие задублируровашихся ндексов элементов, которые образуются при объединениях. Если дубли есть, то они исправляются
|
||||||
- `ДобавлениеПробеловПередКлючевымиСловами` - при выполнении данного сценария, в файлах модулей перед ключевыми словами добавляются отсутсвующие пробелы. На данный момент обрабатывается только ключевое слово `Экспорт`.
|
- `ДобавлениеПробеловПередКлючевымиСловами` - при выполнении данного сценария, в файлах модулей перед ключевыми словами добавляются отсутсвующие пробелы. На данный момент обрабатывается только ключевое слово `Экспорт`.
|
||||||
- `УдалениеЛишнихКонцевыхПробелов` - при выполнении данного сценария, в файлах модулей удаляются лишние пробелы и табы в конце строки после `;`.
|
- `УдалениеЛишнихКонцевыхПробелов` - при выполнении данного сценария, в файлах модулей удаляются лишние пробелы и табы в конце строки после `;`.
|
||||||
|
- `СортировкаДереваМетаданных` - при выполнении данного сценария, выполняется упорядочивание объектов метаданных в дереве за исключением подсистем, они остаются в том порядке, который задал разработчик.
|
||||||
|
|
||||||
## Изменение настроек
|
## Изменение настроек
|
||||||
|
|
||||||
|
143
src/СценарииОбработки/СортировкаДереваМетаданных.os
Normal file
143
src/СценарииОбработки/СортировкаДереваМетаданных.os
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Служебный модуль с реализацией сценариев обработки файлов <СортировкаДереваМетаданных>
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ИмяСценария
|
||||||
|
// Возвращает имя сценария обработки файлов
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Имя текущего сценария обработки файлов
|
||||||
|
//
|
||||||
|
Функция ИмяСценария() Экспорт
|
||||||
|
|
||||||
|
Возврат "СортировкаДереваМетаданных";
|
||||||
|
|
||||||
|
КонецФункции // ИмяСценария()
|
||||||
|
|
||||||
|
// ОбработатьФайл
|
||||||
|
// Выполняет обработку файла
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
|
||||||
|
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
|
||||||
|
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
|
||||||
|
// * Лог - Объект - Текущий лог
|
||||||
|
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||||
|
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||||
|
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||||
|
// и которые необходимо дообработать
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Булево - Признак выполненной обработки файла
|
||||||
|
//
|
||||||
|
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
|
||||||
|
|
||||||
|
Лог = ДополнительныеПараметры.Лог;
|
||||||
|
Если АнализируемыйФайл.Существует() И ЭтоФайлОписанияКонфигурации(АнализируемыйФайл) Тогда
|
||||||
|
|
||||||
|
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||||
|
|
||||||
|
Если ОтсортироватьДеревоМетаданных(АнализируемыйФайл.ПолноеИмя) Тогда
|
||||||
|
|
||||||
|
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Истина;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат ЛОЖЬ;
|
||||||
|
|
||||||
|
КонецФункции // ОбработатьФайл()
|
||||||
|
|
||||||
|
Функция ЭтоФайлОписанияКонфигурации(Файл)
|
||||||
|
|
||||||
|
Если ПустаяСтрока(Файл.Расширение) Тогда
|
||||||
|
|
||||||
|
Возврат Ложь;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат СтрСравнить(Файл.Имя, "Configuration.xml") = 0;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ОтсортироватьДеревоМетаданных(Знач ИмяФайла)
|
||||||
|
|
||||||
|
Текст = Новый ЧтениеТекста();
|
||||||
|
Текст.Открыть(ИмяФайла, "utf-8");
|
||||||
|
СодержимоеФайла = Текст.Прочитать();
|
||||||
|
Текст.Закрыть();
|
||||||
|
|
||||||
|
Регексп = Новый РегулярноеВыражение("(<ChildObjects>\s+?)([\w\W]+?)(\s+<\/ChildObjects>)");
|
||||||
|
Регексп.ИгнорироватьРегистр = ИСТИНА;
|
||||||
|
Регексп.Многострочный = ИСТИНА;
|
||||||
|
ПодчиненныеМетаданные = Регексп.НайтиСовпадения(СодержимоеФайла);
|
||||||
|
Если ПодчиненныеМетаданные.Количество() = 0 Тогда
|
||||||
|
|
||||||
|
Возврат Ложь;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ИсходнаяСтрока = ПодчиненныеМетаданные[0].Группы[2].Значение;
|
||||||
|
РегекспМетаданные = Новый РегулярноеВыражение("^\s+<([\w]+)>([а-яa-zA-ZА-Я0-9_]+)<\/[\w]+>");
|
||||||
|
РегекспМетаданные.ИгнорироватьРегистр = ИСТИНА;
|
||||||
|
РегекспМетаданные.Многострочный = Истина;
|
||||||
|
ОбъектыМетаданныхСтроки = РегекспМетаданные.НайтиСовпадения(ИсходнаяСтрока);
|
||||||
|
|
||||||
|
ОбъектыМетаданных = Новый СписокЗначений;
|
||||||
|
ПоследнийТип = "";
|
||||||
|
ОбъектыТипа = Новый СписокЗначений;
|
||||||
|
Для Каждого ОбъектМетаданных Из ОбъектыМетаданныхСтроки Цикл
|
||||||
|
|
||||||
|
Если ПоследнийТип <> ОбъектМетаданных.Группы[1].Значение Тогда
|
||||||
|
|
||||||
|
Если ПоследнийТип <> "" Тогда
|
||||||
|
|
||||||
|
ОбъектыМетаданных.Добавить(ОбъектыТипа);
|
||||||
|
ОбъектыТипа = Новый СписокЗначений;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПоследнийТип = ОбъектМетаданных.Группы[1].Значение;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ОбъектыТипа.Добавить(ОбъектМетаданных.Группы[0].Значение, ОбъектМетаданных.Группы[2].Значение);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ОбъектыМетаданных.Добавить(ОбъектыТипа);
|
||||||
|
|
||||||
|
СтрокаЗамены = "";
|
||||||
|
Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл
|
||||||
|
|
||||||
|
Если НЕ СтрЗаканчиваетсяНа(ОбъектМетаданных.Значение[0].Значение, "Subsystem>") Тогда
|
||||||
|
|
||||||
|
ОбъектМетаданных.Значение.СортироватьПоПредставлению(НаправлениеСортировки.Возр);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СтрокаЗамены = СтрокаЗамены + ?(ПустаяСтрока(СтрокаЗамены), "", Символы.ПС)
|
||||||
|
+ СтрСоединить(ОбъектМетаданных.Значение.ВыгрузитьЗначения(), Символы.ПС);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если СтрСравнить(ИсходнаяСтрока, СтрокаЗамены) = 0 Тогда
|
||||||
|
|
||||||
|
Возврат Ложь;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СтрокаЗамены + "$3");
|
||||||
|
ЗаписьТекста = Новый ЗаписьТекста;
|
||||||
|
ЗаписьТекста.Открыть(ИмяФайла, КодировкаТекста.UTF8);
|
||||||
|
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||||
|
ЗаписьТекста.Закрыть();
|
||||||
|
|
||||||
|
Возврат Истина;
|
||||||
|
|
||||||
|
КонецФункции
|
@ -7,6 +7,7 @@
|
|||||||
"КорректировкаXMLФорм.os",
|
"КорректировкаXMLФорм.os",
|
||||||
"РазборОбычныхФормНаИсходники.os",
|
"РазборОбычныхФормНаИсходники.os",
|
||||||
"РазборОтчетовОбработокРасширений.os",
|
"РазборОтчетовОбработокРасширений.os",
|
||||||
|
"СортировкаДереваМетаданных.os",
|
||||||
"УдалениеЛишнихКонцевыхПробелов.os"
|
"УдалениеЛишнихКонцевыхПробелов.os"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user