Skip to content

Commit c4d9533

Browse files
committed
Merge branch 'release/v0.9.0'
2 parents fa6e04a + 1ab9759 commit c4d9533

9 files changed

+219
-102
lines changed

packagedef

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11

2+
Константы_ЛокальнаяВерсия = ЗагрузитьСценарий("src/Модули/Константы.os");
3+
24
Описание.Имя("opm")
3-
.Версия("0.8.0")
5+
.Версия(Константы_ЛокальнаяВерсия.ВерсияПродукта)
6+
.ЗависитОт("fs", "0.3")
47
.ЗависитОт("logos")
58
.ЗависитОт("cmdline")
69
.ЗависитОт("tempfiles")

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

Lines changed: 65 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
ДобавитьКомандуApp(Парсер);
1515
ДобавитьКомандуConfig(Парсер);
1616
ДобавитьКомандуList(Парсер);
17+
ДобавитьКомандуVersion(Парсер);
1718
ДобавитьКомандуHelp(Парсер);
1819
КонецПроцедуры
1920

@@ -51,6 +52,7 @@
5152
Команда = Парсер.ОписаниеКоманды("install", "Выполнить установку. Если указано имя пакета, происходит установка из хаба или из файла. В обратном случае устанавливаются зависимости текущего пакета по файлу packagedef.");
5253
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-all", "Установить все пакеты, зарегистрированные в хабе");
5354
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-f", "Указать файл из которого нужно установить пакет");
55+
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-l", "Установить пакеты в локальный каталог oscript_modules");
5456
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ИмяПакета", "Имя пакета в хабе. Чтобы установить конкретную версию, используйте ИмяПакета@ВерсияПакета");
5557
Парсер.ДобавитьКоманду(Команда);
5658
КонецПроцедуры
@@ -73,6 +75,7 @@
7375

7476
Процедура ДобавитьКомандуConfig(Знач Парсер)
7577
Команда = Парсер.ОписаниеКоманды("config", "Задать пользовательские настройки");
78+
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-winCreateBashLauncher","Создавать sh-скрипт запуска для пакетов приложений в среде Windows");
7679
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "-proxyusedefault","Использовать ПроксиПоУмолчанию (системные настройки)");
7780
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-proxyserver", "Адрес прокси");
7881
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-proxyport", "Порт прокси");
@@ -88,13 +91,22 @@
8891
Парсер.ДобавитьКоманду(Команда);
8992
КонецПроцедуры
9093

94+
Процедура ДобавитьКомандуVersion(Знач Парсер)
95+
Команда = Парсер.ОписаниеКоманды("version", "Вывести версию продукта");
96+
Парсер.ДобавитьКоманду(Команда);
97+
КонецПроцедуры
98+
9199
Процедура ДобавитьКомандуHelp(Знач Парсер) Экспорт
92100
Команда = Парсер.ОписаниеКоманды("help", "Справка по командам");
93101
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ИмяКоманды", "Имя команды по которой надо получить справку");
94102
Парсер.ДобавитьКоманду(Команда);
95103
КонецПроцедуры
96104

97105
Процедура ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт
106+
107+
Если ПараметрыКоманды.Команда <> "version" И ПараметрыКоманды.Команда <> "help" Тогда
108+
ВывестиВерсию();
109+
КонецЕсли;
98110

99111
ЗначенияПараметров = ПараметрыКоманды.ЗначенияПараметров;
100112
Если ПараметрыКоманды.Команда = "build" Тогда
@@ -114,19 +126,28 @@
114126
ИначеЕсли ПараметрыКоманды.Команда = "config" Тогда
115127
НастройкиПриложения.СохранитьНастройки(ЗначенияПараметров);
116128
ИначеЕсли ПараметрыКоманды.Команда = "list" Тогда
117-
ВывестиСписокПакетов(ЗначенияПараметров);
129+
ВывестиСписокПакетов(ЗначенияПараметров);
130+
ИначеЕсли ПараметрыКоманды.Команда = "version" Тогда
131+
ВывестиВерсиюКратко();
118132
ИначеЕсли ПараметрыКоманды.Команда = "help" Тогда
119133
ВывестиСправку(ЗначенияПараметров);
120134
КонецЕсли;
121-
135+
122136
КонецПроцедуры
123137

124138
/////////////////////////////////////////////////////////////////////////
125139
// Реализация команд
126140

