From 32d84a336778ed69fca88a10c6ebd526f0ff2658 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 3 Jul 2025 10:32:21 +0000 Subject: [PATCH 1/5] Initial plan From ef44da6eba1f3282a0748d01a5d80d15c2aad37e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 3 Jul 2025 10:46:11 +0000 Subject: [PATCH 2/5] Add fallback mechanism for version comparison with non-semver versions Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com> --- ...20\272\320\265\321\202\320\276\320\262.os" | 17 ++++++++++++--- tests/versions-test.os | 21 +++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" index b816037..f8034ba 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -39,9 +39,20 @@ УстановленаКорректнаяВерсия = Истина; ИначеЕсли ОписаниеЗависимости.МинимальнаяВерсия = ВерсияSNAPSHOT И УстановленнаяВерсия <> ВерсияSNAPSHOT Тогда УстановленаКорректнаяВерсия = Ложь; - Иначе - УстановленаКорректнаяВерсия = ОписаниеЗависимости.МинимальнаяВерсия = Неопределено - ИЛИ Версии.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия) >= 0; + Иначе + Если ОписаниеЗависимости.МинимальнаяВерсия = Неопределено Тогда + УстановленаКорректнаяВерсия = Истина; + Иначе + Попытка + // Сначала пытаемся использовать семвер + РезультатСравнения = Версии.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); + Исключение + // Если семвер не может обработать версию (например, 4-значную), используем старый механизм + РезультатСравнения = РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); + КонецПопытки; + + УстановленаКорректнаяВерсия = РезультатСравнения >= 0; + КонецЕсли; КонецЕсли; Лог.Отладка("Пакет установлен: " + ПакетУстановлен); diff --git a/tests/versions-test.os b/tests/versions-test.os index ffbae18..785b11f 100644 --- a/tests/versions-test.os +++ b/tests/versions-test.os @@ -16,6 +16,7 @@ СписокТестов.Добавить("ТестДолжен_ПроверитьЧтоВерсияАБольшеВерсииБ"); СписокТестов.Добавить("ТестДолжен_ПолучитьИмяИВерсиюПоИмениПакетаБезВерсии"); СписокТестов.Добавить("ТестДолжен_ПолучитьИмяИВерсиюПоИмениПакетаСВерсией"); + СписокТестов.Добавить("ТестДолжен_СравнитьЧетырехзначныеВерсии"); Возврат СписокТестов; @@ -89,3 +90,23 @@ Ожидаем.Что(Пакет.Версия).Равно("1.1.1"); КонецПроцедуры + +Процедура ТестДолжен_СравнитьЧетырехзначныеВерсии() Экспорт + + // Тестируем сравнение четырехзначных версий (не семвер) + ВерсияА = "1.2.3.4"; + ВерсияБ = "1.2.3.3"; + + // Проверяем что старый механизм может сравнивать 4-значные версии + РезультатСравнения = РаботаСВерсиями.СравнитьВерсии(ВерсияА, ВерсияБ); + Ожидаем.Что(РезультатСравнения).Больше(0); + + // Проверяем равенство + РезультатСравнения = РаботаСВерсиями.СравнитьВерсии(ВерсияА, ВерсияА); + Ожидаем.Что(РезультатСравнения).Равно(0); + + // Проверяем меньше + РезультатСравнения = РаботаСВерсиями.СравнитьВерсии(ВерсияБ, ВерсияА); + Ожидаем.Что(РезультатСравнения).Меньше(0); + +КонецПроцедуры From 6599b64494e8c2a1ed1008d2b9ea0e35bbcf3ed8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 3 Jul 2025 10:52:39 +0000 Subject: [PATCH 3/5] =?UTF-8?q?Replace=20=D0=A0=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=A1=D0=92=D0=B5=D1=80=D1=81=D0=B8=D1=8F=D0=BC=D0=B8=20?= =?UTF-8?q?with=20local=20version=20comparison=20function=20for=20fallback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com> --- ...20\272\320\265\321\202\320\276\320\262.os" | 54 +++++++++++++++++-- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" index f8034ba..bc4cce7 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -47,8 +47,9 @@ // Сначала пытаемся использовать семвер РезультатСравнения = Версии.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); Исключение - // Если семвер не может обработать версию (например, 4-значную), используем старый механизм - РезультатСравнения = РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); + // Если семвер не может обработать версию (например, 4-значную), используем простое сравнение + // Это базовый fallback для не-семвер версий + РезультатСравнения = СравнитьВерсииПростое(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); КонецПопытки; УстановленаКорректнаяВерсия = РезультатСравнения >= 0; @@ -171,8 +172,53 @@ Возврат ПутьКФайлуМетаданных; -КонецФункции - +КонецФункции + +// Простое сравнение версий для не-семвер форматов (например, 4-значных версий) +// Возвращает 1, если ЭтаВерсия > БольшеЧемВерсия, -1 если ЭтаВерсия < БольшеЧемВерсия и 0, если они равны +Функция СравнитьВерсииПростое(Знач ЭтаВерсия, Знач БольшеЧемВерсия) + + // Разбиваем версии на компоненты + КомпонентыЭтойВерсии = СтрРазделить(ЭтаВерсия, "."); + КомпонентыБольшеЧемВерсии = СтрРазделить(БольшеЧемВерсия, "."); + + // Определяем максимальное количество компонентов + МаксКоличествоКомпонентов = Макс(КомпонентыЭтойВерсии.Количество(), КомпонентыБольшеЧемВерсии.Количество()); + + // Сравниваем по компонентам + Для Сч = 0 По МаксКоличествоКомпонентов - 1 Цикл + + КомпонентЭтаВерсия = 0; + КомпонентБольшеЧем = 0; + + Если Сч < КомпонентыЭтойВерсии.Количество() Тогда + Попытка + КомпонентЭтаВерсия = Число(КомпонентыЭтойВерсии[Сч]); + Исключение + КомпонентЭтаВерсия = 0; + КонецПопытки; + КонецЕсли; + + Если Сч < КомпонентыБольшеЧемВерсии.Количество() Тогда + Попытка + КомпонентБольшеЧем = Число(КомпонентыБольшеЧемВерсии[Сч]); + Исключение + КомпонентБольшеЧем = 0; + КонецПопытки; + КонецЕсли; + + Если КомпонентЭтаВерсия > КомпонентБольшеЧем Тогда + Возврат 1; + ИначеЕсли КомпонентЭтаВерсия < КомпонентБольшеЧем Тогда + Возврат -1; + КонецЕсли; + + КонецЦикла; + + Возврат 0; + +КонецФункции + Процедура ПриСозданииОбъекта(КаталогПоискаБиблиотек = "") Лог = Логирование.ПолучитьЛог("oscript.app.opm"); From 78c2da404750bebd8ef748c39f04ca20fe4162e9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 3 Jul 2025 11:18:19 +0000 Subject: [PATCH 4/5] =?UTF-8?q?Use=20=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D0=A1=D0=92=D0=B5=D1=80=D1=81=D0=B8=D1=8F=D0=BC=D0=B8=20module?= =?UTF-8?q?=20instead=20of=20local=20version=20comparison=20function?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com> --- ...20\272\320\265\321\202\320\276\320\262.os" | 50 ++----------------- 1 file changed, 3 insertions(+), 47 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" index bc4cce7..a745cd4 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -47,9 +47,8 @@ // Сначала пытаемся использовать семвер РезультатСравнения = Версии.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); Исключение - // Если семвер не может обработать версию (например, 4-значную), используем простое сравнение - // Это базовый fallback для не-семвер версий - РезультатСравнения = СравнитьВерсииПростое(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); + // Если семвер не может обработать версию (например, 4-значную), используем модуль РаботаСВерсиями + РезультатСравнения = РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); КонецПопытки; УстановленаКорректнаяВерсия = РезультатСравнения >= 0; @@ -174,50 +173,7 @@ КонецФункции -// Простое сравнение версий для не-семвер форматов (например, 4-значных версий) -// Возвращает 1, если ЭтаВерсия > БольшеЧемВерсия, -1 если ЭтаВерсия < БольшеЧемВерсия и 0, если они равны -Функция СравнитьВерсииПростое(Знач ЭтаВерсия, Знач БольшеЧемВерсия) - - // Разбиваем версии на компоненты - КомпонентыЭтойВерсии = СтрРазделить(ЭтаВерсия, "."); - КомпонентыБольшеЧемВерсии = СтрРазделить(БольшеЧемВерсия, "."); - - // Определяем максимальное количество компонентов - МаксКоличествоКомпонентов = Макс(КомпонентыЭтойВерсии.Количество(), КомпонентыБольшеЧемВерсии.Количество()); - - // Сравниваем по компонентам - Для Сч = 0 По МаксКоличествоКомпонентов - 1 Цикл - - КомпонентЭтаВерсия = 0; - КомпонентБольшеЧем = 0; - - Если Сч < КомпонентыЭтойВерсии.Количество() Тогда - Попытка - КомпонентЭтаВерсия = Число(КомпонентыЭтойВерсии[Сч]); - Исключение - КомпонентЭтаВерсия = 0; - КонецПопытки; - КонецЕсли; - - Если Сч < КомпонентыБольшеЧемВерсии.Количество() Тогда - Попытка - КомпонентБольшеЧем = Число(КомпонентыБольшеЧемВерсии[Сч]); - Исключение - КомпонентБольшеЧем = 0; - КонецПопытки; - КонецЕсли; - - Если КомпонентЭтаВерсия > КомпонентБольшеЧем Тогда - Возврат 1; - ИначеЕсли КомпонентЭтаВерсия < КомпонентБольшеЧем Тогда - Возврат -1; - КонецЕсли; - - КонецЦикла; - - Возврат 0; - -КонецФункции + Процедура ПриСозданииОбъекта(КаталогПоискаБиблиотек = "") From 0e9ec9da1c0ce766b7f5258cbfbc16545f55d5f0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 3 Jul 2025 12:05:33 +0000 Subject: [PATCH 5/5] Update version from 1.4.1 to 1.4.2 Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com> --- packagedef | 2 +- ...0\275\321\201\321\202\320\260\320\275\321\202\321\213Opm.os" | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packagedef b/packagedef index 0dc463d..713757f 100644 --- a/packagedef +++ b/packagedef @@ -13,7 +13,7 @@ Константы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюКонстант); ВерсияПродукта = Константы_ЛокальнаяВерсия.ВерсияПродукта; Иначе - ВерсияПродукта = "1.4.1"; + ВерсияПродукта = "1.4.2"; КонецЕсли; Описание.Имя("opm") diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213Opm.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213Opm.os" index 3ea4e9e..376d787 100644 --- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213Opm.os" +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213Opm.os" @@ -24,5 +24,5 @@ ПутьВЗапасномХранилище = "/download/"; ЛокальныйКаталогУстановкиПакетов = "oscript_modules"; ИмяЛога = "oscript.app.opm"; -ВерсияПродукта = "1.4.1"; +ВерсияПродукта = "1.4.2"; ИмяФайлаНастроек = "opm.cfg";