|
12 | 12 |
|
13 | 13 | Функция ПолучитьПакет(Знач ИмяПакета, Знач ВерсияПакета, ПутьКФайлуПакета = "", ИмяСервера = "") Экспорт |
14 | 14 |
|
| 15 | + ОбновитьИндексыКешейПакетов(); |
| 16 | + |
15 | 17 | Если Не ПакетДоступен(ИмяПакета) Тогда |
16 | | - |
| 18 | + |
17 | 19 | ТекстИсключения = СтрШаблон("Ошибка установки пакета %1: Пакет не найден", ИмяПакета); |
18 | 20 | ВызватьИсключение ТекстИсключения; |
19 | | - |
| 21 | + |
20 | 22 | КонецЕсли; |
21 | 23 |
|
22 | 24 | ИмяПакета = ОпределитьИмяАрхива(ИмяПакета); |
23 | | - |
| 25 | + |
24 | 26 | Если ВерсияПакета <> Неопределено Тогда |
25 | 27 | ФайлПакета = ИмяПакета + "-" + ВерсияПакета + ".ospx"; |
26 | 28 | Иначе |
27 | 29 | ФайлПакета = ИмяПакета + ".ospx"; |
28 | 30 | КонецЕсли; |
29 | | - |
| 31 | + |
30 | 32 | Лог.Информация("Скачиваю файл: " + ФайлПакета); |
31 | 33 |
|
32 | 34 | Если ПустаяСтрока(ПутьКФайлуПакета) Тогда |
33 | 35 | ПутьКФайлуПакета = ВременныеФайлы.НовоеИмяФайла("ospx"); |
34 | 36 | КонецЕсли; |
35 | 37 |
|
36 | 38 | ИмяРесурса = ИмяПакета + "/" + ФайлПакета; |
37 | | - |
| 39 | + |
38 | 40 | ПереченьСерверов = ИндексКешаПакетов[ИмяПакета]; |
39 | 41 |
|
40 | 42 | Ответ = ЗапроситьПакет(ПереченьСерверов, ИмяСервера, ИмяРесурса); |
41 | | - |
| 43 | + |
42 | 44 | Если Не Ответ = Неопределено Тогда |
43 | 45 | Лог.Отладка("Файл получен"); |
44 | 46 | Ответ.ПолучитьТелоКакДвоичныеДанные().Записать(ПутьКФайлуПакета); |
|
54 | 56 | КонецФункции |
55 | 57 |
|
56 | 58 | Функция ЗапроситьПакет(Знач ПереченьСерверов, Знач ИмяСервера, Знач ИмяРесурса) |
57 | | - |
| 59 | + |
58 | 60 | ПакетУспешноПолучен = Ложь; |
59 | 61 | ОтветСервера = Неопределено; |
60 | | - |
61 | | - // Если указан нужный сервер, то только его и будем использовать |
| 62 | + |
| 63 | + // Если указан нужный сервер, то только его и будем использовать |
62 | 64 | Если ЗначениеЗаполнено(ИмяСервера) Тогда |
63 | | - |
| 65 | + |
64 | 66 | Сервер = ИндексСерверовПакетов[ИмяСервера]; |
65 | 67 | ОтветСервера = ЗапроситьПакетССервера(Сервер, ИмяРесурса); |
66 | 68 |
|
67 | 69 | Иначе |
68 | | - |
| 70 | + |
69 | 71 | // поиск пакета на серверах |
70 | 72 | Для Каждого ДоступныйСервер Из ПереченьСерверов Цикл |
71 | | - |
| 73 | + |
72 | 74 | Сервер = ИндексСерверовПакетов[ДоступныйСервер.Ключ]; |
73 | 75 | ОтветСервера = ЗапроситьПакетССервера(Сервер, ИмяРесурса); |
74 | 76 | Если ОтветСервера <> Неопределено Тогда |
75 | | - |
| 77 | + |
76 | 78 | Прервать; |
77 | 79 |
|
78 | 80 | КонецЕсли; |
79 | | - |
| 81 | + |
80 | 82 | КонецЦикла; |
81 | 83 |
|
82 | 84 | КонецЕсли; |
83 | 85 |
|
84 | 86 | Если ОтветСервера <> Неопределено Тогда |
85 | | - |
| 87 | + |
86 | 88 | Лог.Отладка("Ресурс %1 успешно получен с %2", ИмяРесурса, Сервер.ПолучитьИмя()); |
87 | 89 | Возврат ОтветСервера; |
88 | 90 |
|
|
93 | 95 | КонецФункции |
94 | 96 |
|
95 | 97 | Функция ЗапроситьПакетССервера(Сервер, ИмяРесурса) |
96 | | - |
| 98 | + |
97 | 99 | ОтветСервера = Неопределено; |
98 | 100 | Если Сервер.СерверДоступен() Тогда |
99 | | - |
| 101 | + |
100 | 102 | ОтветСервера = Сервер.ПолучитьРесурс(ИмяРесурса); |
101 | 103 | Если ОтветСервера <> Неопределено Тогда |
102 | | - |
| 104 | + |
103 | 105 | Если ОтветСервера.КодСостояния = 200 Тогда |
104 | | - |
| 106 | + |
105 | 107 | Возврат ОтветСервера; |
106 | | - |
| 108 | + |
107 | 109 | КонецЕсли; |
108 | 110 |
|
109 | 111 | ОтветСервера.Закрыть(); |
110 | 112 |
|
111 | 113 | Лог.Информация("Ошибка подключения к хабу %1 <%2>", |
112 | 114 | Сервер.ПолучитьИмя(), |
113 | 115 | ОтветСервера.КодСостояния); |
114 | | - |
| 116 | + |
115 | 117 | ОтветСервера = Неопределено; |
116 | | - |
| 118 | + |
117 | 119 | КонецЕсли; |
118 | 120 |
|
119 | 121 | КонецЕсли; |
120 | | - |
| 122 | + |
121 | 123 | Возврат ОтветСервера; |
122 | | - |
| 124 | + |
123 | 125 | КонецФункции |
124 | 126 |
|
125 | 127 | // Функция по имени пакета определяет имя архива в хабе |
126 | 128 | // https://github.com/oscript-library/opm/issues/50 |
127 | 129 | // Имена файлов в хабе регистрозависимы, однако имена пакетов по обыкновению регистронезависимы |
128 | 130 | Функция ОпределитьИмяАрхива(Знач ИмяПакета) |
129 | | - |
| 131 | + |
130 | 132 | Если ИндексДоступныхПакетов.Получить(ИмяПакета) = Неопределено Тогда |
131 | | - |
| 133 | + |
132 | 134 | Для Каждого мПакет Из ИндексДоступныхПакетов Цикл |
133 | | - |
| 135 | + |
134 | 136 | // Проводим регистронезависимое сравнение имён |
135 | 137 | Если нрег(мПакет.Ключ) = нрег(ИмяПакета) Тогда |
136 | | - |
| 138 | + |
137 | 139 | // и возвращаем ровно то имя, которое хранится в хабе (с учётом регистра) |
138 | 140 | Возврат мПакет.Ключ; |
139 | | - |
| 141 | + |
140 | 142 | КонецЕсли; |
141 | | - |
| 143 | + |
142 | 144 | КонецЦикла; |
143 | | - |
| 145 | + |
144 | 146 | КонецЕсли; |
145 | | - |
| 147 | + |
146 | 148 | Возврат ИмяПакета; |
147 | | - |
| 149 | + |
148 | 150 | КонецФункции |
149 | 151 |
|
150 | 152 | Процедура Инициализировать() |
151 | | - |
| 153 | + |
152 | 154 | Лог.Отладка("Менеджер получения пакетов инициализация - НАЧАЛО"); |
153 | 155 | ОбновитьИндексСерверовПакетов(); |
154 | | - ОбновитьИндексКешаПакетов(); |
155 | | - ОбновитьИндексДоступныхПакетов(); |
156 | 156 | Лог.Отладка("Менеджер получения пакетов инициализация - ЗАВЕРШЕНО"); |
157 | | - |
| 157 | + |
158 | 158 | КонецПроцедуры |
159 | 159 |
|
160 | 160 | Функция ПолучитьДоступныеПакеты() Экспорт |
161 | | - |
| 161 | + |
| 162 | + ОбновитьИндексыКешейПакетов(); |
| 163 | + |
162 | 164 | Возврат Новый ФиксированноеСоответствие(ИндексКешаПакетов); |
163 | | - |
| 165 | + |
164 | 166 | КонецФункции |
165 | 167 |
|
166 | 168 | Функция ПакетДоступен(Знач ИмяПакета) Экспорт |
167 | | - |
| 169 | + |
| 170 | + ОбновитьИндексыКешейПакетов(); |
| 171 | + |
168 | 172 | Если ИндексДоступныхПакетов.Получить(ИмяПакета) = Неопределено Тогда |
169 | | - |
| 173 | + |
170 | 174 | Для Каждого мПакет Из ИндексДоступныхПакетов Цикл |
171 | | - |
| 175 | + |
172 | 176 | // Проводим регистронезависимое сравнение имён |
173 | 177 | Если нрег(мПакет.Ключ) = нрег(ИмяПакета) Тогда |
174 | | - |
| 178 | + |
175 | 179 | // и возвращаем ровно то имя, которое хранится в хабе (с учётом регистра) |
176 | 180 | Возврат Истина; |
177 | | - |
| 181 | + |
178 | 182 | КонецЕсли; |
179 | | - |
| 183 | + |
180 | 184 | КонецЦикла; |
181 | | - |
| 185 | + |
182 | 186 | Иначе |
183 | 187 | Возврат Истина; |
184 | 188 | КонецЕсли; |
|
187 | 191 |
|
188 | 192 | КонецФункции |
189 | 193 |
|
190 | | -Процедура ОбновитьИндексСерверовПакетов() Экспорт |
191 | | - |
| 194 | +Процедура ОбновитьИндексСерверовПакетов() |
| 195 | + |
192 | 196 | ИндексСерверовПакетов = Новый Соответствие; |
193 | 197 |
|
194 | 198 | Настройки = НастройкиOpm.ПолучитьНастройки(); |
195 | 199 | СервераПакетов = Настройки.СервераПакетов; |
196 | 200 |
|
197 | 201 | Для каждого НастройкаСервера Из СервераПакетов Цикл |
198 | | - |
| 202 | + |
199 | 203 | ТекущийСерверПакетов = СоздатьСерверПакетовПоНастройке(НастройкаСервера); |
200 | 204 | ИндексСерверовПакетов.Вставить(НастройкаСервера.Имя, ТекущийСерверПакетов); |
201 | 205 |
|
|
209 | 213 | // Массив - Список имен |
210 | 214 | // |
211 | 215 | Функция ИменаДоступныхСерверов() Экспорт |
212 | | - |
| 216 | + |
213 | 217 | ИменаПакетов = Новый Массив(); |
214 | 218 | СервераПакетов = НастройкиOpm.ПолучитьНастройки().СервераПакетов; |
215 | 219 |
|
216 | 220 | Для каждого НастройкаСервера Из СервераПакетов Цикл |
217 | | - |
| 221 | + |
218 | 222 | ИменаПакетов.Добавить(НастройкаСервера.Имя); |
219 | | - |
| 223 | + |
220 | 224 | КонецЦикла; |
221 | | - |
| 225 | + |
222 | 226 | Возврат ИменаПакетов; |
223 | | - |
| 227 | + |
224 | 228 | КонецФункции |
225 | 229 |
|
226 | 230 | Функция СоздатьСерверПакетовПоНастройке(Знач НастройкаСервера) |
227 | | - |
228 | | - Возврат Новый СерверПакетов(НастройкаСервера.Имя, |
229 | | - НастройкаСервера.Сервер, |
230 | | - НастройкаСервера.ПутьНаСервере, |
231 | | - НастройкаСервера.РесурсПубликацииПакетов, |
232 | | - НастройкаСервера.Порт, |
| 231 | + |
| 232 | + Возврат Новый СерверПакетов(НастройкаСервера.Имя, |
| 233 | + НастройкаСервера.Сервер, |
| 234 | + НастройкаСервера.ПутьНаСервере, |
| 235 | + НастройкаСервера.РесурсПубликацииПакетов, |
| 236 | + НастройкаСервера.Порт, |
233 | 237 | НастройкаСервера.Приоритет) |
234 | 238 |
|
235 | 239 | КонецФункции |
236 | 240 |
|
237 | | -Процедура ОбновитьИндексДоступныхПакетов() Экспорт |
| 241 | +Процедура ОбновитьИндексДоступныхПакетов() |
238 | 242 |
|
239 | 243 | // Учесть версии пакетов |
240 | 244 | ИндексДоступныхПакетов = Новый Соответствие; |
241 | | - |
| 245 | + |
242 | 246 | Лог.Отладка("Обновляю кеш доступных пакетов"); |
243 | | - |
| 247 | + |
244 | 248 | Для каждого ПакетКеша Из ИндексКешаПакетов Цикл |
245 | | - |
| 249 | + |
246 | 250 | ИндексДоступныхПакетов.Вставить(ПакетКеша.Ключ, Истина); |
247 | 251 |
|
248 | 252 | КонецЦикла; |
249 | | - |
| 253 | + |
250 | 254 | Лог.Отладка("Кеш доступных пакетов - ОБНОВЛЕН"); |
251 | 255 |
|
252 | 256 | КонецПроцедуры |
253 | 257 |
|
254 | | -Процедура ОбновитьИндексКешаПакетов() Экспорт |
| 258 | +Процедура ОбновитьИндексыКешейПакетов() |
| 259 | + Если Не ЗначениеЗаполнено(ИндексКешаПакетов) |
| 260 | + Или Не ЗначениеЗаполнено(ИндексДоступныхПакетов)Тогда |
| 261 | + |
| 262 | + ОбновитьИндексКешаПакетов(); |
| 263 | + ОбновитьИндексДоступныхПакетов(); |
| 264 | + КонецЕсли; |
| 265 | +КонецПроцедуры |
| 266 | + |
| 267 | +Процедура ОбновитьИндексКешаПакетов() |
255 | 268 |
|
256 | 269 | ИндексКешаПакетов = Новый Соответствие; |
257 | 270 |
|
258 | 271 | Для каждого ТекущийСерверПакетов Из ИндексСерверовПакетов Цикл |
259 | | - |
| 272 | + |
260 | 273 | ИмяСервера = ТекущийСерверПакетов.Ключ; |
261 | 274 | КлассСервера = ТекущийСерверПакетов.Значение; |
262 | 275 |
|
263 | 276 | Пакеты = КлассСервера.ПолучитьПакеты(); |
264 | | - |
| 277 | + |
265 | 278 | Лог.Отладка("Добавляю в кеш пакеты <%2> сервера: %1", ИмяСервера, Пакеты.Количество()); |
266 | | - |
| 279 | + |
267 | 280 | ДобавитьПакетыВИндексКеша(Пакеты, ИмяСервера); |
268 | 281 |
|
269 | 282 | КонецЦикла; |
270 | | - |
| 283 | + |
271 | 284 | КонецПроцедуры |
272 | 285 |
|
273 | 286 | Процедура ДобавитьПакетыВИндексКеша(Знач ПакетыСервера, Знач ИмяСервера) |
274 | 287 |
|
275 | 288 | Для каждого Пакет Из ПакетыСервера Цикл |
276 | | - |
| 289 | + |
277 | 290 | КлючПакета = Пакет.Ключ; |
278 | 291 | ВерсииПакета = Пакет.Значение; |
279 | 292 | Лог.Отладка("Добавляю пакет: %1 в кеш для сервера %2", КлючПакета, ИмяСервера); |
|
284 | 297 | ИндексКешаПакетов[КлючПакета].Вставить(ИмяСервера, ВерсииПакета) |
285 | 298 |
|
286 | 299 | КонецЦикла; |
287 | | - |
| 300 | + |
288 | 301 | КонецПроцедуры |
289 | 302 |
|
290 | 303 | Лог = Логирование.ПолучитьЛог("oscript.app.opm"); |
0 commit comments