Skip to content

Commit 7e77819

Browse files
authored
Merge pull request #83 from oscript-library/feature/build-in-packagedef
Feature/build in packagedef
2 parents d770008 + e96c889 commit 7e77819

File tree

3 files changed

+97
-127
lines changed

3 files changed

+97
-127
lines changed

src/Классы/СборщикПакета.os

Lines changed: 62 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
Перем Лог;
1313
Перем РабочийКаталог;
1414
Перем ВремКаталогСборки;
15-
Перем ОбработчикСобытийСборки;
15+
Перем ОбработчикСобытий;
1616

1717
//////////////////////////////////////////////////////////
1818
// Сборка пакета
@@ -35,9 +35,8 @@
3535
Лог.Информация("Начинаю сборку в каталоге " + РабочийКаталог);
3636
УстановитьТекущийКаталог(РабочийКаталог);
3737
УточнитьФайлМанифеста(ФайлМанифеста);
38-
ИнициализироватьОбработчикСобытийСборки();
39-
ВызватьСобытиеПередСборкой();
4038
Манифест = ПрочитатьМанифест(ФайлМанифеста);
39+
ВызватьСобытиеПередСборкой();
4140
СобратьПакетВКаталогеСборки(Манифест, ВыходнойКаталог);
4241
УстановитьТекущийКаталог(ТекущийРабКаталог);
4342
Лог.Информация("Сборка пакета завершена");
@@ -70,25 +69,12 @@
7069

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

73-
Процедура ИнициализироватьОбработчикСобытийСборки()
74-
ОбработчикСобытийСборки = Неопределено;
75-
ИмяСкриптаСборки = КонстантыOpm.ИмяФайлаСкриптаСборки;
76-
77-
ПутьКФайлуСборки = ОбъединитьПути(ТекущийКаталог(), ИмяСкриптаСборки);
78-
Если НЕ ФС.ФайлСуществует(ПутьКФайлуСборки) Тогда
79-
Возврат;
80-
КонецЕсли;
81-
82-
Лог.Отладка("Найден скрипт сборки пакета");
83-
ОбработчикСобытийСборки = ЗагрузитьСценарий(ПутьКФайлуСборки);
84-
КонецПроцедуры
85-
8672
Функция ПрочитатьМанифест(Знач ФайлМанифеста)
8773

8874
ОписаниеПакета = Новый ОписаниеПакета();
8975
Лог.Информация("Загружаю описание пакета...");
9076
ВнешнийКонтекст = Новый Структура("Описание", ОписаниеПакета);
91-
Манифест = ЗагрузитьСценарий(ФайлМанифеста, ВнешнийКонтекст);
77+
ОбработчикСобытий = ЗагрузитьСценарий(ФайлМанифеста, ВнешнийКонтекст);
9278
Лог.Информация("Описание пакета прочитано");
9379

9480
Возврат ОписаниеПакета;
@@ -116,7 +102,7 @@
116102

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

119-
Процедура ДобавитьОписаниеМетаданныхПакета(Знач Архив, Знач Манифест);
105+
Процедура ДобавитьОписаниеМетаданныхПакета(Знач Архив, Знач Манифест)
120106

121107
ПутьМанифеста = ОбъединитьПути(ВремКаталогСборки, "opm-metadata.xml");
122108
Запись = Новый ЗаписьXML;
@@ -202,38 +188,26 @@
202188
КонецПроцедуры
203189

204190
Процедура ВызватьСобытиеПередСборкой()
205-
Если ОбработчикСобытийСборки = Неопределено Тогда
206-
Возврат;
207-
КонецЕсли;
208-
209191
Рефлектор = Новый Рефлектор;
210-
Если Рефлектор.МетодСуществует(ОбработчикСобытийСборки, "ПередСборкой") Тогда
192+
Если Рефлектор.МетодСуществует(ОбработчикСобытий, "ПередСборкой") Тогда
211193
Лог.Отладка("Вызываю событие ПередСборкой");
212-
ОбработчикСобытийСборки.ПередСборкой(РабочийКаталог);
194+
ОбработчикСобытий.ПередСборкой(РабочийКаталог);
213195
КонецЕсли;
214196
КонецПроцедуры
215197

216198
Процедура ВызватьСобытиеПриСборке(АрхивПакета)
217-
Если ОбработчикСобытийСборки = Неопределено Тогда
218-
Возврат;
219-
КонецЕсли;
220-
221199
Рефлектор = Новый Рефлектор;
222-
Если Рефлектор.МетодСуществует(ОбработчикСобытийСборки, "ПриСборке") Тогда
200+
Если Рефлектор.МетодСуществует(ОбработчикСобытий, "ПриСборке") Тогда
223201
Лог.Отладка("Вызываю событие ПриСборке");
224-
ОбработчикСобытийСборки.ПриСборке(РабочийКаталог, АрхивПакета);
202+
ОбработчикСобытий.ПриСборке(РабочийКаталог, АрхивПакета);
225203
КонецЕсли;
226204
КонецПроцедуры
227205

