Skip to content

Commit 112ecd3

Browse files
240596448artbear
authored andcommitted
Установка пакета по прямой интернет-ссылке
1 parent f505917 commit 112ecd3

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

src/cmd/Классы/КомандаOpm_Install.os

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
КомандаПриложения.Опция("a all", Ложь, "Установить все пакеты, зарегистрированные в хабе");
77
КомандаПриложения.Опция("f file", "", "Указать файл из которого нужно установить пакет. Поддерживает указание маски файла для пакетной установки");
8+
КомандаПриложения.Опция("u url", "", "Указать прямую интернет-ссылку на файл *.ospx из которого нужно установить пакет");
9+
810
КомандаПриложения.Опция("l local", Ложь, "Установить пакеты в локальный каталог oscript_modules");
911
КомандаПриложения.Опция("dev", Ложь, "Признак установки пакетов для разработки");
1012
КомандаПриложения.Опция("s skip-install-deps", Ложь, "признак пропуска установки зависимых пакетов");
@@ -36,6 +38,7 @@
3638
УстановкаВсехПакетов = КомандаПриложения.ЗначениеОпции("all");
3739
КаталогУстановки = КомандаПриложения.ЗначениеОпции("dest");
3840
ФайлПакетаУстановки = КомандаПриложения.ЗначениеОпции("file");
41+
ИнтернетСсылкаНаПакет = КомандаПриложения.ЗначениеОпции("url");
3942
МассивПакетовКУстановке = КомандаПриложения.ЗначениеАргумента("PACKAGE");
4043

4144
НеобходимоУстановитьЗависимости = Не КомандаПриложения.ЗначениеОпции("skip-install-deps");
@@ -64,6 +67,7 @@
6467
Лог.Отладка("УстановкаВсехПакетов: %1", УстановкаВсехПакетов);
6568
Лог.Отладка("КаталогУстановки: %1", КаталогУстановки);
6669
Лог.Отладка("ФайлПакетаУстановки: %1", ФайлПакетаУстановки);
70+
Лог.Отладка("ИнтернетСсылкаНаПакет: %1", ИнтернетСсылкаНаПакет);
6771
Лог.Отладка("МассивПакетовКУстановке: %1", МассивПакетовКУстановке.Количество());
6872
Лог.Отладка("НеобходимоУстановитьЗависимости: %1", НеобходимоУстановитьЗависимости);
6973
Лог.Отладка("СоздаватьФайлыЗапуска: %1", СоздаватьФайлыЗапуска);
@@ -76,7 +80,7 @@
7680

7781
Если УстановкаВсехПакетов Тогда
7882
РаботаСПакетами.УстановитьВсеПакетыИзОблака(РежимУстановки, ЦелевойКаталог, НастройкаУстановки);
79-
ИначеЕсли ПустаяСтрока(ФайлПакетаУстановки) И МассивПакетовКУстановке.Количество() = 0 Тогда
83+
ИначеЕсли ПустаяСтрока(ФайлПакетаУстановки) И ПустаяСтрока(ИнтернетСсылкаНаПакет) И МассивПакетовКУстановке.Количество() = 0 Тогда
8084
РаботаСПакетами.УстановитьПакетыПоОписаниюПакета(РежимУстановки, ЦелевойКаталог, НастройкаУстановки);
8185
ИначеЕсли НЕ ПустаяСтрока(ФайлПакетаУстановки) Тогда
8286

@@ -98,6 +102,28 @@
98102

99103
КонецЦикла;
100104

105+
ИначеЕсли НЕ ПустаяСтрока(ИнтернетСсылкаНаПакет) Тогда
106+
107+
позСервер = СтрНайти(ИнтернетСсылкаНаПакет, "/", , , 3);
108+
Сервер = Лев(ИнтернетСсылкаНаПакет, позСервер-1);
109+
Адрес = Сред(ИнтернетСсылкаНаПакет, позСервер);
110+
Если Нрег(Лев(Сервер, 5)) = "https" Тогда
111+
Порт = 443;
112+
Иначе
113+
Порт = 80;
114+
КонецЕсли;
115+
116+
Соединение = Новый HTTPСоединение(Сервер, Порт);
117+
Запрос = Новый HTTPЗапрос(Адрес);
118+
Ответ = Соединение.Получить(Запрос);
119+
ДД = Ответ.ПолучитьТелоКакДвоичныеДанные();
120+
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("ospx");
121+
ДД.Записать(ИмяВременногоФайла);
122+
123+
РаботаСПакетами.УстановитьПакетИзФайла(ИмяВременногоФайла, РежимУстановки, ЦелевойКаталог, НастройкаУстановки);
124+
125+
УдалитьФайлы(ИмяВременногоФайла);
126+
101127
Иначе
102128

