Skip to content

Commit 4f72daa

Browse files
committed
- Добавил возможность отправлять пакеты в зеркало
- Добавил возможность устанавливать и обновлять пакеты из зеркала - Скорректировал сохранение настроек, добавив информацию о ресурсе публикации пакета - Исправил ошибки неработоспособности КомандаOpm_Install и КомандаOpm_Update
1 parent 20fabcd commit 4f72daa

10 files changed

+109
-85
lines changed

features/step_definitions/Настройки.os

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -128,20 +128,20 @@
128128
Если Не СервераПакетов = Неопределено Тогда
129129
Индекс = 1;
130130

131-
Для каждого СерверПакетов Из СервераПакетов Цикл
131+
Для каждого ТекущийСерверПакетов Из СервераПакетов Цикл
132132

133-
Сервер = ПолучитьЗначение(СерверПакетов, "Сервер", "");
134-
Порт = Число(ПолучитьЗначение(СерверПакетов, "Порт", 80));
135-
ПутьНаСервере = ПолучитьЗначение(СерверПакетов, "ПутьНаСервере", "/");
136-
РесурсПубликацииПакетов = ПолучитьЗначение(СерверПакетов, "РесурсПубликацииПакетов", "/");
137-
Имя = ПолучитьЗначение(СерверПакетов, "Имя", СтрШаблон("ДопСервер_%1",Индекс));
138-
Приоритет = Число(ПолучитьЗначение(СерверПакетов, "Приоритет", 0));
133+
Сервер = ПолучитьЗначение(ТекущийСерверПакетов, "Сервер", "");
134+
Порт = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Порт", 80));
135+
ПутьНаСервере = ПолучитьЗначение(ТекущийСерверПакетов, "ПутьНаСервере", "/");
136+
РесурсПубликацииПакетов = ПолучитьЗначение(ТекущийСерверПакетов, "РесурсПубликацииПакетов", "/");
137+
Имя = ПолучитьЗначение(ТекущийСерверПакетов, "Имя", СтрШаблон("ДопСервер_%1",Индекс));
138+
Приоритет = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Приоритет", 0));
139139

140140
Если ПустаяСтрока(Сервер) Тогда
141141
Продолжить;
142142
КонецЕсли;
143143

144-
НастройкиOpm.ДобавитьСерверПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет);
144+
НастройкиOpm.ДобавитьТекущийСерверПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет);
145145
Индекс = Индекс +1;
146146

147147
КонецЦикла;

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@
99
КомандаПриложения.Опция("s skip-install-deps", Ложь, "признак пропуска установки зависимых пакетов");
1010
КомандаПриложения.Опция("skip-create-app", Ложь, "признак отключения создания файла запуска");
1111
КомандаПриложения.Опция("d dest", "", "Переопределить стандартный каталог в который устанавливаются пакеты (вместо oscript_modules)");
12-
12+
КомандаПриложения.Опция("m mirror", "", "Указать имя сервера, с которого необходимо ставить пакеты");
13+
1314
КомандаПриложения.Аргумент("PACKAGE", "", "Имя пакета в хабе. Чтобы установить конкретную версию, используйте ИмяПакета@ВерсияПакета")
1415
.ТМассивСтрок()
1516
.Обязательный(Ложь);
16-
17+
1718
// КомандаПриложения.Спек = "(-a | --all | -l | --local | -d | --dest )";
1819

1920
КонецПроцедуры
@@ -28,6 +29,7 @@
2829

2930
НеобходимоУстановитьЗависимости = Не КомандаПриложения.ЗначениеОпции("skip-install-deps");
3031
СоздаватьФайлыЗапуска = НЕ КомандаПриложения.ЗначениеОпции("skip-create-app");
32+
ИмяСервера = КомандаПриложения.ЗначениеОпции("mirror");
3133

