Skip to content

Commit 7ff3aa7

Browse files
committed
Merge branch 'release/v0.7.0'
2 parents 8413b1b + e4ff12e commit 7ff3aa7

13 files changed

+224
-58
lines changed

packagedef

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
Описание.Имя("opm")
3-
.Версия("0.6.1")
3+
.Версия("0.7.0")
44
.ЗависитОт("logos")
55
.ЗависитОт("cmdline")
66
.ЗависитОт("tempfiles")

src/Классы/ДиспетчерКомандПриложения.os

+39-3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
ДобавитьКомандуUpdate(Парсер);
1414
ДобавитьКомандуApp(Парсер);
1515
ДобавитьКомандуConfig(Парсер);
16+
ДобавитьКомандуList(Парсер);
1617
ДобавитьКомандуHelp(Парсер);
1718
КонецПроцедуры
1819

@@ -49,14 +50,14 @@
4950
Процедура ДобавитьКомандуInstall(Знач Парсер)
5051
Команда = Парсер.ОписаниеКоманды("install", "Выполнить установку. Если указано имя пакета, происходит установка из хаба или из файла. В обратном случае устанавливаются зависимости текущего пакета по файлу packagedef.");
5152
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-f", "Указать файл из которого нужно установить пакет");
52-
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ИмяПакета", "Имя пакета в хабе");
53+
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ИмяПакета", "Имя пакета в хабе. Чтобы установить конкретную версию, используйте ИмяПакета@ВерсияПакета");
5354
Парсер.ДобавитьКоманду(Команда);
5455
КонецПроцедуры
5556

5657
Процедура ДобавитьКомандуUpdate(Знач Парсер)
5758
Команда = Парсер.ОписаниеКоманды("update", "Обновить пакет");
5859
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-f", "Указать файл из которого нужно установить пакет");
59-
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ИмяПакета", "Имя пакета в хабе");
60+
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ИмяПакета", "Имя пакета в хабе. Чтобы установить конкретную версию, используйте ИмяПакета@ВерсияПакета");
6061
Парсер.ДобавитьКоманду(Команда);
6162
КонецПроцедуры
6263

@@ -78,6 +79,12 @@
7879
Парсер.ДобавитьКоманду(Команда);
7980
КонецПроцедуры
8081

82+
Процедура ДобавитьКомандуList(Знач Парсер)
83+
Команда = Парсер.ОписаниеКоманды("list", "Вывести список пакетов");
84+
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-q", """Тихий"" режим вывода без лишних сообщений.");
85+
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-remote", "Вывести список пакетов в хабе");
86+
Парсер.ДобавитьКоманду(Команда);
87+
КонецПроцедуры
8188

8289
Процедура ДобавитьКомандуHelp(Знач Парсер) Экспорт
8390
Команда = Парсер.ОписаниеКоманды("help", "Справка по командам");
@@ -103,7 +110,9 @@
103110
ИначеЕсли ПараметрыКоманды.Команда = "app" Тогда
104111
СоздатьСкриптЗапуска(ЗначенияПараметров["ИмяСкрипта"], ЗначенияПараметров["Каталог"], ЗначенияПараметров["-name"]);
105112
ИначеЕсли ПараметрыКоманды.Команда = "config" Тогда
106-
НастройкиПриложения.СохранитьНастройки(ЗначенияПараметров);
113+
НастройкиПриложения.СохранитьНастройки(ЗначенияПараметров);
114+
ИначеЕсли ПараметрыКоманды.Команда = "list" Тогда
115+
ВывестиСписокПакетов(ЗначенияПараметров);
107116
ИначеЕсли ПараметрыКоманды.Команда = "help" Тогда
108117
ВывестиСправку(ЗначенияПараметров);
109118
КонецЕсли;
@@ -201,6 +210,33 @@
201210

202211
КонецПроцедуры
203212

