-
Notifications
You must be signed in to change notification settings - Fork 33
OPM в оффлайне #238
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
OPM в оффлайне #238
Changes from all commits
4f82b4a
4397e9f
32b2caf
3b25752
9a5d2a5
0148448
6e55251
4f14dea
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
/////////////////////////////////////////////////////////////////////////////////////////////////// | ||
// Прикладной интерфейс | ||
|
||
Процедура ОписаниеКоманды(Знач КомандаПриложения) Экспорт | ||
|
||
КомандаПриложения.Опция("a all", Ложь, "Установить все пакеты, зарегистрированные в хабе"); | ||
КомандаПриложения.Опция("f file", "", "Указать файл из которого нужно установить пакет. Поддерживает указание маски файла для пакетной установки"); | ||
КомандаПриложения.Опция("u url", "", "Указать прямую интернет-ссылку на файл *.ospx из которого нужно установить пакет"); | ||
|
||
КомандаПриложения.Опция("dev", Ложь, "Признак установки пакетов для разработки"); | ||
КомандаПриложения.Опция("s skip-install-deps", Ложь, "признак пропуска установки зависимых пакетов"); | ||
КомандаПриложения.Опция("d dest", "", "Целевой каталог"); | ||
|
||
ОпцияЗеркала = КомандаПриложения.Опция("m mirror", "", "Указать имя сервера, с которого необходимо ставить пакеты. | ||
| Доступные сервера прописываются в конфигурационном файле opm.cfg, параметр 'СервераПакетов'.") | ||
.ВОкружении("OPM_HUB_MIRROR") | ||
.ТПеречисление(); | ||
|
||
МенеджерПолучения = Новый МенеджерПолученияПакетов(); | ||
Для Каждого ДоступноеЗеркало Из МенеджерПолучения.ИменаДоступныхСерверов() Цикл | ||
ОпцияЗеркала.Перечисление(ДоступноеЗеркало, ДоступноеЗеркало, "Сервер '" + ДоступноеЗеркало + "'"); | ||
КонецЦикла; | ||
|
||
КомандаПриложения.Аргумент("PACKAGE", "", "Имя пакета в хабе. Чтобы установить конкретную версию, используйте ИмяПакета@ВерсияПакета") | ||
.ТМассивСтрок() | ||
.Обязательный(Ложь); | ||
|
||
// КомандаПриложения.Спек = "(-a | --all | -l | --local | -d | --dest )"; | ||
|
||
КонецПроцедуры | ||
|
||
Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт | ||
|
||
УстановкаПакетовРазработчика = КомандаПриложения.ЗначениеОпции("dev"); | ||
УстановкаВсехПакетов = КомандаПриложения.ЗначениеОпции("all"); | ||
КаталогУстановки = КомандаПриложения.ЗначениеОпции("dest"); | ||
ФайлПакетаУстановки = КомандаПриложения.ЗначениеОпции("file"); | ||
ИнтернетСсылкаНаПакет = КомандаПриложения.ЗначениеОпции("url"); | ||
МассивПакетовКУстановке = КомандаПриложения.ЗначениеАргумента("PACKAGE"); | ||
|
||
НеобходимоУстановитьЗависимости = Не КомандаПриложения.ЗначениеОпции("skip-install-deps"); | ||
ИмяСервера = КомандаПриложения.ЗначениеОпции("mirror"); | ||
|
||
РежимУстановки = РежимУстановкиПакетов.Скачивание; | ||
|
||
Если Не ПустаяСтрока(КаталогУстановки) Тогда | ||
ЦелевойКаталог = КаталогУстановки; | ||
Иначе | ||
ЦелевойКаталог = ТекущийКаталог(); | ||
КонецЕсли; | ||
Лог = Логирование.ПолучитьЛог(ПараметрыПриложенияOpm.ИмяЛогаСистемы()); | ||
|
||
Лог.Отладка("УстановкаПакетовРазработчика: %1", УстановкаПакетовРазработчика); | ||
Лог.Отладка("УстановкаВсехПакетов: %1", УстановкаВсехПакетов); | ||
Лог.Отладка("КаталогУстановки: %1", КаталогУстановки); | ||
Лог.Отладка("ФайлПакетаУстановки: %1", ФайлПакетаУстановки); | ||
Лог.Отладка("ИнтернетСсылкаНаПакет: %1", ИнтернетСсылкаНаПакет); | ||
Лог.Отладка("МассивПакетовКУстановке: %1", МассивПакетовКУстановке.Количество()); | ||
Лог.Отладка("НеобходимоУстановитьЗависимости: %1", НеобходимоУстановитьЗависимости); | ||
|
||
НастройкаУстановки = РаботаСПакетами.ПолучитьНастройкуУстановки(); | ||
НастройкаУстановки.УстанавливатьЗависимости = НеобходимоУстановитьЗависимости; | ||
НастройкаУстановки.УстанавливатьЗависимостиРазработчика = УстановкаПакетовРазработчика; | ||
НастройкаУстановки.СоздаватьФайлыЗапуска = Ложь; | ||
НастройкаУстановки.ИмяСервера = ИмяСервера; | ||
|
||
Если УстановкаВсехПакетов Тогда | ||
РаботаСПакетами.УстановитьВсеПакетыИзОблака(РежимУстановки, ЦелевойКаталог, НастройкаУстановки); | ||
ИначеЕсли ПустаяСтрока(ФайлПакетаУстановки) И ПустаяСтрока(ИнтернетСсылкаНаПакет) И МассивПакетовКУстановке.Количество() = 0 Тогда | ||
РаботаСПакетами.УстановитьПакетыПоОписаниюПакета(РежимУстановки, ЦелевойКаталог, НастройкаУстановки); | ||
ИначеЕсли НЕ ПустаяСтрока(ФайлПакетаУстановки) Тогда | ||
|
||
РазобранныйАдрес = СтрРазделить(ФайлПакетаУстановки, ПолучитьРазделительПути()); | ||
Путь = "."; | ||
Маска = ФайлПакетаУстановки; | ||
Если РазобранныйАдрес.Количество() > 1 Тогда // отделим последнюю секцию как имя файла, а остальное опять соберем в строку пути | ||
|
||
Маска = РазобранныйАдрес[РазобранныйАдрес.Количество() - 1]; | ||
РазобранныйАдрес.Удалить(РазобранныйАдрес.Количество() - 1); | ||
Путь = СтрСоединить(РазобранныйАдрес, ПолучитьРазделительПути()); | ||
|
||
КонецЕсли; | ||
|
||
ФайлыПоМаске = НайтиФайлы(Путь, Маска); | ||
Для Каждого ФайлПакета Из ФайлыПоМаске Цикл | ||
|
||
РаботаСПакетами.УстановитьПакетИзФайла(ФайлПакета.ПолноеИмя, РежимУстановки, ЦелевойКаталог, НастройкаУстановки); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Я не очень понял, какое отношение команда download имеет к установке из локального файла... There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
зависимости тащить There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. А она вытащит все версии пакета зависимости или какую-то конкретную, собственно, от которой зависит? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. вытащит конкретную. НО, если другие пакеты по цепочке зависимостей хотят другую версию - вытащит и другую конкретную тоже. Например, при скачивании зависимостей ванесса-раннера у меня по итогу три версии ассертсов: 0.4.0, 1.3.0 и 1.4.0 |
||
|
||
КонецЦикла; | ||
|
||
ИначеЕсли НЕ ПустаяСтрока(ИнтернетСсылкаНаПакет) Тогда | ||
|
||
позСервер = СтрНайти(ИнтернетСсылкаНаПакет, "/", , , 3); | ||
Сервер = Лев(ИнтернетСсылкаНаПакет, позСервер-1); | ||
Адрес = Сред(ИнтернетСсылкаНаПакет, позСервер); | ||
Если Нрег(Лев(Сервер, 5)) = "https" Тогда | ||
Порт = 443; | ||
Иначе | ||
Порт = 80; | ||
КонецЕсли; | ||
|
||
Соединение = Новый HTTPСоединение(Сервер, Порт); | ||
Запрос = Новый HTTPЗапрос(Адрес); | ||
Ответ = Соединение.Получить(Запрос); | ||
ДД = Ответ.ПолучитьТелоКакДвоичныеДанные(); | ||
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("ospx"); | ||
ДД.Записать(ИмяВременногоФайла); | ||
|
||
РаботаСПакетами.УстановитьПакетИзФайла(ИмяВременногоФайла, РежимУстановки, ЦелевойКаталог, НастройкаУстановки); | ||
|
||
УдалитьФайлы(ИмяВременногоФайла); | ||
|
||
Иначе | ||
|
||
Для каждого ИмяПакета Из МассивПакетовКУстановке Цикл | ||
|
||
Если ЭтоФайлПакета(ИмяПакета) Тогда | ||
|
||
РаботаСПакетами.УстановитьПакетИзФайла(ИмяПакета, РежимУстановки, ЦелевойКаталог, НастройкаУстановки); | ||
|
||
Иначе | ||
|
||
РаботаСПакетами.УстановитьПакетИзОблака(ИмяПакета, РежимУстановки, ЦелевойКаталог, НастройкаУстановки); | ||
|
||
КонецЕсли; | ||
|
||
КонецЦикла; | ||
|
||
КонецЕсли; | ||
|
||
КонецПроцедуры | ||
|
||
Функция ЭтоФайлПакета(Знач ИмяПакета) | ||
|
||
Возврат СтрЗаканчиваетсяНа(НРег(ИмяПакета), ".ospx"); | ||
|
||
КонецФункции |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я бы предложил имя ключа --no-deps
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
названия ключей оставил для совместимости с командой
install
https://github.com/oscript-library/opm/blob/master/src/cmd/%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B/%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0Opm_Install.os#L12