Skip to content

Commit c5d6b11

Browse files
authored
Merge pull request #87 from pumbaEO/feature/addlocalrepo
Добавленна настройка локальных хабов для загрузки пакетов
2 parents b637ec7 + 2ecf778 commit c5d6b11

File tree

9 files changed

+286
-24
lines changed

9 files changed

+286
-24
lines changed

src/Классы/Зеркало.os

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
Перем СерверУдаленногоХранилища Экспорт;
22
Перем ПутьВХранилище Экспорт;
3+
Перем Порт Экспорт;
34

45
Перем Соединение;
56

@@ -9,15 +10,16 @@
910
Возврат Соединение;
1011
КонецЕсли;
1112

13+
Порт = ?(Порт = Неопределено, 80, Порт);
1214
НастройкиПрокси = НастройкиПриложенияOpm.Получить().Прокси;
1315
Если НастройкиПрокси.ИспользоватьПрокси Тогда
1416
Прокси = Новый ИнтернетПрокси(НастройкиПрокси.ПроксиПоУмолчанию);
1517
Если Не НастройкиПрокси.ПроксиПоУмолчанию Тогда
1618
Прокси.Установить("http",НастройкиПрокси.Сервер,НастройкиПрокси.Порт,НастройкиПрокси.Пользователь,НастройкиПрокси.Пароль,НастройкиПрокси.ИспользоватьАутентификациюОС);
1719
КонецЕсли;
18-
Соединение = Новый HTTPСоединение(СерверУдаленногоХранилища,,,,Прокси);
20+
Соединение = Новый HTTPСоединение(СерверУдаленногоХранилища, Порт,,,Прокси);
1921
Иначе
20-
Соединение = Новый HTTPСоединение(СерверУдаленногоХранилища);
22+
Соединение = Новый HTTPСоединение(СерверУдаленногоХранилища, Порт);
2123
КонецЕсли;
2224

2325
Возврат Соединение;

src/Классы/КэшПакетовХаба.os

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,14 @@
77

88
Процедура Обновить() Экспорт
99

10+
ПакетыХаба = Новый Соответствие;
1011
УстановкаПакета = Новый Установкапакета();
11-
Ответ = Зеркала.ПолучитьРесурс("list.txt");
12-
13-
Если Ответ = Неопределено Тогда
14-
ТекстИсключения = СтрШаблон("Ошибка подключения");
15-
ВызватьИсключение ТекстИсключения;
16-
КонецЕсли;
12+
Репо = Новый Репо();
13+
СоответствиеПакетов = Репо.ПолучитьПакеты();
14+
Для каждого КлючЗначение из СоответствиеПакетов Цикл
15+
ПакетыХаба.Вставить(КлючЗначение.Ключ, Истина);
16+
КонецЦикла;
1717

18-
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
19-
Ответ.Закрыть();
20-
21-
ПакетыХаба = Новый Соответствие;
22-
ТекстовыйДокумент = Новый ТекстовыйДокумент;
23-
ТекстовыйДокумент.УстановитьТекст(ТекстОтвета);
24-
КоличествоПакетовВХабе = ТекстовыйДокумент.КоличествоСтрок();
25-
Для НомерСтроки = 1 По КоличествоПакетовВХабе Цикл
26-
ПакетыХаба.Вставить(СокрЛП(ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки)), Истина);
27-
КонецЦикла;
28-
2918
КонецПроцедуры
3019

3120
Функция ЭтоПакетХаба(Знач ИмяПакета) Экспорт

src/Классы/Репо.os

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
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+
Инициализация();

src/Классы/УстановкаПакета.os

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@
279279

280280
Лог.Информация("Скачиваю файл: " + ФайлПакета);
281281

282-
Ответ = Зеркала.ПолучитьРесурс(ИмяАрхива + "/" + ФайлПакета);
282+
Репо = Новый Репо();
283+
Ответ = Репо.ПолучитьРесурс(ИмяАрхива + "/" + ФайлПакета);
283284
Если Не Ответ = Неопределено Тогда
284285
Лог.Отладка("Файл получен");
285286
ВремФайл = ОбъединитьПути(КаталогВременныхФайлов(), ФайлПакета);