3234
РежимУстановки = РежимУстановкиПакетов.Глобально;
3335
Если УстановкаВЛокальныйКаталог Тогда
@@ -57,6 +59,7 @@
5759
НастройкаУстановки = РаботаСПакетами.ПолучитьНастройкуУстановки();
5860
НастройкаУстановки.УстанавливатьЗависимости = НеобходимоУстановитьЗависимости;
5961
НастройкаУстановки.СоздаватьФайлыЗапуска = СоздаватьФайлыЗапуска;
62+
НастройкаУстановки.ИмяСервера = ИмяСервера;
6063

6164
Если УстановкаВсехПакетов Тогда
6265
РаботаСПакетами.УстановитьВсеПакетыИзОблака(РежимУстановки, ЦелевойКаталог, НастройкаУстановки);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@
130130

131131
ДоступныеСервераПакетов = НастройкиOpm.ПолучитьНастройки().СервераПакетов;
132132

133+
// Для настроек по умолчанию
133134
Сервер = КонстантыOpm.СерверУдаленногоХранилища;
134135
Ресурс = КонстантыOpm.РесурсПубликацииПакетов;
135136

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
КомандаПриложения.Опция("l local", Ложь, "Обновление пакета в локальном каталоге oscript_modules");
99
КомандаПриложения.Опция("s skip-install-deps", Ложь, "признак пропуска установки зависимых пакетов");
1010
КомандаПриложения.Опция("skip-create-app", Ложь, "признак отключения создания файла запуска");
11+
КомандаПриложения.Опция("m mirror", "", "Указать имя сервера, с которого необходимо ставить пакеты");
1112

1213
КомандаПриложения.Аргумент("PACKAGE", "", "Имя пакета в хабе. Чтобы установить конкретную версию, используйте ИмяПакета@ВерсияПакета")
1314
.ТМассивСтрок()
@@ -26,6 +27,7 @@
2627

2728
НеобходимУстановитьЗависимости = Не КомандаПриложения.ЗначениеОпции("skip-install-deps");
2829
СоздаватьФайлыЗапуска = НЕ КомандаПриложения.ЗначениеОпции("skip-create-app");
30+
ИмяСервера = КомандаПриложения.ЗначениеОпции("mirror");
2931

3032
РежимУстановки = РежимУстановкиПакетов.Глобально;
3133

@@ -36,6 +38,7 @@
3638
НастройкаУстановки = РаботаСПакетами.ПолучитьНастройкуУстановки();
3739
НастройкаУстановки.УстанавливатьЗависимости = НеобходимУстановитьЗависимости;
3840
НастройкаУстановки.СоздаватьФайлыЗапуска = СоздаватьФайлыЗапуска;
41+
НастройкаУстановки.ИмяСервера = ИмяСервера;
3942

4043
Если ОбновлениеВсехПакетов Тогда
4144
РаботаСПакетами.ОбновитьУстановленныеПакеты(РежимУстановки, , НастройкаУстановки);
@@ -44,9 +47,9 @@
4447
Иначе
4548

4649
Для каждого ИмяПакета Из МассивПакетовКОбновлению Цикл
47-
РаботаСПакетами.ОбновитьПакетИзОблака(ИмяПакета, РежимУстановки, НастройкаУстановки);
50+
РаботаСПакетами.ОбновитьПакетИзОблака(ИмяПакета, РежимУстановки, , НастройкаУстановки);
4851
КонецЦикла;
4952

5053
КонецЕсли;
5154

52-
КонецПроцедуры
55+
КонецПроцедуры

src/cmd/Модули/ПараметрыПриложенияOpm.os

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,14 @@
5858
Если Не СервераПакетов = Неопределено Тогда
5959
Индекс = 1;
6060

61-
Для каждого СерверПакетов Из СервераПакетов Цикл
61+
Для каждого ТекущийСерверПакетов Из СервераПакетов Цикл
6262

