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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 109 additions & 0 deletions src/Классы/СборщикПакета.os
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
//
/////////////////////////////////////////////////////////////////////////

#Использовать fs
#Использовать logos
#Использовать tempfiles

Перем Лог;
Перем РабочийКаталог;
Перем ВремКаталогСборки;
Перем ОбработчикСобытийСборки;

//////////////////////////////////////////////////////////
// Сборка пакета
Expand All @@ -33,6 +35,8 @@
Лог.Информация("Начинаю сборку в каталоге " + РабочийКаталог);
УстановитьТекущийКаталог(РабочийКаталог);
УточнитьФайлМанифеста(ФайлМанифеста);
ИнициализироватьОбработчикСобытийСборки();
ВызватьСобытиеПередСборкой();
Манифест = ПрочитатьМанифест(ФайлМанифеста);
СобратьПакетВКаталогеСборки(Манифест, ВыходнойКаталог);
УстановитьТекущийКаталог(ТекущийРабКаталог);
Expand Down Expand Up @@ -66,6 +70,19 @@

КонецПроцедуры

Процедура ИнициализироватьОбработчикСобытийСборки()
ОбработчикСобытийСборки = Неопределено;
ИмяСкриптаСборки = КонстантыOpm.ИмяФайлаСкриптаСборки;

ПутьКФайлуСборки = ОбъединитьПути(ТекущийКаталог(), ИмяСкриптаСборки);
Если НЕ ФС.ФайлСуществует(ПутьКФайлуСборки) Тогда
Возврат;
КонецЕсли;

Лог.Отладка("Найден скрипт сборки пакета");
ОбработчикСобытийСборки = ЗагрузитьСценарий(ПутьКФайлуСборки);
КонецПроцедуры

Функция ПрочитатьМанифест(Знач ФайлМанифеста)

ОписаниеПакета = Новый ОписаниеПакета();
Expand Down Expand Up @@ -93,6 +110,8 @@

Архив.Записать();

ВызватьСобытиеПослеСборки(ФайлАрхива.ПолноеИмя);

Лог.Информация("Создана сборка %1", ФайлАрхива.ПолноеИмя);

