diff --git a/install/package-loader.os b/install/package-loader.os index 89a87329c..59d4845d0 100644 --- a/install/package-loader.os +++ b/install/package-loader.os @@ -1,7 +1,9 @@ -// Пояснения по переменным даны в конце модуля +// Пояснения по переменным даны в конце модуля Перем ПоказатьСообщенияЗагрузки; Перем ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей; +Перем КэшМодулей; + Процедура ПриЗагрузкеБиблиотеки(Путь, СтандартнаяОбработка, Отказ) Вывести(" |ПриЗагрузкеБиблиотеки " + Путь); @@ -66,7 +68,7 @@ Если Не ПустаяСтрока(Идентификатор) Тогда Вывести(СтрШаблон(" модуль %1, файл %2", Идентификатор, ФайлКласса.ПолноеИмя)); Попытка - ДобавитьМодуль(ФайлКласса.ПолноеИмя, Идентификатор); + ДобавитьМодульЕслиРанееНеДобавляли(ФайлКласса.ПолноеИмя, Идентификатор); Исключение Если ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей Тогда ВызватьИсключение; @@ -145,7 +147,7 @@ Вывести(СтрШаблон(" модуль (по соглашению) %1, файл %2", Файл.ИмяБезРасширения, Файл.ПолноеИмя)); СтандартнаяОбработка = Ложь; Попытка - ДобавитьМодуль(Файл.ПолноеИмя, Файл.ИмяБезРасширения); + ДобавитьМодульЕслиРанееНеДобавляли(Файл.ПолноеИмя, Файл.ИмяБезРасширения); Исключение Если ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей Тогда ВызватьИсключение; @@ -187,6 +189,21 @@ КонецЕсли; КонецПроцедуры +Процедура ДобавитьМодульЕслиРанееНеДобавляли(ПутьФайла, ИмяМодуля) + Вывести("Добавляю модуль, если ранее не добавляли " + ИмяМодуля); + + МодульУжеЕсть = КэшМодулей.Найти(ИмяМодуля) <> Неопределено; + Если Не МодульУжеЕсть Тогда + + Вывести("Добавляю модуль, т.к. он не найден - " + ИмяМодуля); + ДобавитьМодуль(ПутьФайла, ИмяМодуля); + КэшМодулей.Добавить(ИмяМодуля); + Иначе + Вывести("Пропускаю загрузку модуля " + ИмяМодуля); + + КонецЕсли; +КонецПроцедуры + Процедура Вывести(Знач Сообщение) Если ПоказатьСообщенияЗагрузки Тогда Сообщить(Сообщение); @@ -225,4 +242,6 @@ "OSLIB_LOADER_DUPLICATES", Ложь); // для установки других значений переменных среды и запуска скриптов можно юзать следующую командную строку -// (set OSLIB_LOADER_TRACE=1) && (oscript .\tasks\test.os) \ No newline at end of file +// (set OSLIB_LOADER_TRACE=1) && (oscript .\tasks\test.os) + +КэшМодулей = Новый Массив;