Skip to content

Commit f0cf371

Browse files
authored
Merge pull request #206 from oscript-library/fix-wrong-inet-access-184
Убрано обращение к хабам пакетов при выполнении команд
2 parents bfc8849 + ca4fa49 commit f0cf371

File tree

1 file changed

+85
-72
lines changed

1 file changed

+85
-72
lines changed

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

Lines changed: 85 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,35 @@
1212

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

15+
ОбновитьИндексыКешейПакетов();
16+
1517
Если Не ПакетДоступен(ИмяПакета) Тогда
16-
18+
1719
ТекстИсключения = СтрШаблон("Ошибка установки пакета %1: Пакет не найден", ИмяПакета);
1820
ВызватьИсключение ТекстИсключения;
19-
21+
2022
КонецЕсли;
2123

2224
ИмяПакета = ОпределитьИмяАрхива(ИмяПакета);
23-
25+
2426
Если ВерсияПакета <> Неопределено Тогда
2527
ФайлПакета = ИмяПакета + "-" + ВерсияПакета + ".ospx";
2628
Иначе
2729
ФайлПакета = ИмяПакета + ".ospx";
2830
КонецЕсли;
29-
31+
3032
Лог.Информация("Скачиваю файл: " + ФайлПакета);
3133

3234
Если ПустаяСтрока(ПутьКФайлуПакета) Тогда
3335
ПутьКФайлуПакета = ВременныеФайлы.НовоеИмяФайла("ospx");
3436
КонецЕсли;
3537

3638
ИмяРесурса = ИмяПакета + "/" + ФайлПакета;
37-
39+
3840
ПереченьСерверов = ИндексКешаПакетов[ИмяПакета];
3941

4042
Ответ = ЗапроситьПакет(ПереченьСерверов, ИмяСервера, ИмяРесурса);
41-
43+
4244
Если Не Ответ = Неопределено Тогда
4345
Лог.Отладка("Файл получен");
4446
Ответ.ПолучитьТелоКакДвоичныеДанные().Записать(ПутьКФайлуПакета);
@@ -54,35 +56,35 @@
5456
КонецФункции
5557

5658
Функция ЗапроситьПакет(Знач ПереченьСерверов, Знач ИмяСервера, Знач ИмяРесурса)
57-
59+
5860
ПакетУспешноПолучен = Ложь;
5961
ОтветСервера = Неопределено;
60-
61-
// Если указан нужный сервер, то только его и будем использовать
62+
63+
// Если указан нужный сервер, то только его и будем использовать
6264
Если ЗначениеЗаполнено(ИмяСервера) Тогда
63-
65+
6466
Сервер = ИндексСерверовПакетов[ИмяСервера];
6567
ОтветСервера = ЗапроситьПакетССервера(Сервер, ИмяРесурса);
6668

6769
Иначе
68-
70+
6971
// поиск пакета на серверах
7072
Для Каждого ДоступныйСервер Из ПереченьСерверов Цикл
71-
73+
7274
Сервер = ИндексСерверовПакетов[ДоступныйСервер.Ключ];
7375
ОтветСервера = ЗапроситьПакетССервера(Сервер, ИмяРесурса);
7476
Если ОтветСервера <> Неопределено Тогда
75-
77+
7678
Прервать;
7779

7880
КонецЕсли;
79-
81+
8082
КонецЦикла;
8183

8284
КонецЕсли;
8385

8486
Если ОтветСервера <> Неопределено Тогда
85-
87+
8688
Лог.Отладка("Ресурс %1 успешно получен с %2", ИмяРесурса, Сервер.ПолучитьИмя());
8789
Возврат ОтветСервера;
8890

@@ -93,92 +95,94 @@
9395
КонецФункции
9496

9597
Функция ЗапроситьПакетССервера(Сервер, ИмяРесурса)
96-
98+
9799
ОтветСервера = Неопределено;
98100
Если Сервер.СерверДоступен() Тогда
99-
101+
100102
ОтветСервера = Сервер.ПолучитьРесурс(ИмяРесурса);
101103
Если ОтветСервера <> Неопределено Тогда
102-
104+
103105
Если ОтветСервера.КодСостояния = 200 Тогда
104-
106+
105107
Возврат ОтветСервера;
106-
108+
107109
КонецЕсли;
108110