228206
Процедура ВызватьСобытиеПослеСборки(ПутьКФайлуПакета)
229-
Если ОбработчикСобытийСборки = Неопределено Тогда
230-
Возврат;
231-
КонецЕсли;
232-
233207
Рефлектор = Новый Рефлектор;
234-
Если Рефлектор.МетодСуществует(ОбработчикСобытийСборки, "ПослеСборки") Тогда
208+
Если Рефлектор.МетодСуществует(ОбработчикСобытий, "ПослеСборки") Тогда
235209
Лог.Отладка("Вызываю событие ПослеСборки");
236-
ОбработчикСобытийСборки.ПослеСборки(РабочийКаталог, ПутьКФайлуПакета);
210+
ОбработчикСобытий.ПослеСборки(РабочийКаталог, ПутьКФайлуПакета);
237211
КонецЕсли;
238212
КонецПроцедуры
239213

@@ -264,9 +238,6 @@
264238
СоздатьПодкаталог(ВыходнойКаталог.ПолноеИмя, "tests");
265239
СоздатьПодкаталог(ВыходнойКаталог.ПолноеИмя, "docs");
266240

267-
ЗаписатьЗаготовкуСкриптаУстановки(ВыходнойКаталог.ПолноеИмя);
268-
ЗаписатьЗаготовкуСкриптаСборки(ВыходнойКаталог.ПолноеИмя);
269-
270241
ЗаписатьЗаготовкуМанифестаБиблиотеки(ВыходнойКаталог.ПолноеИмя, ИмяПакета);
271242

272243
Лог.Информация("Готово");
@@ -278,29 +249,16 @@
278249
СоздатьКаталог(ОбъединитьПути(База, Имя));
279250
КонецПроцедуры
280251

281-
Процедура ЗаписатьЗаготовкуСкриптаУстановки(Знач Каталог)
252+
Процедура ЗаписатьЗаготовкуСкриптаУстановки(ЗаписьТекста)
282253

283-
Лог.Информация("Создаю заготовку скрипта установки/удаления");
254+
Лог.Информация("Создаю процедур установки/удаления");
284255

