diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\321\211\320\270\320\272\320\237\320\260\320\272\320\265\321\202\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\321\211\320\270\320\272\320\237\320\260\320\272\320\265\321\202\320\260.os" index 5737d65..bae2e62 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\321\211\320\270\320\272\320\237\320\260\320\272\320\265\321\202\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\321\211\320\270\320\272\320\237\320\260\320\272\320\265\321\202\320\260.os" @@ -5,12 +5,14 @@ // ///////////////////////////////////////////////////////////////////////// +#Использовать fs #Использовать logos #Использовать tempfiles Перем Лог; Перем РабочийКаталог; Перем ВремКаталогСборки; +Перем ОбработчикСобытийСборки; ////////////////////////////////////////////////////////// // Сборка пакета @@ -33,6 +35,8 @@ Лог.Информация("Начинаю сборку в каталоге " + РабочийКаталог); УстановитьТекущийКаталог(РабочийКаталог); УточнитьФайлМанифеста(ФайлМанифеста); + ИнициализироватьОбработчикСобытийСборки(); + ВызватьСобытиеПередСборкой(); Манифест = ПрочитатьМанифест(ФайлМанифеста); СобратьПакетВКаталогеСборки(Манифест, ВыходнойКаталог); УстановитьТекущийКаталог(ТекущийРабКаталог); @@ -66,6 +70,19 @@ КонецПроцедуры +Процедура ИнициализироватьОбработчикСобытийСборки() + ОбработчикСобытийСборки = Неопределено; + ИмяСкриптаСборки = КонстантыOpm.ИмяФайлаСкриптаСборки; + + ПутьКФайлуСборки = ОбъединитьПути(ТекущийКаталог(), ИмяСкриптаСборки); + Если НЕ ФС.ФайлСуществует(ПутьКФайлуСборки) Тогда + Возврат; + КонецЕсли; + + Лог.Отладка("Найден скрипт сборки пакета"); + ОбработчикСобытийСборки = ЗагрузитьСценарий(ПутьКФайлуСборки); +КонецПроцедуры + Функция ПрочитатьМанифест(Знач ФайлМанифеста) ОписаниеПакета = Новый ОписаниеПакета(); @@ -93,6 +110,8 @@ Архив.Записать(); + ВызватьСобытиеПослеСборки(ФайлАрхива.ПолноеИмя); + Лог.Информация("Создана сборка %1", ФайлАрхива.ПолноеИмя); КонецПроцедуры @@ -174,12 +193,50 @@ АрхивЦелевойСистемы.Добавить(ПолныйПуть, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); КонецЦикла; + ВызватьСобытиеПриСборке(АрхивЦелевойСистемы); + АрхивЦелевойСистемы.Записать(); Архив.Добавить(ПутьАрхиваЦелевойСистемы, РежимСохраненияПутейZIP.НеСохранятьПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); КонецПроцедуры +Процедура ВызватьСобытиеПередСборкой() + Если ОбработчикСобытийСборки = Неопределено Тогда + Возврат; + КонецЕсли; + + Рефлектор = Новый Рефлектор; + Если Рефлектор.МетодСуществует(ОбработчикСобытийСборки, "ПередСборкой") Тогда + Лог.Отладка("Вызываю событие ПередСборкой"); + ОбработчикСобытийСборки.ПередСборкой(РабочийКаталог); + КонецЕсли; +КонецПроцедуры + +Процедура ВызватьСобытиеПриСборке(АрхивПакета) + Если ОбработчикСобытийСборки = Неопределено Тогда + Возврат; + КонецЕсли; + + Рефлектор = Новый Рефлектор; + Если Рефлектор.МетодСуществует(ОбработчикСобытийСборки, "ПриСборке") Тогда + Лог.Отладка("Вызываю событие ПриСборке"); + ОбработчикСобытийСборки.ПриСборке(РабочийКаталог, АрхивПакета); + КонецЕсли; +КонецПроцедуры + +Процедура ВызватьСобытиеПослеСборки(ПутьКФайлуПакета) + Если ОбработчикСобытийСборки = Неопределено Тогда + Возврат; + КонецЕсли; + + Рефлектор = Новый Рефлектор; + Если Рефлектор.МетодСуществует(ОбработчикСобытийСборки, "ПослеСборки") Тогда + Лог.Отладка("Вызываю событие ПослеСборки"); + ОбработчикСобытийСборки.ПослеСборки(РабочийКаталог, ПутьКФайлуПакета); + КонецЕсли; +КонецПроцедуры + //////////////////////////////////////////////////////// // Подготовка пустого каталога под новый пакет @@ -208,6 +265,8 @@ СоздатьПодкаталог(ВыходнойКаталог.ПолноеИмя, "docs"); ЗаписатьЗаготовкуСкриптаУстановки(ВыходнойКаталог.ПолноеИмя); + ЗаписатьЗаготовкуСкриптаСборки(ВыходнойКаталог.ПолноеИмя); + ЗаписатьЗаготовкуМанифестаБиблиотеки(ВыходнойКаталог.ПолноеИмя, ИмяПакета); Лог.Информация("Готово"); @@ -265,6 +324,56 @@ КонецПроцедуры +Процедура ЗаписатьЗаготовкуСкриптаСборки(Знач Каталог) + + Лог.Информация("Создаю заготовку скрипта сборки"); + + ИмяФайла = ОбъединитьПути(Каталог, КонстантыOpm.ИмяФайлаСкриптаСборки); + ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла); + ЗаписьТекста.ЗаписатьСтроку("///////////////////////////////////////////////////////////////////"); + ЗаписьТекста.ЗаписатьСтроку("// Сценарий сборки пакета "); + ЗаписьТекста.ЗаписатьСтроку("/////////////////////////////////////////////////////////////////// + | + |"); + + ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером перед началом сборки пакета."); + ЗаписьТекста.ЗаписатьСтроку("// "); + ЗаписьТекста.ЗаписатьСтроку("// Параметры:"); + ЗаписьТекста.ЗаписатьСтроку("// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета."); + ЗаписьТекста.ЗаписатьСтроку("// "); + ЗаписьТекста.ЗаписатьСтроку("Процедура ПередСборкой(Знач РабочийКаталог) Экспорт"); + ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику сборки, если требуется"); + ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры"); + ЗаписьТекста.ЗаписатьСтроку(Символы.ПС); + + ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером после помещения файлов в пакет."); + ЗаписьТекста.ЗаписатьСтроку("// "); + ЗаписьТекста.ЗаписатьСтроку("// Параметры:"); + ЗаписьТекста.ЗаписатьСтроку("// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета."); + ЗаписьТекста.ЗаписатьСтроку("// АрхивПакета - ЗаписьZIPФайла - ZIP-архив с содержимым пакета (включаемые файлы)."); + ЗаписьТекста.ЗаписатьСтроку("// "); + ЗаписьТекста.ЗаписатьСтроку("Процедура ПриСборке(Знач РабочийКаталог, Знач АрхивПакета) Экспорт"); + ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику сборки, если требуется"); + ЗаписьТекста.ЗаписатьСтроку(" // АрхивПакета.Добавить(ПолныйПутьНужногоФайла, + | // РежимСохраненияПутейZIP.СохранятьОтносительныеПути, + | // РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);"); + ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры"); + ЗаписьТекста.ЗаписатьСтроку(Символы.ПС); + + ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером после сборки пакета."); + ЗаписьТекста.ЗаписатьСтроку("// "); + ЗаписьТекста.ЗаписатьСтроку("// Параметры:"); + ЗаписьТекста.ЗаписатьСтроку("// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета."); + ЗаписьТекста.ЗаписатьСтроку("// ПутьКФайлуПакета - Строка - Полный путь к собранному файлу пакета."); + ЗаписьТекста.ЗаписатьСтроку("// "); + ЗаписьТекста.ЗаписатьСтроку("Процедура ПослеСборки(Знач РабочийКаталог, Знач ПутьКФайлуПакета) Экспорт"); + ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику сборки, если требуется"); + ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры"); + + ЗаписьТекста.Закрыть(); + +КонецПроцедуры + Процедура ЗаписатьЗаготовкуМанифестаБиблиотеки(Знач Каталог, Знач ИмяПакета) Лог.Информация("Создаю заготовку описания пакета"); diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213Opm.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213Opm.os" index be4ab24..839026d 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213Opm.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213Opm.os" @@ -1,6 +1,7 @@  Перем ИмяФайлаСпецификацииПакета Экспорт; Перем ИмяФайлаСкриптаУстановки Экспорт; +Перем ИмяФайлаСкриптаСборки Экспорт; Перем ИмяФайлаСодержимогоПакета Экспорт; Перем ИмяФайлаМетаданныхПакета Экспорт; Перем СерверУдаленногоХранилища Экспорт; @@ -15,6 +16,7 @@ ИмяФайлаСпецификацииПакета = "packagedef"; ИмяФайлаСкриптаУстановки = "_install_.os"; +ИмяФайлаСкриптаСборки = "_build_.os"; ИмяФайлаСодержимогоПакета = "content.zip"; ИмяФайлаМетаданныхПакета = "opm-metadata.xml"; СерверУдаленногоХранилища = "http://hub.oscript.io";