mirror of
https://github.com/bia-technologies/precommit4onec.git
synced 2026-06-19 21:44:57 +02:00
Merge branch 'develop' into feature/doc_debug
This commit is contained in:
commit
4d537020e4
21 files changed
+682
-283
No files matched your search
@@ -1,6 +1,6 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2014-2024 BIA-Technologies Limited Liability Company
|
||||
// Copyright 2014-2025 BIA-Technologies Limited Liability Company
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Andrei Ovsiankin
|
||||
Copyright (c) 2017-2019 BIA Technologies, LLC
|
||||
Copyright (c) 2017-2925 BIA Technologies, LLC
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -80,7 +80,7 @@ precommit4onec может читать настройки своей работ
|
||||
- Изменить список сценариев обработки файлов
|
||||
- Активизировать алгоритм подключения сценариев из каталогов репозитория
|
||||
|
||||
Некоторые сценарии поддерживают возможность изменения своих настроек со значений по умолчанию на установленные в конфигурационном файле. На данный момент реализована возможность указывать необходимую версию платформы 1С:Предприятие в сценарии `РазборОтчетОбработокРасширений`.
|
||||
Некоторые сценарии поддерживают возможность изменения своих настроек со значений по умолчанию на установленные в конфигурационном файле. На данный момент реализована возможность указывать необходимую версию платформы 1С:Предприятие в сценарии `РазборОтчетОбработокРасширений`. Для всех сценариев поддерживается возможность указания маски обрабатываемых файлов с помощью свойств: `ВключатьФайлы`, `ИсключатьФайлы`.
|
||||
|
||||
### Структура файла настроек
|
||||
|
||||
@@ -96,6 +96,8 @@ precommit4onec может читать настройки своей работ
|
||||
"КаталогЛокальныхСценариев": "", // Относительный путь к каталогу локальных проверок
|
||||
"ГлобальныеСценарии": [...], // Список проверок, которые будут выполнятся
|
||||
"ОтключенныеСценарии": [...], // Список проверок, которые не будут выполнятся (имеет больший приоритет относительно ГлобальныеСценарии)
|
||||
"ВключатьФайлы": [], // Массив масок регулярных выражений, если указан, будут обрабатываться только файлы, соответствующие одной из масок
|
||||
"ИсключатьФайлы": [], // Массив масок регулярных выражений, если указан, будут пропускаться файлы, соответствующие одной из масок
|
||||
"НастройкиСценариев": { // Настройки выполняемых проверок
|
||||
...
|
||||
},
|
||||
|
||||
@@ -21,28 +21,28 @@
|
||||
И я копирую файл "tests/fixtures/demo/DemoОтчет.erf" в каталог репозитория "РабочийКаталог"
|
||||
И я копирую файл "tests/fixtures/demo/DemoРасширение.cfe" в каталог репозитория "РабочийКаталог"
|
||||
И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os exec-rules <РабочийКаталог> -source-dir ."
|
||||
Тогда В каталоге "." репозитория "РабочийКаталог" есть файл "erf/DemoОтчет/DemoОтчет/Forms/ОсновнаяОФ/Ext/Form/Module.bsl"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "erf/DemoОтчет/DemoОтчет/Forms/ОсновнаяОФ/Ext/Form/form"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "erf/DemoОтчет/DemoОтчет.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "erf/DemoОтчет/DemoОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "erf/DemoОтчет/DemoОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Ext/Template.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "erf/DemoОтчет/DemoОтчет/Forms/ОсновнаяОФ.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "erf/DemoОтчет/DemoОтчет/Forms/ОсновнаяОФ/Ext/Form.bin"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "erf/DemoОтчет/DemoОтчет/Forms/ОсновнаяУФ.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "erf/DemoОтчет/DemoОтчет/Forms/ОсновнаяУФ/Ext/Form.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "epf/DemoОбработка/DemoОбработка.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "epf/DemoОбработка/DemoОбработка/Forms/ОсновнаяОФ.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "epf/DemoОбработка/DemoОбработка/Forms/ОсновнаяОФ/Ext/Form.bin"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "epf/DemoОбработка/DemoОбработка/Forms/ОсновнаяУФ.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "epf/DemoОбработка/DemoОбработка/Forms/ОсновнаяУФ/Ext/Form.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "epf/DemoОбработка/DemoОбработка/Forms/ОсновнаяОФ/Ext/Form/Module.bsl"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "epf/DemoОбработка/DemoОбработка/Forms/ОсновнаяОФ/Ext/Form/form"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "cfe/DemoРасширение/ConfigDumpInfo.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "cfe/DemoРасширение/Configuration.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "cfe/DemoРасширение/CommonModules/DemoРасш_Demo.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "cfe/DemoРасширение/CommonModules/DemoРасш_Demo/Ext/Module.bsl"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "cfe/DemoРасширение/Subsystems/DemoРасш_Demo.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "cfe/DemoРасширение/Languages/Русский.xml"
|
||||
Тогда В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОтчет/DemoОтчет/Forms/ОсновнаяОФ/Ext/Form/Module.bsl"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОтчет/DemoОтчет/Forms/ОсновнаяОФ/Ext/Form/form"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОтчет/DemoОтчет.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОтчет/DemoОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОтчет/DemoОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Ext/Template.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОтчет/DemoОтчет/Forms/ОсновнаяОФ.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОтчет/DemoОтчет/Forms/ОсновнаяОФ/Ext/Form.bin"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОтчет/DemoОтчет/Forms/ОсновнаяУФ.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОтчет/DemoОтчет/Forms/ОсновнаяУФ/Ext/Form.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОбработка/DemoОбработка.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОбработка/DemoОбработка/Forms/ОсновнаяОФ.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОбработка/DemoОбработка/Forms/ОсновнаяОФ/Ext/Form.bin"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОбработка/DemoОбработка/Forms/ОсновнаяУФ.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОбработка/DemoОбработка/Forms/ОсновнаяУФ/Ext/Form.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОбработка/DemoОбработка/Forms/ОсновнаяОФ/Ext/Form/Module.bsl"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoОбработка/DemoОбработка/Forms/ОсновнаяОФ/Ext/Form/form"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoРасширение/ConfigDumpInfo.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoРасширение/Configuration.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoРасширение/CommonModules/DemoРасш_Demo.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoРасширение/CommonModules/DemoРасш_Demo/Ext/Module.bsl"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoРасширение/Subsystems/DemoРасш_Demo.xml"
|
||||
И В каталоге "." репозитория "РабочийКаталог" есть файл "DemoРасширение/Languages/Русский.xml"
|
||||
|
||||
Сценарий: Успешный коммит в репозиторий
|
||||
Когда Я копирую файл "tests/fixtures/ПроверкаДублейПроцедурПоложительныйТест.bsl" в каталог репозитория "РабочийКаталог"
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@
|
||||
.РазработкаЗависитОт("asserts")
|
||||
.РазработкаЗависитОт("tempfiles", "1.1.1")
|
||||
.РазработкаЗависитОт("fs")
|
||||
.РазработкаЗависитОт("coverage", "0.6.1")
|
||||
.РазработкаЗависитОт("coverage", "0.6.1")
|
||||
.ВключитьФайл("src")
|
||||
.ВключитьФайл("v8config.json")
|
||||
.ВключитьФайл("LICENSE")
|
||||
|
||||
@@ -56,70 +56,24 @@
|
||||
ИменаЗагружаемыхСценариев = Параметры.Сценарии;
|
||||
ЗатребованныеСценарии = Параметры.ИменаСценариев;
|
||||
ОбрабатываемыеФайлы = Параметры.ОбрабатываемыеФайлы;
|
||||
КаталогиИсходныхПоФайлам = Параметры.КаталогиФайлов;
|
||||
|
||||
|
||||
УправлениеНастройками = МенеджерНастроек.НастройкиРепозитория(АдресПоискаКонфигурационногоФайла);
|
||||
НаборНастроек = СценарииОбработки.ПолучитьСценарииСПараметрамиВыполнения(КаталогРепозитория, ИменаЗагружаемыхСценариев);
|
||||
КритичныеОшибки = Новый Массив;
|
||||
|
||||
ПараметрыОбработки = СценарииОбработки.ПолучитьСтандартныеПараметрыОбработки();
|
||||
ПараметрыОбработки.Лог = Лог;
|
||||
ПараметрыОбработки.НастройкиИБ = НастройкиИБ;
|
||||
ПараметрыОбработки.ЗатребованныеСценарии = ЗатребованныеСценарии;
|
||||
ПараметрыОбработки.КаталогРепозитория = КаталогРепозитория;
|
||||
|
||||
Ит = 0;
|
||||
Пока Ит < ОбрабатываемыеФайлы.Количество() Цикл
|
||||
АнализируемыйФайл = ОбрабатываемыеФайлы[Ит];
|
||||
Если АнализируемыйФайл.ЭтоКаталог() Тогда
|
||||
Ит = Ит + 1;
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Лог.Информация("Анализируется файл <%1>", АнализируемыйФайл.ПолноеИмя);
|
||||
|
||||
ИмяФайла = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория,
|
||||
СтрЗаменить(АнализируемыйФайл.ПолноеИмя, КаталогРепозитория, ""));
|
||||
ИмяПроекта = МенеджерНастроек.ИмяПроектаДляФайла(ИмяФайла);
|
||||
НастройкаОбработки = НаборНастроек[ИмяПроекта];
|
||||
Если НЕ ЗначениеЗаполнено(НастройкаОбработки) Тогда
|
||||
ВызватьИсключение СтрШаблон("Не удалось получить настройки для %1", ИмяФайла);
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыОбработки.Настройки = НастройкаОбработки.НастройкиСценариев.Получить("НастройкиСценариев");
|
||||
ПараметрыОбработки.КаталогРепозитория = КаталогРепозитория;
|
||||
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов = КаталогиИсходныхПоФайлам.Получить(АнализируемыйФайл.ПолноеИмя);
|
||||
ПараметрыОбработки.ЗатребованныеСценарии = ЗатребованныеСценарии;
|
||||
Ошибки = Новый Массив;
|
||||
|
||||
Для Каждого СценарийОбработки Из НастройкаОбработки.СценарииОбработки Цикл
|
||||
Попытка
|
||||
ФайлОбработан = СценарийОбработки.ОбработатьФайл(АнализируемыйФайл,
|
||||
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов,
|
||||
ПараметрыОбработки);
|
||||
|
||||
Если НЕ ФайлОбработан Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ФайлДляДопОбработки Из ПараметрыОбработки.ФайлыДляПостОбработки Цикл
|
||||
НовыйОбрабатываемыйФайл = ФайловыеОперации.НовыйФайл(ФайлДляДопОбработки);
|
||||
ОбрабатываемыеФайлы.Добавить(НовыйОбрабатываемыйФайл);
|
||||
КаталогиИсходныхПоФайлам.Вставить(НовыйОбрабатываемыйФайл.ПолноеИмя, ПараметрыОбработки.ТекущийКаталогИсходныхФайлов);
|
||||
КонецЦикла;
|
||||
|
||||
ПараметрыОбработки.ФайлыДляПостОбработки.Очистить();
|
||||
Исключение
|
||||
Ошибка = ОписаниеОшибки();
|
||||
КритичныеОшибки.Добавить(Ошибка);
|
||||
Лог.Информация("Критичная ошибка: %1", Ошибка);
|
||||
КонецПопытки;
|
||||
КонецЦикла;
|
||||
|
||||
Ит = Ит + 1;
|
||||
КонецЦикла;
|
||||
СценарииОбработки.ВыполнитьОбработкуФайлов(ОбрабатываемыеФайлы, НаборНастроек, ПараметрыОбработки, Ошибки);
|
||||
|
||||
// В отличие от прекоммита, здесь лучше вывести все криты в конце одним блоком еще раз.
|
||||
Если КритичныеОшибки.Количество() Тогда
|
||||
Если Ошибки.Количество() Тогда
|
||||
Лог.Ошибка("В результате выполнения возникли исключения:");
|
||||
Для Каждого ОписаниеОшибки Из КритичныеОшибки Цикл
|
||||
Для Каждого ОписаниеОшибки Из Ошибки Цикл
|
||||
Лог.Ошибка(ОписаниеОшибки);
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
@@ -169,9 +123,8 @@
|
||||
ПараметрыВыполнения.Вставить("КаталогКонфигурационногоФайла", КаталогКонфигурационногоФайла);
|
||||
ПараметрыВыполнения.Вставить("Сценарии", Сценарии);
|
||||
ПараметрыВыполнения.Вставить("ИменаСценариев", ИменаСценариев);
|
||||
ПараметрыВыполнения.Вставить("ОбрабатываемыеФайлы", ОбрабатываемыеОбъекты.Файлы);
|
||||
ПараметрыВыполнения.Вставить("КаталогиФайлов", ОбрабатываемыеОбъекты.Каталоги);
|
||||
|
||||
ПараметрыВыполнения.Вставить("ОбрабатываемыеФайлы", ОбрабатываемыеОбъекты);
|
||||
|
||||
Возврат ПараметрыВыполнения;
|
||||
КонецФункции
|
||||
|
||||
@@ -182,52 +135,58 @@
|
||||
|
||||
Функция ОбрабатываемыеОбъекты(ПараметрыКоманды, КаталогРепозитория)
|
||||
ОбрабатыватьТолькоИндексированныеФайлы = ЗначениеПараметра(ПараметрыКоманды, "-staged-only", Ложь);
|
||||
КаталогиИсходныхФайлов = КаталогиИсходныхФайлов(ПараметрыКоманды);
|
||||
Коммиты = МассивКоммитов(ПараметрыКоманды, КаталогРепозитория);
|
||||
ПараметрКаталогиИсходныхФайлов = ЗначениеПараметра(ПараметрыКоманды, "-source-dir", "src");
|
||||
КаталогиИсходныхФайлов = СтрРазделить(ПараметрКаталогиИсходныхФайлов, ",", Ложь);
|
||||
|
||||
Результат = Новый Структура("Файлы, Каталоги", Новый Массив(), Новый Соответствие());
|
||||
ТаблицаФайлов = СценарииОбработки.НоваяТаблицаОбрабатываемыхФайлов();
|
||||
Если НЕ ОбрабатыватьТолькоИндексированныеФайлы И Коммиты.Количество() = 0 Тогда
|
||||
// Обрабатываются все файлы в каталогах исходных файлов
|
||||
Для Каждого КаталогИсходныхФайлов Из КаталогиИсходныхФайлов Цикл
|
||||
ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, СокрЛП(КаталогИсходныхФайлов));
|
||||
Если НЕ ЭтоСуществующийКаталог(ТекущийКаталогИсходныхФайлов) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ОбрабатываемыеФайлыКаталога = НайтиФайлы(ТекущийКаталогИсходныхФайлов, ПолучитьМаскуВсеФайлы(), Истина);
|
||||
Для Каждого ОбрабатываемыйФайлКаталога Из ОбрабатываемыеФайлыКаталога Цикл
|
||||
ДобавитьОбрабатываемыйОбъект(Результат, ОбрабатываемыйФайлКаталога, ТекущийКаталогИсходныхФайлов);
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
ДобавитьВсеИсходныеФайлы(ТаблицаФайлов, КаталогРепозитория, КаталогиИсходныхФайлов);
|
||||
Иначе
|
||||
Если ОбрабатыватьТолькоИндексированныеФайлы Тогда
|
||||
// Обрабатываются только файлы, добавленные в индекс Git
|
||||
Изменения = СписокИндексированныхФайлов(КаталогРепозитория);
|
||||
Иначе
|
||||
// Обрабатываются только файлы, измененные между двумя переданными коммитами или merge-request'ом
|
||||
Изменения = СписокИзмененийМеждуКоммитами(Коммиты, КаталогРепозитория);
|
||||
КонецЕсли;
|
||||
// Обрабатываются файлы, добавленные в индекс git, либо измененные между двумя коммитами или merge-request'ом
|
||||
Изменения = ?(ОбрабатыватьТолькоИндексированныеФайлы,
|
||||
СписокИндексированныхФайлов(КаталогРепозитория),
|
||||
СписокИзмененийМеждуКоммитами(Коммиты, КаталогРепозитория));
|
||||
|
||||
Для Каждого ИмяФайла Из Изменения Цикл
|
||||
Для Каждого КаталогИсходныхФайлов Из КаталогиИсходныхФайлов Цикл
|
||||
ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, СокрЛП(КаталогИсходныхФайлов));
|
||||
Если ЭтоСуществующийКаталог(ТекущийКаталогИсходныхФайлов)
|
||||
И ФайловыеОперации.ФайлНаходитсяВКаталоге(ИмяФайла, ТекущийКаталогИсходныхФайлов) Тогда
|
||||
ДобавитьОбрабатываемыйОбъект(Результат, ИмяФайла, ТекущийКаталогИсходныхФайлов);
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
ДобавитьОбрабатываемыйОбъект(ТаблицаФайлов, ИмяФайла, ТекущийКаталогИсходныхФайлов);
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ТаблицаФайлов;
|
||||
КонецФункции
|
||||
|
||||
Функция КаталогиИсходныхФайлов(ПараметрыКоманды)
|
||||
ПараметрКаталогиИсходныхФайлов = ЗначениеПараметра(ПараметрыКоманды, "-source-dir", "src");
|
||||
КаталогиИсходныхФайлов = СтрРазделить(ПараметрКаталогиИсходныхФайлов, ",", Ложь);
|
||||
|
||||
Результат = Новый Массив;
|
||||
Для Каждого Каталог Из КаталогиИсходныхФайлов Цикл
|
||||
Если ЭтоСуществующийКаталог(Каталог) Тогда
|
||||
Результат.Добавить(Каталог);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
Процедура ДобавитьОбрабатываемыйОбъект(Коллекция, Знач Файл, Знач Каталог)
|
||||
Процедура ДобавитьОбрабатываемыйОбъект(Коллекция, Знач Файл, Знач Каталог, ТипИзменения = Неопределено)
|
||||
ОбрабатываемыйФайл = ФайловыеОперации.НовыйФайл(Файл);
|
||||
Коллекция.Файлы.Добавить(ОбрабатываемыйФайл);
|
||||
Коллекция.Каталоги.Вставить(ОбрабатываемыйФайл.ПолноеИмя, Каталог);
|
||||
|
||||
Если НЕ ФайловыеОперации.ФайлНаходитсяВКаталоге(Файл, Каталог) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипИзменения = Неопределено Тогда
|
||||
ТипИзменения = ВариантИзмененийФайловGit.Изменен;
|
||||
КонецЕсли;
|
||||
|
||||
НоваяСтрока = Коллекция.Добавить();
|
||||
НоваяСтрока.Файл = ОбрабатываемыйФайл;
|
||||
НоваяСтрока.Каталог = Каталог;
|
||||
НоваяСтрока.ТипИзменения = ТипИзменения;
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ЭтоСуществующийКаталог(Каталог)
|
||||
@@ -303,21 +262,37 @@
|
||||
Возврат Массив;
|
||||
КонецФункции
|
||||
|
||||
Процедура ДобавитьВсеИсходныеФайлы(ТаблицаФайлов, КаталогРепозитория, Каталоги)
|
||||
Для Каждого Каталог Из Каталоги Цикл
|
||||
ТекущийКаталог = ОбъединитьПути(КаталогРепозитория, СокрЛП(Каталог));
|
||||
Если НЕ ЭтоСуществующийКаталог(ТекущийКаталог) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
НайденныеФайлы = НайтиФайлы(ТекущийКаталог, ПолучитьМаскуВсеФайлы(), Истина);
|
||||
Для Каждого Файл Из НайденныеФайлы Цикл
|
||||
ДобавитьОбрабатываемыйОбъект(ТаблицаФайлов, Файл, Каталог);
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
КонецПроцедуры
|
||||
|
||||
Функция СписокИзмененийМеждуКоммитами(Коммиты, КаталогРепозитория)
|
||||
Если НЕ ДваЭлементаВКоллекции(Коммиты) Тогда
|
||||
Возврат Новый Массив;
|
||||
Возврат СценарииОбработки.НоваяТаблицаОбрабатываемыхФайлов();
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыКоманды = МассивПараметров(СтрШаблон("diff --name-only %1 %2", Коммиты[0], Коммиты[1]));
|
||||
ПараметрыКоманды = МассивПараметров(СтрШаблон("diff --name-status --no-renames %1 %2", Коммиты[0], Коммиты[1]));
|
||||
Возврат ИзмененияРепозитория(КаталогРепозитория, ПараметрыКоманды);
|
||||
КонецФункции
|
||||
|
||||
Функция СписокИндексированныхФайлов(КаталогРепозитория)
|
||||
ПараметрыКоманды = МассивПараметров("diff --name-only --staged");
|
||||
ПараметрыКоманды = МассивПараметров("diff --name-status --staged --no-renames");
|
||||
Возврат ИзмененияРепозитория(КаталогРепозитория, ПараметрыКоманды);
|
||||
КонецФункции
|
||||
|
||||
Функция ИзмененияРепозитория(КаталогРепозитория, ПараметрыКоманды)
|
||||
ТаблицаФайлов = СценарииОбработки.НоваяТаблицаОбрабатываемыхФайлов();
|
||||
|
||||
Git = РепозиторийGit(КаталогРепозитория);
|
||||
Git.ВыполнитьКоманду(ПараметрыКоманды);
|
||||
Результат = Git.ПолучитьВыводКоманды();
|
||||
@@ -327,11 +302,18 @@
|
||||
КонецЕсли;
|
||||
|
||||
ИзмененныеФайлы = СтрРазделить(СокрЛП(Результат), Символы.ПС);
|
||||
Для Индекс = 0 По ИзмененныеФайлы.ВГраница() Цикл
|
||||
ИзмененныеФайлы[Индекс] = ОбъединитьПути(КаталогРепозитория, СокрЛП(ИзмененныеФайлы[Индекс]));
|
||||
Для Каждого СтрокаФайла Из ИзмененныеФайлы Цикл
|
||||
Если ПустаяСтрока(СтрокаФайла) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ДанныеФайла = ВариантИзмененийФайловGit.РазделитьИмяФайлаИВариантИзменения(СтрокаФайла);
|
||||
ПутьКФайлу = ОбъединитьПути(КаталогРепозитория, СокрЛП(ДанныеФайла.ИмяФайла));
|
||||
Файл = ФайловыеОперации.НовыйФайл(ПутьКФайлу);
|
||||
ДобавитьОбрабатываемыйОбъект(ТаблицаФайлов, Файл, КаталогРепозитория, ДанныеФайла.ТипИзменения);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ИзмененныеФайлы;
|
||||
Возврат ТаблицаФайлов;
|
||||
КонецФункции
|
||||
|
||||
Функция ДваЭлементаВКоллекции(Коллекция)
|
||||
|
||||
@@ -38,27 +38,19 @@
|
||||
|
||||
КаталогРепозитория = ПараметрыКоманды["КаталогРепозитория"];
|
||||
КаталогИсходныхФайлов = ПараметрыКоманды["-source-dir"];
|
||||
|
||||
Если НЕ ПроверитьПараметрыКоманды(КаталогРепозитория, Лог) Тогда
|
||||
|
||||
Возврат Приложение.РезультатыКоманд().НеверныеПараметры;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ЗначениеЗаполнено(КаталогИсходныхФайлов) Тогда
|
||||
|
||||
КаталогИсходныхФайлов = "src";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, КаталогИсходныхФайлов);
|
||||
ФайлТекущийКаталогИсходныхФайлов = Новый Файл(ТекущийКаталогИсходныхФайлов);
|
||||
ТекущийКаталогИсходныхФайлов = ФайлТекущийКаталогИсходныхФайлов.ПолноеИмя;
|
||||
|
||||
Если НЕ ФайлТекущийКаталогИсходныхФайлов.Существует() Тогда
|
||||
|
||||
СоздатьКаталог(ТекущийКаталогИсходныхФайлов);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
УправлениеНастройками = МенеджерНастроек.НастройкиРепозитория(КаталогРепозитория);
|
||||
@@ -70,27 +62,25 @@
|
||||
ПараметрыОбработки.КаталогРепозитория = КаталогРепозитория;
|
||||
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов = ТекущийКаталогИсходныхФайлов;
|
||||
ПараметрыОбработки.НастройкиИБ = НастройкиИБ;
|
||||
|
||||
ФайлыКОбработке = Новый ТаблицаЗначений();
|
||||
ФайлыКОбработке.Колонки.Добавить("Файл");
|
||||
ФайлыКОбработке.Колонки.Добавить("ТипИзменения");
|
||||
|
||||
|
||||
Если НЕ СообщениеКоммитаСоответствуетМаске(НаборНастроек, ПараметрыОбработки) Тогда
|
||||
Возврат Приложение.РезультатыКоманд().ОшибкаВремениВыполнения;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ФайлыКОбработке = СценарииОбработки.НоваяТаблицаОбрабатываемыхФайлов();
|
||||
Для каждого Изменение Из ЖурналИзменений Цикл
|
||||
ДобавитьКОбработке(ФайлыКОбработке, Новый Файл(ОбъединитьПути(КаталогРепозитория, Изменение.ИмяФайла)), Изменение.ТипИзменения);
|
||||
НоваяСтрока = ФайлыКОбработке.Добавить();
|
||||
НоваяСтрока.Файл = ФайловыеОперации.НовыйФайл(ОбъединитьПути(КаталогРепозитория, Изменение.ИмяФайла));
|
||||
НоваяСтрока.Каталог = ТекущийКаталогИсходныхФайлов;
|
||||
НоваяСтрока.ТипИзменения = Изменение.ТипИзменения;
|
||||
КонецЦикла;
|
||||
|
||||
ВыполнитьОбработкуФайлов(ФайлыКОбработке, НаборНастроек, ПараметрыОбработки);
|
||||
СценарииОбработки.ВыполнитьОбработкуФайлов(ФайлыКОбработке, НаборНастроек, ПараметрыОбработки);
|
||||
|
||||
// измененные каталоги необходимо добавить в индекс
|
||||
Лог.Отладка("Добавление измененных каталогов в индекс git");
|
||||
Для Каждого Каталог Из ПараметрыОбработки.ИзмененныеКаталоги Цикл
|
||||
|
||||
РепозиторийGit.ДобавитьФайлВИндекс("""" + Каталог + """");
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
// При успешном выполнении возвращает код успеха
|
||||
@@ -98,69 +88,6 @@
|
||||
|
||||
КонецФункции // ВыполнитьКоманду
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
Процедура ДобавитьКОбработке(СпиоскФ, ДобавляемыйФ, ТипИзменения)
|
||||
Строка = СпиоскФ.Добавить();
|
||||
Строка.Файл = ДобавляемыйФ;
|
||||
Строка.ТипИзменения = ТипИзменения;
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВыполнитьОбработкуФайлов(Файлы, НаборНастроек, ПараметрыОбработки)
|
||||
|
||||
КаталогРепозитория = ПараметрыОбработки.КаталогРепозитория;
|
||||
Ит = 0;
|
||||
Пока Ит < Файлы.Количество() Цикл
|
||||
|
||||
АнализируемыйФайл = Файлы[Ит].Файл;
|
||||
Лог.Отладка("Анализируется файл <%1>", АнализируемыйФайл.Имя);
|
||||
|
||||
ИмяФайла = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория,
|
||||
СтрЗаменить(АнализируемыйФайл.ПолноеИмя, КаталогРепозитория, ""));
|
||||
|
||||
ИмяПроекта = МенеджерНастроек.ИмяПроектаДляФайла(ИмяФайла);
|
||||
|
||||
НастройкаОбработки = НаборНастроек[ИмяПроекта];
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(НастройкаОбработки) Тогда
|
||||
|
||||
ВызватьИсключение СтрШаблон("Не удалось получить настройки для %1", ИмяФайла);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СценарииОбработкиФайлов = НастройкаОбработки.СценарииОбработки;
|
||||
НастройкиСценариев = НастройкаОбработки.НастройкиСценариев;
|
||||
|
||||
ПараметрыОбработки.Настройки = НастройкиСценариев.Получить("НастройкиСценариев");
|
||||
|
||||
ПараметрыОбработки.ТипИзменения = Файлы[Ит].ТипИзменения;
|
||||
|
||||
Для Каждого СценарийОбработки Из СценарииОбработкиФайлов Цикл
|
||||
|
||||
ФайлОбработан = СценарийОбработки.ОбработатьФайл(АнализируемыйФайл,
|
||||
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов,
|
||||
ПараметрыОбработки);
|
||||
|
||||
Если НЕ ФайлОбработан Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ФайлДляДопОбработки Из ПараметрыОбработки.ФайлыДляПостОбработки Цикл
|
||||
|
||||
ДобавитьКОбработке(Файлы, ФайловыеОперации.НовыйФайл(ФайлДляДопОбработки), ВариантИзмененийФайловGit.Изменен);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ПараметрыОбработки.ФайлыДляПостОбработки.Очистить();
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Ит = Ит + 1;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Функция ПроверитьПараметрыКоманды(КаталогРепозитория, Лог)
|
||||
|
||||
ФайлКаталогРепозитория = Новый Файл(КаталогРепозитория);
|
||||
@@ -198,19 +125,16 @@
|
||||
ЖурналИзменений = Новый Массив;
|
||||
|
||||
Для Каждого СтрокаВывода Из СтрокиВывода Цикл
|
||||
|
||||
Если ПустаяСтрока(СтрокаВывода) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Лог.Отладка(" <%1>", СтрокаВывода);
|
||||
|
||||
СтрокаВывода = СокрЛП(СтрокаВывода);
|
||||
ПозицияПробела = СтрНайти(СтрокаВывода, Символы.Таб);
|
||||
СимволИзменения = Лев(СтрокаВывода, 1);
|
||||
|
||||
ТипИзменения = ВариантИзмененийФайловGit.ОпределитьВариантИзменения(СимволИзменения);
|
||||
ИмяФайла = СокрЛП(СтрЗаменить(Сред(СтрокаВывода, ПозицияПробела + 1), """", ""));
|
||||
ЖурналИзменений.Добавить(Новый Структура("ИмяФайла, ТипИзменения", ИмяФайла, ТипИзменения));
|
||||
|
||||
Лог.Отладка(" В журнале git %2 файл <%1>", ИмяФайла, ТипИзменения);
|
||||
Данные = ВариантИзмененийФайловGit.РазделитьИмяФайлаИВариантИзменения(СтрокаВывода);
|
||||
ЖурналИзменений.Добавить(Новый Структура("ИмяФайла, ТипИзменения", Данные.ИмяФайла, Данные.ТипИзменения));
|
||||
|
||||
Лог.Отладка(" В журнале git %2 файл <%1>", Данные.ИмяФайла, Данные.ТипИзменения);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ЖурналИзменений;
|
||||
|
||||
@@ -51,6 +51,19 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция РазделитьИмяФайлаИВариантИзменения(СтрокаИзменения) Экспорт
|
||||
Подстроки = СтрРазделить(СтрокаИзменения, Символы.Таб, Ложь);
|
||||
Если Подстроки.Количество() > 1 Тогда
|
||||
ТипИзменения = ОпределитьВариантИзменения(Подстроки[0]);
|
||||
ИмяФайла = Подстроки[1];
|
||||
|
||||
Возврат Новый Структура("ТипИзменения, ИмяФайла", ТипИзменения, СокрЛП(ИмяФайла));
|
||||
Иначе
|
||||
ТекстОшибки = СтрШаблон("Строка изменений Git `%1` должна содержать тип изменения и имя файла", СтрокаИзменения);
|
||||
ВызватьИсключение ТекстОшибки;
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Добавлен = "Добавлен";
|
||||
|
||||
+178
-73
@@ -1,3 +1,6 @@
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
Функция Загрузить(КаталогРепозитория, Проект, Знач ПараметрИменаЗагружаемыхСценариев = Неопределено) Экспорт
|
||||
|
||||
ТекущийКаталогСценариев = МенеджерПриложения.КаталогСценариев();
|
||||
@@ -6,50 +9,34 @@
|
||||
ФайлыЛокальныхСценариев = Новый Массив;
|
||||
|
||||
Лог = МенеджерПриложения.ПолучитьЛог();
|
||||
|
||||
Если ПараметрИменаЗагружаемыхСценариев <> Неопределено Тогда
|
||||
|
||||
ИменаЗагружаемыхСценариев = ПараметрИменаЗагружаемыхСценариев;
|
||||
|
||||
Иначе
|
||||
|
||||
ИменаЗагружаемыхСценариев = МенеджерНастроек.ИменаЗагружаемыхСценариев(Проект);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ МенеджерНастроек.ЭтоНовый() Тогда
|
||||
|
||||
Лог.Информация("Читаем настройки " + Проект);
|
||||
|
||||
|
||||
ИспользоватьСценарииРепозитория = МенеджерНастроек.ЗначениеНастройки("ИспользоватьСценарииРепозитория", Проект, Ложь);
|
||||
|
||||
Если ИспользоватьСценарииРепозитория Тогда
|
||||
|
||||
ЛокальныйКаталог = МенеджерНастроек.ЗначениеНастройки("КаталогЛокальныхСценариев", Проект);
|
||||
ПутьКЛокальнымСценариям = ОбъединитьПути(КаталогРепозитория, ЛокальныйКаталог);
|
||||
ФайлПутьКЛокальнымСценариям = Новый Файл(ПутьКЛокальнымСценариям);
|
||||
|
||||
Если Не ФайлПутьКЛокальнымСценариям.Существует() ИЛИ ФайлПутьКЛокальнымСценариям.ЭтоФайл() Тогда
|
||||
|
||||
Лог.Ошибка("Сценарии из репозитория не загружены т.к. отсутствует каталог %1", ЛокальныйКаталог);
|
||||
|
||||
Иначе
|
||||
|
||||
ФайлыЛокальныхСценариев = НайтиФайлы(ФайлПутьКЛокальнымСценариям.ПолноеИмя, "*.os");
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ЗагрузитьИзКаталога(ВсеЗагруженные, ФайлыГлобальныхСценариев, ИменаЗагружаемыхСценариев);
|
||||
ЗагрузитьИзКаталога(ВсеЗагруженные, ФайлыЛокальныхСценариев, , Истина);
|
||||
|
||||
Если ВсеЗагруженные.Количество() = 0 Тогда
|
||||
|
||||
ВызватьИсключение "Нет доступных сценариев обработки файлов";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ВсеЗагруженные;
|
||||
@@ -59,42 +46,30 @@
|
||||
Процедура ЗагрузитьИзКаталога(ВсеЗагруженные, ФайлыСценариев,
|
||||
Знач ИменаЗагружаемыхСценариев = Неопределено,
|
||||
ЗагрузитьВсе = Ложь) Экспорт
|
||||
Лог = МенеджерПриложения.ПолучитьЛог();
|
||||
|
||||
Лог = МенеджерПриложения.ПолучитьЛог();
|
||||
Если ИменаЗагружаемыхСценариев = Неопределено Тогда
|
||||
|
||||
ИменаЗагружаемыхСценариев = Новый Массив;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ФайлСценария Из ФайлыСценариев Цикл
|
||||
|
||||
Если СтрСравнить(ФайлСценария.ИмяБезРасширения, "ШаблонСценария") = 0 Тогда
|
||||
|
||||
Продолжить;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ ЗагрузитьВсе
|
||||
И ИменаЗагружаемыхСценариев.Найти(ФайлСценария.Имя) = Неопределено
|
||||
И ИменаЗагружаемыхСценариев.Найти(ФайлСценария.ИмяБезРасширения) = Неопределено Тогда
|
||||
|
||||
И ИменаЗагружаемыхСценариев.Найти(ФайлСценария.Имя) = Неопределено
|
||||
И ИменаЗагружаемыхСценариев.Найти(ФайлСценария.ИмяБезРасширения) = Неопределено Тогда
|
||||
Продолжить;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
|
||||
СценарийОбработки = ЗагрузитьСценарий(ФайлСценария.ПолноеИмя);
|
||||
ВсеЗагруженные.Добавить(СценарийОбработки);
|
||||
|
||||
Исключение
|
||||
|
||||
Лог.Ошибка("Ошибка загрузки сценария %1: %2", ФайлСценария.ПолноеИмя, ОписаниеОшибки());
|
||||
Продолжить;
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
@@ -148,44 +123,19 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция НастройкаОбработкиПроекта(ИмяПроекта, КаталогРепозитория, Знач ИменаЗагружаемыхСценариев = Неопределено)
|
||||
|
||||
Настройка = Новый Структура("СценарииОбработки, НастройкиСценариев");
|
||||
Если ИменаЗагружаемыхСценариев = Неопределено Тогда
|
||||
ИменаЗагружаемыхСценариев = МенеджерНастроек.ИменаЗагружаемыхСценариев(ИмяПроекта);
|
||||
КонецЕсли;
|
||||
|
||||
Настройка.СценарииОбработки = СценарииОбработки.Загрузить(КаталогРепозитория,
|
||||
ИмяПроекта,
|
||||
ИменаЗагружаемыхСценариев);
|
||||
|
||||
Настройка.НастройкиСценариев = МенеджерНастроек.НастройкиПроекта(ИмяПроекта);
|
||||
|
||||
НормализоватьНастройкиСценариев(Настройка);
|
||||
|
||||
Возврат Настройка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьПараметрыОбработкиФайла(ИмяФайла, НастройкиПроектов) Экспорт
|
||||
|
||||
ИмяОбщейНастройки = МенеджерНастроек.КлючНастройкиPrecommit();
|
||||
НайденнаяНастройка = НастройкиПроектов.Получить(ИмяОбщейНастройки);
|
||||
|
||||
Для Каждого ЭлементНастройки Из НастройкиПроектов Цикл
|
||||
|
||||
Если ЭлементНастройки.Ключ = ИмяОбщейНастройки Тогда
|
||||
|
||||
Продолжить;
|
||||
|
||||
ИначеЕсли СтрНачинаетсяС(ИмяФайла, ЭлементНастройки.Ключ) Тогда
|
||||
|
||||
НайденнаяНастройка = ЭлементНастройки.Значение;
|
||||
|
||||
Иначе
|
||||
// ничего
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Если СтрНачинаетсяС(ИмяФайла, ЭлементНастройки.Ключ) Тогда
|
||||
НайденнаяНастройка = ЭлементНастройки.Значение;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат НайденнаяНастройка;
|
||||
@@ -193,45 +143,106 @@
|
||||
КонецФункции
|
||||
|
||||
Функция ГлобальныеСценарии() Экспорт
|
||||
|
||||
Возврат МенеджерНастроек.ПолучитьИменаСценариевКаталога(МенеджерПриложения.КаталогСценариев());
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция НастройкиГлобальныхСценариев() Экспорт
|
||||
|
||||
Возврат НастройкиСценариев(ГлобальныеСценарии(), МенеджерПриложения.КаталогСценариев());
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция НастройкиСценариев(ИменаСценариев, Знач КаталогСценариев = Неопределено) Экспорт
|
||||
|
||||
Если КаталогСценариев = Неопределено Тогда
|
||||
|
||||
КаталогСценариев = МенеджерПриложения.КаталогСценариев();
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
НастройкиСценариев = Новый Соответствие;
|
||||
Рефлектор = Новый Рефлектор;
|
||||
|
||||
Для Каждого ИмяСценария Из ИменаСценариев Цикл
|
||||
|
||||
ОбъектСценария = ЗагрузитьСценарий(ОбъединитьПути(КаталогСценариев, ИмяСценария));
|
||||
|
||||
Если Рефлектор.МетодСуществует(ОбъектСценария, "ПолучитьСтандартныеНастройкиСценария") Тогда
|
||||
|
||||
СтруктураНастроек = Рефлектор.ВызватьМетод(ОбъектСценария, "ПолучитьСтандартныеНастройкиСценария");
|
||||
НастройкиСценариев.Вставить(СтруктураНастроек.ИмяСценария, СтруктураНастроек.Настройка);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат НастройкиСценариев;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Вызывает обработчики сценариев для каждого файла из переданного списка.
|
||||
//
|
||||
// Параметры:
|
||||
// Файлы - ТаблицаЗначений - см. НоваяТаблицаОбрабатываемыхФайлов
|
||||
// НаборНастроек - см. ПолучитьСценарииСПараметрамиВыполнения
|
||||
// ПараметрыОбработки - см. ПолучитьСтандартныеПараметрыОбработки
|
||||
// Ошибки - Массив из Строка - массив возникших ошибок
|
||||
//
|
||||
Процедура ВыполнитьОбработкуФайлов(Файлы, НаборНастроек, ПараметрыОбработки, Ошибки = Неопределено) Экспорт
|
||||
Лог = ПараметрыОбработки.Лог;
|
||||
КаталогРепозитория = ПараметрыОбработки.КаталогРепозитория;
|
||||
КаталогИсходныхФайлов = ПараметрыОбработки.ТекущийКаталогИсходныхФайлов;
|
||||
Если Ошибки = Неопределено Тогда
|
||||
Ошибки = Новый Массив;
|
||||
КонецЕсли;
|
||||
|
||||
Индекс = 0;
|
||||
Пока Индекс < Файлы.Количество() Цикл
|
||||
ТекущаяСтрока = Файлы[Индекс];
|
||||
АнализируемыйФайл = ТекущаяСтрока.Файл;
|
||||
Лог.Отладка("Анализируется файл <%1>", АнализируемыйФайл.Имя);
|
||||
|
||||
Индекс = Индекс + 1;
|
||||
|
||||
НастройкаОбработки = НастройкаОбработки(АнализируемыйФайл, КаталогРепозитория, НаборНастроек);
|
||||
ПараметрыОбработки.Настройки = НастройкаОбработки.НастройкиСценариев.Получить("НастройкиСценариев");
|
||||
ПараметрыОбработки.ТипИзменения = ТекущаяСтрока.ТипИзменения;
|
||||
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов = ТекущаяСтрока.Каталог;
|
||||
|
||||
Для Каждого СценарийОбработки Из НастройкаОбработки.СценарииОбработки Цикл
|
||||
Попытка
|
||||
ФайлНеОбработан = ПропуститьФайл(АнализируемыйФайл, СценарийОбработки, ПараметрыОбработки)
|
||||
ИЛИ НЕ СценарийОбработки.ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ПараметрыОбработки);
|
||||
|
||||
Если ФайлНеОбработан Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ФайлДляДопОбработки Из ПараметрыОбработки.ФайлыДляПостОбработки Цикл
|
||||
ДобавитьКОбработке(Файлы, ФайлДляДопОбработки, ТекущаяСтрока.Каталог, ФайлДляДопОбработки);
|
||||
КонецЦикла;
|
||||
|
||||
ПараметрыОбработки.ФайлыДляПостОбработки.Очистить();
|
||||
Исключение
|
||||
Ошибка = ОписаниеОшибки();
|
||||
Ошибки.Добавить(Ошибка);
|
||||
Лог.Информация("Ошибка обработки файла `%1`: %2", АнализируемыйФайл.Имя, Ошибка);
|
||||
КонецПопытки;
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
КонецПроцедуры
|
||||
|
||||
// Создает новую таблицу обрабатываемых файлов, передаваемую в метод ВыполнитьОбработкуФайлов.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ТаблицаЗначений - таблица обрабатываемых файлов:
|
||||
// * Файл - Файл - обрабатываемый файл
|
||||
// * Каталог - Строка - каталог исходного файла
|
||||
// * ТипИзменения - ВариантИзмененийФайловGit - тип изменения файла Git
|
||||
//
|
||||
Функция НоваяТаблицаОбрабатываемыхФайлов() Экспорт
|
||||
ТаблицаФайлов = Новый ТаблицаЗначений();
|
||||
ТаблицаФайлов.Колонки.Добавить("Файл");
|
||||
ТаблицаФайлов.Колонки.Добавить("Каталог");
|
||||
ТаблицаФайлов.Колонки.Добавить("ТипИзменения");
|
||||
|
||||
Возврат ТаблицаФайлов;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура НормализоватьНастройкиСценариев(Настройка)
|
||||
|
||||
УзелНастройкиСценариев = Настройка.НастройкиСценариев.Получить("НастройкиСценариев");
|
||||
@@ -248,6 +259,7 @@
|
||||
Если Рефлектор.МетодСуществует(СценарийОбработки, ИмяМетодаИмяСценария) Тогда
|
||||
ИмяСценария = Рефлектор.ВызватьМетод(СценарийОбработки, ИмяМетодаИмяСценария);
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ЗначениеЗаполнено(ИмяСценария) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
@@ -258,3 +270,96 @@
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция НастройкаОбработкиПроекта(ИмяПроекта, КаталогРепозитория, Знач ИменаЗагружаемыхСценариев = Неопределено)
|
||||
|
||||
Настройка = Новый Структура("СценарииОбработки, НастройкиСценариев");
|
||||
Если ИменаЗагружаемыхСценариев = Неопределено Тогда
|
||||
ИменаЗагружаемыхСценариев = МенеджерНастроек.ИменаЗагружаемыхСценариев(ИмяПроекта);
|
||||
КонецЕсли;
|
||||
|
||||
Настройка.СценарииОбработки = СценарииОбработки.Загрузить(КаталогРепозитория, ИмяПроекта, ИменаЗагружаемыхСценариев);
|
||||
Настройка.НастройкиСценариев = МенеджерНастроек.НастройкиПроекта(ИмяПроекта);
|
||||
|
||||
НормализоватьНастройкиСценариев(Настройка);
|
||||
|
||||
Возврат Настройка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция НастройкаОбработки(АнализируемыйФайл, КаталогРепозитория, НаборНастроек)
|
||||
ИмяФайла = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория,
|
||||
СтрЗаменить(АнализируемыйФайл.ПолноеИмя, КаталогРепозитория, ""));
|
||||
ИмяПроекта = МенеджерНастроек.ИмяПроектаДляФайла(ИмяФайла);
|
||||
|
||||
НастройкаОбработки = НаборНастроек[ИмяПроекта];
|
||||
Если НЕ ЗначениеЗаполнено(НастройкаОбработки) Тогда
|
||||
ВызватьИсключение СтрШаблон("Не удалось получить настройки для %1", ИмяФайла);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат НастройкаОбработки;
|
||||
КонецФункции
|
||||
|
||||
Процедура ДобавитьКОбработке(Файлы, ДобавляемыйФайл, Каталог, ТипИзменения = Неопределено)
|
||||
Если ТипИзменения = Неопределено Тогда
|
||||
ТипИзменения = ВариантИзмененийФайловGit.Изменен;
|
||||
КонецЕсли;
|
||||
|
||||
Строка = Файлы.Добавить();
|
||||
Строка.Файл = ФайловыеОперации.НовыйФайл(ДобавляемыйФайл);
|
||||
Строка.Каталог = Каталог;
|
||||
Строка.ТипИзменения = ТипИзменения;
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПропуститьФайл(Файл, Сценарий, ДополнительныеПараметры)
|
||||
Лог = ДополнительныеПараметры.Лог;
|
||||
Настройки = ДополнительныеПараметры.Настройки;
|
||||
|
||||
ИмяСценария = ИмяСценария(Сценарий);
|
||||
МаскиОбрабатываемыхФайлов = МенеджерНастроек.ЗначениеПоКлючу(Настройки, СтрШаблон("%1.ВключатьФайлы", ИмяСценария));
|
||||
МаскиИсключаемыхФайлов = МенеджерНастроек.ЗначениеПоКлючу(Настройки, СтрШаблон("%1.ИсключатьФайлы", ИмяСценария));
|
||||
|
||||
Если НЕ Файл.Существует() Тогда
|
||||
Возврат Истина;
|
||||
КонецЕсли;
|
||||
|
||||
ИмяФайла = ФайловыеОперации.НормализоватьРазделители(Файл.ПолноеИмя);
|
||||
|
||||
Если ЗначениеЗаполнено(МаскиИсключаемыхФайлов) Тогда
|
||||
Для Каждого Шаблон Из МаскиИсключаемыхФайлов Цикл
|
||||
Выражение = РегулярныеВыражения.Создать(Шаблон);
|
||||
Если Выражение.Совпадает(ИмяФайла) Тогда
|
||||
Лог.Отладка("Обрабатываемый файл `%1` соответствует маске файла, исключаемого из обработки: %2", Имяфайла, Шаблон);
|
||||
Возврат Истина;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(МаскиОбрабатываемыхФайлов) Тогда
|
||||
Для Каждого Шаблон Из МаскиОбрабатываемыхФайлов Цикл
|
||||
Выражение = РегулярныеВыражения.Создать(Шаблон);
|
||||
Если Выражение.Совпадает(ИмяФайла) Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Лог.Отладка("Обрабатываемый файл `%1` не соответствует ни одной маске обрабатываемых файлов", Имяфайла);
|
||||
Возврат Истина;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ложь;
|
||||
КонецФункции
|
||||
|
||||
Функция ИмяСценария(Сценарий, ЗначениеПоУмолчанию = Неопределено)
|
||||
Рефлектор = Новый Рефлектор;
|
||||
ИмяМетода = "ИмяСценария";
|
||||
|
||||
ИмяСценария = ЗначениеПоУмолчанию;
|
||||
Если Рефлектор.МетодСуществует(Сценарий, ИмяМетода) Тогда
|
||||
ИмяСценария = Рефлектор.ВызватьМетод(Сценарий, ИмяМетода);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ИмяСценария;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
@@ -280,3 +280,17 @@
|
||||
Файл = НовыйФайл(Файл);
|
||||
Возврат СтрНайти(Файл.ПолноеИмя, Каталог) > 0;
|
||||
КонецФункции
|
||||
|
||||
Процедура СкопироватьКаталог(Источник, Приемник) Экспорт
|
||||
Файлы = НайтиФайлы(Источник, "*");
|
||||
Для Каждого Файл Из Файлы Цикл
|
||||
НовыйОбъект = ОбъединитьПути(Приемник, Файл.Имя);
|
||||
|
||||
Если Файл.ЭтоКаталог() Тогда
|
||||
СоздатьКаталог(НовыйОбъект);
|
||||
СкопироватьКаталог(Файл.ПолноеИмя, НовыйОбъект);
|
||||
Иначе
|
||||
КопироватьФайл(Файл.ПолноеИмя, НовыйОбъект);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
КонецПроцедуры
|
||||
@@ -0,0 +1,17 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2014-2025 BIA-Technologies Limited Liability Company
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"Precommt4onecСценарии": {
|
||||
"ИспользоватьСценарииРепозитория": false,
|
||||
"ПроверкаСообщенияКоммита": {
|
||||
"Использовать": false,
|
||||
"Выражение": "",
|
||||
"СообщениеОбОшибке": ""
|
||||
},
|
||||
"КаталогЛокальныхСценариев": "",
|
||||
"ГлобальныеСценарии": [
|
||||
"ВставкаКопирайтов.os"
|
||||
],
|
||||
"ОтключенныеСценарии": [],
|
||||
"ВключатьФайлы": [
|
||||
".*[/\\\\].+\\.bsl"
|
||||
],
|
||||
"ИсключатьФайлы": [],
|
||||
"НастройкиСценариев": {
|
||||
"ВставкаКопирайтов": {
|
||||
"ИгнорироватьМодулиОбъектовПоставки": true,
|
||||
"ПутьКФайлуКопирайта": "COPYRIGHT",
|
||||
"ИсключаемыеТэги": [
|
||||
"// IMPORT"
|
||||
],
|
||||
"ВключатьФайлы": [
|
||||
".*[/\\\\].+\\.bsl"
|
||||
]
|
||||
},
|
||||
"ОтключениеПолнотекстовогоПоиска": {
|
||||
"МетаданныеДляИсключения": {}
|
||||
},
|
||||
"ПроверкаНецензурныхСлов": {
|
||||
"ФайлСНецензурнымиСловами": "НецензурныеСлова.txt"
|
||||
},
|
||||
"РазборОтчетовОбработокРасширений": {
|
||||
"ИспользоватьНастройкиПоУмолчанию": true,
|
||||
"ВерсияПлатформы": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
Процедура ИмяПроцедуры()
|
||||
Сообщить("Тестовая процедура");
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ИмяФункции()
|
||||
Возврат "Тестовая функция";
|
||||
КонецФункции
|
||||
Binary file not shown.
+16
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"Precommt4onecСценарии": {
|
||||
"ИспользоватьСценарииРепозитория": false,
|
||||
"ПроверкаСообщенияКоммита": {
|
||||
"Использовать": false,
|
||||
"Выражение": "",
|
||||
"СообщениеОбОшибке": ""
|
||||
},
|
||||
"КаталогЛокальныхСценариев": "",
|
||||
"ГлобальныеСценарии": [
|
||||
"РазборОбычныхФормНаИсходники.os"
|
||||
],
|
||||
"ОтключенныеСценарии": [],
|
||||
"НастройкиСценариев": {}
|
||||
}
|
||||
}
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+16
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"Precommt4onecСценарии": {
|
||||
"ИспользоватьСценарииРепозитория": false,
|
||||
"ПроверкаСообщенияКоммита": {
|
||||
"Использовать": false,
|
||||
"Выражение": "",
|
||||
"СообщениеОбОшибке": ""
|
||||
},
|
||||
"КаталогЛокальныхСценариев": "",
|
||||
"ГлобальныеСценарии": [
|
||||
"РазборОтчетовОбработокРасширений.os"
|
||||
],
|
||||
"ОтключенныеСценарии": [],
|
||||
"НастройкиСценариев": {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,260 @@
|
||||
#Использовать asserts
|
||||
#Использовать logos
|
||||
#Использовать tempfiles
|
||||
#Использовать gitrunner
|
||||
#Использовать "../src"
|
||||
|
||||
#Область ОписаниеПеременных
|
||||
|
||||
Перем юТест;
|
||||
Перем Лог;
|
||||
Перем МенеджерВременныхФайлов;
|
||||
Перем РепозиторийGit;
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Возвращает список тестов сценария
|
||||
//
|
||||
// Параметры:
|
||||
// ЮнитТестирование - Модуль - модуль юнит-тестов
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив из Строка - массив имен методов
|
||||
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
|
||||
юТест = ЮнитТестирование;
|
||||
|
||||
ВсеТесты = Новый Массив;
|
||||
ВсеТесты.Добавить("ТестДолжен_ПодготовитьДанныеИВыполнитьСценарийВставкиКопирайта");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПодготовитьДанныеИВыполнитьСценарийРазбораОбычныхФорм");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПодготовитьДанныеИВыполнитьСценарийРазбораОтчетовОбработокРасширений");
|
||||
|
||||
Возврат ВсеТесты;
|
||||
КонецФункции
|
||||
|
||||
// Выполняет инициализацию переменных модуля перед запуском теста
|
||||
Процедура ПередЗапускомТеста() Экспорт
|
||||
ВремТестер = Новый Тестер;
|
||||
Лог = Логирование.ПолучитьЛог(ВремТестер.ИмяЛога());
|
||||
|
||||
ВключитьПоказОтладки();
|
||||
|
||||
МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов;
|
||||
КонецПроцедуры
|
||||
|
||||
// Выполняет очистку данных после запуска теста
|
||||
Процедура ПослеЗапускаТеста() Экспорт
|
||||
ВыключитьПоказОтладки();
|
||||
МенеджерВременныхФайлов.Удалить();
|
||||
МенеджерВременныхФайлов = Неопределено;
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПодготовитьДанныеИВыполнитьСценарийВставкиКопирайта() Экспорт
|
||||
КаталогФикстур = КаталогТестовыхФикстур();
|
||||
Фикстура = ОбъединитьПути(КаталогФикстур, "ВыполнениеСценариев", "ВставкаКопирайта");
|
||||
|
||||
ВременныйКаталог = ПодготовитьВременныйКаталог(Фикстура);
|
||||
ТаблицаФайлов = ТаблицаИзмененныхФайлов(ВременныйКаталог);
|
||||
НаборНастроек = НастройкиОбработки(ВременныйКаталог);
|
||||
ПараметрыОбработки = ПараметрыОбработки(ВременныйКаталог);
|
||||
|
||||
Попытка
|
||||
СценарииОбработки.ВыполнитьОбработкуФайлов(ТаблицаФайлов, НаборНастроек, ПараметрыОбработки);
|
||||
Исключение
|
||||
ВызватьИсключение "Ошибка обработки файлов";
|
||||
КонецПопытки;
|
||||
|
||||
ОчиститьКаталог(ВременныйКаталог);
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПодготовитьДанныеИВыполнитьСценарийРазбораОбычныхФорм() Экспорт
|
||||
КаталогФикстур = КаталогТестовыхФикстур();
|
||||
Фикстура = ОбъединитьПути(КаталогФикстур, "ВыполнениеСценариев", "РазборОбычныхФормНаИсходники");
|
||||
|
||||
ВременныйКаталог = ПодготовитьВременныйКаталог(Фикстура);
|
||||
ТаблицаФайлов = ТаблицаИзмененныхФайлов(ВременныйКаталог);
|
||||
НаборНастроек = НастройкиОбработки(ВременныйКаталог);
|
||||
ПараметрыОбработки = ПараметрыОбработки(ВременныйКаталог);
|
||||
|
||||
Попытка
|
||||
СценарииОбработки.ВыполнитьОбработкуФайлов(ТаблицаФайлов, НаборНастроек, ПараметрыОбработки);
|
||||
Исключение
|
||||
ВызватьИсключение "Ошибка обработки файлов";
|
||||
КонецПопытки;
|
||||
|
||||
ОчиститьКаталог(ВременныйКаталог);
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПодготовитьДанныеИВыполнитьСценарийРазбораОтчетовОбработокРасширений() Экспорт
|
||||
КаталогФикстур = КаталогТестовыхФикстур();
|
||||
Фикстура = ОбъединитьПути(КаталогФикстур, "ВыполнениеСценариев", "РазборОтчетовОбработокРасширений");
|
||||
|
||||
ВременныйКаталог = ПодготовитьВременныйКаталог(Фикстура);
|
||||
ТаблицаФайлов = ТаблицаИзмененныхФайлов(ВременныйКаталог);
|
||||
НаборНастроек = НастройкиОбработки(ВременныйКаталог);
|
||||
ПараметрыОбработки = ПараметрыОбработки(ВременныйКаталог);
|
||||
|
||||
Попытка
|
||||
СценарииОбработки.ВыполнитьОбработкуФайлов(ТаблицаФайлов, НаборНастроек, ПараметрыОбработки);
|
||||
Исключение
|
||||
ВызватьИсключение "Ошибка обработки файлов";
|
||||
КонецПопытки;
|
||||
|
||||
ОчиститьКаталог(ВременныйКаталог);
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ВключитьПоказОтладки()
|
||||
Лог.УстановитьУровень(УровниЛога.Отладка);
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВыключитьПоказОтладки()
|
||||
Лог.УстановитьУровень(УровниЛога.Информация);
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОчиститьКаталог(Каталог)
|
||||
НайденныеФайлы = НайтиФайлы(Каталог, "*", Истина);
|
||||
Каталоги = Новый Массив;
|
||||
Файлы = Новый Массив;
|
||||
|
||||
Для Каждого Файл Из НайденныеФайлы Цикл
|
||||
Если Файл.ЭтоКаталог() Тогда
|
||||
Каталоги.Добавить(Файл.ПолноеИмя);
|
||||
Иначе
|
||||
Файлы.Добавить(Файл.ПолноеИмя);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Файл Из Файлы Цикл
|
||||
УдалитьФайл(Файл, "Ошибка удаления файла");
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Файл Из Каталоги Цикл
|
||||
УдалитьФайл(Файл, "Ошибка удаления каталога");
|
||||
КонецЦикла;
|
||||
|
||||
УдалитьФайл(Каталог, "Ошибка удаления корневого каталога");
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УдалитьФайл(Знач ИмяФайла, Знач СообщениеОбОшибке)
|
||||
Файл = ФайловыеОперации.НовыйФайл(ИмяФайла);
|
||||
Если НЕ Файл.Существует() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ МенеджерВременныхФайлов.БезопасноУдалитьФайл(Файл.ПолноеИмя) Тогда
|
||||
ТекстОшибки = ОписаниеОшибки();
|
||||
Лог.Отладка("%1 `%2`: %3", СообщениеОбОшибке, Файл.ПолноеИмя, ТекстОшибки);
|
||||
КонецЕсли;
|
||||
КонецПроцедуры
|
||||
|
||||
Функция КаталогТестовыхФикстур()
|
||||
Возврат ОбъединитьПути(КаталогИсходников(), "tests", "fixtures");
|
||||
КонецФункции
|
||||
|
||||
Функция КаталогИсходников()
|
||||
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..");
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьДополнительныеНастройки(Знач КаталогРепозитория = Неопределено, Знач ТекущийКаталогИсходныхФайлов = Неопределено)
|
||||
Если КаталогРепозитория = Неопределено Тогда
|
||||
КаталогРепозитория = ТекущийКаталог();
|
||||
КонецЕсли;
|
||||
|
||||
УправлениеНастройками = МенеджерНастроек.НастройкиРепозитория(КаталогРепозитория, Ложь);
|
||||
Настройка = МенеджерНастроек.НастройкиПроекта().Получить("НастройкиСценариев");
|
||||
|
||||
ДополнительныеНастройки = СценарииОбработки.ПолучитьСтандартныеПараметрыОбработки();
|
||||
ДополнительныеНастройки.Лог = Лог;
|
||||
ДополнительныеНастройки.КаталогРепозитория = КаталогРепозитория;
|
||||
ДополнительныеНастройки.ТекущийКаталогИсходныхФайлов = ТекущийКаталогИсходныхФайлов;
|
||||
ДополнительныеНастройки.Настройки = Настройка;
|
||||
|
||||
Возврат ДополнительныеНастройки;
|
||||
КонецФункции
|
||||
|
||||
Функция НастройкиОбработки(КаталогРепозитория)
|
||||
УправлениеНастройками = МенеджерНастроек.НастройкиРепозитория(КаталогРепозитория);
|
||||
Возврат СценарииОбработки.ПолучитьСценарииСПараметрамиВыполнения(КаталогРепозитория);
|
||||
КонецФункции
|
||||
|
||||
Функция ПараметрыОбработки(КаталогРепозитория)
|
||||
ПараметрыОбработки = СценарииОбработки.ПолучитьСтандартныеПараметрыОбработки();
|
||||
ПараметрыОбработки.Лог = Лог;
|
||||
ПараметрыОбработки.КаталогРепозитория = КаталогРепозитория;
|
||||
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов = КаталогРепозитория;
|
||||
ПараметрыОбработки.НастройкиИБ = МенеджерПриложения.ПолучитьНастройкиИБ();
|
||||
|
||||
Возврат ПараметрыОбработки;
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьСценарий(ИмяСценария)
|
||||
Сценарий = ОбъединитьПути(КаталогИсходников(), "src", "СценарииОбработки", ИмяСценария);
|
||||
РасширениеФайла = ".os";
|
||||
Если Не СтрЗаканчиваетсяНа(Сценарий, РасширениеФайла) Тогда
|
||||
Сценарий = Сценарий + РасширениеФайла;
|
||||
КонецЕсли;
|
||||
ОбъектСценария = ЗагрузитьСценарий(Сценарий);
|
||||
|
||||
Возврат ОбъектСценария;
|
||||
КонецФункции
|
||||
|
||||
Функция РепозиторийGit(КаталогРепозитория = "")
|
||||
Если РепозиторийGit = Неопределено Тогда
|
||||
РепозиторийGit = Новый ГитРепозиторий;
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ ПустаяСтрока(КаталогРепозитория) И РепозиторийGit.ПолучитьРабочийКаталог() <> КаталогРепозитория Тогда
|
||||
РепозиторийGit.УстановитьРабочийКаталог(КаталогРепозитория);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат РепозиторийGit;
|
||||
КонецФункции
|
||||
|
||||
Функция ПодготовитьВременныйКаталог(Фикстура)
|
||||
ВременныйКаталог = МенеджерВременныхФайлов.СоздатьКаталог("test");
|
||||
СоздатьКаталог(ВременныйКаталог);
|
||||
|
||||
Репозиторий = РепозиторийGit(ВременныйКаталог);
|
||||
Репозиторий.Инициализировать();
|
||||
|
||||
ФайловыеОперации.СкопироватьКаталог(Фикстура, ВременныйКаталог);
|
||||
|
||||
Репозиторий.ДобавитьФайлВИндекс(".");
|
||||
|
||||
Возврат ВременныйКаталог;
|
||||
КонецФункции
|
||||
|
||||
Функция ТаблицаИзмененныхФайлов(КаталогРепозитория)
|
||||
ПараметрыКоманды = Новый Массив;
|
||||
ПараметрыКоманды.Добавить("diff --cached --name-status --no-renames");
|
||||
|
||||
РепозиторийGit = РепозиторийGit(КаталогРепозитория);
|
||||
РепозиторийGit.ВыполнитьКоманду(ПараметрыКоманды);
|
||||
|
||||
РезультатВывода = РепозиторийGit.ПолучитьВыводКоманды();
|
||||
СтрокиВывода = СтрРазделить(РезультатВывода, Символы.ПС);
|
||||
|
||||
ТаблицаФайлов = СценарииОбработки.НоваяТаблицаОбрабатываемыхФайлов();
|
||||
Для Каждого СтрокаВывода Из СтрокиВывода Цикл
|
||||
Если ПустаяСтрока(СтрокаВывода) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Данные = ВариантИзмененийФайловGit.РазделитьИмяФайлаИВариантИзменения(СтрокаВывода);
|
||||
ИмяФайла = ОбъединитьПути(КаталогРепозитория, СокрЛП(Данные.ИмяФайла));
|
||||
|
||||
НоваяСтрока = ТаблицаФайлов.Добавить();
|
||||
НоваяСтрока.Файл = ФайловыеОперации.НовыйФайл(ИмяФайла);
|
||||
НоваяСтрока.Каталог = КаталогРепозитория;
|
||||
НоваяСтрока.ТипИзменения = Данные.ТипИзменения;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ТаблицаФайлов;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
@@ -30,6 +30,8 @@
|
||||
"УдалениеЛишнихПустыхСтрок.os"
|
||||
],
|
||||
"ОтключенныеСценарии": [],
|
||||
"ВключатьФайлы": [],
|
||||
"ИсключатьФайлы": [],
|
||||
"НастройкиСценариев": {
|
||||
"ВставкаКопирайтов": {
|
||||
"ИгнорироватьМодулиОбъектовПоставки": true,
|
||||
|
||||
Reference in new issue
Block a user