Skip to content

Commit 6793b43

Browse files
committed
Добавление механизма проверки версии движка
1 parent 64ef17c commit 6793b43

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed

packagedef

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
.Версия("0.5.1")
44
.ЗависитОт("logos")
55
.ЗависитОт("cmdline")
6+
.ЗависитОт("strings")
67
.ЗависитОт("tempfiles")
78
.ВключитьФайл("src")
89
.ВключитьФайл("tests")

src/Классы/УстановкаПакета.os

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#Использовать logos
22
#Использовать tempfiles
3+
#Использовать strings
34

45
Перем Лог;
56
Перем мВременныйКаталогУстановки;
@@ -29,6 +30,7 @@
2930

3031
ПутьУстановки = НайтиСоздатьКаталогУстановки(ИмяПакета);
3132
Лог.Информация("Устанавливаю пакет " + ИмяПакета);
33+
ПроверитьВерсиюСреды(Метаданные);
3234
Если мЗависимостиВРаботе[ИмяПакета] = "ВРаботе" Тогда
3335
ВызватьИсключение "Циклическая зависимость по пакету " + ИмяПакета;
3436
КонецЕсли;
@@ -59,6 +61,28 @@
5961

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

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+
6286
Процедура УстановитьПакетыПоОписаниюПакета() Экспорт
6387

6488
ПутьКМанифесту = ОбъединитьПути(ТекущийКаталог(), Константы.ИмяФайлаСпецификацииПакета);
@@ -72,6 +96,8 @@
7296
Контекст = Новый Структура("Описание", Описание);
7397
ЗагрузитьСценарий(ПутьКМанифесту, Контекст);
7498

99+
ПроверитьВерсиюСреды(Описание);
100+
75101
РазрешитьЗависимостиПакета(Описание);
76102

77103
КонецПроцедуры
@@ -240,6 +266,59 @@
240266

241267
КонецФункции
242268

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+
243322
Функция КаталогСистемныхБиблиотек()
244323

245324
СистемныеБиблиотеки = ОбъединитьПути(КаталогПрограммы(), ПолучитьЗначениеСистемнойНастройки("lib.system"));

0 commit comments

Comments
 (0)