From 9737adf5406e975f2a3add29a8e7324b92a1da15 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Sep 2025 06:51:56 +0000 Subject: [PATCH 1/6] Initial plan From 656da40d77f9a10ea79943f7ffe9af19b5104c15 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Sep 2025 07:03:39 +0000 Subject: [PATCH 2/6] Fix transitive dev dependencies installation issue Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com> --- ...20\272\320\265\321\202\320\276\320\262.os" | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\270\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\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\270\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" index 545c86d..8df316c 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\270\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\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\270\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -18,6 +18,7 @@ Перем УстанавливатьЗависимости; Перем УстанавливатьЗависимостиРазработчика; Перем СоздаватьФайлыЗапуска; +Перем УровеньЗависимости; // BSLLS:NumberOfOptionalParams-off Процедура ПриСозданииОбъекта(Знач ВходящийРежимУстановкиПакетов = Неопределено, @@ -63,6 +64,7 @@ УстанавливатьЗависимостиРазработчика = Ложь; СоздаватьФайлыЗапуска = Истина; ИмяСервера = ВходящийИмяСервера; + УровеньЗависимости = 0; КонецПроцедуры Процедура УстанавливатьЗависимости(Знач ПУстанавливатьЗависимости) Экспорт @@ -77,6 +79,10 @@ СоздаватьФайлыЗапуска = ПСоздаватьФайлыЗапуска; КонецПроцедуры +Процедура УстановитьУровеньЗависимости(Знач Уровень) Экспорт + УровеньЗависимости = Уровень; +КонецПроцедуры + Процедура УстановитьРежимУстановкиПакетов(Знач ЗначениеРежимУстановкиПакетов) Экспорт ТекущийРежимУстановкиПакетов = ЗначениеРежимУстановкиПакетов; @@ -114,11 +120,17 @@ Процедура УстановитьПакетПоОписанию(Знач ЗависимостьПакета) Экспорт Если ЗависимостьПакета.ДляРазработки Тогда - Если УстанавливатьЗависимостиРазработчика Тогда + // Зависимости разработчика устанавливаются только на первом уровне (УровеньЗависимости = 0) + Если УстанавливатьЗависимостиРазработчика И УровеньЗависимости = 0 Тогда Лог.Отладка("<%1> отмечена как зависимость для разработчика. Устанавливаем.", ЗависимостьПакета.ИмяПакета); Иначе - Лог.Отладка("<%1> отмечена как зависимость для разработчика, " + - "но установка зависимостей для разработчика не активирована. Пропускаем.", ЗависимостьПакета.ИмяПакета); + Если УровеньЗависимости > 0 Тогда + Лог.Отладка("<%1> отмечена как зависимость для разработчика, " + + "но это транзитивная зависимость (уровень %2). Пропускаем.", ЗависимостьПакета.ИмяПакета, УровеньЗависимости); + Иначе + Лог.Отладка("<%1> отмечена как зависимость для разработчика, " + + "но установка зависимостей для разработчика не активирована. Пропускаем.", ЗависимостьПакета.ИмяПакета); + КонецЕсли; Возврат; КонецЕсли; КонецЕсли; @@ -173,8 +185,21 @@ Процедура УстановитьПакетПоИмениИВерсии(Знач ИмяПакета, Знач ВерсияПакета, ЗНач ЭтоЗависимыйПакет = Ложь) Экспорт - ФайлПакета = РаботаСПакетами.ПолучитьПакет(ИмяПакета, ВерсияПакета, , ИмяСервера); - УстановитьПакетИзАрхива(ФайлПакета, ЭтоЗависимыйПакет); + Если ЭтоЗависимыйПакет Тогда + // Для зависимых пакетов увеличиваем уровень зависимости + НовыйМенеджер = Новый МенеджерУстановкиПакетов(ТекущийРежимУстановкиПакетов, ЦелевойКаталогУстановки, КаталогУстановкиЗависимостей, ИмяСервера); + НовыйМенеджер.УстанавливатьЗависимости(УстанавливатьЗависимости); + НовыйМенеджер.СоздаватьФайлыЗапуска(СоздаватьФайлыЗапуска); + // Для транзитивных зависимостей отключаем установку зависимостей разработчика + НовыйМенеджер.УстанавливатьЗависимостиРазработчика(Ложь); + НовыйМенеджер.УстановитьУровеньЗависимости(УровеньЗависимости + 1); + + ФайлПакета = РаботаСПакетами.ПолучитьПакет(ИмяПакета, ВерсияПакета, , ИмяСервера); + НовыйМенеджер.УстановитьПакетИзАрхива(ФайлПакета, Ложь); + Иначе + ФайлПакета = РаботаСПакетами.ПолучитьПакет(ИмяПакета, ВерсияПакета, , ИмяСервера); + УстановитьПакетИзАрхива(ФайлПакета, ЭтоЗависимыйПакет); + КонецЕсли; КонецПроцедуры From 6f9ded7d3beae1e6c1e4a52e759f9714d9a43044 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Sep 2025 07:55:10 +0000 Subject: [PATCH 3/6] Refactor dependency level tracking using parameters instead of class field Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com> --- ...20\272\320\265\321\202\320\276\320\262.os" | 43 ++++++------------- 1 file changed, 12 insertions(+), 31 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\270\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\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\270\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" index 8df316c..7c4a342 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\270\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\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\270\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -18,7 +18,6 @@ Перем УстанавливатьЗависимости; Перем УстанавливатьЗависимостиРазработчика; Перем СоздаватьФайлыЗапуска; -Перем УровеньЗависимости; // BSLLS:NumberOfOptionalParams-off Процедура ПриСозданииОбъекта(Знач ВходящийРежимУстановкиПакетов = Неопределено, @@ -64,7 +63,6 @@ УстанавливатьЗависимостиРазработчика = Ложь; СоздаватьФайлыЗапуска = Истина; ИмяСервера = ВходящийИмяСервера; - УровеньЗависимости = 0; КонецПроцедуры Процедура УстанавливатьЗависимости(Знач ПУстанавливатьЗависимости) Экспорт @@ -79,10 +77,6 @@ СоздаватьФайлыЗапуска = ПСоздаватьФайлыЗапуска; КонецПроцедуры -Процедура УстановитьУровеньЗависимости(Знач Уровень) Экспорт - УровеньЗависимости = Уровень; -КонецПроцедуры - Процедура УстановитьРежимУстановкиПакетов(Знач ЗначениеРежимУстановкиПакетов) Экспорт ТекущийРежимУстановкиПакетов = ЗначениеРежимУстановкиПакетов; @@ -117,7 +111,7 @@ КонецПроцедуры -Процедура УстановитьПакетПоОписанию(Знач ЗависимостьПакета) Экспорт +Процедура УстановитьПакетПоОписанию(Знач ЗависимостьПакета, Знач УровеньЗависимости = 0) Экспорт Если ЗависимостьПакета.ДляРазработки Тогда // Зависимости разработчика устанавливаются только на первом уровне (УровеньЗависимости = 0) @@ -135,11 +129,11 @@ КонецЕсли; КонецЕсли; - УстановитьПакетПоИмениИВерсии(ЗависимостьПакета.ИмяПакета, ЗависимостьПакета.МинимальнаяВерсия, Истина); + УстановитьПакетПоИмениИВерсии(ЗависимостьПакета.ИмяПакета, ЗависимостьПакета.МинимальнаяВерсия, Истина, УровеньЗависимости); КонецПроцедуры -Процедура УстановитьПакетИзАрхива(Знач ФайлПакета, Знач ЭтоЗависимыйПакет = Ложь) Экспорт +Процедура УстановитьПакетИзАрхива(Знач ФайлПакета, Знач ЭтоЗависимыйПакет = Ложь, Знач УровеньЗависимости = 0) Экспорт КаталогУстановки = ?(ЭтоЗависимыйПакет, КаталогУстановкиЗависимостей, ЦелевойКаталогУстановки); УстановкаПакета = Новый УстановкаПакета(); @@ -174,36 +168,23 @@ Если УстанавливатьЗависимости Тогда // Тут надо корректно найти имя пакета в пути Если ФС.КаталогСуществует(ПутьККаталогуЛокальныхЗависимостей) Тогда - РазрешитьЗависимостиПакетаЛокально(МанифестПакета, ПутьККаталогуЛокальныхЗависимостей); + РазрешитьЗависимостиПакетаЛокально(МанифестПакета, ПутьККаталогуЛокальныхЗависимостей, УровеньЗависимости); Иначе - РазрешитьЗависимостиПакета(МанифестПакета); + РазрешитьЗависимостиПакета(МанифестПакета, УровеньЗависимости); КонецЕсли; КонецЕсли; КонецПроцедуры -Процедура УстановитьПакетПоИмениИВерсии(Знач ИмяПакета, Знач ВерсияПакета, ЗНач ЭтоЗависимыйПакет = Ложь) Экспорт +Процедура УстановитьПакетПоИмениИВерсии(Знач ИмяПакета, Знач ВерсияПакета, ЗНач ЭтоЗависимыйПакет = Ложь, Знач УровеньЗависимости = 0) Экспорт - Если ЭтоЗависимыйПакет Тогда - // Для зависимых пакетов увеличиваем уровень зависимости - НовыйМенеджер = Новый МенеджерУстановкиПакетов(ТекущийРежимУстановкиПакетов, ЦелевойКаталогУстановки, КаталогУстановкиЗависимостей, ИмяСервера); - НовыйМенеджер.УстанавливатьЗависимости(УстанавливатьЗависимости); - НовыйМенеджер.СоздаватьФайлыЗапуска(СоздаватьФайлыЗапуска); - // Для транзитивных зависимостей отключаем установку зависимостей разработчика - НовыйМенеджер.УстанавливатьЗависимостиРазработчика(Ложь); - НовыйМенеджер.УстановитьУровеньЗависимости(УровеньЗависимости + 1); - - ФайлПакета = РаботаСПакетами.ПолучитьПакет(ИмяПакета, ВерсияПакета, , ИмяСервера); - НовыйМенеджер.УстановитьПакетИзАрхива(ФайлПакета, Ложь); - Иначе - ФайлПакета = РаботаСПакетами.ПолучитьПакет(ИмяПакета, ВерсияПакета, , ИмяСервера); - УстановитьПакетИзАрхива(ФайлПакета, ЭтоЗависимыйПакет); - КонецЕсли; + ФайлПакета = РаботаСПакетами.ПолучитьПакет(ИмяПакета, ВерсияПакета, , ИмяСервера); + УстановитьПакетИзАрхива(ФайлПакета, ЭтоЗависимыйПакет, УровеньЗависимости); КонецПроцедуры -Процедура РазрешитьЗависимостиПакета(Знач Манифест) Экспорт +Процедура РазрешитьЗависимостиПакета(Знач Манифест, Знач УровеньЗависимости = 0) Экспорт Зависимости = Манифест.Зависимости(); Если Зависимости.Количество() = 0 Тогда @@ -222,7 +203,7 @@ // скачать // определить зависимости и так по кругу - УстановитьПакетПоОписанию(Зависимость); + УстановитьПакетПоОписанию(Зависимость, УровеньЗависимости + 1); УстановленныеПакеты.Обновить(); Иначе @@ -234,7 +215,7 @@ КонецПроцедуры -Процедура РазрешитьЗависимостиПакетаЛокально(Манифест, ПутьККаталогуЛокальныхЗависимостей) +Процедура РазрешитьЗависимостиПакетаЛокально(Манифест, ПутьККаталогуЛокальныхЗависимостей, Знач УровеньЗависимости = 0) Зависимости = Манифест.Зависимости(); Если Зависимости.Количество() = 0 Тогда @@ -262,7 +243,7 @@ Иначе - УстановитьПакетПоОписанию(Зависимость); + УстановитьПакетПоОписанию(Зависимость, УровеньЗависимости + 1); КонецЕсли; From fec42b78180f2bb2f48c7656bafe26ad6d255c63 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 16 Sep 2025 12:50:16 +0200 Subject: [PATCH 4/6] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=84=D0=B8=D1=87=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=D1=85=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D0=BA=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D1=83=20=D0=B2=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=81=D0=BE=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/install-file.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/install-file.feature b/features/install-file.feature index 08301c1..36cb125 100644 --- a/features/install-file.feature +++ b/features/install-file.feature @@ -24,7 +24,7 @@ И я вижу в консоли вывод | Событие установки - ПередУстановкой - КаталогУстановкиПакета | | Событие установки - ПриУстановке - КаталогУстановкиПакета | - | ИНФОРМАЦИЯ - Установка завершена | + | Установка завершена | И Вывод команды "opm" не содержит "Внешнее исключение" И Код возврата команды "opm" равен 0 И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules" From c7291e64f7dd167dd3d8ac8c630416f75e8388a0 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 16 Sep 2025 12:50:51 +0200 Subject: [PATCH 5/6] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 f801dc9..ef6a8ad 100644 --- a/packagedef +++ b/packagedef @@ -13,7 +13,7 @@ Константы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюКонстант); ВерсияПродукта = Константы_ЛокальнаяВерсия.ВерсияПродукта; Иначе - ВерсияПродукта = "1.6.1"; + ВерсияПродукта = "1.6.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 a4648ef..89dbd99 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.6.1"; +ВерсияПродукта = "1.6.2"; ИмяФайлаНастроек = "opm.cfg"; From a439ff3370b75677a0e349429d2d4b69dc3315a6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Sep 2025 14:14:29 +0000 Subject: [PATCH 6/6] =?UTF-8?q?Add=20validation=20for=20=D0=A3=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D0=BD=D1=8C=D0=97=D0=B0=D0=B2=D0=B8=D1=81=D0=B8?= =?UTF-8?q?=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20parameter=20in=20export=20meth?= =?UTF-8?q?ods?= 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> --- ...0\320\272\320\265\321\202\320\276\320\262.os" | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\270\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\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\270\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" index 7c4a342..819aa71 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\270\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\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\270\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -113,6 +113,10 @@ Процедура УстановитьПакетПоОписанию(Знач ЗависимостьПакета, Знач УровеньЗависимости = 0) Экспорт + Если УровеньЗависимости < 0 Тогда + ВызватьИсключение "УровеньЗависимости не может быть меньше нуля"; + КонецЕсли; + Если ЗависимостьПакета.ДляРазработки Тогда // Зависимости разработчика устанавливаются только на первом уровне (УровеньЗависимости = 0) Если УстанавливатьЗависимостиРазработчика И УровеньЗависимости = 0 Тогда @@ -135,6 +139,10 @@ Процедура УстановитьПакетИзАрхива(Знач ФайлПакета, Знач ЭтоЗависимыйПакет = Ложь, Знач УровеньЗависимости = 0) Экспорт + Если УровеньЗависимости < 0 Тогда + ВызватьИсключение "УровеньЗависимости не может быть меньше нуля"; + КонецЕсли; + КаталогУстановки = ?(ЭтоЗависимыйПакет, КаталогУстановкиЗависимостей, ЦелевойКаталогУстановки); УстановкаПакета = Новый УстановкаПакета(); УстановкаПакета.СоздаватьФайлЗапуска(СоздаватьФайлыЗапуска); @@ -179,6 +187,10 @@ Процедура УстановитьПакетПоИмениИВерсии(Знач ИмяПакета, Знач ВерсияПакета, ЗНач ЭтоЗависимыйПакет = Ложь, Знач УровеньЗависимости = 0) Экспорт + Если УровеньЗависимости < 0 Тогда + ВызватьИсключение "УровеньЗависимости не может быть меньше нуля"; + КонецЕсли; + ФайлПакета = РаботаСПакетами.ПолучитьПакет(ИмяПакета, ВерсияПакета, , ИмяСервера); УстановитьПакетИзАрхива(ФайлПакета, ЭтоЗависимыйПакет, УровеньЗависимости); @@ -186,6 +198,10 @@ Процедура РазрешитьЗависимостиПакета(Знач Манифест, Знач УровеньЗависимости = 0) Экспорт + Если УровеньЗависимости < 0 Тогда + ВызватьИсключение "УровеньЗависимости не может быть меньше нуля"; + КонецЕсли; + Зависимости = Манифест.Зависимости(); Если Зависимости.Количество() = 0 Тогда Возврат;