|
1 | 1 | #Использовать logos |
2 | 2 | #Использовать tempfiles |
| 3 | +#Использовать strings |
3 | 4 |
|
4 | 5 | Перем Лог; |
5 | 6 | Перем мВременныйКаталогУстановки; |
|
29 | 30 |
|
30 | 31 | ПутьУстановки = НайтиСоздатьКаталогУстановки(ИмяПакета); |
31 | 32 | Лог.Информация("Устанавливаю пакет " + ИмяПакета); |
| 33 | + ПроверитьВерсиюСреды(Метаданные); |
32 | 34 | Если мЗависимостиВРаботе[ИмяПакета] = "ВРаботе" Тогда |
33 | 35 | ВызватьИсключение "Циклическая зависимость по пакету " + ИмяПакета; |
34 | 36 | КонецЕсли; |
|
59 | 61 |
|
60 | 62 | КонецПроцедуры |
61 | 63 |
|
| 64 | +Процедура ПроверитьВерсиюСреды(Манифест) |
| 65 | + |
| 66 | + ИмяПакета = Манифест.Свойства().Имя; |
| 67 | + ТребуемаяВерсияСреды = Манифест.Свойства().ВерсияСреды; |
| 68 | + СистемнаяИнформация = Новый СистемнаяИнформация; |
| 69 | + ВерсияСреды = СистемнаяИнформация.Версия; |
| 70 | + Если СравнитьВерсии(ТребуемаяВерсияСреды, ВерсияСреды) > 0 Тогда |
| 71 | + ТекстСообщения = СтрШаблон( |
| 72 | + "Ошибка установки пакета <%1>: Обнаружена устаревшая версия движка OneScript. |
| 73 | + |Требуемая версия: %2 |
| 74 | + |Текущая версия: %3 |
| 75 | + |Обновите OneScript перед установкой пакета", |
| 76 | + ИмяПакета, |
| 77 | + ТребуемаяВерсияСреды, |
| 78 | + ВерсияСреды |
| 79 | + ); |
| 80 | + |
| 81 | + ВызватьИсключение ТекстСообщения; |
| 82 | + КонецЕсли; |
| 83 | + |
| 84 | +КонецПроцедуры |
| 85 | + |
62 | 86 | Процедура УстановитьПакетыПоОписаниюПакета() Экспорт |
63 | 87 |
|
64 | 88 | ПутьКМанифесту = ОбъединитьПути(ТекущийКаталог(), Константы.ИмяФайлаСпецификацииПакета); |
|
72 | 96 | Контекст = Новый Структура("Описание", Описание); |
73 | 97 | ЗагрузитьСценарий(ПутьКМанифесту, Контекст); |
74 | 98 |
|
| 99 | + ПроверитьВерсиюСреды(Описание); |
| 100 | + |
75 | 101 | РазрешитьЗависимостиПакета(Описание); |
76 | 102 |
|
77 | 103 | КонецПроцедуры |
|
240 | 266 |
|
241 | 267 | КонецФункции |
242 | 268 |
|
| 269 | +// Compare two version strings. |
| 270 | +// |
| 271 | +// Parameters |
| 272 | +// VersionString1 – String – version number like MM.{m|mm}.RR.BB |
| 273 | +// VersionString2 – String – the second version number |
| 274 | +// |
| 275 | +// Return value: |
| 276 | +// Number – greater 0, if VersionString1 > VersionString2; 0, if versions are equal. |
| 277 | +Function СравнитьВерсии(Val VersionString1, Val VersionString2) Export |
| 278 | + |
| 279 | + String1 = ?(IsBlankString(VersionString1), "0.0.0.0", VersionString1); |
| 280 | + String2 = ?(IsBlankString(VersionString2), "0.0.0.0", VersionString2); |
| 281 | + |
| 282 | + AdduceToUniformVersionFormat(String1, String2); |
| 283 | + |
| 284 | + Version1 = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(String1, "."); |
| 285 | + Version2 = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(String2, "."); |
| 286 | + |
| 287 | + Result = 0; |
| 288 | + For Digit = 0 To Version1.UBound() Do |
| 289 | + Result = Number(Version1[Digit]) - Number(Version2[Digit]); |
| 290 | + If Result <> 0 Then |
| 291 | + Return Result; |
| 292 | + EndIf; // Result <> 0 |
| 293 | + EndDo; // Digit = 0 To Version1.UBound() |
| 294 | + Return Result; |
| 295 | + |
| 296 | +КонецФункции |
| 297 | + |
| 298 | +Procedure AdduceToUniformVersionFormat(VersionString1, VersionString2) Export |
| 299 | + |
| 300 | + Version1Array = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(VersionString1, "."); |
| 301 | + Version2Array = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(VersionString2, "."); |
| 302 | + |
| 303 | + Diff = Version2Array.Count() - Version1Array.Count(); |
| 304 | + |
| 305 | + If Diff = 0 Then |
| 306 | + Return; |
| 307 | + EndIf; // Diff = 0 |
| 308 | + |
| 309 | + Suffix = ""; |
| 310 | + For index = 1 To Max(Diff, -Diff) Do |
| 311 | + Suffix = Suffix + ".0"; |
| 312 | + EndDo; // index = 1 To Max(Diff, -Diff) |
| 313 | + |
| 314 | + If Diff > 0 Then |
| 315 | + VersionString1 = VersionString1 + Suffix; |
| 316 | + Else |
| 317 | + VersionString2 = VersionString2 + Suffix; |
| 318 | + EndIf; |
| 319 | + |
| 320 | +EndProcedure |
| 321 | + |
243 | 322 | Функция КаталогСистемныхБиблиотек() |
244 | 323 |
|
245 | 324 | СистемныеБиблиотеки = ОбъединитьПути(КаталогПрограммы(), ПолучитьЗначениеСистемнойНастройки("lib.system")); |
|
0 commit comments