src/Модули/Зеркала.os

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#Использовать logos
22

3-
Перем ПодключенноеЗеркало;
3+
Перем ПодключенноеЗеркало Экспорт;
44
Перем Зеркала;
55
Перем Лог;
66

src/Модули/НастройкиПриложенияOpm.os

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,25 @@
111111
НастройкиПроксиПоУмолчанию = НастройкиПроксиПроксиПоУмолчанию();
112112
Рез.Вставить("Прокси", НастройкиПроксиПоУмолчанию);
113113
Рез.Вставить("СоздаватьShСкриптЗапуска", Ложь);
114+
НастройкиПоУмолчаниюРепо = Новый Массив;
115+
НастройкиПоУмолчаниюРепо.Добавить(НастройкиСервераПакетовПоУмолчанию());
116+
117+
Рез.Вставить("СервераПакетов", НастройкиПоУмолчаниюРепо);
114118
Возврат Рез;
115119
КонецФункции
116120

121+
Функция НастройкиСервераПакетовПоУмолчанию()
122+
123+
Результат = Новый Структура;
124+
Результат.Вставить("Имя", "defaultrepo");
125+
Результат.Вставить("Сервер", КонстантыOpm.СерверУдаленногоХранилища);
126+
Результат.Вставить("ПутьНаСервере", КонстантыOpm.ПутьВХранилище);
127+
Результат.Вставить("Порт", 80);
128+
129+
Возврат Результат;
130+
131+
КонецФункции //
132+
117133
Функция НастройкиПроксиПроксиПоУмолчанию()
118134

119135
СтруктураПрокси = Новый Структура();
@@ -154,6 +170,7 @@
154170
ЗаполнитьНастройкиИзПараметров(Параметры);
155171
Текст = СформироватьТекстНастроек(мНастройки);
156172
СохранитьФайл(Текст,мПутьФайлаНастроек);
173+
//Сообщить(мПутьФайлаНастроек);
157174
КонецПроцедуры
158175

159176
Функция СформироватьТекстНастроек(Знач Настройки)
@@ -186,7 +203,7 @@
186203
мНастройки.СоздаватьShСкриптЗапуска,
187204
Булево(ЗначенияПараметров["-winCreateBashLauncher"])
188205
);
189-
206+
190207
КонецПроцедуры
191208
//------------
192209

src/Модули/РаботаСОписаниемПакета.os

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
Файл_Манифест = Новый Файл(ПутьКМанифесту);
88
Если Файл_Манифест.Существует() Тогда
99
Контекст = Новый Структура("Описание", Описание);
10-
ЗагрузитьСценарий(ПутьКМанифесту, Контекст);
11-
КонецЕсли;
10+
ЗагрузитьСценарий(ПутьКМанифесту, Контекст);
11+
КонецЕсли;
1212

1313
Возврат Описание;
1414

