diff --git a/.gitignore b/.gitignore index 7153276..f81b134 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,8 @@ coverage/* bdd-*.xml *.ospx src/oscript.cfg - +opm\.cfg +tests/testpackage src/cmd/oscript\.cfg exec.log test-reports/tests.xml diff --git a/.travis.yml b/.travis.yml index e56e8b1..01cba2c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,7 @@ env: - CHANNEL=dev - PACKAGE_NAME=opm matrix: - - OSCRIPT_VERSION=1_0_20 + - OSCRIPT_VERSION=1_0_21 - OSCRIPT_VERSION=night-build matrix: allow_failures: @@ -34,7 +34,7 @@ before_cache: | xargs -n 2 -t sh -c 'test -e $HOME/docker/$1.tar.gz || docker save $0 | gzip -2 > $HOME/docker/$1.tar.gz' install: - - docker pull evilbeaver/onescript:1.0.19 + - docker pull evilbeaver/onescript:1.0.21 script: - docker version @@ -54,7 +54,7 @@ jobs: - stage: Сборка и публикация github & hub.oscript.io script: skip before_deploy: - - docker run -it -v $(pwd):/work_dir evilbeaver/onescript:1.0.20 sh -c 'cd /work_dir; opm build ./ ; exit' + - docker run -it -v $(pwd):/work_dir evilbeaver/onescript:1.0.21 sh -c 'cd /work_dir; opm build ./ ; exit' deploy: - provider: releases api_key: "$GITHUB_OAUTH_TOKEN" @@ -66,12 +66,12 @@ jobs: tags: true - provider: script skip_cleanup: true - script: docker run -it -e GITHUB_OAUTH_TOKEN=$GITHUB_OAUTH_TOKEN -v $(pwd):/work_dir evilbeaver/onescript:1.0.20 sh -c 'cd /work_dir; opm push --token $GITHUB_OAUTH_TOKEN --channel dev --file ./$PACKAGE_NAME-*.ospx; exit' + script: docker run -it -e GITHUB_OAUTH_TOKEN=$GITHUB_OAUTH_TOKEN -v $(pwd):/work_dir evilbeaver/onescript:1.0.21 sh -c 'cd /work_dir; opm push --token $GITHUB_OAUTH_TOKEN --channel dev --file ./$PACKAGE_NAME-*.ospx; exit' on: branch: develop - provider: script skip_cleanup: true - script: docker run -it -e GITHUB_OAUTH_TOKEN=$GITHUB_OAUTH_TOKEN -v $(pwd):/work_dir evilbeaver/onescript:1.0.20 sh -c 'cd /work_dir; opm push --token $GITHUB_OAUTH_TOKEN --channel stable --file ./$PACKAGE_NAME-*.ospx; exit' + script: docker run -it -e GITHUB_OAUTH_TOKEN=$GITHUB_OAUTH_TOKEN -v $(pwd):/work_dir evilbeaver/onescript:1.0.21 sh -c 'cd /work_dir; opm push --token $GITHUB_OAUTH_TOKEN --channel stable --file ./$PACKAGE_NAME-*.ospx; exit' on: branch: master tags: true diff --git "a/features/step_definitions/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270.os" "b/features/step_definitions/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270.os" index f9b722c..1dec833 100644 --- "a/features/step_definitions/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270.os" +++ "b/features/step_definitions/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270.os" @@ -128,20 +128,20 @@ Если Не СервераПакетов = Неопределено Тогда Индекс = 1; - Для каждого ДополнительныйСервер Из СервераПакетов Цикл + Для каждого ТекущийСерверПакетов Из СервераПакетов Цикл - Сервер = ПолучитьЗначение(ДополнительныйСервер, "Сервер", ""); - Порт = Число(ПолучитьЗначение(ДополнительныйСервер, "Порт", 80)); - ПутьНаСервере = ПолучитьЗначение(ДополнительныйСервер, "ПутьНаСервере", "/"); - Имя = ПолучитьЗначение(ДополнительныйСервер, "Имя", СтрШаблон("ДопСервер_%1",Индекс)); - Приоритет = Число(ПолучитьЗначение(ДополнительныйСервер, "Приоритет", 0)); + Сервер = ПолучитьЗначение(ТекущийСерверПакетов, "Сервер", ""); + Порт = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Порт", 80)); + ПутьНаСервере = ПолучитьЗначение(ТекущийСерверПакетов, "ПутьНаСервере", "/"); + РесурсПубликацииПакетов = ПолучитьЗначение(ТекущийСерверПакетов, "РесурсПубликацииПакетов", "/"); + Имя = ПолучитьЗначение(ТекущийСерверПакетов, "Имя", СтрШаблон("ДопСервер_%1",Индекс)); + Приоритет = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Приоритет", 0)); Если ПустаяСтрока(Сервер) Тогда - // Лог.Отладка("Для дополнительного сервера <%1> не задан адрес", Индекс); Продолжить; КонецЕсли; - НастройкиOpm.ДобавитьСерверПакетов(Имя, Сервер, ПутьНаСервере, Порт, Приоритет); + НастройкиOpm.ДобавитьТекущийСерверПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет); Индекс = Индекс +1; КонецЦикла; diff --git a/packagedef b/packagedef index 323c7a3..6ddee8c 100644 --- a/packagedef +++ b/packagedef @@ -83,14 +83,14 @@ Описание.Имя("opm") .Версия(ВерсияПродукта) .ВерсияСреды("1.0.19") - .ЗависитОт("fs", "0.5.0") - .ЗависитОт("asserts", "0.4.0") - .ЗависитОт("json", "1.0.1") + .ЗависитОт("fs", "1.0.0") + .ЗависитОт("asserts", "1.3.0") + .ЗависитОт("json", "1.1.1") .ЗависитОт("fluent", "0.3.1") - .ЗависитОт("logos", "1.0.2") + .ЗависитОт("logos", "1.2.1") .ЗависитОт("cli", "0.9.10") .ЗависитОт("tempfiles", "0.2.2") - .ЗависитОт("gitrunner", "1.5.1") + .ЗависитОт("gitrunner", "1.6.0") .ВключитьФайл("packagedef") .ВключитьФайл("src") .ВключитьФайл("oscript_modules") diff --git a/sonar-qube.sh b/sonar-qube.sh old mode 100755 new mode 100644 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_Config.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_Config.os" index 3668f0f..098651f 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_Config.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_Config.os" @@ -3,10 +3,10 @@ Процедура ОписаниеКоманды(Знач КомандаПриложения) Экспорт - КомандаПриложения.Опция("winCreateBashLauncher", "", "Создавать sh-скрипт запуска для пакетов приложений в среде Windows"); - КомандаПриложения.Опция("proxyusedefault", "", "Использовать ПроксиПоУмолчанию (системные настройки)"); + КомандаПриложения.Опция("winCreateBashLauncher", Ложь, "Создавать sh-скрипт запуска для пакетов приложений в среде Windows"); + КомандаПриложения.Опция("proxyusedefault", Ложь, "Использовать ПроксиПоУмолчанию (системные настройки)"); КомандаПриложения.Опция("proxyserver", "", "Адрес прокси"); - КомандаПриложения.Опция("proxyport", "", "Порт прокси"); + КомандаПриложения.Опция("proxyport", "", "Порт прокси").ТЧисло(); КомандаПриложения.Опция("proxyuser", "", "Пользователь прокси"); КомандаПриложения.Опция("proxypass", "", "Пароль прокси"); 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 f3499e8..14ec48d 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" @@ -6,12 +6,24 @@ КомандаПриложения.Опция("a all", Ложь, "Установить все пакеты, зарегистрированные в хабе"); КомандаПриложения.Опция("f file", "", "Указать файл из которого нужно установить пакет. Поддерживает указание маски файла для пакетной установки"); КомандаПриложения.Опция("l local", Ложь, "Установить пакеты в локальный каталог oscript_modules"); + КомандаПриложения.Опция("s skip-install-deps", Ложь, "признак пропуска установки зависимых пакетов"); + КомандаПриложения.Опция("skip-create-app", Ложь, "признак отключения создания файла запуска"); КомандаПриложения.Опция("d dest", "", "Переопределить стандартный каталог в который устанавливаются пакеты (вместо oscript_modules)"); + + ОпцияЗеркала = КомандаПриложения.Опция("m mirror", "", "Указать имя сервера, с которого необходимо ставить пакеты. + | Доступные сервера прописываются в конфигурационном файле opm.cfg, параметр 'СервераПакетов'.") + .ВОкружении("OPM_HUB_MIRROR") + .ТПеречисление(); + + МенеджерПолучения = Новый МенеджерПолученияПакетов(); + Для Каждого ДоступноеЗеркало Из МенеджерПолучения.ИменаДоступныхСерверов() Цикл + ОпцияЗеркала.Перечисление(ДоступноеЗеркало, ДоступноеЗеркало, "Сервер '" + ДоступноеЗеркало + "'"); + КонецЦикла; КомандаПриложения.Аргумент("PACKAGE", "", "Имя пакета в хабе. Чтобы установить конкретную версию, используйте ИмяПакета@ВерсияПакета") .ТМассивСтрок() .Обязательный(Ложь); - + // КомандаПриложения.Спек = "(-a | --all | -l | --local | -d | --dest )"; КонецПроцедуры @@ -24,6 +36,10 @@ ФайлПакетаУстановки = КомандаПриложения.ЗначениеОпции("file"); МассивПакетовКУстановке = КомандаПриложения.ЗначениеАргумента("PACKAGE"); + НеобходимоУстановитьЗависимости = Не КомандаПриложения.ЗначениеОпции("skip-install-deps"); + СоздаватьФайлыЗапуска = НЕ КомандаПриложения.ЗначениеОпции("skip-create-app"); + ИмяСервера = КомандаПриложения.ЗначениеОпции("mirror"); + РежимУстановки = РежимУстановкиПакетов.Глобально; Если УстановкаВЛокальныйКаталог Тогда РежимУстановки = РежимУстановкиПакетов.Локально; @@ -46,11 +62,18 @@ Лог.Отладка("КаталогУстановки: %1", КаталогУстановки); Лог.Отладка("ФайлПакетаУстановки: %1", ФайлПакетаУстановки); Лог.Отладка("МассивПакетовКУстановке: %1", МассивПакетовКУстановке.Количество()); + Лог.Отладка("НеобходимоУстановитьЗависимости: %1", НеобходимоУстановитьЗависимости); + Лог.Отладка("СоздаватьФайлыЗапуска: %1", СоздаватьФайлыЗапуска); + + НастройкаУстановки = РаботаСПакетами.ПолучитьНастройкуУстановки(); + НастройкаУстановки.УстанавливатьЗависимости = НеобходимоУстановитьЗависимости; + НастройкаУстановки.СоздаватьФайлыЗапуска = СоздаватьФайлыЗапуска; + НастройкаУстановки.ИмяСервера = ИмяСервера; Если УстановкаВсехПакетов Тогда - РаботаСПакетами.УстановитьВсеПакетыИзОблака(РежимУстановки, ЦелевойКаталог); + РаботаСПакетами.УстановитьВсеПакетыИзОблака(РежимУстановки, ЦелевойКаталог, НастройкаУстановки); ИначеЕсли ПустаяСтрока(ФайлПакетаУстановки) И МассивПакетовКУстановке.Количество() = 0 Тогда - РаботаСПакетами.УстановитьПакетыПоОписаниюПакета(РежимУстановки, ЦелевойКаталог); + РаботаСПакетами.УстановитьПакетыПоОписаниюПакета(РежимУстановки, ЦелевойКаталог, НастройкаУстановки); ИначеЕсли НЕ ПустаяСтрока(ФайлПакетаУстановки) Тогда РазобранныйАдрес = СтрРазделить(ФайлПакетаУстановки, ПолучитьРазделительПути()); @@ -67,16 +90,33 @@ ФайлыПоМаске = НайтиФайлы(Путь, Маска); Для Каждого ФайлПакета Из ФайлыПоМаске Цикл - РаботаСПакетами.УстановитьПакетИзФайла(ФайлПакета.ПолноеИмя, РежимУстановки, ЦелевойКаталог); + РаботаСПакетами.УстановитьПакетИзФайла(ФайлПакета.ПолноеИмя, РежимУстановки, ЦелевойКаталог, НастройкаУстановки); КонецЦикла; Иначе Для каждого ИмяПакета Из МассивПакетовКУстановке Цикл - РаботаСПакетами.УстановитьПакетИзОблака(ИмяПакета, РежимУстановки, ЦелевойКаталог); + + Если ЭтоФайлПакета(ИмяПакета) Тогда + + РаботаСПакетами.УстановитьПакетИзФайла(ИмяПакета, РежимУстановки, ЦелевойКаталог, НастройкаУстановки); + + Иначе + + РаботаСПакетами.УстановитьПакетИзОблака(ИмяПакета, РежимУстановки, ЦелевойКаталог, НастройкаУстановки); + + КонецЕсли; + + КонецЦикла; КонецЕсли; КонецПроцедуры + +Функция ЭтоФайлПакета(Знач ИмяПакета) + + Возврат СтрЗаканчиваетсяНа(НРег(ИмяПакета), ".ospx"); + +КонецФункции 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_List.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_List.os" index c028ea3..89e06a0 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_List.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_List.os" @@ -5,43 +5,134 @@ КомандаПриложения.Опция("q quiet", Ложь, """Тихий"" режим вывода без лишних сообщений."); КомандаПриложения.Опция("r remote", Ложь, "Вывести список пакетов в хабе"); - // КомандаПриложения.Опция("a all", Ложь, "Вывести список всех пакетов установленных и доступных в хабе"); + КомандаПриложения.Опция("a all", Ложь, "Вывести список всех пакетов установленных и доступных в хабе"); КонецПроцедуры Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт ТихийРежим = КомандаПриложения.ЗначениеОпции("quiet"); - ВыводПакетовНаХабе = КомандаПриложения.ЗначениеОпции("remote"); + ВыводВсехПакетов = КомандаПриложения.ЗначениеОпции("all"); + ВыводПакетовНаХабе = КомандаПриложения.ЗначениеОпции("remote") ИЛИ ВыводВсехПакетов; + ВыводУстановленныхПакетов = НЕ КомандаПриложения.ЗначениеОпции("remote") ИЛИ ВыводВсехПакетов; - Если ВыводПакетовНаХабе Тогда - ТекстСообщения = СтрШаблон("Пакеты в хабе:"); - МенеджерПолучения = Новый МенеджерПолученияПакетов(); - УстановленныеПакеты = МенеджерПолучения.ПолучитьДоступныеПакеты(); - Иначе + Если ВыводВсехПакетов Тогда - ПутьККаталогуПакетов = ПолучитьЗначениеСистемнойНастройки("lib.system"); - ТекстСообщения = СтрШаблон("Пакеты в системном каталоге библиотек <%1>:", ПутьККаталогуПакетов); + ТекстСообщения = "Все пакеты, установленные и в хабе:"; + + Иначе + + ТекстСообщения = ?(ВыводПакетовНаХабе, "Пакеты в хабе:", "Установленные пакеты:"); - КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов(ПутьККаталогуПакетов); - УстановленныеПакеты = КэшУстановленныхПакетов.ПолучитьУстановленныеПакеты(); КонецЕсли; + МенеджерПолучения = Новый МенеджерПолученияПакетов(); + ДоступныеПакеты = МенеджерПолучения.ПолучитьДоступныеПакеты(); + + ПутьККаталогуПакетов = ПолучитьЗначениеСистемнойНастройки("lib.system"); + КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов(ПутьККаталогуПакетов); + УстановленныеПакеты = КэшУстановленныхПакетов.ПолучитьУстановленныеПакеты(); + Если НЕ ТихийРежим Тогда Сообщить(ТекстСообщения); КонецЕсли; + Пакеты = Новый ТаблицаЗначений(); + Пакеты.Колонки.Добавить("ИмяПакета"); + Пакеты.Колонки.Добавить("ИменаСерверов"); + Пакеты.Колонки.Добавить("Версия"); + Пакеты.Колонки.Добавить("Выводить"); + + Для Каждого ДоступныйПакет Из ДоступныеПакеты Цикл + + ИнфоОПакете = Пакеты.Добавить(); + ИнфоОПакете.ИмяПакета = ДоступныйПакет.Ключ; + ИнфоОПакете.Версия = ""; + ИнфоОПакете.Выводить = ВыводПакетовНаХабе; + + ИменаСерверов = ""; + Для Каждого к из ДоступныйПакет.Значение Цикл + ИменаСерверов = ИменаСерверов + ?(ПустаяСтрока(ИменаСерверов), "", ", ") + к.Ключ; + КонецЦикла; + + ИнфоОПакете.ИменаСерверов = ИменаСерверов; + + КонецЦикла; + Для Каждого УстановленныйПакет Из УстановленныеПакеты Цикл - СтрокаСообщения = УстановленныйПакет.Ключ; - Если ТипЗнч(УстановленныйПакет.Значение) = Тип("Структура") Тогда - ОписаниеПакета = УстановленныйПакет.Значение.МетаданныеПакета; - Если ТипЗнч(ОписаниеПакета) = Тип("Булево") Тогда - // @deprecated - Иначе - СтрокаСообщения = СтрокаСообщения + "@" + ОписаниеПакета.Свойства().Версия; - КонецЕсли; + ИмяПакета = УстановленныйПакет.Ключ; + ОписаниеПакета = УстановленныйПакет.Значение.МетаданныеПакета; + Версия = "<НЕТ>"; + Если ТипЗнч(ОписаниеПакета) <> Тип("Булево") Тогда + Версия = ОписаниеПакета.Свойства().Версия; КонецЕсли; - Сообщить(СтрокаСообщения); + + ДобавленныйПакет = Пакеты.НайтиСтроки(Новый Структура("ИмяПакета", ИмяПакета)); + Если ДобавленныйПакет.Количество() Тогда + ДобавленныйПакет[0].Версия = Версия; + ДобавленныйПакет[0].Выводить = ИСТИНА; // Пакет есть и на хабе и локально, стоит вывести + Продолжить; + КонецЕсли; + + ИнфоОПакете = Пакеты.Добавить(); + ИнфоОПакете.ИмяПакета = ИмяПакета; + ИнфоОПакете.Версия = Версия; + ИнфоОПакете.ИменаСерверов = "Локальный"; + ИнфоОПакете.Выводить = ВыводУстановленныхПакетов; + КонецЦикла; + + ВывестиИнформациюОПакетах(Пакеты); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +Процедура ВывестиИнформациюОПакетах(Пакеты) + + ДлинаИмени = СтрДлина("Пакет"); + ДлинаИменСерверов = СтрДлина("Имена серверов"); + ДлинаВерсии = СтрДлина("Версия"); + + Для Каждого ИнфоОПакете Из Пакеты Цикл + + Если НЕ ИнфоОПакете.Выводить Тогда + Продолжить; + КонецЕсли; + + ДлинаИмени = Макс(СтрДлина(ИнфоОПакете.ИмяПакета), ДлинаИмени); + ДлинаВерсии = Макс(СтрДлина(ИнфоОПакете.Версия), ДлинаВерсии); + ДлинаИменСерверов = Макс(СтрДлина(ИнфоОПакете.ИменаСерверов), ДлинаИменСерверов); + + КонецЦикла; + + ВывестиШапкуИнфо(ДлинаИмени, ДлинаВерсии, ДлинаИменСерверов); + Для Каждого ИнфоОПакете Из Пакеты Цикл + + Если НЕ ИнфоОПакете.Выводить Тогда + Продолжить; + КонецЕсли; + + ВывестиСтрокуИнфо(ДлинаИмени, ИнфоОПакете.ИмяПакета, ДлинаВерсии, ИнфоОПакете.Версия, ДлинаИменСерверов, ИнфоОПакете.ИменаСерверов); + + КонецЦикла; + ВывестиШапкуИнфо(ДлинаИмени, ДлинаВерсии, ДлинаИменСерверов); + +КонецПроцедуры + +Процедура ВывестиШапкуИнфо(ДлинаИмени, ДлинаВерсии, ДлинаИменСерверов) + + ПустаяСтрока = " "; + Сообщить(СтрЗаменить(Лев(ПустаяСтрока, ДлинаИмени + ДлинаВерсии + ДлинаИменСерверов + 6), " ", "-")); + ВывестиСтрокуИнфо(ДлинаИмени, "Пакет", ДлинаВерсии, "Версия", ДлинаИменСерверов, "Имена серверов"); + Сообщить(СтрЗаменить(Лев(ПустаяСтрока, ДлинаИмени + ДлинаВерсии + ДлинаИменСерверов + 6), " ", "-")); + +КонецПроцедуры + +Процедура ВывестиСтрокуИнфо(ДлинаИмени, ИмяПакета, ДлинаВерсии, Версия, ДлинаИменСерверов, ИменаСерверов) + + ПустаяСтрока = " "; + Шаблон = "%1" + Лев(ПустаяСтрока, ДлинаИмени - СтрДлина(ИмяПакета)) + + " | %2" + Лев(ПустаяСтрока, ДлинаВерсии - СтрДлина(Версия)) + + " | %3" + Лев(ПустаяСтрока, ДлинаИменСерверов - СтрДлина(ИменаСерверов)); + Сообщить(СтрШаблон(Шаблон, ИмяПакета, Версия, ИменаСерверов)); + +КонецПроцедуры 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_Push.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_Push.os" index 7a67c3d..b554541 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_Push.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_Push.os" @@ -25,25 +25,32 @@ .Перечисление("stable", "stable", "Канал содержащий стабильные версии пакетов") .Перечисление("dev", "dev" , "Канал содержащий разработческие версии пакетов") .ВОкружении("OPM_HUB_CHANNEL"); + ОпцияЗеркала = КомандаПриложения.Опция("m mirror", "СерверУдаленногоХранилища", "Имя сервера для публикации. + | Доступные сервера прописываются в конфигурационном файле opm.cfg, параметр 'СервераПакетов'.") + .ВОкружении("OPM_HUB_MIRROR") + .ТПеречисление(); + + МенеджерПолучения = Новый МенеджерПолученияПакетов(); + Для Каждого ДоступноеЗеркало Из МенеджерПолучения.ИменаДоступныхСерверов() Цикл + ОпцияЗеркала.Перечисление(ДоступноеЗеркало, ДоступноеЗеркало, "Сервер '" + ДоступноеЗеркало + "'"); + КонецЦикла; КомандаПриложения.Аргумент("FILE", "", "Маска или имя файла пакета.") .Обязательный(Ложь); - // КомандаПриложения.Спек = "(-a | --all | -l | --local | -d | --dest )"; - КонецПроцедуры Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт - ТокенАвторизации = КомандаПриложения.ЗначениеОпции("token"); МаскаФайлаПакетаСтарая = КомандаПриложения.ЗначениеОпции("file"); ИмяКаналаПубликации = КомандаПриложения.ЗначениеОпции("channel"); + ИмяСервераПакетов = КомандаПриложения.ЗначениеОпции("mirror"); МаскаФайлаПакета = КомандаПриложения.ЗначениеАргумента("FILE"); Если Не ПустаяСтрока(МаскаФайлаПакетаСтарая) Тогда - ЛОг.Предупреждение("Использование опции <--file> устарело в следующих версиях будет удалена. Используйте аргумент "); + Лог.Предупреждение("Использование опции <--file> устарело в следующих версиях будет удалена. Используйте аргумент "); МаскаФайлаПакета = МаскаФайлаПакетаСтарая; КонецЕсли; @@ -53,7 +60,7 @@ Канал = ПолучитьИмяКаналаПубликации(ИмяКаналаПубликации); - ОтправитьПакетВХаб(ТокенАвторизации, ФайлПакета, Канал); + ОтправитьПакетВХаб(ТокенАвторизации, ФайлПакета, Канал, ИмяСервераПакетов); КонецПроцедуры @@ -121,14 +128,30 @@ КонецФункции -Процедура ОтправитьПакетВХаб(Знач ТокенАвторизации, Знач ФайлПакета, Знач Канал) +Процедура ОтправитьПакетВХаб(Знач ТокенАвторизации, Знач ФайлПакета, Знач Канал, Знач ИмяСервераПакетов) ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ФайлПакета.ПолноеИмя); ДвоичныеДанныеФайлаВBase64 = Base64Строка(ДвоичныеДанныеФайла); + ДоступныеСервераПакетов = НастройкиOpm.ПолучитьНастройки().СервераПакетов; + + // Для настроек по умолчанию Сервер = КонстантыOpm.СерверУдаленногоХранилища; Ресурс = КонстантыOpm.РесурсПубликацииПакетов; + Для Каждого НастройкаСервера Из ДоступныеСервераПакетов Цикл + + Если СтрСравнить(НастройкаСервера.Имя, ИмяСервераПакетов) = 0 Тогда + Сервер = НастройкаСервера.Сервер; + Ресурс = НастройкаСервера.РесурсПубликацииПакетов; + Прервать; + КонецЕсли; + + КонецЦикла; + + Лог.Отладка("Сервер = %1", Сервер); + Лог.Отладка("Ресурс = %1", Ресурс); + Заголовки = Новый Соответствие(); Заголовки.Вставить("OAUTH-TOKEN", ТокенАвторизации); Заголовки.Вставить("FILE-NAME", ФайлПакета.Имя); 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 d58cf55..9f134c5 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" @@ -6,6 +6,19 @@ КомандаПриложения.Опция("a all", Ложь, "Обновить все установленные пакеты"); КомандаПриложения.Опция("f file", "", "Указать файл из которого нужно установить пакет"); КомандаПриложения.Опция("l local", Ложь, "Обновление пакета в локальном каталоге oscript_modules"); + КомандаПриложения.Опция("s skip-install-deps", Ложь, "признак пропуска установки зависимых пакетов"); + КомандаПриложения.Опция("skip-create-app", Ложь, "признак отключения создания файла запуска"); + КомандаПриложения.Опция("m mirror", "", "Указать имя сервера, с которого необходимо ставить пакеты"); + + ОпцияЗеркала = КомандаПриложения.Опция("m mirror", "", "Указать имя сервера, с которого необходимо ставить пакеты. + | Доступные сервера прописываются в конфигурационном файле opm.cfg, параметр 'СервераПакетов'.") + .ВОкружении("OPM_HUB_MIRROR") + .ТПеречисление(); + + МенеджерПолучения = Новый МенеджерПолученияПакетов(); + Для Каждого ДоступноеЗеркало Из МенеджерПолучения.ИменаДоступныхСерверов() Цикл + ОпцияЗеркала.Перечисление(ДоступноеЗеркало, ДоступноеЗеркало, "Сервер '" + ДоступноеЗеркало + "'"); + КонецЦикла; КомандаПриложения.Аргумент("PACKAGE", "", "Имя пакета в хабе. Чтобы установить конкретную версию, используйте ИмяПакета@ВерсияПакета") .ТМассивСтрок() @@ -22,22 +35,31 @@ ФайлПакетаУстановки = КомандаПриложения.ЗначениеОпции("file"); МассивПакетовКОбновлению = КомандаПриложения.ЗначениеАргумента("PACKAGE"); + НеобходимУстановитьЗависимости = Не КомандаПриложения.ЗначениеОпции("skip-install-deps"); + СоздаватьФайлыЗапуска = НЕ КомандаПриложения.ЗначениеОпции("skip-create-app"); + ИмяСервера = КомандаПриложения.ЗначениеОпции("mirror"); + РежимУстановки = РежимУстановкиПакетов.Глобально; Если ОбновлениеВЛокальныйКаталог = Истина Тогда РежимУстановки = РежимУстановкиПакетов.Локально; КонецЕсли; + НастройкаУстановки = РаботаСПакетами.ПолучитьНастройкуУстановки(); + НастройкаУстановки.УстанавливатьЗависимости = НеобходимУстановитьЗависимости; + НастройкаУстановки.СоздаватьФайлыЗапуска = СоздаватьФайлыЗапуска; + НастройкаУстановки.ИмяСервера = ИмяСервера; + Если ОбновлениеВсехПакетов Тогда - РаботаСПакетами.ОбновитьУстановленныеПакеты(РежимУстановки); + РаботаСПакетами.ОбновитьУстановленныеПакеты(РежимУстановки, , НастройкаУстановки); ИначеЕсли НЕ ПустаяСтрока(ФайлПакетаУстановки) Тогда - РаботаСПакетами.УстановитьПакетИзФайла(ФайлПакетаУстановки, РежимУстановки); + РаботаСПакетами.УстановитьПакетИзФайла(ФайлПакетаУстановки, РежимУстановки, НастройкаУстановки); Иначе Для каждого ИмяПакета Из МассивПакетовКОбновлению Цикл - РаботаСПакетами.ОбновитьПакетИзОблака(ИмяПакета, РежимУстановки); + РаботаСПакетами.ОбновитьПакетИзОблака(ИмяПакета, РежимУстановки, , НастройкаУстановки); КонецЦикла; КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры diff --git "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217Opm.os" "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217Opm.os" index 15f6cf1..69c4d88 100644 --- "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217Opm.os" +++ "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217Opm.os" @@ -10,6 +10,7 @@ НастройкиOpmИзФайлов = СобратьНастройкиИзФайлов(); Если НастройкиOpmИзФайлов.Количество() = 0 Тогда + Лог.Отладка("Настройки opm не найдены"); Возврат; КонецЕсли; @@ -24,8 +25,6 @@ Пользователь = ПолучитьЗначение(НастройкиПрокси, "Пользователь", ""); Пароль = ПолучитьЗначение(НастройкиПрокси, "Пароль", ""); - НастройкиOpm.УстановитьНастройкиПроксиСервера(Сервер, Порт, Пользователь, Пароль); - ПроксиПоУмолчанию = ПолучитьЗначение(НастройкиПрокси,"ПроксиПоУмолчанию", Неопределено); Если Не ПроксиПоУмолчанию = Неопределено Тогда @@ -34,14 +33,16 @@ КонецЕсли; - ИспользованиеПрокси = ПолучитьЗначение(НастройкиПрокси,"ИспользованиеПрокси", Неопределено); + НастройкиOpm.УстановитьНастройкиПроксиСервера(Сервер, Порт, Пользователь, Пароль); + + ИспользованиеПрокси = ПолучитьЗначение(НастройкиПрокси, "ИспользоватьПрокси", Неопределено); Если Не ИспользованиеПрокси = Неопределено Тогда НастройкиOpm.УстановитьИспользованиеПрокси(ИспользованиеПрокси); КонецЕсли; - + КонецЕсли; СоздаватьShСкриптЗапуска = ПолучитьЗначение(НастройкиOpmИзФайлов,"СоздаватьShСкриптЗапуска", Неопределено); @@ -57,20 +58,21 @@ Если Не СервераПакетов = Неопределено Тогда Индекс = 1; - Для каждого ДополнительныйСервер Из СервераПакетов Цикл + Для каждого ТекущийСерверПакетов Из СервераПакетов Цикл - Сервер = ПолучитьЗначение(ДополнительныйСервер, "Сервер", ""); - Порт = Число(ПолучитьЗначение(ДополнительныйСервер, "Порт", 80)); - ПутьНаСервере = ПолучитьЗначение(ДополнительныйСервер, "ПутьНаСервере", "/"); - Имя = ПолучитьЗначение(ДополнительныйСервер, "Имя", СтрШаблон("ДопСервер_%1",Индекс)); - Приоритет = Число(ПолучитьЗначение(ДополнительныйСервер, "Приоритет", 0)); + Сервер = ПолучитьЗначение(ТекущийСерверПакетов, "Сервер", ""); + Порт = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Порт", 80)); + ПутьНаСервере = ПолучитьЗначение(ТекущийСерверПакетов, "ПутьНаСервере", "/"); + Имя = ПолучитьЗначение(ТекущийСерверПакетов, "Имя", СтрШаблон("ДопСервер_%1", Индекс)); + РесурсПубликацииПакетов = ПолучитьЗначение(ТекущийСерверПакетов, "РесурсПубликацииПакетов", "/"); + Приоритет = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Приоритет", 0)); Если ПустаяСтрока(Сервер) Тогда - Лог.Отладка("Для дополнительного сервера <%1> не задан адрес", Индекс); + Лог.Отладка("Для сервера <%1> не задан адрес", Индекс); Продолжить; КонецЕсли; - НастройкиOpm.ДобавитьСерверПакетов(Имя, Сервер, ПутьНаСервере, Порт, Приоритет); + НастройкиOpm.ДобавитьСерверПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет); Индекс = Индекс +1; КонецЦикла; @@ -99,12 +101,6 @@ Процедура ЗаполнитьНастройкиИзПараметров(Знач ПараметрКоманды) Экспорт - Если НЕ ПараметрКоманды["-proxyusedefault"] = Неопределено Тогда - - НастройкиOpm.УстановитьСистемныеНастройкиПроксиСервера(ПараметрКоманды["-proxyusedefault"]); - - КонецЕсли; - Если Не ПараметрКоманды["-winCreateBashLauncher"] = Неопределено Тогда ЗначениеОпции = Булево(ПараметрКоманды["-winCreateBashLauncher"]); @@ -121,8 +117,16 @@ НастройкиOpm.УстановитьНастройкиПроксиСервера(ПроксиСервер, ПроксиПорт, ПроксиПользователь, ПроксиПароль); - ИспользованиеПрокси = ЗначениеЗаполнено(ПроксиСервер) ИЛИ ЗначениеЗаполнено(ПараметрКоманды["-proxyusedefault"]); - НастройкиOpm.УстановитьИспользованиеПрокси(ИспользованиеПрокси); + Если НЕ ПараметрКоманды["-proxyusedefault"] = Неопределено Тогда + + Лог.Отладка("Устанавливаю прокси по умолчанию <%1>", ПараметрКоманды["-proxyusedefault"]); + НастройкиOpm.УстановитьСистемныеНастройкиПроксиСервера(ПараметрКоманды["-proxyusedefault"]); + + Иначе + + НастройкиOpm.УстановитьИспользованиеПрокси(ЗначениеЗаполнено(ПроксиСервер)); + + КонецЕсли; КонецПроцедуры @@ -174,11 +178,6 @@ Для каждого НастройкаСервера Из ТекущиеНастройки.СервераПакетов Цикл - Если НастройкаСервера.Имя = "ОсновнойСерверПакетов" - Или НастройкаСервера.Имя = "ЗапаснойСерверПакетов" Тогда - Продолжить; - КонецЕсли; - МассивСерверовПакетов.Добавить(НастройкаСервера); КонецЦикла; 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\237\320\276\320\273\321\203\321\207\320\265\320\275\320\270\321\217\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\237\320\276\320\273\321\203\321\207\320\265\320\275\320\270\321\217\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" index 8938e40..ee8730d 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\237\320\276\320\273\321\203\321\207\320\265\320\275\320\270\321\217\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\237\320\276\320\273\321\203\321\207\320\265\320\275\320\270\321\217\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -10,7 +10,7 @@ КонецПроцедуры -Функция ПолучитьПакет(Знач ИмяПакета, Знач ВерсияПакета, ПутьКФайлуПакета = "") Экспорт +Функция ПолучитьПакет(Знач ИмяПакета, Знач ВерсияПакета, ПутьКФайлуПакета = "", ИмяСервера = "") Экспорт Если Не ПакетДоступен(ИмяПакета) Тогда @@ -37,7 +37,7 @@ ПереченьСерверов = ИндексКешаПакетов[ИмяПакета]; - Ответ = ЗапроситьПакет(ПереченьСерверов, ИмяРесурса); + Ответ = ЗапроситьПакет(ПереченьСерверов, ИмяСервера, ИмяРесурса); Если Не Ответ = Неопределено Тогда Лог.Отладка("Файл получен"); @@ -53,43 +53,38 @@ КонецФункции -Функция ЗапроситьПакет(Знач ПереченьСерверов, Знач ИмяРесурса) +Функция ЗапроситьПакет(Знач ПереченьСерверов, Знач ИмяСервера, Знач ИмяРесурса) ПакетУспешноПолучен = Ложь; - - Для каждого ДоступныйСервер Из ПереченьСерверов Цикл - - Сервер = ИндексСерверовПакетов[ДоступныйСервер.Ключ]; - - Если Сервер.СерверДоступен() Тогда + ОтветСервера = Неопределено; + + // Если указан нужный сервер, то только его и будем использовать + Если ЗначениеЗаполнено(ИмяСервера) Тогда - Ответ = Сервер.ПолучитьРесурс(ИмяРесурса); - Если Ответ = Неопределено Тогда - Продолжить; - КонецЕсли; + Сервер = ИндексСерверовПакетов[ИмяСервера]; + ОтветСервера = ЗапроситьПакетССервера(Сервер, ИмяРесурса); - Если Ответ.КодСостояния = 200 Тогда + Иначе + + // поиск пакета на серверах + Для Каждого ДоступныйСервер Из ПереченьСерверов Цикл + + Сервер = ИндексСерверовПакетов[ДоступныйСервер.Ключ]; + ОтветСервера = ЗапроситьПакетССервера(Сервер, ИмяРесурса); + Если ОтветСервера <> Неопределено Тогда - ПакетУспешноПолучен = Истина; Прервать; - - КонецЕсли; - Ответ.Закрыть(); - - Лог.Информация("Ошибка подключения к хабу %1 <%2>", - Сервер.ПолучитьИмя(), - Ответ.КодСостояния); - - КонецЕсли; + КонецЕсли; + + КонецЦикла; - КонецЦикла; + КонецЕсли; - Если ПакетУспешноПолучен Тогда + Если ОтветСервера <> Неопределено Тогда Лог.Отладка("Ресурс %1 успешно получен с %2", ИмяРесурса, Сервер.ПолучитьИмя()); - - Возврат Ответ; + Возврат ОтветСервера; КонецЕсли; @@ -97,6 +92,36 @@ КонецФункции +Функция ЗапроситьПакетССервера(Сервер, ИмяРесурса) + + ОтветСервера = Неопределено; + Если Сервер.СерверДоступен() Тогда + + ОтветСервера = Сервер.ПолучитьРесурс(ИмяРесурса); + Если ОтветСервера <> Неопределено Тогда + + Если ОтветСервера.КодСостояния = 200 Тогда + + Возврат ОтветСервера; + + КонецЕсли; + + ОтветСервера.Закрыть(); + + Лог.Информация("Ошибка подключения к хабу %1 <%2>", + Сервер.ПолучитьИмя(), + ОтветСервера.КодСостояния); + + ОтветСервера = Неопределено; + + КонецЕсли; + + КонецЕсли; + + Возврат ОтветСервера; + +КонецФункции + // Функция по имени пакета определяет имя архива в хабе // https://github.com/oscript-library/opm/issues/50 // Имена файлов в хабе регистрозависимы, однако имена пакетов по обыкновению регистронезависимы @@ -133,8 +158,8 @@ КонецПроцедуры Функция ПолучитьДоступныеПакеты() Экспорт - - Возврат ИндексДоступныхПакетов; // По хорошему надо копировать соответствие + + Возврат Новый ФиксированноеСоответствие(ИндексКешаПакетов); КонецФункции @@ -171,16 +196,41 @@ Для каждого НастройкаСервера Из СервераПакетов Цикл - СерверПакетов = СоздатьСерверПакетовПоНастройке(НастройкаСервера); - ИндексСерверовПакетов.Вставить(НастройкаСервера.Имя, СерверПакетов); + ТекущийСерверПакетов = СоздатьСерверПакетовПоНастройке(НастройкаСервера); + ИндексСерверовПакетов.Вставить(НастройкаСервера.Имя, ТекущийСерверПакетов); КонецЦикла; КонецПроцедуры +// ИменаДоступныхСерверов +// Возвращает список доступных серверов-зеркал с пакетами +// Возвращаемое значение: +// Массив - Список имен +// +Функция ИменаДоступныхСерверов() Экспорт + + ИменаПакетов = Новый Массив(); + СервераПакетов = НастройкиOpm.ПолучитьНастройки().СервераПакетов; + + Для каждого НастройкаСервера Из СервераПакетов Цикл + + ИменаПакетов.Добавить(НастройкаСервера.Имя); + + КонецЦикла; + + Возврат ИменаПакетов; + +КонецФункции + Функция СоздатьСерверПакетовПоНастройке(Знач НастройкаСервера) - Возврат Новый СерверПакетов(НастройкаСервера.Имя, НастройкаСервера.Сервер, НастройкаСервера.ПутьНаСервере, НастройкаСервера.Порт, НастройкаСервера.Приоритет) + Возврат Новый СерверПакетов(НастройкаСервера.Имя, + НастройкаСервера.Сервер, + НастройкаСервера.ПутьНаСервере, + НастройкаСервера.РесурсПубликацииПакетов, + НастройкаСервера.Порт, + НастройкаСервера.Приоритет) КонецФункции @@ -205,10 +255,10 @@ ИндексКешаПакетов = Новый Соответствие; - Для каждого СерверПакетов Из ИндексСерверовПакетов Цикл + Для каждого ТекущийСерверПакетов Из ИндексСерверовПакетов Цикл - ИмяСервера = СерверПакетов.Ключ; - КлассСервера = СерверПакетов.Значение; + ИмяСервера = ТекущийСерверПакетов.Ключ; + КлассСервера = ТекущийСерверПакетов.Значение; Пакеты = КлассСервера.ПолучитьПакеты(); @@ -226,7 +276,6 @@ КлючПакета = Пакет.Ключ; ВерсииПакета = Пакет.Значение; - Лог.Отладка("Добавляю пакет: %1 в кеш для сервера %2", КлючПакета, ИмяСервера); Если ИндексКешаПакетов[КлючПакета] = Неопределено Тогда ИндексКешаПакетов.Вставить(КлючПакета, Новый Соответствие); @@ -238,4 +287,4 @@ КонецПроцедуры -Лог = Логирование.ПолучитьЛог("oscript.app.opm"); \ No newline at end of file +Лог = Логирование.ПолучитьЛог("oscript.app.opm"); 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 e2611ed..1a895c5 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" @@ -6,15 +6,18 @@ Перем Лог; Перем мВременныйКаталогУстановки; - Перем ТекущийРежимУстановкиПакетов; Перем КэшУстановленныхПакетов; Перем ЦелевойКаталогУстановки; Перем КаталогУстановкиЗависимостей; Перем КаталогСистемныхБиблиотек; Перем КешУстановленныхПакетов; +Перем ИмяСервера; + +Перем УстанавливатьЗависимости; +Перем СоздаватьФайлыЗапуска; -Процедура ПриСозданииОбъекта(Знач ВходящийРежимУстановкиПакетов = Неопределено, Знач ВходящийКаталогУстановки = Неопределено, Знач ВходящийКаталогУстановкиЗависимостей = Неопределено) +Процедура ПриСозданииОбъекта(Знач ВходящийРежимУстановкиПакетов = Неопределено, Знач ВходящийКаталогУстановки = Неопределено, Знач ВходящийКаталогУстановкиЗависимостей = Неопределено, Знач ВходящийИмяСервера = "") ПутьККаталогуЛокальнойУстановки = ОбъединитьПути( ТекущийКаталог(), @@ -48,7 +51,17 @@ КонецЕсли; КешУстановленныхПакетов = Новый Соответствие; + УстанавливатьЗависимости = Истина; + СоздаватьФайлыЗапуска = Истина; + ИмяСервера = ВходящийИмяСервера; +КонецПроцедуры + +Процедура УстанавливатьЗависимости(Знач ПУстанавливатьЗависимости) Экспорт + УстанавливатьЗависимости = ПУстанавливатьЗависимости; +КонецПроцедуры +Процедура СоздаватьФайлыЗапуска(Знач ПСоздаватьФайлыЗапуска) Экспорт + СоздаватьФайлыЗапуска = ПСоздаватьФайлыЗапуска; КонецПроцедуры Процедура УстановитьРежимУстановкиПакетов(Знач ЗначениеРежимУстановкиПакетов) Экспорт @@ -82,14 +95,6 @@ КонецПроцедуры -Процедура УстановитьПакет(Знач ИмяПакета) Экспорт - - ИмяВерсияПакета = РаботаСВерсиями.РазобратьИмяПакета(ИмяПакета); - - УстановитьПакетПоИмениИВерсии(ИмяВерсияПакета.ИмяПакета, ИмяВерсияПакета.Версия); - -КонецПроцедуры - Процедура УстановитьПакетПоОписанию(Знач ОписаниеПакета) Экспорт УстановитьПакетПоИмениИВерсии(ОписаниеПакета.ИмяПакета, ОписаниеПакета.МинимальнаяВерсия, Истина); @@ -99,8 +104,8 @@ Процедура УстановитьПакетИзАрхива(Знач ФайлПакета, Знач ЭтоЗависимыйПакет = Ложь) Экспорт КаталогУстановки = ?(ЭтоЗависимыйПакет, КаталогУстановкиЗависимостей, ЦелевойКаталогУстановки); - УстановкаПакета = Новый УстановкаПакета(); + УстановкаПакета.СоздаватьФайлЗапуска(СоздаватьФайлыЗапуска); УстановкаПакета.УстановитьЦелевойКаталог(КаталогУстановки); Лог.Отладка("КаталогУстановки: %1", КаталогУстановки); Если ЭтоЗависимыйПакет Тогда @@ -123,19 +128,21 @@ ПутьККаталогуЛокальныхЗависимостей = ОбъединитьПути(ПолныйПутьККаталогуУстановки, ИмяПакета, ИмяКаталогаЛокальныхЗависимостей); - // Тут надо корректно найти имя пакета в пути - Если ФС.КаталогСуществует(ПутьККаталогуЛокальныхЗависимостей) Тогда - РазрешитьЗависимостиПакетаЛокально(МанифестПакета, ПутьККаталогуЛокальныхЗависимостей); - Иначе - РазрешитьЗависимостиПакета(МанифестПакета); + Если УстанавливатьЗависимости Тогда + // Тут надо корректно найти имя пакета в пути + Если ФС.КаталогСуществует(ПутьККаталогуЛокальныхЗависимостей) Тогда + РазрешитьЗависимостиПакетаЛокально(МанифестПакета, ПутьККаталогуЛокальныхЗависимостей); + Иначе + РазрешитьЗависимостиПакета(МанифестПакета); + КонецЕсли; + КонецЕсли; КонецПроцедуры Процедура УстановитьПакетПоИмениИВерсии(Знач ИмяПакета, Знач ВерсияПакета, ЗНач ЭтоЗависимыйПакет = Ложь) Экспорт - ФайлПакета = РаботаСПакетами.ПолучитьПакет(ИмяПакета, ВерсияПакета); - + ФайлПакета = РаботаСПакетами.ПолучитьПакет(ИмяПакета, ВерсияПакета, , ИмяСервера); УстановитьПакетИзАрхива(ФайлПакета, ЭтоЗависимыйПакет); КонецПроцедуры @@ -223,4 +230,4 @@ КонецФункции Лог = Логирование.ПолучитьЛог("oscript.app.opm"); -//Лог.УстановитьУровень(УровниЛога.Отладка); \ No newline at end of file +//Лог.УстановитьУровень(УровниЛога.Отладка); diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\262\320\265\321\200\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\241\320\265\321\200\320\262\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" index 34d9036..a2d2329 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\262\320\265\321\200\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\241\320\265\321\200\320\262\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -6,16 +6,18 @@ Перем Порт; Перем Приоритет; Перем Соединение; +Перем РесурсПубликацииПакетов; Перем ПакетыХаба; -Процедура ПриСозданииОбъекта(Знач ИмяСервера, Знач АдресСервер, Знач ВходящийПутьНаСервере = "", Знач ВходящийПорт = 80, Знач ВходящийПриоритет = 0 ) +Процедура ПриСозданииОбъекта(Знач ИмяСервера, Знач АдресСервер, Знач ВходящийПутьНаСервере = "", Знач ВходящийРесурсПубликацииПакетов = "", Знач ВходящийПорт = 80, Знач ВходящийПриоритет = 0) Имя = ИмяСервера; Сервер = АдресСервер; ПутьНаСервере = ВходящийПутьНаСервере; Порт = ВходящийПорт; Приоритет = ВходящийПриоритет; + РесурсПубликацииПакетов = ВходящийРесурсПубликацииПакетов; КонецПроцедуры @@ -36,7 +38,8 @@ Порт = ?(Порт = Неопределено, 80, Порт); Настройки = НастройкиOpm.ПолучитьНастройки(); Если Настройки.ИспользоватьПрокси Тогда - Соединение = Новый HTTPСоединение(Сервер, Порт,,, НастройкиOpm.ПолучитьИнтернетПрокси()); + НастройкиПрокси = НастройкиOpm.ПолучитьИнтернетПрокси(); + Соединение = Новый HTTPСоединение(Сервер, Порт, , , НастройкиПрокси); Иначе Соединение = Новый HTTPСоединение(Сервер, Порт); КонецЕсли; @@ -88,12 +91,14 @@ Функция ПолучитьСписокПакетов(Ресурс) Ответ = ПолучитьРесурс(Ресурс); + КодСостояния = Ответ.КодСостояния; - Если Ответ = Неопределено Или Ответ.КодСостояния <> 200 Тогда - ТекстИсключения = СтрШаблон("Ошибка подключения к зеркалу "); + Если Ответ = Неопределено Или КодСостояния <> 200 Тогда + ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(); + ТекстИсключения = СтрШаблон("Ошибка подключения к зеркалу код ответа: <%1> + |Текст ответа: <%2>", КодСостояния, ТекстОтвета); ВызватьИсключение ТекстИсключения; КонецЕсли; - ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(); Ответ.Закрыть(); diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\237\320\260\320\272\320\265\321\202\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\237\320\260\320\272\320\265\321\202\320\260.os" index b804507..f4da861 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\237\320\260\320\272\320\265\321\202\320\260.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\237\320\260\320\272\320\265\321\202\320\260.os" @@ -9,6 +9,7 @@ Перем ЭтоWindows; Перем мРежимУстановкиПакетов; +Перем СоздаватьФайлЗапуска; Перем мЦелевойКаталог; Перем Метаданные; @@ -34,7 +35,7 @@ Метаданные = ПрочитатьМетаданныеПакета(ФайлМетаданных); ИмяПакета = Метаданные.Свойства().Имя; - + ОбъектКаталогУстановки = НайтиСоздатьКаталогУстановки(ИмяПакета); ПутьУстановки = ОбъектКаталогУстановки.ПолноеИмя; @@ -86,6 +87,10 @@ мРежимУстановкиПакетов = ЗначениеРежимУстановкиПакетов; КонецПроцедуры +Процедура СоздаватьФайлЗапуска(Знач ПСоздаватьФайлЗапуска) Экспорт + СоздаватьФайлЗапуска = ПСоздаватьФайлЗапуска; +КонецПроцедуры + Процедура ПроверитьВерсиюСреды(Манифест) Свойства = Манифест.Свойства(); @@ -147,14 +152,14 @@ УдалитьУстаревшиеФайлы(ОбъектКаталогУстановки); ИзвлечьФайл(ЧтениеСодержимого, КонстантыOpm.ИмяФайлаСпецификацииПакета, КаталогУстановки); - + Попытка ОбработчикСобытий = ПолучитьОбработчикСобытий(КаталогУстановки); Исключение ОписаниеОшибки = ОписаниеОшибки(); - Лог.Предупреждение("Не удалось обработать описание частичного распакованного пакета - |Выполняю полную распаковку пакета - | + Лог.Отладка("Не удалось обработать описание частичного распакованного пакета + |Выполняю полную распаковку пакета"); + Лог.Отладка("Расшифровка ошибки частичной распаковки: |%1", ОписаниеОшибки); ОбработчикСобытий = Неопределено; @@ -243,6 +248,10 @@ Процедура СгенерироватьСкриптыЗапускаПриложенийПриНеобходимости(Знач КаталогУстановки, Знач ОписаниеПакета) + Если НЕ СоздаватьФайлЗапуска Тогда + Возврат; + КонецЕсли; + ИмяПакета = ОписаниеПакета.Свойства().Имя; Для Каждого ФайлПриложения Из ОписаниеПакета.ИсполняемыеФайлы() Цикл @@ -262,7 +271,7 @@ ФС.ОбеспечитьКаталог(КаталогУстановкиСкриптовЗапускаПриложений); КаталогУстановкиСкриптовЗапускаПриложений = Новый Файл(КаталогУстановкиСкриптовЗапускаПриложений).ПолноеИмя; ИначеЕсли мРежимУстановкиПакетов = РежимУстановкиПакетов.Глобально Тогда - КаталогУстановкиСкриптовЗапускаПриложений = ?(ЭтоWindows, КаталогПрограммы(), "/usr/bin"); + КаталогУстановкиСкриптовЗапускаПриложений = ?(ЭтоWindows, КаталогПрограммы(), ВыбратьКаталогДляLinuxИлиMacOs()); Если НЕ ПустаяСтрока(ПолучитьПеременнуюСреды("OSCRIPTBIN")) Тогда КаталогУстановкиСкриптовЗапускаПриложений = ПолучитьПеременнуюСреды("OSCRIPTBIN"); КонецЕсли; @@ -276,6 +285,19 @@ КонецПроцедуры +Функция ВыбратьКаталогДляLinuxИлиMacOs() + + ТекстовыйДокумент = Новый ТекстовыйДокумент(); + Попытка + ТекстовыйДокумент.Записать("/usr/bin/opm-check-temp.txt"); + УдалитьФайлы("/usr/bin/opm-check-temp.txt"); + Возврат "/usr/bin"; + Исключение + Возврат "/usr/local/bin"; + КонецПопытки; + +КонецФункции + Процедура СоздатьСкриптЗапуска(Знач ИмяСкриптаЗапуска, Знач ПутьФайлаПриложения, Знач Каталог) Экспорт Если ЭтоWindows Тогда @@ -396,3 +418,4 @@ СИ = Новый СистемнаяИнформация(); ЭтоWindows = Найти(СИ.ВерсияОС, "Windows") > 0; мРежимУстановкиПакетов = РежимУстановкиПакетов.Глобально; +СоздаватьФайлЗапуска = Истина; 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 cc81252..2af3872 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"; -ВерсияПродукта = "0.15.3"; -ИмяФайлаНастроек = "opm.cfg"; \ No newline at end of file +ВерсияПродукта = "0.16.0"; +ИмяФайлаНастроек = "opm.cfg"; diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270Opm.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270Opm.os" index bdb8a48..619e09b 100644 --- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270Opm.os" +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270Opm.os" @@ -47,7 +47,9 @@ КешИнтернетПрокси = Новый ИнтернетПрокси(); - КешИнтернетПрокси.Установить("http", НастройкиПрокси.Сервер, НастройкиПрокси.Порт, НастройкиПрокси.Пользователь, НастройкиПрокси.Пароль, НастройкиПрокси.ИспользоватьАутентификациюОС); + КешИнтернетПрокси.Установить("http", НастройкиПрокси.Сервер, НастройкиПрокси.Порт, + НастройкиПрокси.Пользователь, НастройкиПрокси.Пароль, + НастройкиПрокси.ИспользоватьАутентификациюОС); КешИнтернетПрокси.НеИспользоватьПроксиДляЛокальныхАдресов = Истина; @@ -78,12 +80,13 @@ КонецПроцедуры -Функция НастройкиСервераПакетов(Знач Имя, Знач Сервер, Знач ПутьНаСервере, Знач Порт, Знач Приоритет) +Функция НастройкиСервераПакетов(Знач Имя, Знач Сервер, Знач ПутьНаСервере, Знач РесурсПубликацииПакетов, Знач Порт, Знач Приоритет) Результат = Новый Структура; Результат.Вставить("Имя", Имя); Результат.Вставить("Сервер", Сервер); Результат.Вставить("ПутьНаСервере", ПутьНаСервере); + Результат.Вставить("РесурсПубликацииПакетов", РесурсПубликацииПакетов); Результат.Вставить("Порт", Порт); Результат.Вставить("Приоритет", Приоритет); @@ -94,14 +97,17 @@ Процедура ДобавитьСерверПакетов(Знач Имя, Знач Сервер, Знач ПутьНаСервере = "", + Знач РесурсПубликацииПакетов = "", Знач Порт = 80, Знач Приоритет = Неопределено) Экспорт - мНастройки.СервераПакетов.Добавить(НастройкиСервераПакетов(Имя, Сервер, ПутьНаСервере, Порт, Приоритет)); - Лог.Отладка("Добавлен дополнительный сервер <%1>, Адрес <%2>, ПутьНаСервере <%3>, Порт <%4>, Приоритет <%5>", Имя, Сервер, ПутьНаСервере, Порт, Приоритет); + мНастройки.СервераПакетов.Добавить(НастройкиСервераПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет)); + Лог.Отладка("Добавлен сервер <%1>, Адрес <%2>, ПутьНаСервере <%3>, РесурсПубликацииПакетов <%4>, Порт <%5>, Приоритет <%6>", + Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет); КонецПроцедуры + Процедура СброситьНастройки() Экспорт Инициализация(); @@ -119,8 +125,8 @@ мНастройки.Вставить("СервераПакетов", Новый Массив); // Сервера пакетов по умолчанию - ДобавитьСерверПакетов("ОсновнойСерверПакетов", КонстантыOpm.СерверУдаленногоХранилища, КонстантыOpm.ПутьВХранилище, 80, 0); - ДобавитьСерверПакетов("ЗапаснойСерверПакетов", КонстантыOpm.СерверЗапасногоХранилища, КонстантыOpm.ПутьВЗапасномХранилище, 80, 1); + ДобавитьСерверПакетов("ОсновнойСерверПакетов", КонстантыOpm.СерверУдаленногоХранилища, КонстантыOpm.ПутьВХранилище, КонстантыOpm.РесурсПубликацииПакетов, 80, 0); + ДобавитьСерверПакетов("ЗапаснойСерверПакетов", КонстантыOpm.СерверЗапасногоХранилища, КонстантыOpm.ПутьВЗапасномХранилище, Неопределено, 80, 1); КонецПроцедуры diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\237\320\260\320\272\320\265\321\202\320\260\320\274\320\270.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\237\320\260\320\272\320\265\321\202\320\260\320\274\320\270.os" index c9b78f6..a312e70 100644 --- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\237\320\260\320\272\320\265\321\202\320\260\320\274\320\270.os" +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\237\320\260\320\272\320\265\321\202\320\260\320\274\320\270.os" @@ -6,7 +6,7 @@ Перем Лог; Перем ВнутреннийМенеджерПолученияПакетов; -Процедура ОбновитьУстановленныеПакеты(Знач РежимУстановки, Знач ЦелевойКаталог = Неопределено) Экспорт +Процедура ОбновитьУстановленныеПакеты(Знач РежимУстановки, Знач ЦелевойКаталог = Неопределено, Знач НастройкаУстановки = Неопределено) Экспорт КэшУстановленныхПакетов = ПолучитьУстановленныеПакеты(РежимУстановки); УстановленныеПакеты = КэшУстановленныхПакетов.ПолучитьУстановленныеПакеты(); @@ -20,7 +20,7 @@ Продолжить; КонецЕсли; - ОбновитьПакетИзОблака(ИмяПакета, РежимУстановки, ЦелевойКаталог); + ОбновитьПакетИзОблака(ИмяПакета, РежимУстановки, ЦелевойКаталог, НастройкаУстановки); КонецЦикла; @@ -53,7 +53,18 @@ КонецФункции -Процедура УстановитьПакетИзОблака(Знач ИмяПакета, Знач РежимУстановки, Знач ЦелевойКаталог) Экспорт +Функция ПолучитьНастройкуУстановки() Экспорт + + Настройка = Новый Структура(); + Настройка.Вставить("УстанавливатьЗависимости", Истина); + Настройка.Вставить("СоздаватьФайлыЗапуска", Истина); + Настройка.Вставить("ИмяСервера", ""); + + Возврат Настройка; + +КонецФункции + +Процедура УстановитьПакетИзОблака(Знач ИмяПакета, Знач РежимУстановки, Знач ЦелевойКаталог, Знач НастройкаУстановки = Неопределено) Экспорт Лог.Отладка("Устанавливаю пакет <%1> из доступного хаба", ИмяПакета); ИмяВерсияПакета = РаботаСВерсиями.РазобратьИмяПакета(ИмяПакета); @@ -61,17 +72,30 @@ Если РежимУстановки = РежимУстановкиПакетов.Локально Тогда ЭтоЗависимость = Истина; КонеЦесли; - УстановкаПакета = Новый МенеджерУстановкиПакетов(РежимУстановки, ЦелевойКаталог); - УстановкаПакета.УстановитьПакетПоИмениИВерсии(ИмяВерсияПакета.ИмяПакета, ИмяВерсияПакета.Версия, ЭтоЗависимость); + Если НастройкаУстановки = Неопределено Тогда + НастройкаУстановки = ПолучитьНастройкуУстановки(); + КонецЕсли; + + МенеджерУстановки = Новый МенеджерУстановкиПакетов(РежимУстановки, ЦелевойКаталог, , НастройкаУстановки.ИмяСервера); + МенеджерУстановки.УстанавливатьЗависимости(НастройкаУстановки.УстанавливатьЗависимости); + МенеджерУстановки.СоздаватьФайлыЗапуска(НастройкаУстановки.СоздаватьФайлыЗапуска); + МенеджерУстановки.УстановитьПакетПоИмениИВерсии(ИмяВерсияПакета.ИмяПакета, ИмяВерсияПакета.Версия, ЭтоЗависимость); КонецПроцедуры -Процедура УстановитьПакетИзФайла(Знач ИмяФайлаПакета, Знач РежимУстановки, Знач ЦелевойКаталог = Неопределено) Экспорт +Процедура УстановитьПакетИзФайла(Знач ИмяФайлаПакета, Знач РежимУстановки, + Знач ЦелевойКаталог = Неопределено, + Знач НастройкаУстановки = Неопределено) Экспорт - УстановкаПакета = Новый МенеджерУстановкиПакетов(РежимУстановки, ЦелевойКаталог); + Если НастройкаУстановки = Неопределено Тогда + НастройкаУстановки = ПолучитьНастройкуУстановки(); + КонецЕсли; - УстановкаПакета.УстановитьПакетИзАрхива(ИмяФайлаПакета); + МенеджерУстановки = Новый МенеджерУстановкиПакетов(РежимУстановки, ЦелевойКаталог, , НастройкаУстановки.ИмяСервера); + МенеджерУстановки.УстанавливатьЗависимости(НастройкаУстановки.УстанавливатьЗависимости); + МенеджерУстановки.СоздаватьФайлыЗапуска(НастройкаУстановки.СоздаватьФайлыЗапуска); + МенеджерУстановки.УстановитьПакетИзАрхива(ИмяФайлаПакета); КонецПроцедуры @@ -104,33 +128,38 @@ КонецПроцедуры -Процедура УстановитьВсеПакетыИзОблака(Знач РежимУстановки, Знач ЦелевойКаталог = Неопределено) Экспорт - +Процедура УстановитьВсеПакетыИзОблака(Знач РежимУстановки, Знач ЦелевойКаталог = Неопределено, + Знач НастройкаУстановки = Неопределено) Экспорт + МенеджерПолучения = ПолучитьМенеджерПолученияПакетов(); КешПакетов = МенеджерПолучения.ПолучитьДоступныеПакеты(); Для Каждого КлючИЗначение Из КешПакетов Цикл - УстановитьПакетИзОблака(КлючИЗначение.Ключ, РежимУстановки, ЦелевойКаталог); + УстановитьПакетИзОблака(КлючИЗначение.Ключ, РежимУстановки, ЦелевойКаталог, НастройкаУстановки); КонецЦикла; КонецПроцедуры -Процедура ОбновитьПакетИзОблака(Знач ИмяПакета, Знач РежимУстановки, Знач ЦелевойКаталог = Неопределено) Экспорт +Процедура ОбновитьПакетИзОблака(Знач ИмяПакета, Знач РежимУстановки, Знач ЦелевойКаталог = Неопределено, Знач НастройкаУстановки = Неопределено) Экспорт - УстановитьПакетИзОблака(ИмяПакета, РежимУстановки, ЦелевойКаталог); + УстановитьПакетИзОблака(ИмяПакета, РежимУстановки, ЦелевойКаталог, НастройкаУстановки); КонецПроцедуры - -Процедура УстановитьПакетыПоОписаниюПакета(Знач РежимУстановки, Знач ЦелевойКаталог = Неопределено) Экспорт +Процедура УстановитьПакетыПоОписаниюПакета(Знач РежимУстановки, Знач ЦелевойКаталог = Неопределено, Знач НастройкаУстановки = Неопределено) Экспорт ОписаниеПакета = РаботаСОписаниемПакета.ПрочитатьОписаниеПакета(); ПроверитьВерсиюСреды(ОписаниеПакета); - УстановкаПакета = Новый МенеджерУстановкиПакетов(РежимУстановки); + Если НастройкаУстановки = Неопределено Тогда + НастройкаУстановки = ПолучитьНастройкуУстановки(); + КонецЕсли; + + МенеджерУстановки = Новый МенеджерУстановкиПакетов(РежимУстановки, , , НастройкаУстановки.ИмяСервера); + МенеджерУстановки.СоздаватьФайлыЗапуска(НастройкаУстановки.СоздаватьФайлыЗапуска); - УстановкаПакета.РазрешитьЗависимостиПакета(ОписаниеПакета); + МенеджерУстановки.РазрешитьЗависимостиПакета(ОписаниеПакета); Если РежимУстановки = РежимУстановкиПакетов.Локально Тогда ОбеспечитьФайлыИнфраструктурыЛокальнойУстановки(ОписаниеПакета, РежимУстановки); @@ -201,11 +230,10 @@ КонецПроцедуры -Функция ПолучитьПакет(Знач ИмяПакета, Знач ВерсияПакета, ПутьКФайлуПакета = "") Экспорт +Функция ПолучитьПакет(Знач ИмяПакета, Знач ВерсияПакета, ПутьКФайлуПакета = "", ИмяСервера = "") Экспорт МенеджерПолучения = ПолучитьМенеджерПолученияПакетов(); - - ПутьКФайлуПакета = МенеджерПолучения.ПолучитьПакет(ИмяПакета, ВерсияПакета, ПутьКФайлуПакета); + ПутьКФайлуПакета = МенеджерПолучения.ПолучитьПакет(ИмяПакета, ВерсияПакета, ПутьКФайлуПакета, ИмяСервера); Возврат ПутьКФайлуПакета; diff --git a/tests/download.os b/tests/download.os index 9c7fe09..099f17d 100644 --- a/tests/download.os +++ b/tests/download.os @@ -1,7 +1,7 @@ #Использовать asserts #Использовать fs #Использовать tempfiles - +#Использовать "../src/core" #Использовать "../src/cmd" Перем Лог;