103129
Для каждого ИмяПакета Из МассивПакетовКУстановке Цикл
@@ -111,7 +137,6 @@
111137
РаботаСПакетами.УстановитьПакетИзОблака(ИмяПакета, РежимУстановки, ЦелевойКаталог, НастройкаУстановки);
112138

113139
КонецЕсли;
114-
115140

116141
КонецЦикла;
117142

src/cmd/Классы/КомандаOpm_Update.os

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
КомандаПриложения.Опция("a all", Ложь, "Обновить все установленные пакеты");
77
КомандаПриложения.Опция("f file", "", "Указать файл из которого нужно установить пакет");
8+
КомандаПриложения.Опция("u url", "", "Указать прямую интернет-ссылку на файл *.ospx из которого нужно установить пакет");
9+
810
КомандаПриложения.Опция("l local", Ложь, "Обновление пакета в локальном каталоге oscript_modules");
911
КомандаПриложения.Опция("s skip-install-deps", Ложь, "признак пропуска установки зависимых пакетов");
1012
КомандаПриложения.Опция("skip-create-app", Ложь, "признак отключения создания файла запуска");
@@ -33,6 +35,7 @@
3335
ОбновлениеВЛокальныйКаталог = КомандаПриложения.ЗначениеОпции("local");
3436
ОбновлениеВсехПакетов = КомандаПриложения.ЗначениеОпции("all");
3537
ФайлПакетаУстановки = КомандаПриложения.ЗначениеОпции("file");
38+
ИнтернетСсылкаНаПакет = КомандаПриложения.ЗначениеОпции("url");
3639
МассивПакетовКОбновлению = КомандаПриложения.ЗначениеАргумента("PACKAGE");
3740

3841
НеобходимУстановитьЗависимости = Не КомандаПриложения.ЗначениеОпции("skip-install-deps");
@@ -54,6 +57,29 @@
5457
РаботаСПакетами.ОбновитьУстановленныеПакеты(РежимУстановки, , НастройкаУстановки);
5558
ИначеЕсли НЕ ПустаяСтрока(ФайлПакетаУстановки) Тогда
5659
РаботаСПакетами.УстановитьПакетИзФайла(ФайлПакетаУстановки, РежимУстановки, , НастройкаУстановки);
60+
61+
ИначеЕсли НЕ ПустаяСтрока(ИнтернетСсылкаНаПакет) Тогда
62+
63+
позСервер = СтрНайти(ИнтернетСсылкаНаПакет, "/", , , 3);
64+
Сервер = Лев(ИнтернетСсылкаНаПакет, позСервер-1);
65+
Адрес = Сред(ИнтернетСсылкаНаПакет, позСервер);
66+
Если Нрег(Лев(Сервер, 5)) = "https" Тогда
67+
Порт = 443;
68+
Иначе
69+
Порт = 80;
70+
КонецЕсли;
71+
72+
Соединение = Новый HTTPСоединение(Сервер, Порт);
73+
Запрос = Новый HTTPЗапрос(Адрес);
74+
Ответ = Соединение.Получить(Запрос);
75+
ДД = Ответ.ПолучитьТелоКакДвоичныеДанные();
76+
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("ospx");
77+
ДД.Записать(ИмяВременногоФайла);
78+
79+
РаботаСПакетами.УстановитьПакетИзФайла(ИмяВременногоФайла, РежимУстановки, , НастройкаУстановки);
80+
81+
УдалитьФайлы(ИмяВременногоФайла);
82+
5783
Иначе
5884

5985
Для каждого ИмяПакета Из МассивПакетовКОбновлению Цикл

0 commit comments

Comments
 (0)