From a0a926625345c7c1c455a042bdd44a5c16d0557c Mon Sep 17 00:00:00 2001 From: Maxmov Valery Date: Tue, 5 Sep 2017 14:28:04 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=80=D0=B0=D0=B7=D0=B1=D0=BE=D1=80=D0=B0=20=D0=BE?= =?UTF-8?q?=D1=82=D1=87=D0=B5=D1=82=D0=BE=D0=B2,=20=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=BE=D0=BA=20=D0=B8=20=D1=80=D0=B0?= =?UTF-8?q?=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B2=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=BC=20=D0=BF=D1=80=D0=B8=D0=B1?= =?UTF-8?q?=D0=BB=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/ПростыеКоманды.feature | 10 +- packagedef | 2 + src/Классы/КомандаПрекоммит.os | 165 ++++++++++++- src/Модули/ВариантИзмененийФайловGit.os | 52 ++++ src/Модули/ПараметрыПриложения.os | 8 +- .../РазборОтчетовОбработокРасширений.os | 231 ++++++++++++++++++ src/СценарииОбработки/ШаблонСценария.os | 39 +++ 7 files changed, 497 insertions(+), 10 deletions(-) create mode 100644 src/Модули/ВариантИзмененийФайловGit.os create mode 100644 src/СценарииОбработки/РазборОтчетовОбработокРасширений.os create mode 100644 src/СценарииОбработки/ШаблонСценария.os diff --git a/features/ПростыеКоманды.feature b/features/ПростыеКоманды.feature index 247ce0c..fc073f3 100644 --- a/features/ПростыеКоманды.feature +++ b/features/ПростыеКоманды.feature @@ -24,8 +24,9 @@ """ precommit4onec v1.0 Возможные команды: - help - Выводит справку по командам - version - Выводит версию приложения + help - Выводит справку по командам + version - Выводит версию приложения + precommit - Выполняет сценарии precommit """ И Код возврата команды "oscript" равен 0 @@ -35,7 +36,8 @@ """ precommit4onec v1.0 Возможные команды: - help - Выводит справку по командам - version - Выводит версию приложения + help - Выводит справку по командам + version - Выводит версию приложения + precommit - Выполняет сценарии precommit """ И Код возврата команды "oscript" равен 5 diff --git a/packagedef b/packagedef index 0ca96ff..fa4c926 100644 --- a/packagedef +++ b/packagedef @@ -9,6 +9,8 @@ .ЗависитОт("logos", "0.5") .ЗависитОт("cmdline", "0.4.1") .ЗависитОт("1bdd", "1.5.2") + .ЗависитОт("gitrunner", "1.4.0") + .ЗависитОт("v8runner", "0.4.1") .ВключитьФайл("src") .ВключитьФайл("features") .ИсполняемыйФайл("src/main.os", ИмяПродукта); diff --git a/src/Классы/КомандаПрекоммит.os b/src/Классы/КомандаПрекоммит.os index e5b2789..4355863 100644 --- a/src/Классы/КомандаПрекоммит.os +++ b/src/Классы/КомандаПрекоммит.os @@ -4,10 +4,18 @@ // /////////////////////////////////////////////////////////////////////////////// +#Использовать gitrunner + +Перем РепозиторийGit; +Перем Лог; +Перем СценарииОбработки; + +/////////////////////////////////////////////////////////////////////////////// + Процедура НастроитьКоманду(Знач Команда, Знач Парсер) Экспорт // Добавление параметров команды - // Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ИмяПараметра", "Описание параметра"); + Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРепозитория", "Каталог анализируемого репозитория"); // Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "ИмяПараметра", "Описание параметра"); // Парсер.ДобавитьПараметрФлагКоманды(Команда, "ИмяПараметра", "Описание параметра"); // Парсер.ДобавитьПараметрКоллекцияКоманды(Команда, "ИмяПараметра", "Описание параметра"); @@ -23,9 +31,162 @@ // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач Приложение) Экспорт - ВызватьИсключение "Не реализовано"; + Лог = Приложение.ПолучитьЛог(); + + ЗагрузитьСценарииОбработки(); + + КаталогРепозитория = ПараметрыКоманды["КаталогРепозитория"]; + ФайлКаталогРепозитория = Новый Файл(КаталогРепозитория); + Если НЕ ФайлКаталогРепозитория.Существует() ИЛИ ФайлКаталогРепозитория.ЭтоФайл() Тогда + + Лог.Ошибка("Каталог репозитория '%1' не существует или это файл", КаталогРепозитория); + Возврат Приложение.РезультатыКоманд().НеверныеПараметры; + + КонецЕсли; + + КаталогИсходныхФайлов = "src"; + ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, КаталогИсходныхФайлов); + + КаталогРепозитория = ФайлКаталогРепозитория.ПолноеИмя; + РепозиторийGit = Новый ГитРепозиторий(); + РепозиторийGit.УстановитьРабочийКаталог(КаталогРепозитория); + + Если НЕ РепозиторийGit.ЭтоРепозиторий() Тогда + + Лог.Ошибка("Каталог '%1' не является репозиторием git", КаталогРепозитория); + Возврат Приложение.РезультатыКоманд().НеверныеПараметры; + + КонецЕсли; + + ЖурналИзменений = ПолучитьЖурналИзменений(); + + Ит = 0; + ИзмененныеКаталоги = Новый Массив; + ПараметрыОбработки = Новый Структура("Лог, ЖурналИзменений, ИзмененныеКаталоги, КаталогРепозитория", Лог, ЖурналИзменений, ИзмененныеКаталоги, КаталогРепозитория); + Пока Ит < ЖурналИзменений.Количество() Цикл + + АнализируемыйФайл = Новый Файл(ОбъединитьПути(КаталогРепозитория, ЖурналИзменений[Ит].ИмяФайла)); + Лог.Отладка("Анализируется файл <%1>", АнализируемыйФайл.Имя); + ПараметрыОбработки.Вставить("ЖурналИзменений", ЖурналИзменений); + + Для Каждого СценарийОбработки Из СценарииОбработки Цикл + + ФайлОбработан = СценарийОбработки.Сценарий.ОбработатьФайл(АнализируемыйФайл, ТекущийКаталогИсходныхФайлов, ПараметрыОбработки); + Если ФайлОбработан Тогда + + Продолжить; + + КонецЕсли; + + КонецЦикла; + + Ит = Ит + 1; + + КонецЦикла; + + // измененные каталоги необходимо добавить в индекс + Лог.Отладка("Добавление измененных каталогов в индекс git"); + ДобавитьИзмененныеКаталогиВИндекскGit(ПараметрыОбработки.ИзмененныеКаталоги); // При успешном выполнении возвращает код успеха Возврат Приложение.РезультатыКоманд().Успех; КонецФункции // ВыполнитьКоманду + +/////////////////////////////////////////////////////////////////////////////// + +Функция ПолучитьЖурналИзменений() + + ПараметрыКомандыGit = Новый Массив; + ПараметрыКомандыGit.Добавить("diff-index --name-status --cached HEAD"); + РепозиторийGit.ВыполнитьКоманду(ПараметрыКомандыGit); + ПараметрыКомандыGit = Новый Массив; + ПараметрыКомандыGit.Добавить("status --porcelain"); + РепозиторийGit.ВыполнитьКоманду(ПараметрыКомандыGit); + РезультатВывода = РепозиторийGit.ПолучитьВыводКоманды(); + СтрокиВывода = СтрРазделить(РезультатВывода, Символы.ПС); + + ЖурналИзменений = Новый Массив; + Для Каждого СтрокаВывода Из СтрокиВывода Цикл + + Лог.Информация(" <%1>", СтрокаВывода); + СтрокаВывода = СокрЛП(СтрокаВывода); + ПозицияПробела = СтрНайти(СтрокаВывода, " "); + СимволИзменения = Лев(СтрокаВывода, 1); + Если СимволИзменения = "?" Тогда + + Продолжить; + + КонецЕсли; + + ТипИзменения = ВариантИзмененийФайловGit.ОпределитьВариантИзменения(СимволИзменения); + + ИмяФайла = СокрЛП(СтрЗаменить(Сред(СтрокаВывода, ПозицияПробела + 1), """", "")); + + Если ТипИзменения = ВариантИзмененийФайловGit.Переименован Тогда + + // это два события - удален и добавлен + ПозицияСтрелки = СтрНайти(ИмяФайла, "->"); + ИмяФайлаУдален = СокрЛП(Лев(ИмяФайла, ПозицияСтрелки - 1)); + ЖурналИзменений.Добавить(Новый Структура("ИмяФайла, ТипИзменения", ИмяФайлаУдален, ВариантИзмененийФайловGit.Удален)); + Лог.Отладка(" В журнале git %2 файл <%1>", ИмяФайлаУдален, ВариантИзмененийФайловGit.Удален); + + ИмяФайла = СокрЛП(Сред(ИмяФайла, ПозицияСтрелки + 2)); + ТипИзменения = ВариантИзмененийФайловGit.Добавлен; + + КонецЕсли; + + ЖурналИзменений.Добавить(Новый Структура("ИмяФайла, ТипИзменения", ИмяФайла, ТипИзменения)); + Лог.Отладка(" В журнале git %2 файл <%1>", ИмяФайла, ТипИзменения); + + КонецЦикла; + + Возврат ЖурналИзменений; + +КонецФункции + +Процедура ЗагрузитьСценарииОбработки() + + СценарииОбработки = Новый Массив; + ФайлыСценариев = НайтиФайлы(ОбъединитьПути(ТекущийСценарий().Каталог, "..", "СценарииОбработки"), "*.os"); + Для Каждого ФайлСценария Из ФайлыСценариев Цикл + + Если СтрСравнить(ФайлСценария.ИмяБезРасширения, "ШаблонСценария") = 0 Тогда + + Продолжить; + + КонецЕсли; + + Попытка + + СценарийОбработки = ЗагрузитьСценарий(ФайлСценария.ПолноеИмя); + СценарииОбработки.Добавить(Новый Структура("ИмяСценария, Сценарий", СценарийОбработки.ИмяСценария(), СценарийОбработки)); + + Исключение + + Лог.Ошибка("Ошибка загрузки сценария %1: %2", ФайлСценария.ПолноеИмя, ОписаниеОшибки()); + Продолжить; + + КонецПопытки; + + КонецЦикла; + + Если СценарииОбработки.Количество() = 0 Тогда + + ВызватьИсключение "Нет доступных сценариев обработки файлов"; + + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьИзмененныеКаталогиВИндекскGit(Знач ИзмененныеКаталоги) + + Для Каждого Каталог Из ИзмененныеКаталоги Цикл + + ПараметрыКомандыGit = Новый Массив; + ПараметрыКомандыGit.Добавить(СтрШаблон("add --all ""%1""")); + РепозиторийGit.ВыполнитьКоманду(ПараметрыКомандыGit); + + КонецЦикла + +КонецПроцедуры \ No newline at end of file diff --git a/src/Модули/ВариантИзмененийФайловGit.os b/src/Модули/ВариантИзмененийФайловGit.os new file mode 100644 index 0000000..e3ba740 --- /dev/null +++ b/src/Модули/ВариантИзмененийФайловGit.os @@ -0,0 +1,52 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Служебный модуль-перечисление +// +/////////////////////////////////////////////////////////////////////////////// + +Перем Добавлен Экспорт; +Перем Изменен Экспорт; +Перем Удален Экспорт; +Перем Переименован Экспорт; + +/////////////////////////////////////////////////////////////////////////////// + +// ОпределитьВариантИзменения +// Определяет вариант изменения файла из терминов git +// +// Параметры: +// СимволИзменения - Строка - Символ изменения файла из лога git +// +// Возвращаемое значение: +// Строка - Значение варианта изменения +// +Функция ОпределитьВариантИзменения(СимволИзменения) Экспорт + + Если СтрСравнить(СимволИзменения, "M") = 0 Тогда + + Возврат Изменен; + + ИначеЕсли СтрСравнить(СимволИзменения, "A") = 0 Тогда + + Возврат Добавлен; + + ИначеЕсли СтрСравнить(СимволИзменения, "D") = 0 Тогда + + Возврат Удален; + + ИначеЕсли СтрСравнить(СимволИзменения, "R") = 0 Тогда + + Возврат Переименован; + + КонецЕсли; + + Возврат СимволИзменения; + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// + +Добавлен = "Добавлен"; +Изменен = "Изменен"; +Удален = "Удален"; +Переименован = "Переименован"; \ No newline at end of file diff --git a/src/Модули/ПараметрыПриложения.os b/src/Модули/ПараметрыПриложения.os index f2e1d00..6cda9bb 100644 --- a/src/Модули/ПараметрыПриложения.os +++ b/src/Модули/ПараметрыПриложения.os @@ -12,6 +12,7 @@ /////////////////////////////////////////////////////////////////////////////// // СВОЙСТВА ПРОДУКТА +/////////////////////////////////////////////////////////////////////////////// // ВерсияПродукта // Возвращает текущую версию продукта @@ -39,6 +40,7 @@ /////////////////////////////////////////////////////////////////////////////// // ЛОГИРОВАНИЕ +/////////////////////////////////////////////////////////////////////////////// // Форматирование логов // См. описание метода "УстановитьРаскладку" библиотеки logos @@ -63,6 +65,7 @@ /////////////////////////////////////////////////////////////////////////////// // НАСТРОЙКА КОМАНД +/////////////////////////////////////////////////////////////////////////////// // Возвращает имя команды "version" (ключ командной строки) // @@ -75,7 +78,6 @@ КонецФункции // ИмяКомандыВерсия - // Возвращает имя команды "help" (ключ командной строки) // // Возвращаемое значение: @@ -87,7 +89,6 @@ КонецФункции // ИмяКомандыПомощь() - // ИмяКомандыПоУмолчанию // Одна из команд может вызываться неявно, без указания команды. // Иными словами, здесь указывается какой обработчик надо вызывать, если приложение запущено без какой-либо команды @@ -97,8 +98,7 @@ // Строка - имя команды по умолчанию Функция ИмяКомандыПоУмолчанию() Экспорт - // Возврат "default-action"; - Возврат ИмяКомандыПомощь(); + Возврат "precommit"; КонецФункции // ИмяКомандыПоУмолчанию diff --git a/src/СценарииОбработки/РазборОтчетовОбработокРасширений.os b/src/СценарииОбработки/РазборОтчетовОбработокРасширений.os new file mode 100644 index 0000000..136065a --- /dev/null +++ b/src/СценарииОбработки/РазборОтчетовОбработокРасширений.os @@ -0,0 +1,231 @@ +/////////////////////////////////////////////////////////////////////////////// +// Служебный модуль с реализацией сценариев обработки файлов +// "РазборОтчетовОбработокРасширений" +/////////////////////////////////////////////////////////////////////////////// + +#Использовать v8runner + +Перем Лог; + +/////////////////////////////////////////////////////////////////////////////// +// Стандартный программный интерфейс +/////////////////////////////////////////////////////////////////////////////// + +// ИмяСценария +// Возвращает имя сценария обработки файлов +// +// Возвращаемое значение: +// Строка - Имя текущего сценария обработки файлов +// +Функция ИмяСценария() Экспорт + + Возврат "РазборОтчетовОбработокРасширений"; + +КонецФункции // ИмяСценария() + +// ОбработатьФайл +// Выполняет обработку файла +// +// Параметры: +// АнализиремыйАнализируемыйФайлФайл - Файл - Файл из журнала git для анализа +// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория +// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать +// * ЖурналИзменений - Массив - Набор описаний анализируемых файлов +// * Лог - Объект - Текущий лог +// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс +// * КаталогРепозитория - Строка - Адрес каталога репозитория +// +// Возвращаемое значение: +// Булево - Признак выполненной обработки файла +// +Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт + + Лог = ДополнительныеПараметры.Лог; + + Если ТипФайлаПоддерживается(АнализируемыйФайл) Тогда + Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); + + КаталогВыгрузки = ПодготовитьКаталогВыгрузки(КаталогИсходныхФайлов, АнализируемыйФайл, ДополнительныеПараметры); + Если Не АнализируемыйФайл.Существует() Тогда + + Возврат ИСТИНА; + + КонецЕсли; + + Если СтрСравнить(АнализируемыйФайл.Расширение, ".cfe") <> 0 Тогда + + РаспаковатьОтчетОбработку(АнализируемыйФайл, КаталогВыгрузки); + + Иначе + + РаспаковатьРасширение(АнализируемыйФайл, КаталогВыгрузки); + + КонецЕсли; + + // // Добавим файлы для дальнейшей обработки + // // Понятно, что добавить удаленные не получится + // ФайлыВКаталогеТВФ = НайтиФайлы(КаталогВыгрузки, "*", ИСТИНА); + // Для каждого ФайлВКателогеТВФ Из ФайлыВКаталогеТВФ Цикл + + // ДополнительныеПараметры.ЖурналИзменений.Добавить( + // Новый Структура("Имя")СтрЗаменить(ФайлВКателогеТВФ.ПолноееИмя, ДополнительныеПараметры.КаталогРепозитория, "")); + + // КонецЦикла; + + Возврат ИСТИНА; + + КонецЕсли; + + Возврат ЛОЖЬ; + +КонецФункции // ОбработатьФайл() + +/////////////////////////////////////////////////////////////////////////////// + +Функция ПодготовитьКаталогВыгрузки(КаталогИсходныхФайлов, ОбрабатываемыйФайл, ДополнительныеПараметры) + + ФайлУдален = НЕ ОбрабатываемыйФайл.Существует(); + + СоставПутиФайл = СтрРазделить(ОбрабатываемыйФайл.Путь, ПолучитьРазделительПути()); + СоставПутиКаталогИсходныхФайлов = СтрРазделить(КаталогИсходныхФайлов, ПолучитьРазделительПути()); + ИмяКаталогаВыгрузки = ОбрабатываемыйФайл.ИмяБезРасширения; + Для Ит = 0 По Мин(СоставПутиКаталогИсходныхФайлов.Количество(), СоставПутиФайл.Количество()) - 1 Цикл + + Если СоставПутиФайл[Ит] = СоставПутиКаталогИсходныхФайлов[Ит] Тогда + + Продолжить; + + КонецЕсли; + + Пока Ит > 0 Цикл + + СоставПутиФайл.Удалить(0); + Ит = Ит - 1; + + КонецЦикла; + + ИмяКаталогаВыгрузки = СтрСоединить(СоставПутиФайл, ПолучитьРазделительПути()); + Прервать; + + КонецЦикла; + Если ИмяКаталогаВыгрузки <> ОбрабатываемыйФайл.ИмяБезРасширения Тогда + + ИмяКаталогаВыгрузки = ОбъединитьПути(ИмяКаталогаВыгрузки, ОбрабатываемыйФайл.ИмяБезРасширения); + + КонецЕсли; + + КаталогТекущегоВнешнегоФайла = ОбъединитьПути(КаталогИсходныхФайлов, Сред(НРег(ОбрабатываемыйФайл.Расширение), 2), ИмяКаталогаВыгрузки); + ФайлКаталогТекущегоВнешнегоФайла = Новый Файл(КаталогТекущегоВнешнегоФайла); + Если НЕ ФайлКаталогТекущегоВнешнегоФайла.Существует() Тогда + + Если ФайлУдален Тогда + + КаталогТекущегоВнешнегоФайла = ""; + + Иначе + + СоздатьКаталог(КаталогТекущегоВнешнегоФайла); + + КонецЕсли; + + Иначе + + ФайлыВКаталогеТВФ = НайтиФайлы(КаталогТекущегоВнешнегоФайла, "*", ИСТИНА); + Для каждого ФайлВКателогеТВФ Из ФайлыВКаталогеТВФ Цикл + + Если НЕ ФайлВКателогеТВФ.Существует() Тогда + + Продолжить; + + КонецЕсли; + + УдалитьФайлы(ФайлВКателогеТВФ.ПолноеИмя); + + КонецЦикла; + + Если ФайлУдален Тогда + + УдалитьФайлы(КаталогТекущегоВнешнегоФайла); + + КонецЕсли; + + КонецЕсли; + + Если НЕ ПустаяСтрока(КаталогТекущегоВнешнегоФайла) Тогда + + ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(КаталогТекущегоВнешнегоФайла); + + КонецЕсли; + + Если Не ФайлУдален Тогда + + Возврат КаталогТекущегоВнешнегоФайла; + + КонецЕсли; + + Возврат ""; + +КонецФункции // ПодготовитьКаталогВыгрузки() + +Функция ТипФайлаПоддерживается(Файл) + + Если ПустаяСтрока(Файл.Расширение) Тогда + + Возврат Ложь; + + КонецЕсли; + + Поз = Найти(".epf,.erf,.cfe,", НРег(Файл.Расширение + ",")); + Возврат Поз > 0; + +КонецФункции + +Процедура РаспаковатьОтчетОбработку(Знач Файл, Знач КаталогВыгрузки) + + Лог.Отладка("Распаковка файла внешнего отчета обработки %1", Файл.ПолноеИмя); + + Конфигуратор = ПодготовитьКонфигуратор(); + + Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); + Параметры.Добавить("/DumpExternalDataProcessorOrReportToFiles"); + Параметры.Добавить(СтрШаблон("%1", КаталогВыгрузки)); + Параметры.Добавить(СтрШаблон("%1", Файл.ПолноеИмя)); + Конфигуратор.ВыполнитьКоманду(Параметры); + Лог.Отладка("Вывод 1С:Предприятия - " + Конфигуратор.ВыводКоманды()); + +КонецПроцедуры + +Процедура РаспаковатьРасширение(Знач Файл, Знач КаталогВыгрузки) + + Лог.Отладка("Распаковка файла расширения %1", Файл.ПолноеИмя); + + ИмяРасширения = Файл.ИмяБезРасширения; + Конфигуратор = ПодготовитьКонфигуратор(); + + Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); + Параметры.Добавить(СтрШаблон("/LoadCfg ""%1""", Файл.ПолноеИмя)); + Параметры.Добавить(СтрШаблон("-Extension %1", ИмяРасширения)); + Конфигуратор.ВыполнитьКоманду(Параметры); + Лог.Отладка("Вывод 1С:Предприятия - " + Конфигуратор.ВыводКоманды()); + + Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); + Параметры.Добавить(СтрШаблон("/DumpConfigToFiles ""%1""", КаталогВыгрузки)); + Параметры.Добавить(СтрШаблон("-Extension %1", ИмяРасширения)); + Конфигуратор.ВыполнитьКоманду(Параметры); + Лог.Отладка("Вывод 1С:Предприятия - " + Конфигуратор.ВыводКоманды()); + +КонецПроцедуры + +Функция ПодготовитьКонфигуратор() + + Конфигуратор = Новый УправлениеКонфигуратором(); + КаталогВременнойИБ = ВременныеФайлы.СоздатьКаталог(); + Конфигуратор.КаталогСборки(КаталогВременнойИБ); + + ЛогКонфигуратора = Логирование.ПолучитьЛог("oscript.lib.v8runner"); + ЛогКонфигуратора.УстановитьУровень(Лог.Уровень()); + ЛогКонфигуратора.Закрыть(); + + Возврат Конфигуратор; + +КонецФункции // ПодготовитьКонфигуратор() diff --git a/src/СценарииОбработки/ШаблонСценария.os b/src/СценарииОбработки/ШаблонСценария.os new file mode 100644 index 0000000..54674c6 --- /dev/null +++ b/src/СценарииОбработки/ШаблонСценария.os @@ -0,0 +1,39 @@ +/////////////////////////////////////////////////////////////////////////////// +// Служебный модуль с реализацией сценариев обработки файлов <ИмяСценария> +/////////////////////////////////////////////////////////////////////////////// + +// ИмяСценария +// Возвращает имя сценария обработки файлов +// +// Возвращаемое значение: +// Строка - Имя текущего сценария обработки файлов +// +Функция ИмяСценария() Экспорт + + ВызватьИсключение "Имя сценария не установлено"; + Возврат "ИмяСценария"; + +КонецФункции // ИмяСценария() + +// ОбработатьФайл +// Выполняет обработку файла +// +// Параметры: +// АнализируемыйФайл - Файл - Файл из журнала git для анализа +// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория +// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать +// * ЖурналИзменений - Массив - Набор описаний анализируемых файлов +// * Лог - Объект - Текущий лог +// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс +// * КаталогРепозитория - Строка - Адрес каталога репозитория +// +// Возвращаемое значение: +// Булево - Признак выполненной обработки файла +// +Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт + + ВызватьИсключение "Обработка файла не реализована" + Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); + Возврат ЛОЖЬ; + +КонецФункции // ОбработатьФайл() \ No newline at end of file