213+
Процедура ВывестиСписокПакетов(Знач ЗначенияПараметров)
214+
215+
ТихийРежим = ЗначенияПараметров["-q"];
216+
217+
Если ЗначенияПараметров["-remote"] Тогда
218+
ТекстСообщения = СтрШаблон("Пакеты в хабе :");
219+
КэшПакетовВХабе = Новый КэшПакетовХаба();
220+
УстановленныеПакеты = КэшПакетовВХабе.ПолучитьПакетыХаба();
221+
Иначе
222+
223+
ПутьККаталогуПакетов = ПолучитьЗначениеСистемнойНастройки("lib.system");
224+
ТекстСообщения = СтрШаблон("Пакеты в системном каталоге библиотек <%1>:", ПутьККаталогуПакетов);
225+
226+
КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов();
227+
УстановленныеПакеты = КэшУстановленныхПакетов.ПолучитьУстановленныеПакеты();
228+
КонецЕсли;
229+
230+
Если НЕ ТихийРежим Тогда
231+
Сообщить(ТекстСообщения);
232+
КонецЕсли;
233+
234+
Для Каждого УстановленныйПакет Из УстановленныеПакеты Цикл
235+
Сообщить(УстановленныйПакет.Ключ);
236+
КонецЦикла;
237+
238+
КонецПроцедуры
239+
204240
Процедура ВывестиСправку(Знач ЗначенияПараметров)
205241
Если ЗначенияПараметров["ИмяКоманды"] = Неопределено Тогда
206242
ВывестиСправкуПоКомандам();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
2+
#Использовать logos
3+
4+
Перем Лог;
5+
6+
Перем ПакетыХаба;
7+
8+
Процедура Обновить() Экспорт
9+
10+
УстановкаПакета = Новый Установкапакета();
11+
Сервер = Константы.СерверУдаленногоХранилища;
12+
Соединение = УстановкаПакета.ИнициализироватьСоединение(Сервер);
13+
Ресурс = Константы.ПутьВХранилище + "list.txt";
14+
Запрос = Новый HTTPЗапрос(Ресурс);
15+
Ответ = Соединение.Получить(Запрос);
16+
17+
Если НЕ Ответ.КодСостояния = 200 Тогда
18+
ТекстИсключения = СтрШаблон("Ошибка подключения к хабу <%1>", Ответ.КодСостояния);
19+
Ответ.Закрыть();
20+
ВызватьИсключение ТекстИсключения;
21+
КонецЕсли;
22+
23+
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
24+
Ответ.Закрыть();
25+
26+
ПакетыХаба = Новый Соответствие;
27+
ТекстовыйДокумент = Новый ТекстовыйДокумент;
28+
ТекстовыйДокумент.УстановитьТекст(ТекстОтвета);
29+
КоличествоПакетовВХабе = ТекстовыйДокумент.КоличествоСтрок();
30+
Для НомерСтроки = 1 По КоличествоПакетовВХабе Цикл
31+
ПакетыХаба.Вставить(СокрЛП(ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки)), Истина);
32+
КонецЦикла;
33+
34+
КонецПроцедуры
35+
36+
Функция ЭтоПакетХаба(Знач ИмяПакета) Экспорт
37+
38+
Возврат ПакетыХаба[ИмяПакета] = Истина;
39+
40+
КонецФункции
41+
42+
Функция ПолучитьПакетыХаба() Экспорт
43+
44+
Возврат ПакетыХаба;
45+
46+
КонецФункции
47+
48+
Процедура Инициализация()
49+
50+
Лог = Логирование.ПолучитьЛог("oscript.app.opm");
51+
//Лог.УстановитьУровень(УровниЛога.Отладка);
52+
53+
Обновить();
54+
55+
КонецПроцедуры
56+
57+
Инициализация();

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

+4
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@
2626

2727
КонецПроцедуры
2828

29+
Функция ПолучитьУстановленныеПакеты() Экспорт
30+
Возврат УстановленныеПакеты;
31+
КонецФункции
32+
2933
Процедура Инициализация()
3034

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

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

+26-29
Original file line numberDiff line numberDiff line change
@@ -109,21 +109,15 @@
109109

110110
Процедура УстановитьПакетИзОблака(Знач ИмяПакета) Экспорт
111111

