Skip to content

Commit 6599b64

Browse files
Copilotnixel2007
andcommitted
Replace РаботаСВерсиями with local version comparison function for fallback
Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
1 parent ef44da6 commit 6599b64

File tree

1 file changed

+50
-4
lines changed

1 file changed

+50
-4
lines changed

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

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@
4747
// Сначала пытаемся использовать семвер
4848
РезультатСравнения = Версии.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия);
4949
Исключение
50-
// Если семвер не может обработать версию (например, 4-значную), используем старый механизм
51-
РезультатСравнения = РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия);
50+
// Если семвер не может обработать версию (например, 4-значную), используем простое сравнение
51+
// Это базовый fallback для не-семвер версий
52+
РезультатСравнения = СравнитьВерсииПростое(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия);
5253
КонецПопытки;
5354

5455
УстановленаКорректнаяВерсия = РезультатСравнения >= 0;
@@ -171,8 +172,53 @@
171172

172173
Возврат ПутьКФайлуМетаданных;
173174

174-
КонецФункции
175-
175+
КонецФункции
176+
177+
// Простое сравнение версий для не-семвер форматов (например, 4-значных версий)
178+
// Возвращает 1, если ЭтаВерсия > БольшеЧемВерсия, -1 если ЭтаВерсия < БольшеЧемВерсия и 0, если они равны
179+
Функция СравнитьВерсииПростое(Знач ЭтаВерсия, Знач БольшеЧемВерсия)
180+
181+
// Разбиваем версии на компоненты
182+
КомпонентыЭтойВерсии = СтрРазделить(ЭтаВерсия, ".");
183+
КомпонентыБольшеЧемВерсии = СтрРазделить(БольшеЧемВерсия, ".");
184+
185+
// Определяем максимальное количество компонентов
186+
МаксКоличествоКомпонентов = Макс(КомпонентыЭтойВерсии.Количество(), КомпонентыБольшеЧемВерсии.Количество());
187+
188+
// Сравниваем по компонентам
189+
Для Сч = 0 По МаксКоличествоКомпонентов - 1 Цикл
190+
191+
КомпонентЭтаВерсия = 0;
192+
КомпонентБольшеЧем = 0;
193+
194+
Если Сч < КомпонентыЭтойВерсии.Количество() Тогда
195+
Попытка
196+
КомпонентЭтаВерсия = Число(КомпонентыЭтойВерсии[Сч]);
197+
Исключение
198+
КомпонентЭтаВерсия = 0;
199+
КонецПопытки;
200+
КонецЕсли;
201+
202+
Если Сч < КомпонентыБольшеЧемВерсии.Количество() Тогда
203+
Попытка
204+
КомпонентБольшеЧем = Число(КомпонентыБольшеЧемВерсии[Сч]);
205+
Исключение
206+
КомпонентБольшеЧем = 0;
207+
КонецПопытки;
208+
КонецЕсли;
209+
210+
Если КомпонентЭтаВерсия > КомпонентБольшеЧем Тогда
211+
Возврат 1;
212+
ИначеЕсли КомпонентЭтаВерсия < КомпонентБольшеЧем Тогда
213+
Возврат -1;
214+
КонецЕсли;
215+
216+
КонецЦикла;
217+
218+
Возврат 0;
219+
220+
КонецФункции
221+
176222
Процедура ПриСозданииОбъекта(КаталогПоискаБиблиотек = "")
177223

178224
Лог = Логирование.ПолучитьЛог("oscript.app.opm");

0 commit comments

Comments
 (0)