From 9c05b2e9b30c0f18da2750d25bada41bd379ad74 Mon Sep 17 00:00:00 2001 From: Vladimir Nadulich Date: Mon, 2 Nov 2020 22:53:50 +0300 Subject: [PATCH 1/6] =?UTF-8?q?=D0=A3=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D0=BF=D1=80=D1=8F=D0=BC=D0=BE=D0=B9=20=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=BD=D0=B5=D1=82-=D1=81=D1=81=D1=8B=D0=BB?= =?UTF-8?q?=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...260\320\275\320\264\320\260Opm_Install.os" | 29 +++++++++++++++++-- ...\260\320\275\320\264\320\260Opm_Update.os" | 26 +++++++++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Install.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Install.os" index 5f589c8..1b28d03 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Install.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Install.os" @@ -5,6 +5,8 @@ КомандаПриложения.Опция("a all", Ложь, "Установить все пакеты, зарегистрированные в хабе"); КомандаПриложения.Опция("f file", "", "Указать файл из которого нужно установить пакет. Поддерживает указание маски файла для пакетной установки"); + КомандаПриложения.Опция("u url", "", "Указать прямую интернет-ссылку на файл *.ospx из которого нужно установить пакет"); + КомандаПриложения.Опция("l local", Ложь, "Установить пакеты в локальный каталог oscript_modules"); КомандаПриложения.Опция("dev", Ложь, "Признак установки пакетов для разработки"); КомандаПриложения.Опция("s skip-install-deps", Ложь, "признак пропуска установки зависимых пакетов"); @@ -36,6 +38,7 @@ УстановкаВсехПакетов = КомандаПриложения.ЗначениеОпции("all"); КаталогУстановки = КомандаПриложения.ЗначениеОпции("dest"); ФайлПакетаУстановки = КомандаПриложения.ЗначениеОпции("file"); + ИнтернетСсылкаНаПакет = КомандаПриложения.ЗначениеОпции("url"); МассивПакетовКУстановке = КомандаПриложения.ЗначениеАргумента("PACKAGE"); НеобходимоУстановитьЗависимости = Не КомандаПриложения.ЗначениеОпции("skip-install-deps"); @@ -64,6 +67,7 @@ Лог.Отладка("УстановкаВсехПакетов: %1", УстановкаВсехПакетов); Лог.Отладка("КаталогУстановки: %1", КаталогУстановки); Лог.Отладка("ФайлПакетаУстановки: %1", ФайлПакетаУстановки); + Лог.Отладка("ИнтернетСсылкаНаПакет: %1", ИнтернетСсылкаНаПакет); Лог.Отладка("МассивПакетовКУстановке: %1", МассивПакетовКУстановке.Количество()); Лог.Отладка("НеобходимоУстановитьЗависимости: %1", НеобходимоУстановитьЗависимости); Лог.Отладка("СоздаватьФайлыЗапуска: %1", СоздаватьФайлыЗапуска); @@ -76,7 +80,7 @@ Если УстановкаВсехПакетов Тогда РаботаСПакетами.УстановитьВсеПакетыИзОблака(РежимУстановки, ЦелевойКаталог, НастройкаУстановки); - ИначеЕсли ПустаяСтрока(ФайлПакетаУстановки) И МассивПакетовКУстановке.Количество() = 0 Тогда + ИначеЕсли ПустаяСтрока(ФайлПакетаУстановки) И ПустаяСтрока(ИнтернетСсылкаНаПакет) И МассивПакетовКУстановке.Количество() = 0 Тогда РаботаСПакетами.УстановитьПакетыПоОписаниюПакета(РежимУстановки, ЦелевойКаталог, НастройкаУстановки); ИначеЕсли НЕ ПустаяСтрока(ФайлПакетаУстановки) Тогда @@ -98,6 +102,28 @@ КонецЦикла; + ИначеЕсли НЕ ПустаяСтрока(ИнтернетСсылкаНаПакет) Тогда + + позСервер = СтрНайти(ИнтернетСсылкаНаПакет, "/", , , 3); + Сервер = Лев(ИнтернетСсылкаНаПакет, позСервер-1); + Адрес = Сред(ИнтернетСсылкаНаПакет, позСервер); + Если Нрег(Лев(Сервер, 5)) = "https" Тогда + Порт = 443; + Иначе + Порт = 80; + КонецЕсли; + + Соединение = Новый HTTPСоединение(Сервер, Порт); + Запрос = Новый HTTPЗапрос(Адрес); + Ответ = Соединение.Получить(Запрос); + ДД = Ответ.ПолучитьТелоКакДвоичныеДанные(); + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("ospx"); + ДД.Записать(ИмяВременногоФайла); + + РаботаСПакетами.УстановитьПакетИзФайла(ИмяВременногоФайла, РежимУстановки, ЦелевойКаталог, НастройкаУстановки); + + УдалитьФайлы(ИмяВременногоФайла); + Иначе Для каждого ИмяПакета Из МассивПакетовКУстановке Цикл @@ -111,7 +137,6 @@ РаботаСПакетами.УстановитьПакетИзОблака(ИмяПакета, РежимУстановки, ЦелевойКаталог, НастройкаУстановки); КонецЕсли; - КонецЦикла; diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Update.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Update.os" index 77371cf..10244f4 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Update.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Update.os" @@ -5,6 +5,8 @@ КомандаПриложения.Опция("a all", Ложь, "Обновить все установленные пакеты"); КомандаПриложения.Опция("f file", "", "Указать файл из которого нужно установить пакет"); + КомандаПриложения.Опция("u url", "", "Указать прямую интернет-ссылку на файл *.ospx из которого нужно установить пакет"); + КомандаПриложения.Опция("l local", Ложь, "Обновление пакета в локальном каталоге oscript_modules"); КомандаПриложения.Опция("s skip-install-deps", Ложь, "признак пропуска установки зависимых пакетов"); КомандаПриложения.Опция("skip-create-app", Ложь, "признак отключения создания файла запуска"); @@ -33,6 +35,7 @@ ОбновлениеВЛокальныйКаталог = КомандаПриложения.ЗначениеОпции("local"); ОбновлениеВсехПакетов = КомандаПриложения.ЗначениеОпции("all"); ФайлПакетаУстановки = КомандаПриложения.ЗначениеОпции("file"); + ИнтернетСсылкаНаПакет = КомандаПриложения.ЗначениеОпции("url"); МассивПакетовКОбновлению = КомандаПриложения.ЗначениеАргумента("PACKAGE"); НеобходимУстановитьЗависимости = Не КомандаПриложения.ЗначениеОпции("skip-install-deps"); @@ -54,6 +57,29 @@ РаботаСПакетами.ОбновитьУстановленныеПакеты(РежимУстановки, , НастройкаУстановки); ИначеЕсли НЕ ПустаяСтрока(ФайлПакетаУстановки) Тогда РаботаСПакетами.УстановитьПакетИзФайла(ФайлПакетаУстановки, РежимУстановки, , НастройкаУстановки); + + ИначеЕсли НЕ ПустаяСтрока(ИнтернетСсылкаНаПакет) Тогда + + позСервер = СтрНайти(ИнтернетСсылкаНаПакет, "/", , , 3); + Сервер = Лев(ИнтернетСсылкаНаПакет, позСервер-1); + Адрес = Сред(ИнтернетСсылкаНаПакет, позСервер); + Если Нрег(Лев(Сервер, 5)) = "https" Тогда + Порт = 443; + Иначе + Порт = 80; + КонецЕсли; + + Соединение = Новый HTTPСоединение(Сервер, Порт); + Запрос = Новый HTTPЗапрос(Адрес); + Ответ = Соединение.Получить(Запрос); + ДД = Ответ.ПолучитьТелоКакДвоичныеДанные(); + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("ospx"); + ДД.Записать(ИмяВременногоФайла); + + РаботаСПакетами.УстановитьПакетИзФайла(ИмяВременногоФайла, РежимУстановки, , НастройкаУстановки); + + УдалитьФайлы(ИмяВременногоФайла); + Иначе Для каждого ИмяПакета Из МассивПакетовКОбновлению Цикл From 227ace93fcebc76f14bfa2ebb8baeab7742a5d48 Mon Sep 17 00:00:00 2001 From: GladilovDmitry <49302260+GladilovDmitry@users.noreply.github.com> Date: Tue, 17 Aug 2021 13:53:09 +0300 Subject: [PATCH 2/6] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Исправлена ошибка readme в описании команды вывода справки. Указанная команда "opm help <команда>" выдает ошибку. В консоли opm выводит "Для вывода справки по доступным командам наберите: opm КОМАНДА --help" --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0e3d8c4..330b911 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ OneScript Package Manager - list - Вывести список пакетов - help - Справка по командам -Наберите *opm help <команда>*, чтобы вывести справку по команде +Наберите *opm <команда> --help*, чтобы вывести справку по команде Справка из википедии: [Система управления пакетами](https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0%D0%BC%D0%B8) From 185b8d1c0b86537f8d6e61d5b5c03377721092d0 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 16 Sep 2021 14:33:18 +0300 Subject: [PATCH 3/6] =?UTF-8?q?=D0=92=20=D1=81=D0=BB=D1=83=D1=87=D0=B0?= =?UTF-8?q?=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20=D0=B2=D0=BE?= =?UTF-8?q?=D0=B7=D0=B2=D1=80=D0=B0=D1=89=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cmd/opm.os | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cmd/opm.os b/src/cmd/opm.os index f9df1e6..59c8854 100644 --- a/src/cmd/opm.os +++ b/src/cmd/opm.os @@ -49,8 +49,14 @@ ВыполнитьПриложение(); + ВременныеФайлы.Удалить(); + + ЗавершитьРаботу(0); + Исключение Сообщить(ОписаниеОшибки()); -КонецПопытки; -ВременныеФайлы.Удалить(); \ No newline at end of file + ВременныеФайлы.Удалить(); + + ЗавершитьРаботу(1); +КонецПопытки; From 3c1c149551c20d7fecc6adf6009e11916ff181ea Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 16 Sep 2021 14:39:03 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=201.0.?= =?UTF-8?q?4?= 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 8e80618..8a78921 100644 --- a/packagedef +++ b/packagedef @@ -77,7 +77,7 @@ Константы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюКонстант); ВерсияПродукта = Константы_ЛокальнаяВерсия.ВерсияПродукта; Иначе - ВерсияПродукта = "1.0.3"; + ВерсияПродукта = "1.0.4"; КонецЕсли; Описание.Имя("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 647ac60..7a4eb37 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.0.3"; +ВерсияПродукта = "1.0.4"; ИмяФайлаНастроек = "opm.cfg"; From 995faf57adc46f5e94efa8ad077811621fc3fad2 Mon Sep 17 00:00:00 2001 From: Nikita Gryzlov Date: Tue, 17 May 2022 15:59:37 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B9=20SNAPSHOT=20?= =?UTF-8?q?=D0=B8=D0=B7=20packagedef?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\272\320\265\321\202\320\276\320\262.os" | 357 +++++++++--------- 1 file changed, 182 insertions(+), 175 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 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.ЛокальныйКаталогУстановкиПакетов); + КонецЕсли; + +КонецПроцедуры + From b8466588734c6949a6a4784e5a7ba2e90fcdafed Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 17 May 2022 16:01:11 +0300 Subject: [PATCH 6/6] version bump --- 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 8a78921..c10de19 100644 --- a/packagedef +++ b/packagedef @@ -77,7 +77,7 @@ Константы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюКонстант); ВерсияПродукта = Константы_ЛокальнаяВерсия.ВерсияПродукта; Иначе - ВерсияПродукта = "1.0.4"; + ВерсияПродукта = "1.0.5"; КонецЕсли; Описание.Имя("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 7a4eb37..cdd9a11 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.0.4"; +ВерсияПродукта = "1.0.5"; ИмяФайлаНастроек = "opm.cfg";