63-
Сервер = ПолучитьЗначение(СерверПакетов, "Сервер", "");
64-
Порт = Число(ПолучитьЗначение(СерверПакетов, "Порт", 80));
65-
ПутьНаСервере = ПолучитьЗначение(СерверПакетов, "ПутьНаСервере", "/");
66-
Имя = ПолучитьЗначение(СерверПакетов, "Имя", СтрШаблон("ДопСервер_%1", Индекс));
67-
РесурсПубликацииПакетов = ПолучитьЗначение(СерверПакетов, "РесурсПубликацииПакетов", "/");
68-
Приоритет = Число(ПолучитьЗначение(СерверПакетов, "Приоритет", 0));
63+
Сервер = ПолучитьЗначение(ТекущийСерверПакетов, "Сервер", "");
64+
Порт = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Порт", 80));
65+
ПутьНаСервере = ПолучитьЗначение(ТекущийСерверПакетов, "ПутьНаСервере", "/");
66+
Имя = ПолучитьЗначение(ТекущийСерверПакетов, "Имя", СтрШаблон("ДопСервер_%1", Индекс));
67+
РесурсПубликацииПакетов = ПолучитьЗначение(ТекущийСерверПакетов, "РесурсПубликацииПакетов", "/");
68+
Приоритет = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Приоритет", 0));
6969

7070
Если ПустаяСтрока(Сервер) Тогда
7171
Лог.Отладка("Для сервера <%1> не задан адрес", Индекс);

src/core/Классы/МенеджерПолученияПакетов.os

Lines changed: 59 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
КонецПроцедуры
1212

13-
Функция ПолучитьПакет(Знач ИмяПакета, Знач ВерсияПакета, ПутьКФайлуПакета = "") Экспорт
13+
Функция ПолучитьПакет(Знач ИмяПакета, Знач ВерсияПакета, ПутьКФайлуПакета = "", ИмяСервера = "") Экспорт
1414

1515
Если Не ПакетДоступен(ИмяПакета) Тогда
1616

@@ -37,7 +37,7 @@
3737

3838
ПереченьСерверов = ИндексКешаПакетов[ИмяПакета];
3939

40-
Ответ = ЗапроситьПакет(ПереченьСерверов, ИмяРесурса);
40+
Ответ = ЗапроситьПакет(ПереченьСерверов, ИмяСервера, ИмяРесурса);
4141

4242
Если Не Ответ = Неопределено Тогда
4343
Лог.Отладка("Файл получен");
@@ -53,50 +53,75 @@
5353

5454
КонецФункции
5555

56-
Функция ЗапроситьПакет(Знач ПереченьСерверов, Знач ИмяРесурса)
56+
Функция ЗапроситьПакет(Знач ПереченьСерверов, Знач ИмяСервера, Знач ИмяРесурса)
5757

5858
ПакетУспешноПолучен = Ложь;
59-
60-
Для каждого ДоступныйСервер Из ПереченьСерверов Цикл
61-
62-
Сервер = ИндексСерверовПакетов[ДоступныйСервер.Ключ];
63-
64-
Если Сервер.СерверДоступен() Тогда
59+
ОтветСервера = Неопределено;
60+
61+
// Если указан нужный сервер, то только его и будем использовать
62+
Если ЗначениеЗаполнено(ИмяСервера) Тогда
6563

66-
Ответ = Сервер.ПолучитьРесурс(ИмяРесурса);
67-
Если Ответ = Неопределено Тогда
68-
Продолжить;
69-
КонецЕсли;
64+
Сервер = ИндексСерверовПакетов[ИмяСервера];
65+
ОтветСервера = ЗапроситьПакетССервера(Сервер, ИмяРесурса);
7066

71-
Если Ответ.КодСостояния = 200 Тогда
67+
Иначе
68+
69+
// поиск пакета на серверах
70+
Для Каждого ДоступныйСервер Из ПереченьСерверов Цикл
71+
72+
Сервер = ИндексСерверовПакетов[ДоступныйСервер.Ключ];
73+
ОтветСервера = ЗапроситьПакетССервера(Сервер, ИмяРесурса);
74+
Если ОтветСервера <> Неопределено Тогда
7275