285-
ИмяФайла = ОбъединитьПути(Каталог, КонстантыOpm.ИмяФайлаСкриптаУстановки);
286-
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла);
287256
ЗаписьТекста.ЗаписатьСтроку("///////////////////////////////////////////////////////////////////");
288-
ЗаписьТекста.ЗаписатьСтроку("// Сценарий установки и удаления пакета с клиентской машины ");
257+
ЗаписьТекста.ЗаписатьСтроку("// Процедуры установки пакета с клиентской машины ");
289258
ЗаписьТекста.ЗаписатьСтроку("///////////////////////////////////////////////////////////////////
290259
|
291260
|");
292-
293-
ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером перед установкой пакета на клиентскую машину.");
294-
ЗаписьТекста.ЗаписатьСтроку("// ");
295-
ЗаписьТекста.ЗаписатьСтроку("// Параметры:");
296-
ЗаписьТекста.ЗаписатьСтроку("// АрхивПакета - ЧтениеZipФайла. Открытый архив пакета.");
297-
ЗаписьТекста.ЗаписатьСтроку("// КаталогУстановкиПакета - строка. Путь в который пакетный менеджер устанавливает текущий пакет.");
298-
ЗаписьТекста.ЗаписатьСтроку("// ");
299-
ЗаписьТекста.ЗаписатьСтроку("Процедура ПередУстановкой(Знач АрхивПакета, Знач КаталогУстановкиПакета, СтандартнаяОбработка) Экспорт");
300-
ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику установки, если требуется");
301-
ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры");
302-
ЗаписьТекста.ЗаписатьСтроку(Символы.ПС);
303-
261+
304262
ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером после распаковки пакета на клиентскую машину.");
305263
ЗаписьТекста.ЗаписатьСтроку("// ");
306264
ЗаписьТекста.ЗаписатьСтроку("// Параметры:");
@@ -310,28 +268,15 @@
310268
ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику установки, если требуется");
311269
ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры");
312270
ЗаписьТекста.ЗаписатьСтроку(Символы.ПС);
313-
314-
ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером при удалении пакета с клиентской машины.");
315-
ЗаписьТекста.ЗаписатьСтроку("// ");
316-
ЗаписьТекста.ЗаписатьСтроку("// Параметры:");
317-
ЗаписьТекста.ЗаписатьСтроку("// КаталогУстановкиПакета - строка. Каталог в который установлен пакет.");
318-
ЗаписьТекста.ЗаписатьСтроку("// ");
319-
ЗаписьТекста.ЗаписатьСтроку("Процедура ПриУдалении(Знач КаталогУстановкиПакета) Экспорт");
320-
ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику удаления, если требуется");
321-
ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры");
322-
323-
ЗаписьТекста.Закрыть();
324-
271+
325272
КонецПроцедуры
326273

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

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

331-
ИмяФайла = ОбъединитьПути(Каталог, КонстантыOpm.ИмяФайлаСкриптаСборки);
332-
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла);
333278
ЗаписьТекста.ЗаписатьСтроку("///////////////////////////////////////////////////////////////////");
334-
ЗаписьТекста.ЗаписатьСтроку("// Сценарий сборки пакета ");
279+
ЗаписьТекста.ЗаписатьСтроку("// Процедуры сборки пакета ");
335280
ЗаписьТекста.ЗаписатьСтроку("///////////////////////////////////////////////////////////////////
336281
|
337282
|");
@@ -369,8 +314,7 @@
369314
ЗаписьТекста.ЗаписатьСтроку("Процедура ПослеСборки(Знач РабочийКаталог, Знач ПутьКФайлуПакета) Экспорт");
370315
ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику сборки, если требуется");
371316
ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры");
372-
373-
ЗаписьТекста.Закрыть();
317+
ЗаписьТекста.ЗаписатьСтроку(Символы.ПС);
374318

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

@@ -384,23 +328,50 @@
384328
ЗаписьТекста.ЗаписатьСтроку("// Описание пакета для сборки и установки");
385329
ЗаписьТекста.ЗаписатьСтроку("// Полную документацию см. на hub.oscript.io/packaging");
386330
ЗаписьТекста.ЗаписатьСтроку("//");
387-
331+
ЗаписьТекста.ЗаписатьСтроку("");
332+
333+
Консоль = Новый Консоль;
334+
ДобавлятьПроцедурыПереопределения = Неопределено;
335+
Лог.Информация("Добавить в описание пакета процедуры переопределения сборки и установки?");
336+
Пока Истина Цикл
337+
Лог.Информация("(y/n)");
338+
Значение = Консоль.ПрочитатьСтроку();
339+
Если ВРег(Значение) = "Y" Тогда
340+
ДобавлятьПроцедурыПереопределения = Истина;
341+
Прервать;
342+
ИначеЕсли ВРег(Значение) = "N" Тогда
343+
ДобавлятьПроцедурыПереопределения = Ложь;
344+
Прервать;
345+
КонецЕсли;
346+
КонецЦикла;
347+
348+
Если ДобавлятьПроцедурыПереопределения Тогда
349+
ЗаписатьЗаготовкуСкриптаУстановки(ЗаписьТекста);
350+
ЗаписатьЗаготовкуСкриптаСборки(ЗаписьТекста);
351+
КонецЕсли;
352+
388353
ЗаписьТекста.ЗаписатьСтроку("
389-
| Описание.Имя("""+ИмяПакета+""")
390-
| .Версия(""1.0.1"")
391-
| .Автор("""")
392-
| .АдресАвтора(""author@somemail.com"")
393-
| .Описание(""Это очень хороший и нужный пакет программ"")
394-
| .ВерсияСреды(""1.0.11"")
395-
| .ВключитьФайл(""src"")
396-
| .ВключитьФайл(""doc"")
397-
| .ВключитьФайл(""tests"")
398-
| .ВключитьФайл("""+КонстантыOpm.ИмяФайлаСкриптаУстановки+""")
399-
| //.ЗависитОт(""package1"", "">=2.0"")
400-
| //.ЗависитОт(""package2"", "">=1.1"", ""<2.0"")
401-
| //.ОпределяетКласс(""УправлениеВселенной"", ""src/universe-mngr.os"")
402-
| //.ОпределяетМодуль(""ПолезныеФункции"", ""src/tools.os"")
403-
| ;");
354+
|Описание.Имя(""" + ИмяПакета + """)
355+
| .Версия(""1.0.1"")
356+
| .Автор("""")
357+
| .АдресАвтора(""author@somemail.com"")
358+
| .Описание(""Это очень хороший и нужный пакет программ"")
359+
| .ВерсияСреды(""1.0.11"")
360+
| .ВключитьФайл(""src"")
361+
| .ВключитьФайл(""doc"")
362+
| .ВключитьФайл(""tests"")");
363+
364+
Если ДобавлятьПроцедурыПереопределения Тогда
365+
ЗаписьТекста.ЗаписатьСтроку(
366+
" .ВключитьФайл(""" + КонстантыOpm.ИмяФайлаСпецификацииПакета + """)");
367+
КонецЕсли;
368+
369+
ЗаписьТекста.ЗаписатьСтроку(
370+
" //.ЗависитОт(""package1"", "">=2.0"")
371+
| //.ЗависитОт(""package2"", "">=1.1"", ""<2.0"")
372+
| //.ОпределяетКласс(""УправлениеВселенной"", ""src/universe-mngr.os"")
373+
| //.ОпределяетМодуль(""ПолезныеФункции"", ""src/tools.os"")
374+
| ;");
404375

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

0 commit comments

Comments
 (0)