127141
Процедура УстановитьПакет(Знач ЗначенияПараметров) Экспорт
128-
142+
129143
Установщик = Новый УстановкаПакета;
144+
145+
Если ЗначенияПараметров["-l"] Тогда
146+
Установщик.УстановитьРежимУстановкиПакетов(РежимУстановкиПакетов.Локально);
147+
Иначе
148+
Установщик.УстановитьРежимУстановкиПакетов(РежимУстановкиПакетов.Глобально);
149+
КонецЕсли;
150+
130151
Если ЗначенияПараметров["-all"] Тогда
131152
Установщик.УстановитьВсеПакетыИзОблака();
132153
ИначеЕсли ЗначенияПараметров["-f"] = Неопределено И ЗначенияПараметров["ИмяПакета"] = Неопределено Тогда
@@ -136,32 +157,32 @@
136157
Иначе
137158
Установщик.УстановитьПакетИзОблака(ЗначенияПараметров["ИмяПакета"]);
138159
КонецЕсли;
139-
160+
140161
КонецПроцедуры
141162

142163
Процедура ВыполнитьСборку(Знач КаталогИсходников, Знач ФайлМанифеста, Знач ВыходнойКаталог) Экспорт
143-
164+
144165
Сборщик = Новый СборщикПакета();
145166
Сборщик.СобратьПакет(КаталогИсходников, ФайлМанифеста, ВыходнойКаталог);
146-
167+
147168
КонецПроцедуры
148169

149170
Процедура ПодготовитьКаталогПроекта(Знач ВыходнойКаталог) Экспорт
150-
171+
151172
Сборщик = Новый СборщикПакета();
152173
Сборщик.ПодготовитьКаталогПроекта(ВыходнойКаталог);
153-
174+
154175
КонецПроцедуры
155176

156177
Процедура ВыполнитьЗадачу(Знач ИмяЗадачи, Знач ПараметрыЗадачи)
157178

158179
ИсполнительЗадач = Новый ИсполнительЗадач();
159180
ИсполнительЗадач.ВыполнитьЗадачу(ИмяЗадачи, ПараметрыЗадачи);
160-
181+
161182
КонецПроцедуры
162183

163184
Процедура ОбновитьПакет(Знач ЗначенияПараметров) Экспорт
164-
185+
165186
Установщик = Новый УстановкаПакета;
166187
Если ЗначенияПараметров["-all"] Тогда
167188
Установщик.ОбновитьУстановленныеПакеты();
@@ -170,14 +191,14 @@
170191
Иначе
171192
Установщик.ОбновитьПакетИзОблака(ЗначенияПараметров["ИмяПакета"]);
172193
КонецЕсли;
173-
194+
174195
КонецПроцедуры
175196