73-
ПакетУспешноПолучен = Истина;
7476
Прервать;
75-
76-
КонецЕсли;
77-
78-
Ответ.Закрыть();
79-
80-
Лог.Информация("Ошибка подключения к хабу %1 <%2>",
81-
Сервер.ПолучитьИмя(),
82-
Ответ.КодСостояния);
8377

84-
КонецЕсли;
78+
КонецЕсли;
79+
80+
КонецЦикла;
8581

86-
КонецЦикла;
82+
КонецЕсли;
8783

88-
Если ПакетУспешноПолучен Тогда
84+
Если ОтветСервера <> Неопределено Тогда
8985

9086
Лог.Отладка("Ресурс %1 успешно получен с %2", ИмяРесурса, Сервер.ПолучитьИмя());
91-
92-
Возврат Ответ;
87+
Возврат ОтветСервера;
9388

9489
КонецЕсли;
9590

9691
Возврат Неопределено;
9792

9893
КонецФункции
9994

95+
Функция ЗапроситьПакетССервера(Сервер, ИмяРесурса)
96+
97+
ОтветСервера = Неопределено;
98+
Если Сервер.СерверДоступен() Тогда
99+
100+
ОтветСервера = Сервер.ПолучитьРесурс(ИмяРесурса);
101+
Если ОтветСервера <> Неопределено Тогда
102+
103+
Если ОтветСервера.КодСостояния = 200 Тогда
104+
105+
Возврат ОтветСервера;
106+
107+
КонецЕсли;
108+
109+
ОтветСервера.Закрыть();
110+
111+
Лог.Информация("Ошибка подключения к хабу %1 <%2>",
112+
Сервер.ПолучитьИмя(),
113+
ОтветСервера.КодСостояния);
114+
115+
ОтветСервера = Неопределено;
116+
117+
КонецЕсли;
118+
119+
КонецЕсли;
120+
121+
Возврат ОтветСервера;
122+
123+
КонецФункции
124+
100125
// Функция по имени пакета определяет имя архива в хабе
101126
// https://github.com/oscript-library/opm/issues/50
102127
// Имена файлов в хабе регистрозависимы, однако имена пакетов по обыкновению регистронезависимы
@@ -171,8 +196,8 @@
171196

172197
Для каждого НастройкаСервера Из СервераПакетов Цикл
173198

174-
СерверПакетов = СоздатьСерверПакетовПоНастройке(НастройкаСервера);
175-
ИндексСерверовПакетов.Вставить(НастройкаСервера.Имя, СерверПакетов);
199+
ТекущийСерверПакетов = СоздатьСерверПакетовПоНастройке(НастройкаСервера);
200+
ИндексСерверовПакетов.Вставить(НастройкаСервера.Имя, ТекущийСерверПакетов);
176201

177202
КонецЦикла;
178203

@@ -210,10 +235,10 @@
210235

211236
ИндексКешаПакетов = Новый Соответствие;
212237

213-
Для каждого СерверПакетов Из ИндексСерверовПакетов Цикл
238+
Для каждого ТекущийСерверПакетов Из ИндексСерверовПакетов Цикл
214239

215-
ИмяСервера = СерверПакетов.Ключ;
216-
КлассСервера = СерверПакетов.Значение;
240+
ИмяСервера = ТекущийСерверПакетов.Ключ;
241+
КлассСервера = ТекущийСерверПакетов.Значение;
217242

218243
Пакеты = КлассСервера.ПолучитьПакеты();
219244

@@ -243,4 +268,4 @@
243268

244269
КонецПроцедуры
245270

246-
Лог = Логирование.ПолучитьЛог("oscript.app.opm");
271+
Лог = Логирование.ПолучитьЛог("oscript.app.opm");

0 commit comments

Comments
 (0)