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 4a3f6c4..d188872 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" @@ -1,175 +1,182 @@ - -#Использовать fs -#Использовать logos - -Перем Лог; - -// Массив каталогов в порядке возрастания приоритета -Перем МассивКаталоговПоискаБиблиотек; - -Перем УстановленныеПакеты; - -Функция ПакетУстановлен(Знач ОписаниеЗависимости, Знач КаталогПоискаБиблиотек = "") Экспорт - - Перем УстановленныеПакеты; - УстановленныеПакеты = ПолучитьУстановленныеПакеты(); - - ДанныеПакета = УстановленныеПакеты.Получить(ОписаниеЗависимости.ИмяПакета); - ПакетУстановлен = ДанныеПакета <> Неопределено; - Если ПакетУстановлен И НЕ ПустаяСтрока(КаталогПоискаБиблиотек) Тогда - КаталогБиблиотекПакета = Новый Файл(ОбъединитьПути(ДанныеПакета.КаталогПакета, "..")).ПолноеИмя; - ПакетУстановлен = КаталогБиблиотекПакета = КаталогПоискаБиблиотек; - КонецЕсли; - - ПутьКФайлуМетаданных = ПолучитьПутьКФайлуМетаданныхБиблиотеки(ОписаниеЗависимости.ИмяПакета); - - ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных); - Если ФайлМетаданных.Существует() Тогда - МетаОписаниеПакета = ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных); - УстановленнаяВерсия = МетаОписаниеПакета.Свойства().Версия; - Иначе - // @deprecated - УстановленнаяВерсия = 0; - КонецЕсли; - Лог.Отладка("ПакетУстановлен: Перед вызовом СравнитьВерсии(ЭтаВерсия = <%1>, БольшеЧемВерсия = <%2>)", УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); - - УстановленаКорректнаяВерсия = ОписаниеЗависимости.МинимальнаяВерсия = Неопределено - ИЛИ РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия) >= 0; - - Лог.Отладка("Пакет установлен: " + ПакетУстановлен); - Лог.Отладка("Установлена корректная версия: " + УстановленаКорректнаяВерсия); - Возврат ПакетУстановлен И УстановленаКорректнаяВерсия; - -КонецФункции - -Процедура Обновить() Экспорт - - УстановленныеПакеты = Новый Соответствие; - Для Каждого КаталогБиблиотек Из МассивКаталоговПоискаБиблиотек Цикл - - Лог.Отладка("КаталогБиблиотек " + КаталогБиблиотек); - - НайденныеФайлы = НайтиФайлы(КаталогБиблиотек, ПолучитьМаскуВсеФайлы()); - Для Каждого ФайлКаталога Из НайденныеФайлы Цикл - Если ФайлКаталога.ЭтоКаталог() Тогда - - // ДобавитьУстановленныйПакет заменит уже добавленный пакет при совпадении имён - // Соответственно, более поздние каталоги будут иметь приоритет - ДобавитьУстановленныйПакет(ФайлКаталога); - - КонецЕсли; - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры - -Функция ПолучитьУстановленныеПакеты() Экспорт - - Если УстановленныеПакеты = Неопределено Тогда - Обновить(); - КонецЕсли; - - Возврат УстановленныеПакеты; - -КонецФункции - -Процедура Инициализация() - - Лог = Логирование.ПолучитьЛог("oscript.app.opm"); - МассивКаталоговПоискаБиблиотек = Новый Массив; - - КаталогСистемныхБиблиотек = ОбъединитьПути( - КаталогПрограммы(), - ПолучитьЗначениеСистемнойНастройки("lib.system") - ); - - МассивКаталоговПоискаБиблиотек.Добавить(КаталогСистемныхБиблиотек); - ДобавитьКаталогБиблиотек("./" + КонстантыOpm.ЛокальныйКаталогУстановкиПакетов); - -КонецПроцедуры - -// Добавляет каталог в список, по которому выполняется поиск библиотек -Процедура ДобавитьКаталогБиблиотек(Знач Каталог) Экспорт - - МассивКаталоговПоискаБиблиотек.Добавить(Каталог); - -КонецПроцедуры - -Процедура ДобавитьУстановленныйПакет(Знач ФайлКаталога) - - ПутьКФайлуМетаданных = ОбъединитьПути(ФайлКаталога.ПолноеИмя, КонстантыOpm.ИмяФайлаМетаданныхПакета); - ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных); - Если ФайлМетаданных.Существует() Тогда - МетаОписаниеПакета = ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных); - Иначе - // @deprecated - МетаОписаниеПакета = Истина; - КонецЕсли; - - СтруктураДанных = Новый Структура(); - СтруктураДанных.Вставить("МетаданныеПакета", МетаОписаниеПакета); - СтруктураДанных.Вставить("КаталогПакета", ФайлКаталога.ПолноеИмя); - - УстановленныеПакеты.Вставить(ФайлКаталога.Имя, СтруктураДанных); - -КонецПроцедуры - -Функция ПрочитатьМетаданныеПакета(Знач ПутьКФайлуМетаданных) - - Перем Метаданные; - Попытка - Чтение = Новый ЧтениеXML; - Чтение.ОткрытьФайл(ПутьКФайлуМетаданных); - Сериализатор = Новый СериализацияМетаданныхПакета; - Метаданные = Сериализатор.ПрочитатьXML(Чтение); - - Чтение.Закрыть(); - Исключение - Чтение.Закрыть(); - ВызватьИсключение; - КонецПопытки; - - Возврат Метаданные; - -КонецФункции - -Функция ПолучитьПутьКФайлуМетаданныхБиблиотеки(ИмяПакета) Экспорт - - ПутьКФайлуМетаданных = ""; - Для Каждого КаталогБиблиотек Из МассивКаталоговПоискаБиблиотек Цикл - ВремПутьКФайлуМетаданных = ОбъединитьПути( - КаталогБиблиотек, - ИмяПакета, - КонстантыOpm.ИмяФайлаМетаданныхПакета - ); - - Лог.Отладка(Новый Файл(ВремПутьКФайлуМетаданных).ПолноеИмя); - Если ФС.ФайлСуществует(ВремПутьКФайлуМетаданных) Тогда - ПутьКФайлуМетаданных = ВремПутьКФайлуМетаданных; - КонецЕсли; - КонецЦикла; - - Возврат ПутьКФайлуМетаданных; - -КонецФункции - -Процедура ПриСозданииОбъекта(КаталогПоискаБиблиотек = "") - - Лог = Логирование.ПолучитьЛог("oscript.app.opm"); - МассивКаталоговПоискаБиблиотек = Новый Массив; - - Если ЗначениеЗаполнено(КаталогПоискаБиблиотек) Тогда - МассивКаталоговПоискаБиблиотек.Добавить(КаталогПоискаБиблиотек); - Иначе - КаталогСистемныхБиблиотек = ОбъединитьПути( - КаталогПрограммы(), - ПолучитьЗначениеСистемнойНастройки("lib.system") - ); - - МассивКаталоговПоискаБиблиотек.Добавить(КаталогСистемныхБиблиотек); - ДобавитьКаталогБиблиотек("./" + КонстантыOpm.ЛокальныйКаталогУстановкиПакетов); - КонецЕсли; - -КонецПроцедуры - + +#Использовать fs +#Использовать logos + +Перем Лог; + +// Массив каталогов в порядке возрастания приоритета +Перем МассивКаталоговПоискаБиблиотек; + +Перем УстановленныеПакеты; + +Функция ПакетУстановлен(Знач ОписаниеЗависимости, Знач КаталогПоискаБиблиотек = "") Экспорт + + Перем УстановленныеПакеты; + УстановленныеПакеты = ПолучитьУстановленныеПакеты(); + + ДанныеПакета = УстановленныеПакеты.Получить(ОписаниеЗависимости.ИмяПакета); + ПакетУстановлен = ДанныеПакета <> Неопределено; + Если ПакетУстановлен И НЕ ПустаяСтрока(КаталогПоискаБиблиотек) Тогда + КаталогБиблиотекПакета = Новый Файл(ОбъединитьПути(ДанныеПакета.КаталогПакета, "..")).ПолноеИмя; + ПакетУстановлен = КаталогБиблиотекПакета = КаталогПоискаБиблиотек; + КонецЕсли; + + ПутьКФайлуМетаданных = ПолучитьПутьКФайлуМетаданныхБиблиотеки(ОписаниеЗависимости.ИмяПакета); + + ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных); + Если ФайлМетаданных.Существует() Тогда + МетаОписаниеПакета = ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных); + УстановленнаяВерсия = МетаОписаниеПакета.Свойства().Версия; + Иначе + // @deprecated + УстановленнаяВерсия = 0; + КонецЕсли; + Лог.Отладка("ПакетУстановлен: Перед вызовом СравнитьВерсии(ЭтаВерсия = <%1>, БольшеЧемВерсия = <%2>)", УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); + + ВерсияSNAPSHOT = "SNAPSHOT"; + Если ОписаниеЗависимости.МинимальнаяВерсия = ВерсияSNAPSHOT И УстановленнаяВерсия = ВерсияSNAPSHOT Тогда + УстановленаКорректнаяВерсия = Истина; + ИначеЕсли ОписаниеЗависимости.МинимальнаяВерсия = ВерсияSNAPSHOT И УстановленнаяВерсия <> ВерсияSNAPSHOT Тогда + УстановленаКорректнаяВерсия = Ложь; + Иначе + УстановленаКорректнаяВерсия = ОписаниеЗависимости.МинимальнаяВерсия = Неопределено + ИЛИ РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия) >= 0; + КонецЕсли; + + Лог.Отладка("Пакет установлен: " + ПакетУстановлен); + Лог.Отладка("Установлена корректная версия: " + УстановленаКорректнаяВерсия); + Возврат ПакетУстановлен И УстановленаКорректнаяВерсия; + +КонецФункции + +Процедура Обновить() Экспорт + + УстановленныеПакеты = Новый Соответствие; + Для Каждого КаталогБиблиотек Из МассивКаталоговПоискаБиблиотек Цикл + + Лог.Отладка("КаталогБиблиотек " + КаталогБиблиотек); + + НайденныеФайлы = НайтиФайлы(КаталогБиблиотек, ПолучитьМаскуВсеФайлы()); + Для Каждого ФайлКаталога Из НайденныеФайлы Цикл + Если ФайлКаталога.ЭтоКаталог() Тогда + + // ДобавитьУстановленныйПакет заменит уже добавленный пакет при совпадении имён + // Соответственно, более поздние каталоги будут иметь приоритет + ДобавитьУстановленныйПакет(ФайлКаталога); + + КонецЕсли; + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +Функция ПолучитьУстановленныеПакеты() Экспорт + + Если УстановленныеПакеты = Неопределено Тогда + Обновить(); + КонецЕсли; + + Возврат УстановленныеПакеты; + +КонецФункции + +Процедура Инициализация() + + Лог = Логирование.ПолучитьЛог("oscript.app.opm"); + МассивКаталоговПоискаБиблиотек = Новый Массив; + + КаталогСистемныхБиблиотек = ОбъединитьПути( + КаталогПрограммы(), + ПолучитьЗначениеСистемнойНастройки("lib.system") + ); + + МассивКаталоговПоискаБиблиотек.Добавить(КаталогСистемныхБиблиотек); + ДобавитьКаталогБиблиотек("./" + КонстантыOpm.ЛокальныйКаталогУстановкиПакетов); + +КонецПроцедуры + +// Добавляет каталог в список, по которому выполняется поиск библиотек +Процедура ДобавитьКаталогБиблиотек(Знач Каталог) Экспорт + + МассивКаталоговПоискаБиблиотек.Добавить(Каталог); + +КонецПроцедуры + +Процедура ДобавитьУстановленныйПакет(Знач ФайлКаталога) + + ПутьКФайлуМетаданных = ОбъединитьПути(ФайлКаталога.ПолноеИмя, КонстантыOpm.ИмяФайлаМетаданныхПакета); + ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных); + Если ФайлМетаданных.Существует() Тогда + МетаОписаниеПакета = ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных); + Иначе + // @deprecated + МетаОписаниеПакета = Истина; + КонецЕсли; + + СтруктураДанных = Новый Структура(); + СтруктураДанных.Вставить("МетаданныеПакета", МетаОписаниеПакета); + СтруктураДанных.Вставить("КаталогПакета", ФайлКаталога.ПолноеИмя); + + УстановленныеПакеты.Вставить(ФайлКаталога.Имя, СтруктураДанных); + +КонецПроцедуры + +Функция ПрочитатьМетаданныеПакета(Знач ПутьКФайлуМетаданных) + + Перем Метаданные; + Попытка + Чтение = Новый ЧтениеXML; + Чтение.ОткрытьФайл(ПутьКФайлуМетаданных); + Сериализатор = Новый СериализацияМетаданныхПакета; + Метаданные = Сериализатор.ПрочитатьXML(Чтение); + + Чтение.Закрыть(); + Исключение + Чтение.Закрыть(); + ВызватьИсключение; + КонецПопытки; + + Возврат Метаданные; + +КонецФункции + +Функция ПолучитьПутьКФайлуМетаданныхБиблиотеки(ИмяПакета) Экспорт + + ПутьКФайлуМетаданных = ""; + Для Каждого КаталогБиблиотек Из МассивКаталоговПоискаБиблиотек Цикл + ВремПутьКФайлуМетаданных = ОбъединитьПути( + КаталогБиблиотек, + ИмяПакета, + КонстантыOpm.ИмяФайлаМетаданныхПакета + ); + + Лог.Отладка(Новый Файл(ВремПутьКФайлуМетаданных).ПолноеИмя); + Если ФС.ФайлСуществует(ВремПутьКФайлуМетаданных) Тогда + ПутьКФайлуМетаданных = ВремПутьКФайлуМетаданных; + КонецЕсли; + КонецЦикла; + + Возврат ПутьКФайлуМетаданных; + +КонецФункции + +Процедура ПриСозданииОбъекта(КаталогПоискаБиблиотек = "") + + Лог = Логирование.ПолучитьЛог("oscript.app.opm"); + МассивКаталоговПоискаБиблиотек = Новый Массив; + + Если ЗначениеЗаполнено(КаталогПоискаБиблиотек) Тогда + МассивКаталоговПоискаБиблиотек.Добавить(КаталогПоискаБиблиотек); + Иначе + КаталогСистемныхБиблиотек = ОбъединитьПути( + КаталогПрограммы(), + ПолучитьЗначениеСистемнойНастройки("lib.system") + ); + + МассивКаталоговПоискаБиблиотек.Добавить(КаталогСистемныхБиблиотек); + ДобавитьКаталогБиблиотек("./" + КонстантыOpm.ЛокальныйКаталогУстановкиПакетов); + КонецЕсли; + +КонецПроцедуры +