КонецПроцедуры
Expand Down Expand Up @@ -174,12 +193,50 @@
АрхивЦелевойСистемы.Добавить(ПолныйПуть, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
КонецЦикла;

ВызватьСобытиеПриСборке(АрхивЦелевойСистемы);

АрхивЦелевойСистемы.Записать();

Архив.Добавить(ПутьАрхиваЦелевойСистемы, РежимСохраненияПутейZIP.НеСохранятьПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);

КонецПроцедуры

Процедура ВызватьСобытиеПередСборкой()
Если ОбработчикСобытийСборки = Неопределено Тогда
Возврат;
КонецЕсли;

Рефлектор = Новый Рефлектор;
Если Рефлектор.МетодСуществует(ОбработчикСобытийСборки, "ПередСборкой") Тогда
Лог.Отладка("Вызываю событие ПередСборкой");
ОбработчикСобытийСборки.ПередСборкой(РабочийКаталог);
КонецЕсли;
КонецПроцедуры

Процедура ВызватьСобытиеПриСборке(АрхивПакета)
Если ОбработчикСобытийСборки = Неопределено Тогда
Возврат;
КонецЕсли;

Рефлектор = Новый Рефлектор;
Если Рефлектор.МетодСуществует(ОбработчикСобытийСборки, "ПриСборке") Тогда
Лог.Отладка("Вызываю событие ПриСборке");
ОбработчикСобытийСборки.ПриСборке(РабочийКаталог, АрхивПакета);
КонецЕсли;
КонецПроцедуры

Процедура ВызватьСобытиеПослеСборки(ПутьКФайлуПакета)
Если ОбработчикСобытийСборки = Неопределено Тогда
Возврат;
КонецЕсли;

Рефлектор = Новый Рефлектор;
Если Рефлектор.МетодСуществует(ОбработчикСобытийСборки, "ПослеСборки") Тогда
Лог.Отладка("Вызываю событие ПослеСборки");
ОбработчикСобытийСборки.ПослеСборки(РабочийКаталог, ПутьКФайлуПакета);
КонецЕсли;
КонецПроцедуры

////////////////////////////////////////////////////////
// Подготовка пустого каталога под новый пакет

Expand Down Expand Up @@ -208,6 +265,8 @@
СоздатьПодкаталог(ВыходнойКаталог.ПолноеИмя, "docs");

ЗаписатьЗаготовкуСкриптаУстановки(ВыходнойКаталог.ПолноеИмя);
ЗаписатьЗаготовкуСкриптаСборки(ВыходнойКаталог.ПолноеИмя);

ЗаписатьЗаготовкуМанифестаБиблиотеки(ВыходнойКаталог.ПолноеИмя, ИмяПакета);

Лог.Информация("Готово");
Expand Down Expand Up @@ -265,6 +324,56 @@

КонецПроцедуры

Процедура ЗаписатьЗаготовкуСкриптаСборки(Знач Каталог)

Лог.Информация("Создаю заготовку скрипта сборки");

ИмяФайла = ОбъединитьПути(Каталог, КонстантыOpm.ИмяФайлаСкриптаСборки);
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла);
ЗаписьТекста.ЗаписатьСтроку("///////////////////////////////////////////////////////////////////");
ЗаписьТекста.ЗаписатьСтроку("// Сценарий сборки пакета ");
ЗаписьТекста.ЗаписатьСтроку("///////////////////////////////////////////////////////////////////
|
|");

ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером перед началом сборки пакета.");
ЗаписьТекста.ЗаписатьСтроку("// ");
ЗаписьТекста.ЗаписатьСтроку("// Параметры:");
ЗаписьТекста.ЗаписатьСтроку("// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета.");
ЗаписьТекста.ЗаписатьСтроку("// ");
ЗаписьТекста.ЗаписатьСтроку("Процедура ПередСборкой(Знач РабочийКаталог) Экспорт");
ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику сборки, если требуется");
ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры");
ЗаписьТекста.ЗаписатьСтроку(Символы.ПС);

ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером после помещения файлов в пакет.");
ЗаписьТекста.ЗаписатьСтроку("// ");
ЗаписьТекста.ЗаписатьСтроку("// Параметры:");
ЗаписьТекста.ЗаписатьСтроку("// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета.");
ЗаписьТекста.ЗаписатьСтроку("// АрхивПакета - ЗаписьZIPФайла - ZIP-архив с содержимым пакета (включаемые файлы).");
ЗаписьТекста.ЗаписатьСтроку("// ");
ЗаписьТекста.ЗаписатьСтроку("Процедура ПриСборке(Знач РабочийКаталог, Знач АрхивПакета) Экспорт");
ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику сборки, если требуется");
ЗаписьТекста.ЗаписатьСтроку(" // АрхивПакета.Добавить(ПолныйПутьНужногоФайла,
| // РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
| // РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);");
ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры");
ЗаписьТекста.ЗаписатьСтроку(Символы.ПС);

ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером после сборки пакета.");
ЗаписьТекста.ЗаписатьСтроку("// ");
ЗаписьТекста.ЗаписатьСтроку("// Параметры:");
ЗаписьТекста.ЗаписатьСтроку("// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета.");
ЗаписьТекста.ЗаписатьСтроку("// ПутьКФайлуПакета - Строка - Полный путь к собранному файлу пакета.");
ЗаписьТекста.ЗаписатьСтроку("// ");
ЗаписьТекста.ЗаписатьСтроку("Процедура ПослеСборки(Знач РабочийКаталог, Знач ПутьКФайлуПакета) Экспорт");
ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику сборки, если требуется");
ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры");

ЗаписьТекста.Закрыть();

КонецПроцедуры

Процедура ЗаписатьЗаготовкуМанифестаБиблиотеки(Знач Каталог, Знач ИмяПакета)

Лог.Информация("Создаю заготовку описания пакета");
Expand Down
2 changes: 2 additions & 0 deletions src/Модули/КонстантыOpm.os
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@

Перем ИмяФайлаСпецификацииПакета Экспорт;
Перем ИмяФайлаСкриптаУстановки Экспорт;
Перем ИмяФайлаСкриптаСборки Экспорт;
Перем ИмяФайлаСодержимогоПакета Экспорт;
Перем ИмяФайлаМетаданныхПакета Экспорт;
Перем СерверУдаленногоХранилища Экспорт;
Expand All @@ -15,6 +16,7 @@

ИмяФайлаСпецификацииПакета = "packagedef";
ИмяФайлаСкриптаУстановки = "_install_.os";
ИмяФайлаСкриптаСборки = "_build_.os";
ИмяФайлаСодержимогоПакета = "content.zip";
ИмяФайлаМетаданныхПакета = "opm-metadata.xml";
СерверУдаленногоХранилища = "http://hub.oscript.io";
Expand Down