112-
УстановленныеПакеты = ПолучитьУстановленныеПакеты();
113-
114-
Если УстановленныеПакеты.ПакетУстановлен(ИмяПакета) Тогда
115-
Лог.Ошибка(СтрШаблон("Пакет %1 уже установлен", ИмяПакета));
116-
Иначе
117-
СкачатьИУстановитьПакет(ИмяПакета, Неопределено);
118-
КонецЕсли;
119-
112+
ИмяВерсияПакета = РаботаСВерсиями.РазобратьИмяПакета(ИмяПакета);
113+
СкачатьИУстановитьПакет(ИмяВерсияПакета.ИмяПакета, ИмяВерсияПакета.Версия);
114+
120115
КонецПроцедуры
121116

122117
Процедура ОбновитьПакетИзОблака(Знач ИмяПакета) Экспорт
123-
124-
УстановленныеПакеты = ПолучитьУстановленныеПакеты();
125-
126-
СкачатьИУстановитьПакет(ИмяПакета, Неопределено);
118+
119+
ИмяВерсияПакета = РаботаСВерсиями.РазобратьИмяПакета(ИмяПакета);
120+
СкачатьИУстановитьПакет(ИмяВерсияПакета.ИмяПакета, ИмяВерсияПакета.Версия);
127121

128122
КонецПроцедуры
129123

@@ -173,10 +167,6 @@
173167
Возврат Новый КэшУстановленныхПакетов();
174168
КонецФункции
175169

176-
Функция СерверУдаленногоХранилища()
177-
Возврат "http://hub.oscript.io";
178-
КонецФункции
179-
180170
Процедура СкачатьИУстановитьПакетПоОписанию(Знач ОписаниеПакета)
181171
// TODO: Нужно скачивание конкретной версии по маркеру
182172
СкачатьИУстановитьПакет(ОписаниеПакета.ИмяПакета, Неопределено);
@@ -190,20 +180,10 @@
190180
ФайлПакета = ИмяПакета + ".ospx";
191181
КонецЕсли;
192182

193-
Сервер = СерверУдаленногоХранилища();
194-
Ресурс = "/download/" + ИмяПакета + "/" + ФайлПакета;
183+
Сервер = Константы.СерверУдаленногоХранилища;
184+
Ресурс = Константы.ПутьВХранилище + ИмяПакета + "/" + ФайлПакета;
185+
Соединение = ИнициализироватьСоединение(Сервер);
195186

196-
НастройкиПрокси = НастройкиПриложения.Получить().Прокси;
197-
Если НастройкиПрокси.ИспользоватьПрокси = Истина Тогда
198-
Прокси = Новый ИнтернетПрокси(НастройкиПрокси.ПроксиПоУмолчанию);
199-
Если НастройкиПрокси.ПроксиПоУмолчанию = Ложь Тогда
200-
Прокси.Установить("http",НастройкиПрокси.Сервер,НастройкиПрокси.Порт,НастройкиПрокси.Пользователь,НастройкиПрокси.Пароль,НастройкиПрокси.ИспользоватьАутентификациюОС);
201-
КонецЕсли;
202-
Соединение = Новый HTTPСоединение(Сервер,,,,Прокси);
203-
Иначе
204-
Соединение = Новый HTTPСоединение(Сервер);
205-
КонецЕсли;
206-
207187
Запрос = Новый HTTPЗапрос(Ресурс);
208188
Лог.Информация("Скачиваю файл: " + ФайлПакета);
209189

@@ -229,6 +209,23 @@
229209

230210
КонецПроцедуры
231211

212+
Функция ИнициализироватьСоединение(Сервер) Экспорт
213+
214+
НастройкиПрокси = НастройкиПриложения.Получить().Прокси;
215+
Если НастройкиПрокси.ИспользоватьПрокси = Истина Тогда
216+
Прокси = Новый ИнтернетПрокси(НастройкиПрокси.ПроксиПоУмолчанию);
217+
Если НастройкиПрокси.ПроксиПоУмолчанию = Ложь Тогда
218+
Прокси.Установить("http",НастройкиПрокси.Сервер,НастройкиПрокси.Порт,НастройкиПрокси.Пользователь,НастройкиПрокси.Пароль,НастройкиПрокси.ИспользоватьАутентификациюОС);
219+
КонецЕсли;
220+
Соединение = Новый HTTPСоединение(Сервер,,,,Прокси);
221+
Иначе
222+
Соединение = Новый HTTPСоединение(Сервер);
223+
КонецЕсли;
224+
225+
Возврат Соединение;
226+
227+
КонецФункции
228+
232229
Функция РазобратьМаркерВерсии(Знач МаркерВерсии)
233230