176197
Процедура СоздатьСкриптЗапуска(Знач ИмяСкрипта, Знач Каталог, Знач ИмяФайлаЗапуска) Экспорт
177198
Если ИмяСкрипта = Неопределено Тогда
178199
ВызватьИсключение "Не указано имя файла скрипта";
179200
КонецЕсли;
180-
201+
181202
ФайлСкрипта = Новый Файл(ИмяСкрипта);
182203
ПолноеИмяСкрипта = ФайлСкрипта.ПолноеИмя;
183204
Если Не ФайлСкрипта.Существует() Тогда
@@ -188,15 +209,15 @@
188209
ПолноеИмяСкрипта = ФайлСкрипта.ПолноеИмя;
189210
КонецЕсли;
190211
КонецЕсли;
191-
212+
192213
Если Не ФайлСкрипта.ЭтоФайл() Тогда
193214
ВызватьИсключение "Указанный скрипт """ + ПолноеИмяСкрипта + """ не является файлом";
194215
КонецЕсли;
195-
216+
196217
Если Каталог = Неопределено Тогда
197218
Каталог = КаталогПрограммы();
198219
КонецЕсли;
199-
220+
200221
ФайлКаталога = Новый Файл(Каталог);
201222
Каталог = ФайлКаталога.ПолноеИмя;
202223
Если ФайлКаталога.Существует() Тогда
@@ -209,34 +230,34 @@
209230
ВызватьИсключение "Не удалось создать каталог """ + Каталог + """";
210231
КонецЕсли;
211232
КонецЕсли;
212-
233+
213234
ИмяСкриптаЗапуска = ?(ИмяФайлаЗапуска = Неопределено, ФайлСкрипта.ИмяБезРасширения, ИмяФайлаЗапуска);
214235
Установщик = Новый УстановкаПакета;
215236
Установщик.СоздатьСкриптЗапуска(ИмяСкриптаЗапуска, ПолноеИмяСкрипта, Каталог);
216-
237+
217238
КонецПроцедуры
218239

219240
Процедура ВывестиСписокПакетов(Знач ЗначенияПараметров)
220241

221242
ТихийРежим = ЗначенияПараметров["-q"];
222-
243+
223244
Если ЗначенияПараметров["-remote"] Тогда
224245
ТекстСообщения = СтрШаблон("Пакеты в хабе:");
225246
КэшПакетовВХабе = Новый КэшПакетовХаба();
226247
УстановленныеПакеты = КэшПакетовВХабе.ПолучитьПакетыХаба();
227248
Иначе
228-
249+
229250
ПутьККаталогуПакетов = ПолучитьЗначениеСистемнойНастройки("lib.system");
230251
ТекстСообщения = СтрШаблон("Пакеты в системном каталоге библиотек <%1>:", ПутьККаталогуПакетов);
231-
252+
232253
КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов();
233254
УстановленныеПакеты = КэшУстановленныхПакетов.ПолучитьУстановленныеПакеты();
234255
КонецЕсли;
235-
256+
236257
Если НЕ ТихийРежим Тогда
237-
Сообщить(ТекстСообщения);
258+
Сообщить(ТекстСообщения);
238259
КонецЕсли;
239-
260+
240261
Для Каждого УстановленныйПакет Из УстановленныеПакеты Цикл
241262
СтрокаСообщения = УстановленныйПакет.Ключ;
242263
Если ТипЗнч(УстановленныйПакет.Значение) = Тип("ОписаниеПакета") Тогда
@@ -248,6 +269,15 @@
248269

249270
КонецПроцедуры
250271

272+
Процедура ВывестиВерсиюКратко()
273+
Сообщить(Константы.ВерсияПродукта);
274+
КонецПроцедуры
275+
276+
Процедура ВывестиВерсию()
277+
Сообщить("OneScript Package Manager v" + Константы.ВерсияПродукта);
278+
Сообщить("");
279+
КонецПроцедуры
280+
251281
Процедура ВывестиСправку(Знач ЗначенияПараметров)
252282
Если ЗначенияПараметров["ИмяКоманды"] = Неопределено Тогда
253283
ВывестиСправкуПоКомандам();
@@ -257,14 +287,14 @@
257287
КонецПроцедуры
258288

259289
Процедура ВывестиСправкуПоКомандам() Экспорт
260-
290+
261291
Парсер = Новый ПарсерАргументовКоманднойСтроки;
262292
ДобавитьОписанияКоманд(Парсер);
263-
293+
264294
ВозможныеКоманды = Парсер.СправкаВозможныеКоманды();
265-
Сообщить("OneScript Package Manager
266-
|Возможные команды:");
267-
295+
ВывестиВерсию();
296+
Сообщить("Возможные команды:");
297+
268298
МаксШирина = 0;
269299
Поле = " ";
270300
Для Каждого Команда Из ВозможныеКоманды Цикл
@@ -273,27 +303,27 @@
273303
МаксШирина = ТекШирина;
274304
КонецЕсли;
275305
КонецЦикла;
276-
306+
277307
Для Каждого Команда Из ВозможныеКоманды Цикл
278308
Сообщить(" " + Лев(Команда.Команда + Поле, МаксШирина + 2) + "- " + Команда.Пояснение);
279309
КонецЦикла;
280-
310+
281311
Сообщить("Наберите opm help <команда>, чтобы вывести справку по команде");
282-
312+
283313
КонецПроцедуры
284314

285315
Процедура ВывестиСправкуПоКоманде(Знач ИмяКоманды)
286-
316+
287317
Парсер = Новый ПарсерАргументовКоманднойСтроки;
288318
ДобавитьОписанияКоманд(Парсер);
289-
319+
290320
ВозможныеКоманды = Парсер.СправкаВозможныеКоманды();
291321
ОписаниеКоманды = ВозможныеКоманды.Найти(ИмяКоманды, "Команда");
292322
Если ОписаниеКоманды = Неопределено Тогда
293323
Сообщить("Команда отсуствует: " + ИмяКоманды);
294324
Возврат;
295325
КонецЕсли;
296-
326+
297327
Сообщить("" + ОписаниеКоманды.Команда + " - " + ОписаниеКоманды.Пояснение);
298328
Сообщить("Параметры:");
299329
Для Каждого СтрПараметр Из ОписаниеКоманды.Параметры Цикл
@@ -303,7 +333,7 @@
303333
Сообщить(СтрШаблон(" %1 - %2", СтрПараметр.Имя, СтрПараметр.Пояснение));
304334
КонецЕсли;
305335
КонецЦикла;
306-
336+
307337
КонецПроцедуры
308338

309339
/////////////////////////////////////////////////////////////////////

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

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,30 @@
55

66
Перем УстановленныеПакеты;
77

8-
Функция ПакетУстановлен(Знач ИмяПакета) Экспорт
9-
10-
Возврат УстановленныеПакеты[ИмяПакета] = Истина;
11-
8+
Функция ПакетУстановлен(Знач ОписаниеЗависимости) Экспорт
9+
10+
ПакетУстановлен = УстановленныеПакеты.Получить(ОписаниеЗависимости.ИмяПакета) <> Неопределено;
11+
12+
КаталогБиблиотек = ОбъединитьПути(КаталогПрограммы(), ПолучитьЗначениеСистемнойНастройки("lib.system"));
13+
ПутьКФайлуМетаданных = ОбъединитьПути(
14+
КаталогБиблиотек,
15+
ОписаниеЗависимости.ИмяПакета,
16+
Константы.ИмяФайлаМетаданныхПакета
17+
);
18+
ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных);
19+
Если ФайлМетаданных.Существует() Тогда
20+
МетаОписаниеПакета = ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных);
21+
УстановленнаяВерсия = МетаОписаниеПакета.Свойства().Версия;
22+
Иначе
23+
// @deprecated
24+
УстановленнаяВерсия = 0;
25+
КонецЕсли;
26+
27+
УстановленаКорректнаяВерсия = ОписаниеЗависимости.МинимальнаяВерсия = Неопределено
28+
ИЛИ РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия) = 1;
29+
30+
Возврат ПакетУстановлен И УстановленаКорректнаяВерсия;
31+
1232
КонецФункции
1333

1434
Процедура Обновить() Экспорт
@@ -31,7 +51,7 @@
3151
КонецФункции
3252

3353
Процедура Инициализация()
34-
54+
3555
Лог = Логирование.ПолучитьЛог("oscript.app.opm");
3656
//Лог.УстановитьУровень(УровниЛога.Отладка);
3757

@@ -43,22 +63,34 @@
4363

4464
ПутьКФайлуМетаданных = ОбъединитьПути(ФайлКаталога.ПолноеИмя, Константы.ИмяФайлаМетаданныхПакета);
4565
ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных);
46-
Если ФайлМетаданных.Существует() Тогда
47-
66+
Если ФайлМетаданных.Существует() Тогда
67+
МетаОписаниеПакета = ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных);
68+
Иначе
69+
// @deprecated
70+
МетаОписаниеПакета = Истина;
71+
КонецЕсли;
72+
73+
УстановленныеПакеты.Вставить(ФайлКаталога.Имя, МетаОписаниеПакета);
74+
75+
КонецПроцедуры
76+
77+
Функция ПрочитатьМетаданныеПакета(Знач ПутьКФайлуМетаданных)
78+
79+
Перем Метаданные;
80+
Попытка
4881
Чтение = Новый ЧтениеXML;
4982
Чтение.ОткрытьФайл(ПутьКФайлуМетаданных);
50-
Лог.Отладка("XML загружен");
5183
Сериализатор = Новый СериализацияМетаданныхПакета;
52-
МетаОписаниеПакета = Сериализатор.ПрочитатьXML(Чтение);
84+
Метаданные = Сериализатор.ПрочитатьXML(Чтение);
5385

5486
Чтение.Закрыть();
87+
Исключение
88+
Чтение.Закрыть();
89+
ВызватьИсключение;
90+
КонецПопытки;
5591

56-
Иначе
57-
МетаОписаниеПакета = Истина;
58-
КонецЕсли;
59-
60-
УстановленныеПакеты.Вставить(ФайлКаталога.Имя, МетаОписаниеПакета);
92+
Возврат Метаданные;
6193

62-
КонецПроцедуры
94+
КонецФункции
6395

6496
Инициализация();

0 commit comments

Comments
 (0)