|
21 | 21 |
|
22 | 22 | РабочийКаталог = КаталогИсходников; |
23 | 23 | ТекущийРабКаталог = ТекущийКаталог(); |
24 | | - |
| 24 | + |
25 | 25 | Попытка |
26 | | - |
| 26 | + |
27 | 27 | Если ВыходнойКаталог = Неопределено Тогда |
28 | 28 | ВыходнойКаталог = ТекущийКаталог(); |
29 | 29 | Иначе |
30 | 30 | // получим полное имя, если вдруг передан относительный путь |
31 | 31 | ФайлВыхКаталога = Новый Файл(ВыходнойКаталог); |
32 | 32 | ВыходнойКаталог = ФайлВыхКаталога.ПолноеИмя; |
33 | 33 | КонецЕсли; |
34 | | - |
| 34 | + |
35 | 35 | Лог.Информация("Начинаю сборку в каталоге " + РабочийКаталог); |
36 | 36 | УстановитьТекущийКаталог(РабочийКаталог); |
37 | 37 | УточнитьФайлМанифеста(ФайлМанифеста); |
|
40 | 40 | СобратьПакетВКаталогеСборки(Манифест, ВыходнойКаталог); |
41 | 41 | УстановитьТекущийКаталог(ТекущийРабКаталог); |
42 | 42 | Лог.Информация("Сборка пакета завершена"); |
43 | | - |
| 43 | + |
44 | 44 | Исключение |
45 | 45 | УстановитьТекущийКаталог(ТекущийРабКаталог); |
46 | 46 | ВременныеФайлы.Удалить(); |
47 | 47 | ВызватьИсключение; |
48 | | - |
| 48 | + |
49 | 49 | КонецПопытки; |
50 | 50 |
|
51 | 51 | ВременныеФайлы.Удалить(); |
52 | | - |
| 52 | + |
53 | 53 | КонецПроцедуры |
54 | 54 |
|
55 | 55 | Процедура УточнитьФайлМанифеста(ФайлМанифеста) |
56 | | - |
| 56 | + |
57 | 57 | Если ФайлМанифеста = Неопределено Тогда |
58 | | - |
| 58 | + |
59 | 59 | ФайлОбъект = Новый Файл(КонстантыOpm.ИмяФайлаСпецификацииПакета); |
60 | 60 | Если ФайлОбъект.Существует() и ФайлОбъект.ЭтоФайл() Тогда |
61 | 61 | Лог.Информация("Найден файл манифеста"); |
|
66 | 66 | Иначе |
67 | 67 | Лог.Информация("Использую файл манифеста " + ФайлМанифеста); |
68 | 68 | КонецЕсли; |
69 | | - |
| 69 | + |
70 | 70 | КонецПроцедуры |
71 | 71 |
|
72 | 72 | Функция ПрочитатьМанифест(Знач ФайлМанифеста) |
73 | | - |
| 73 | + |
74 | 74 | ОписаниеПакета = Новый ОписаниеПакета(); |
75 | 75 | Лог.Информация("Загружаю описание пакета..."); |
76 | 76 | ВнешнийКонтекст = Новый Структура("Описание", ОписаниеПакета); |
77 | 77 | ОбработчикСобытий = ЗагрузитьСценарий(ФайлМанифеста, ВнешнийКонтекст); |
78 | 78 | Лог.Информация("Описание пакета прочитано"); |
79 | | - |
| 79 | + |
80 | 80 | Возврат ОписаниеПакета; |
81 | | - |
| 81 | + |
82 | 82 | КонецФункции |
83 | 83 |
|
84 | 84 | Процедура СобратьПакетВКаталогеСборки(Знач Манифест, Знач ВыходнойКаталог) |
85 | | - |
| 85 | + |
86 | 86 | ВремКаталогСборки = ВременныеФайлы.СоздатьКаталог(); |
87 | | - |
| 87 | + |
88 | 88 | СвойстваПакета = Манифест.Свойства(); |
89 | | - |
| 89 | + |
90 | 90 | ИмяФайлаПакета = СтрШаблон("%1-%2.ospx", СвойстваПакета.Имя, СвойстваПакета.Версия); |
91 | 91 | ФайлАрхива = Новый Файл(ОбъединитьПути(ВыходнойКаталог, ИмяФайлаПакета)); |
92 | 92 | Архив = Новый ЗаписьZIPФайла(ФайлАрхива.ПолноеИмя); |
93 | | - |
| 93 | + |
94 | 94 | ДобавитьОписаниеМетаданныхПакета(Архив, Манифест); |
95 | 95 | ДобавитьФайлыПакета(Архив, Манифест); |
96 | | - |
| 96 | + |
97 | 97 | Архив.Записать(); |
98 | 98 |
|
99 | 99 | ВызватьСобытиеПослеСборки(ФайлАрхива.ПолноеИмя); |
100 | 100 |
|
101 | 101 | Лог.Информация("Создана сборка %1", ФайлАрхива.ПолноеИмя); |
102 | | - |
| 102 | + |
103 | 103 | КонецПроцедуры |
104 | 104 |
|
105 | 105 | Процедура ДобавитьОписаниеМетаданныхПакета(Знач Архив, Знач Манифест) |
106 | | - |
| 106 | + |
107 | 107 | ПутьМанифеста = ОбъединитьПути(ВремКаталогСборки, "opm-metadata.xml"); |
108 | 108 | Запись = Новый ЗаписьXML; |
109 | 109 | Запись.ОткрытьФайл(ПутьМанифеста); |
110 | | - |
| 110 | + |
111 | 111 | Сериализатор = Новый СериализацияМетаданныхПакета(); |
112 | 112 | Сериализатор.ЗаписатьМетаданныеВXML(Запись, Манифест); |
113 | | - |
| 113 | + |
114 | 114 | Запись.Закрыть(); |
115 | | - |
| 115 | + |
116 | 116 | Архив.Добавить(ПутьМанифеста); |
117 | 117 | Лог.Информация("Записаны метаданные пакета"); |
118 | | - |
| 118 | + |
119 | 119 | КонецПроцедуры |
120 | 120 |
|
121 | 121 | Процедура ДобавитьОписаниеБиблиотеки(Знач Архив, Знач Манифест) |
122 | | - |
| 122 | + |
123 | 123 | Модули = Манифест.ВсеМодулиПакета(); |
124 | 124 | Если Модули.Количество() = 0 Тогда |
125 | 125 | Возврат; |
126 | 126 | КонецЕсли; |
127 | | - |
| 127 | + |
128 | 128 | Лог.Информация("Формирую определения модулей пакета (lib.config)"); |
129 | | - |
| 129 | + |
130 | 130 | ПутьКонфигурацииПакета = ОбъединитьПути(ВремКаталогСборки, "lib.config"); |
131 | 131 | Запись = Новый ЗаписьXML; |
132 | 132 | Запись.ОткрытьФайл(ПутьКонфигурацииПакета); |
133 | 133 | Запись.ЗаписатьОбъявлениеXML(); |
134 | 134 | Запись.ЗаписатьНачалоЭлемента("package-def"); |
135 | 135 | Запись.ЗаписатьСоответствиеПространстваИмен("", "http://oscript.io/schemas/lib-config/1.0"); |
136 | | - |
| 136 | + |
137 | 137 | Для Каждого ОписаниеМодуля Из Модули Цикл |
138 | 138 | Если ОписаниеМодуля.Тип = Манифест.ТипыМодулей.Класс Тогда |
139 | 139 | Запись.ЗаписатьНачалоЭлемента("class"); |
140 | 140 | Иначе |
141 | 141 | Запись.ЗаписатьНачалоЭлемента("module"); |
142 | 142 | КонецЕсли; |
143 | | - |
| 143 | + |
144 | 144 | ФайлМодуля = Новый Файл(ОписаниеМодуля.Файл); |
145 | 145 | Если Не ФайлМодуля.Существует() Тогда |
146 | 146 | Лог.Предупреждение("Файл модуля " + ОписаниеМодуля.Файл + " не обнаружен."); |
147 | 147 | КонецЕсли; |
148 | | - |
| 148 | + |
149 | 149 | Запись.ЗаписатьАтрибут("name", ОписаниеМодуля.Идентификатор); |
150 | 150 | Запись.ЗаписатьАтрибут("file", ОписаниеМодуля.Файл); |
151 | 151 | Запись.ЗаписатьКонецЭлемента(); |
152 | | - |
| 152 | + |
153 | 153 | КонецЦикла; |
154 | | - |
| 154 | + |
155 | 155 | Запись.ЗаписатьКонецЭлемента(); |
156 | 156 | Запись.Закрыть(); |
157 | | - |
| 157 | + |
158 | 158 | Архив.Добавить(ПутьКонфигурацииПакета); |
159 | 159 | Лог.Информация("Записаны определения модулей пакета"); |
160 | | - |
| 160 | + |
161 | 161 | КонецПроцедуры |
162 | 162 |
|
163 | 163 | Процедура ДобавитьФайлыПакета(Знач Архив, Знач Манифест) |
164 | | - |
| 164 | + |
165 | 165 | ВключаемыеФайлы = Манифест.ВключаемыеФайлы(); |
166 | 166 | Если ВключаемыеФайлы.Количество() = 0 Тогда |
167 | 167 | Лог.Информация("Не определены включаемые файлы"); |
168 | 168 | Возврат; |
169 | 169 | КонецЕсли; |
170 | | - |
| 170 | + |
171 | 171 | ПутьАрхиваЦелевойСистемы = ОбъединитьПути(ВремКаталогСборки, "content.zip"); |
172 | 172 | АрхивЦелевойСистемы = Новый ЗаписьZIPФайла(ПутьАрхиваЦелевойСистемы); |
173 | | - |
| 173 | + |
174 | 174 | ДобавитьОписаниеБиблиотеки(АрхивЦелевойСистемы, Манифест); |
175 | | - |
| 175 | + |
176 | 176 | Для Каждого ВключаемыйФайл Из ВключаемыеФайлы Цикл |
177 | 177 | Лог.Информация("Добавляем файл: " + ВключаемыйФайл); |
178 | 178 | ПолныйПуть = Новый Файл(ВключаемыйФайл).ПолноеИмя; |
179 | 179 | АрхивЦелевойСистемы.Добавить(ПолныйПуть, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); |
180 | 180 | КонецЦикла; |
181 | | - |
| 181 | + |
182 | 182 | ВызватьСобытиеПриСборке(АрхивЦелевойСистемы); |
183 | | - |
| 183 | + |
184 | 184 | АрхивЦелевойСистемы.Записать(); |
185 | | - |
| 185 | + |
186 | 186 | Архив.Добавить(ПутьАрхиваЦелевойСистемы, РежимСохраненияПутейZIP.НеСохранятьПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); |
187 | | - |
| 187 | + |
188 | 188 | КонецПроцедуры |
189 | 189 |
|
190 | 190 | Процедура ВызватьСобытиеПередСборкой() |
|
215 | 215 | // Подготовка пустого каталога под новый пакет |
216 | 216 |
|
217 | 217 | Процедура ПодготовитьКаталогПроекта(Знач ВыходнойКаталог) Экспорт |
218 | | - |
| 218 | + |
219 | 219 | Если ВыходнойКаталог = Неопределено Тогда |
220 | 220 | ВыходнойКаталог = ТекущийКаталог(); |
221 | 221 | КонецЕсли; |
222 | 222 |
|
223 | 223 | ВыходнойКаталог = Новый Файл(ВыходнойКаталог); |
224 | | - |
| 224 | + |
225 | 225 | ИмяПакета = ВыходнойКаталог.Имя; |
| 226 | + ПутьВыходногоКаталога = ВыходнойКаталог.ПолноеИмя; |
226 | 227 |
|
227 | 228 | Если Не ВыходнойКаталог.Существует() Тогда |
228 | 229 | Лог.Информация("Создаю каталог " + ИмяПакета); |
229 | | - СоздатьКаталог(ВыходнойКаталог.ПолноеИмя); |
| 230 | + СоздатьКаталог(ПутьВыходногоКаталога); |
230 | 231 | Иначе |
231 | | - Содержимое = НайтиФайлы(ВыходнойКаталог.ПолноеИмя, ПолучитьМаскуВсеФайлы()); |
| 232 | + Содержимое = НайтиФайлы(ПутьВыходногоКаталога, ПолучитьМаскуВсеФайлы()); |
232 | 233 | Если Содержимое.Количество() Тогда |
233 | | - ВызватьИсключение "Каталог проекта " + ВыходнойКаталог.ПолноеИмя + " уже содержит файлы!"; |
| 234 | + ВызватьИсключение "Каталог проекта " + ПутьВыходногоКаталога + " уже содержит файлы!"; |
234 | 235 | КонецЕсли; |
235 | 236 | КонецЕсли; |
236 | | - |
237 | | - СоздатьПодкаталог(ВыходнойКаталог.ПолноеИмя, "src"); |
238 | | - СоздатьПодкаталог(ВыходнойКаталог.ПолноеИмя, "tests"); |
239 | | - СоздатьПодкаталог(ВыходнойКаталог.ПолноеИмя, "docs"); |
240 | | - |
241 | | - ЗаписатьЗаготовкуМанифестаБиблиотеки(ВыходнойКаталог.ПолноеИмя, ИмяПакета); |
| 237 | + |
| 238 | + СоздатьПодкаталог(ПутьВыходногоКаталога, "src"); |
| 239 | + СоздатьПодкаталог(ПутьВыходногоКаталога, "tests"); |
| 240 | + СоздатьПодкаталог(ПутьВыходногоКаталога, "docs"); |
| 241 | + СоздатьПодкаталог(ПутьВыходногоКаталога, "tasks"); |
| 242 | + СоздатьПодкаталог(ПутьВыходногоКаталога, "features"); |
| 243 | + |
| 244 | + ПодготовитьФайлКомандыТестирования(ВыходнойКаталог); |
| 245 | + |
| 246 | + ЗаписатьЗаготовкуМанифестаБиблиотеки(ПутьВыходногоКаталога, ИмяПакета); |
242 | 247 |
|
243 | 248 | Лог.Информация("Готово"); |
244 | | - |
| 249 | + |
245 | 250 | КонецПроцедуры |
246 | 251 |
|
247 | 252 | Процедура СоздатьПодкаталог(Знач База, Знач Имя) |
|
258 | 263 | ЗаписьТекста.ЗаписатьСтроку("/////////////////////////////////////////////////////////////////// |
259 | 264 | | |
260 | 265 | |"); |
261 | | - |
| 266 | + |
262 | 267 | ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером перед установкой пакета на клиентскую машину."); |
263 | 268 | ЗаписьТекста.ЗаписатьСтроку("// "); |
264 | 269 | ЗаписьТекста.ЗаписатьСтроку("// Параметры:"); |
|
269 | 274 | ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику перед установкой, если требуется"); |
270 | 275 | ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры"); |
271 | 276 | ЗаписьТекста.ЗаписатьСтроку(Символы.ПС); |
272 | | - |
| 277 | + |
273 | 278 | ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером после распаковки пакета на клиентскую машину."); |
274 | 279 | ЗаписьТекста.ЗаписатьСтроку("// "); |
275 | 280 | ЗаписьТекста.ЗаписатьСтроку("// Параметры:"); |
|
280 | 285 | ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику установки, если требуется"); |
281 | 286 | ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры"); |
282 | 287 | ЗаписьТекста.ЗаписатьСтроку(Символы.ПС); |
283 | | - |
| 288 | + |
284 | 289 | КонецПроцедуры |
285 | 290 |
|
286 | 291 | Процедура ЗаписатьЗаготовкуСкриптаСборки(Знач ЗаписьТекста) |
287 | | - |
| 292 | + |
288 | 293 | Лог.Информация("Создаю заготовку процедур сборки"); |
289 | | - |
| 294 | + |
290 | 295 | ЗаписьТекста.ЗаписатьСтроку("///////////////////////////////////////////////////////////////////"); |
291 | 296 | ЗаписьТекста.ЗаписатьСтроку("// Процедуры сборки пакета "); |
292 | 297 | ЗаписьТекста.ЗаписатьСтроку("/////////////////////////////////////////////////////////////////// |
293 | 298 | | |
294 | 299 | |"); |
295 | | - |
| 300 | + |
296 | 301 | ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером перед началом сборки пакета."); |
297 | 302 | ЗаписьТекста.ЗаписатьСтроку("// "); |
298 | 303 | ЗаписьТекста.ЗаписатьСтроку("// Параметры:"); |
|
302 | 307 | ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику сборки, если требуется"); |
303 | 308 | ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры"); |
304 | 309 | ЗаписьТекста.ЗаписатьСтроку(Символы.ПС); |
305 | | - |
| 310 | + |
306 | 311 | ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером после помещения файлов в пакет."); |
307 | 312 | ЗаписьТекста.ЗаписатьСтроку("// "); |
308 | 313 | ЗаписьТекста.ЗаписатьСтроку("// Параметры:"); |
|
316 | 321 | | // РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);"); |
317 | 322 | ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры"); |
318 | 323 | ЗаписьТекста.ЗаписатьСтроку(Символы.ПС); |
319 | | - |
| 324 | + |
320 | 325 | ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером после сборки пакета."); |
321 | 326 | ЗаписьТекста.ЗаписатьСтроку("// "); |
322 | 327 | ЗаписьТекста.ЗаписатьСтроку("// Параметры:"); |
|
327 | 332 | ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику сборки, если требуется"); |
328 | 333 | ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры"); |
329 | 334 | ЗаписьТекста.ЗаписатьСтроку(Символы.ПС); |
330 | | - |
| 335 | + |
331 | 336 | КонецПроцедуры |
332 | 337 |
|
333 | 338 | Процедура ЗаписатьЗаготовкуМанифестаБиблиотеки(Знач Каталог, Знач ИмяПакета) |
334 | | - |
| 339 | + |
335 | 340 | Лог.Информация("Создаю заготовку описания пакета"); |
336 | | - |
| 341 | + |
337 | 342 | ЗаписьТекста = Новый ЗаписьТекста(ОбъединитьПути(Каталог, КонстантыOpm.ИмяФайлаСпецификацииПакета)); |
338 | | - |
| 343 | + |
339 | 344 | ЗаписьТекста.ЗаписатьСтроку("////////////////////////////////////////////////////////////"); |
340 | 345 | ЗаписьТекста.ЗаписатьСтроку("// Описание пакета для сборки и установки"); |
341 | 346 | ЗаписьТекста.ЗаписатьСтроку("// Полную документацию см. на hub.oscript.io/packaging"); |
342 | 347 | ЗаписьТекста.ЗаписатьСтроку("//"); |
343 | 348 | ЗаписьТекста.ЗаписатьСтроку(""); |
344 | | - |
| 349 | + |
345 | 350 | Консоль = Новый Консоль; |
346 | 351 | ДобавлятьПроцедурыПереопределения = Неопределено; |
347 | 352 | Лог.Информация("Добавить в описание пакета процедуры переопределения сборки и установки?"); |
|
364 | 369 |
|
365 | 370 | ЗаписьТекста.ЗаписатьСтроку(" |
366 | 371 | |Описание.Имя(""" + ИмяПакета + """) |
367 | | - | .Версия(""1.0.1"") |
| 372 | + | .Версия(""1.0.0"") |
368 | 373 | | .Автор("""") |
369 | 374 | | .АдресАвтора(""author@somemail.com"") |
370 | 375 | | .Описание(""Это очень хороший и нужный пакет программ"") |
371 | | - | .ВерсияСреды(""1.0.11"") |
| 376 | + | .ВерсияСреды(""1.0.21"") |
372 | 377 | | .ВключитьФайл(""src"") |
373 | 378 | | .ВключитьФайл(""doc"") |
374 | | - | .ВключитьФайл(""tests"")"); |
| 379 | + | .ВключитьФайл(""tasks"") |
| 380 | + | //.ВключитьФайл(""tests"") |
| 381 | + | //.ВключитьФайл(""features"") |
| 382 | + | "); |
375 | 383 |
|
376 | 384 | Если ДобавлятьПроцедурыПереопределения Тогда |
377 | 385 | ЗаписьТекста.ЗаписатьСтроку( |
378 | 386 | " .ВключитьФайл(""" + КонстантыOpm.ИмяФайлаСпецификацииПакета + """)"); |
379 | 387 | КонецЕсли; |
380 | | - |
| 388 | + |
381 | 389 | ЗаписьТекста.ЗаписатьСтроку( |
382 | 390 | " //.ЗависитОт(""package1"", "">=2.0"") |
383 | 391 | | //.ЗависитОт(""package2"", "">=1.1"", ""<2.0"") |
384 | 392 | | //.ОпределяетКласс(""УправлениеВселенной"", ""src/universe-mngr.os"") |
385 | 393 | | //.ОпределяетМодуль(""ПолезныеФункции"", ""src/tools.os"") |
386 | 394 | | ;"); |
387 | | - |
| 395 | + |
388 | 396 | ЗаписьТекста.Закрыть(); |
389 | | - |
| 397 | + |
390 | 398 | КонецПроцедуры |
391 | 399 |
|
| 400 | +Процедура ПодготовитьФайлКомандыТестирования(Знач ВыходнойКаталог) |
| 401 | + ИсходныйПутьЗапускателяТестов = ОбъединитьПути(КаталогПроекта(), "tasks", "test.os"); |
| 402 | + КонечныйПутьЗапускателяТестов = ОбъединитьПути(ВыходнойКаталог.ПолноеИмя, "tasks", "test.os"); |
| 403 | + КопироватьФайл(ИсходныйПутьЗапускателяТестов, КонечныйПутьЗапускателяТестов); |
| 404 | +КонецПроцедуры |
| 405 | + |
| 406 | +Функция КаталогПроекта() |
| 407 | + Рез = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "..", ".."); |
| 408 | + Лог.Информация("Рез %1", Рез); |
| 409 | + Возврат ФС.ПолныйПуть(Рез); |
| 410 | +КонецФункции |
| 411 | + |
392 | 412 | Лог = Логирование.ПолучитьЛог(КонстантыOpm.ИмяЛога); |
0 commit comments