109111
ОтветСервера.Закрыть();
110112

111113
Лог.Информация("Ошибка подключения к хабу %1 <%2>",
112114
Сервер.ПолучитьИмя(),
113115
ОтветСервера.КодСостояния);
114-
116+
115117
ОтветСервера = Неопределено;
116-
118+
117119
КонецЕсли;
118120

119121
КонецЕсли;
120-
122+
121123
Возврат ОтветСервера;
122-
124+
123125
КонецФункции
124126

125127
// Функция по имени пакета определяет имя архива в хабе
126128
// https://github.com/oscript-library/opm/issues/50
127129
// Имена файлов в хабе регистрозависимы, однако имена пакетов по обыкновению регистронезависимы
128130
Функция ОпределитьИмяАрхива(Знач ИмяПакета)
129-
131+
130132
Если ИндексДоступныхПакетов.Получить(ИмяПакета) = Неопределено Тогда
131-
133+
132134
Для Каждого мПакет Из ИндексДоступныхПакетов Цикл
133-
135+
134136
// Проводим регистронезависимое сравнение имён
135137
Если нрег(мПакет.Ключ) = нрег(ИмяПакета) Тогда
136-
138+
137139
// и возвращаем ровно то имя, которое хранится в хабе (с учётом регистра)
138140
Возврат мПакет.Ключ;
139-
141+
140142
КонецЕсли;
141-
143+
142144
КонецЦикла;
143-
145+
144146
КонецЕсли;
145-
147+
146148
Возврат ИмяПакета;
147-
149+
148150
КонецФункции
149151

150152
Процедура Инициализировать()
151-
153+
152154
Лог.Отладка("Менеджер получения пакетов инициализация - НАЧАЛО");
153155
ОбновитьИндексСерверовПакетов();
154-
ОбновитьИндексКешаПакетов();
155-
ОбновитьИндексДоступныхПакетов();
156156
Лог.Отладка("Менеджер получения пакетов инициализация - ЗАВЕРШЕНО");
157-
157+
158158
КонецПроцедуры
159159

160160
Функция ПолучитьДоступныеПакеты() Экспорт
161-
161+
162+
ОбновитьИндексыКешейПакетов();
163+
162164
Возврат Новый ФиксированноеСоответствие(ИндексКешаПакетов);
163-
165+
164166
КонецФункции
165167

166168
Функция ПакетДоступен(Знач ИмяПакета) Экспорт
167-
169+
170+
ОбновитьИндексыКешейПакетов();
171+
168172
Если ИндексДоступныхПакетов.Получить(ИмяПакета) = Неопределено Тогда
169-
173+
170174
Для Каждого мПакет Из ИндексДоступныхПакетов Цикл
171-
175+
172176
// Проводим регистронезависимое сравнение имён
173177
Если нрег(мПакет.Ключ) = нрег(ИмяПакета) Тогда
174-
178+
175179
// и возвращаем ровно то имя, которое хранится в хабе (с учётом регистра)
176180
Возврат Истина;
177-
181+
178182
КонецЕсли;
179-
183+
180184
КонецЦикла;
181-
185+
182186
Иначе
183187
Возврат Истина;
184188
КонецЕсли;
@@ -187,15 +191,15 @@
187191

188192
КонецФункции
189193

190-
Процедура ОбновитьИндексСерверовПакетов() Экспорт
191-
194+
Процедура ОбновитьИндексСерверовПакетов()
195+
192196
ИндексСерверовПакетов = Новый Соответствие;
193197

194198
Настройки = НастройкиOpm.ПолучитьНастройки();
195199
СервераПакетов = Настройки.СервераПакетов;
196200

197201
Для каждого НастройкаСервера Из СервераПакетов Цикл
198-
202+
199203
ТекущийСерверПакетов = СоздатьСерверПакетовПоНастройке(НастройкаСервера);
200204
ИндексСерверовПакетов.Вставить(НастройкаСервера.Имя, ТекущийСерверПакетов);
201205

