1+ #Использовать logos
2+
3+ Перем ДополнительныеРепо ;
4+ Перем Лог ;
5+ Перем ПакетыХаба ;
6+
7+ Функция ПрочитатьФайлСпискаПакетов (ПакетыХаба , Текст , Репо )
8+ ТекстовыйДокумент = Новый ТекстовыйДокумент;
9+ ТекстовыйДокумент.УстановитьТекст(Текст);
10+ КоличествоПакетовВХабе = ТекстовыйДокумент.КоличествоСтрок();
11+ Для НомерСтроки = 1 По КоличествоПакетовВХабе Цикл
12+ ИмяПакета = СокрЛП (ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки));
13+ Если ПакетыХаба[ИмяПакета] = Неопределено Тогда
14+ ПакетыХаба.Вставить(ИмяПакета, Новый Массив);
15+ КонецЕсли ;
16+ ПакетыХаба[ИмяПакета].Добавить(Репо);
17+ КонецЦикла ;
18+ КонецФункции
19+
20+ Функция ПолучитьСписокПакетов (Репозиторий , Ресурс )
21+
22+ Ответ = Репозиторий.ПолучитьРесурс(Ресурс);
23+
24+ Если Ответ = Неопределено Или Ответ.КодСостояния <> 200 Тогда
25+ ТекстИсключения = СтрШаблон ("Ошибка подключения к зеркалу " );
26+ ВызватьИсключение ТекстИсключения;
27+ КонецЕсли ;
28+
29+ ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
30+ Ответ.Закрыть();
31+
32+ Возврат ТекстОтвета;
33+
34+ КонецФункции
35+
36+ Функция ПолучитьПакеты () Экспорт
37+
38+ ПакетыХаба = Новый Соответствие;
39+
40+ ТекстОтвета = "" ;
41+ Попытка
42+ ТекстОтвета = ПолучитьСписокПакетов(Зеркала, "list.txt" );
43+ Исключение
44+ Лог.Предупреждение(
45+ СтрШаблон ("Ошбика получения списка пакетов с хаба %1 по причине %2" ,
46+ "default" , ОписаниеОшибки ()
47+ )
48+ );
49+ КонецПопытки ;
50+
51+ ПрочитатьФайлСпискаПакетов(ПакетыХаба, ТекстОтвета, "default" );
52+ Для Каждого Репо из ДополнительныеРепо Цикл
53+ ТекстОтвета = "" ;
54+ Попытка
55+ ТекстОтвета = ПолучитьСписокПакетов(Репо.Значение, "list.txt" );
56+ Исключение
57+ Лог.Предупреждение(
58+ СтрШаблон ("Ошбика получения списка пакетов с хаба %1 по причине %2" ,
59+ Репо.Ключ, ОписаниеОшибки ()
60+ )
61+ );
62+ КонецПопытки ;
63+ ПрочитатьФайлСпискаПакетов(ПакетыХаба, ТекстОтвета, Репо.Ключ);
64+ КонецЦикла ;
65+
66+ Возврат ПакетыХаба;
67+
68+ КонецФункции
69+
70+ // ИмяРесурса - имя файла относительно "Сервер/ПутьВХранилище"
71+ // Возвращает HttpОтвет или Неопределено, если ни один сервер не вернул ответ.
72+ Функция ПолучитьРесурс (Знач ИмяРесурса ) Экспорт
73+
74+ РесурсУспешноПолучен = Ложь ;
75+
76+ Если ДополнительныеРепо = Неопределено Тогда
77+ Инициализация();
78+ КонецЕсли ;
79+
80+ СерверУдаленногоХранилища = "" ;
81+ Ответ = Зеркала.ПолучитьРесурс(ИмяРесурса);
82+ Если Ответ = Неопределено ИЛИ Ответ.КодСостояния <> 200 Тогда
83+ Для каждого Репо из ДополнительныеРепо Цикл
84+ Ответ = Репо.Значение.ПолучитьРесурс(ИмяРесурса);
85+
86+ Если Ответ = Неопределено Тогда
87+ Продолжить ;
88+ КонецЕсли ;
89+
90+ Если Ответ.КодСостояния = 200 Тогда
91+ РесурсУспешноПолучен = Истина ;
92+ СерверУдаленногоХранилища = Репо.Значение.СерверУдаленногоХранилища;
93+ Прервать ;
94+ КонецЕсли ;
95+ КонецЦикла ;
96+
97+ Иначе
98+ СерверУдаленногоХранилища = Зеркала.ПодключенноеЗеркало.СерверУдаленногоХранилища;
99+ РесурсУспешноПолучен = Истина ;
100+ КонецЕсли ;
101+
102+ Если РесурсУспешноПолучен Тогда
103+
104+ ТекстСообщения = СтрШаблон ("Ресурс %1 успешно получен с %2" , ИмяРесурса, СерверУдаленногоХранилища);
105+ Лог.Отладка(ТекстСообщения);
106+
107+ Возврат Ответ;
108+
109+ КонецЕсли ;
110+
111+ Возврат Неопределено ;
112+
113+ КонецФункции
114+
115+ Процедура Добавить (Знач Зеркало ) Экспорт
116+ Зеркала.Добавить(Зеркало);
117+ КонецПроцедуры
118+
119+ Процедура Инициализация ()
120+
121+ Лог = Логирование.ПолучитьЛог("oscript.app.opm" );
122+ ДополнительныеРепо = Новый Соответствие;
123+ НастройкиПриложения = НастройкиПриложенияOpm.Получить();
124+
125+ Если НЕ НастройкиПриложения.Свойство("СервераПакетов" ) Тогда
126+ Возврат ;
127+ КонецЕсли ;
128+
129+ ДополнительныеРепоНастройки = НастройкиПриложения["СервераПакетов" ];
130+ Если ТипЗнч (ДополнительныеРепоНастройки) <> Тип ("Массив" ) Тогда
131+ Лог.Предупреждение(
132+ "Установленна настройка СервераПакетов, но не массив, а "
133+ + ТипЗнч (ДополнительныеРепоНастройки));
134+ Возврат ;
135+ КонецЕсли ;
136+
137+ Для каждого Репо из ДополнительныеРепоНастройки Цикл
138+
139+ РепоЗеркало = Новый ("Зеркало" );
140+ Попытка
141+ РепоЗеркало.СерверУдаленногоХранилища = Репо.Сервер;
142+ РепоЗеркало.ПутьВХранилище = ? (Репо.Свойство("ПутьНаСервере" ), Репо.ПутьНаСервере, "/" );
143+ РепоЗеркало.Порт = ? (Репо.Свойство("Порт" ), Репо.Порт, 80 );
144+ ДополнительныеРепо.Вставить(Репо.Имя, РепоЗеркало);
145+ Исключение
146+ Лог.Ошибка("Ошибка чтение настройки репо " + Репо.Ключ + ОписаниеОшибки ());
147+ КонецПопытки ;
148+ КонецЦикла ;
149+
150+ КонецПроцедуры
151+
152+ Инициализация();
0 commit comments