tests/download.os

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#Использовать asserts
2+
#Использовать fs
3+
#Использовать tempfiles
4+
5+
#Использовать "../src"
6+
7+
8+
Перем юТест;
9+
Перем мВременныеФайлы;
10+
Перем Проц;
11+
Перем КаталогСборки;
12+
13+
Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт
14+
15+
юТест = Тестирование;
16+
17+
ИменаТестов = Новый Массив;
18+
СИ = Новый СистемнаяИнформация();
19+
Если НЕ (Найти(СИ.ВерсияОС, "Windows") > 0) Тогда
20+
ИменаТестов.Добавить("ТестДолжен_СкачатьПакетыСЛокальногоХранилища");
21+
КонецЕсли;
22+
23+
Возврат ИменаТестов;
24+
25+
КонецФункции
26+
27+
Процедура ПередЗапускомТеста() Экспорт
28+
КаталогСборки = юТест.ИмяВременногоФайла();
29+
СоздатьКаталог(КаталогСборки);
30+
СтрокаЗапуска = "python3 -m http.server";
31+
Проц = СоздатьПроцесс(СтрокаЗапуска, КаталогСборки);
32+
Проц.Запустить();
33+
Приостановить(1000)
34+
КонецПроцедуры
35+
36+
Процедура ПослеЗапускаТеста() Экспорт
37+
//мВременныеФайлы.Удалить();
38+
ПутьККаталогу = ОбъединитьПути(ТекущийКаталог(), "oscript_modules", "test");
39+
Если ФС.КаталогСуществует(ПутьККаталогу) Тогда
40+
УдалитьФайлы(ПутьККаталогу);
41+
КонецЕсли;
42+
Попытка
43+
Проц.Завершить();
44+
Исключение
45+
КонецПопытки;
46+
КонецПроцедуры
47+
48+
Процедура ТестДолжен_СкачатьПакетыСЛокальногоХранилища() Экспорт
49+
50+
Файл = Новый Файл(ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "opm-servers.cfg"));
51+
НастройкиПриложенияOpm.УстановитьФайлНастроек(Файл.ПолноеИмя);
52+
Сборщик = Новый СборщикПакета;
53+
54+
Сборщик.СобратьПакет(ОбъединитьПути(ТекущийСценарий().Каталог, "testpackage", "testpackage-0.3.1"), Неопределено, КаталогСборки);
55+
56+
ФайлПакета = Новый Файл(ОбъединитьПути(КаталогСборки, "test-0.3.1.ospx"));
57+
Утверждения.ПроверитьИстину(ФайлПакета.Существует(), "Файл пакета должен существовать");
58+
СоздатьКаталог(ОбъединитьПути(КаталогСборки,"test"));
59+
КопироватьФайл(ФайлПакета.ПолноеИмя, ОбъединитьПути(КаталогСборки,"test/test-0.3.1.ospx"));
60+
КопироватьФайл(ФайлПакета.ПолноеИмя, ОбъединитьПути(КаталогСборки, "test/test.ospx"));
61+
62+
63+
Запись = Новый ЗаписьТекста(ОбъединитьПути(КаталогСборки,"list.txt"));
64+
Запись.ЗаписатьСтроку("test");
65+
Запись.Закрыть();
66+
67+
Кэш = Новый КэшПакетовХаба;
68+
Пакеты = Кэш.ПолучитьПакетыХаба();
69+
70+
Утверждения.ПроверитьЗаполненность(Пакеты.Получить("test"), "Пакета test не существует на внутреннем хабе.");
71+
72+
Установщик = Новый УстановкаПакета;
73+
Установщик.УстановитьРежимУстановкиПакетов(РежимУстановкиПакетов.Локально);
74+
75+
Установщик.УстановитьПакетИзОблака("test");
76+
77+
КэшЛокальный = Новый КэшУстановленныхПакетов;
78+
Пакеты = КэшЛокальный.ПолучитьУстановленныеПакеты();
79+
ПутьККаталогу = ОбъединитьПути(ТекущийКаталог(), "oscript_modules", "test");
80+
81+
Утверждения.ПроверитьИстину(Новый Файл(ПутьККаталогу).Существует(), "Пакет не существует на локальной машине.");
82+
83+
84+
КонецПроцедуры

tests/fixtures/opm-servers.cfg

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"СоздаватьShСкриптЗапуска": false,
3+
"СервераПакетов": [
4+
{
5+
"Имя":"defaultrepo",
6+
"Сервер": "http://hub.oscript.io",
7+
"Порт": 80,
8+
"ПутьНаСервере":"/download/"
9+
},
10+
{
11+
"Имя":"mylocalhost",
12+
"Сервер": "http://localhost",
13+
"Порт": 8000,
14+
"ПутьНаСервере":"/"
15+
}
16+
]
17+
}

0 commit comments

Comments
 (0)