@@ -209,71 +213,80 @@
209213
// Массив - Список имен
210214
//
211215
Функция ИменаДоступныхСерверов() Экспорт
212-
216+
213217
ИменаПакетов = Новый Массив();
214218
СервераПакетов = НастройкиOpm.ПолучитьНастройки().СервераПакетов;
215219

216220
Для каждого НастройкаСервера Из СервераПакетов Цикл
217-
221+
218222
ИменаПакетов.Добавить(НастройкаСервера.Имя);
219-
223+
220224
КонецЦикла;
221-
225+
222226
Возврат ИменаПакетов;
223-
227+
224228
КонецФункции
225229

226230
Функция СоздатьСерверПакетовПоНастройке(Знач НастройкаСервера)
227-
228-
Возврат Новый СерверПакетов(НастройкаСервера.Имя,
229-
НастройкаСервера.Сервер,
230-
НастройкаСервера.ПутьНаСервере,
231-
НастройкаСервера.РесурсПубликацииПакетов,
232-
НастройкаСервера.Порт,
231+
232+
Возврат Новый СерверПакетов(НастройкаСервера.Имя,
233+
НастройкаСервера.Сервер,
234+
НастройкаСервера.ПутьНаСервере,
235+
НастройкаСервера.РесурсПубликацииПакетов,
236+
НастройкаСервера.Порт,
233237
НастройкаСервера.Приоритет)
234238

235239
КонецФункции
236240

237-
Процедура ОбновитьИндексДоступныхПакетов() Экспорт
241+
Процедура ОбновитьИндексДоступныхПакетов()
238242

239243
// Учесть версии пакетов
240244
ИндексДоступныхПакетов = Новый Соответствие;
241-
245+
242246
Лог.Отладка("Обновляю кеш доступных пакетов");
243-
247+
244248
Для каждого ПакетКеша Из ИндексКешаПакетов Цикл
245-
249+
246250
ИндексДоступныхПакетов.Вставить(ПакетКеша.Ключ, Истина);
247251

248252
КонецЦикла;
249-
253+
250254
Лог.Отладка("Кеш доступных пакетов - ОБНОВЛЕН");
251255

252256
КонецПроцедуры
253257

254-
Процедура ОбновитьИндексКешаПакетов() Экспорт
258+
Процедура ОбновитьИндексыКешейПакетов()
259+
Если Не ЗначениеЗаполнено(ИндексКешаПакетов)
260+
Или Не ЗначениеЗаполнено(ИндексДоступныхПакетов)Тогда
261+
262+
ОбновитьИндексКешаПакетов();
263+
ОбновитьИндексДоступныхПакетов();
264+
КонецЕсли;
265+
КонецПроцедуры
266+
267+
Процедура ОбновитьИндексКешаПакетов()
255268

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

258271
Для каждого ТекущийСерверПакетов Из ИндексСерверовПакетов Цикл
259-
272+
260273
ИмяСервера = ТекущийСерверПакетов.Ключ;
261274
КлассСервера = ТекущийСерверПакетов.Значение;
262275

263276
Пакеты = КлассСервера.ПолучитьПакеты();
264-
277+
265278
Лог.Отладка("Добавляю в кеш пакеты <%2> сервера: %1", ИмяСервера, Пакеты.Количество());
266-
279+
267280
ДобавитьПакетыВИндексКеша(Пакеты, ИмяСервера);
268281

269282
КонецЦикла;
270-
283+
271284
КонецПроцедуры
272285

273286
Процедура ДобавитьПакетыВИндексКеша(Знач ПакетыСервера, Знач ИмяСервера)
274287

275288
Для каждого Пакет Из ПакетыСервера Цикл
276-
289+
277290
КлючПакета = Пакет.Ключ;
278291
ВерсииПакета = Пакет.Значение;
279292
Лог.Отладка("Добавляю пакет: %1 в кеш для сервера %2", КлючПакета, ИмяСервера);
@@ -284,7 +297,7 @@
284297
ИндексКешаПакетов[КлючПакета].Вставить(ИмяСервера, ВерсииПакета)
285298

286299
КонецЦикла;
287-
300+
288301
КонецПроцедуры
289302

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

0 commit comments

Comments
 (0)