234231
Перем ИндексВерсии;

src/Модули/Константы.os

+7-1
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,16 @@
33
Перем ИмяФайлаСкриптаУстановки Экспорт;
44
Перем ИмяФайлаСодержимогоПакета Экспорт;
55
Перем ИмяФайлаМетаданныхПакета Экспорт;
6+
Перем СерверУдаленногоХранилища Экспорт;
7+
Перем ПутьВХранилище Экспорт;
8+
69

710
///////////////////////////////////////////////////////////////
811

912
ИмяФайлаСпецификацииПакета = "packagedef";
1013
ИмяФайлаСкриптаУстановки = "_install_.os";
1114
ИмяФайлаСодержимогоПакета = "content.zip";
12-
ИмяФайлаМетаданныхПакета = "opm-metadata.xml";
15+
ИмяФайлаМетаданныхПакета = "opm-metadata.xml";
16+
СерверУдаленногоХранилища = "http://hub.oscript.io";
17+
ПутьВХранилище = "/download/";
18+

src/Модули/РаботаСВерсиями.os

+13
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,17 @@
123123

124124
Возврат Компонент;
125125

126+
КонецФункции
127+
128+
Функция РазобратьИмяПакета(знач ИмяПакета) Экспорт
129+
130+
Пакет = Новый Структура("ИмяПакета,Версия","",Неопределено);
131+
ИмяВерсия = СтрРазделить(ИмяПакета,"@");
132+
Пакет.Вставить("ИмяПакета", ИмяВерсия[0]);
133+
Если ИмяВерсия.Количество() > 1 Тогда
134+
Пакет.Вставить("Версия", ИмяВерсия[1]);
135+
КонецЕсли;
136+
137+
Возврат Пакет;
138+
126139
КонецФункции

tests/build-install-test.os

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
#Использовать "../src"
1+
#Использовать asserts
2+
3+
#Использовать "../src"
24

35
Перем юТест;
46

@@ -28,14 +30,14 @@
2830

2931
ФайлПакета = Новый Файл(ОбъединитьПути(КаталогСборки, "test-0.3.1.ospx"));
3032

31-
юТест.ПроверитьИстину(ФайлПакета.Существует(), "Файл пакета должен существовать");
33+
Утверждения.ПроверитьИстину(ФайлПакета.Существует(), "Файл пакета должен существовать");
3234
ЧтениеАрхива = Новый ЧтениеZipФайла(ФайлПакета.ПолноеИмя);
3335

3436
ЭлементСодержимого = ЧтениеАрхива.Элементы.Найти("content.zip");
3537
ЭлементМанифеста = ЧтениеАрхива.Элементы.Найти("opm-metadata.xml");
3638

37-
юТест.ПроверитьНеравенство(Неопределено, ЭлементСодержимого);
38-
юТест.ПроверитьНеравенство(Неопределено, ЭлементМанифеста);
39+
Утверждения.ПроверитьНеравенство(Неопределено, ЭлементСодержимого);
40+
Утверждения.ПроверитьНеравенство(Неопределено, ЭлементМанифеста);
3941

4042
КаталогПроверки = ПолучитьИмяВременногоФайла();//юТест.ИмяВременногоФайла();
4143
СоздатьКаталог(КаталогПроверки);
@@ -47,7 +49,7 @@
4749
ЧтениеАрхива.ИзвлечьВсе(КаталогПроверки);
4850
ЧтениеАрхива.Закрыть();
4951
ФайлИсходника = Новый Файл(ОбъединитьПути(КаталогПроверки, "folder/src.os"));
50-
юТест.ПроверитьИстину(ФайлИсходника.Существует(), "Существует файл в подкаталоге");
52+
Утверждения.ПроверитьИстину(ФайлИсходника.Существует(), "Существует файл в подкаталоге");
5153

5254
Сообщить(ФайлИсходника.ПолноеИмя);
5355

0 commit comments

Comments
 (0)