Skip to content

Commit 2bd63a3

Browse files
authored
Merge pull request #33 from oscript-library/fix/install-deps
Исправлена проверка установленного пакета. Добавлена проверка необходимости обновления версии установленного пакета.
2 parents 890715e + cc8fecb commit 2bd63a3

File tree

4 files changed

+57
-20
lines changed

4 files changed

+57
-20
lines changed

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
Инициализация();

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,14 +179,14 @@
179179

180180
Для Каждого Зависимость Из Зависимости Цикл
181181
Лог.Информация("Устанавливаю зависимость: " + Зависимость.ИмяПакета);
182-
183-
Если Не УстановленныеПакеты.ПакетУстановлен(Зависимость.ИмяПакета) Тогда
182+
183+
Если Не УстановленныеПакеты.ПакетУстановлен(Зависимость) Тогда
184184
// скачать
185185
// определить зависимости и так по кругу
186186
СкачатьИУстановитьПакетПоОписанию(Зависимость);
187187
УстановленныеПакеты.Обновить();
188188
Иначе
189-
Лог.Отладка("" + Зависимость.ИмяПакета + " установлен. Пропускаем");
189+
Лог.Информация("" + Зависимость.ИмяПакета + " уже установлен. Пропускаем.");
190190
// считаем, что версия всегда подходит
191191
КонецЕсли;
192192

@@ -200,7 +200,7 @@
200200

201201
Процедура СкачатьИУстановитьПакетПоОписанию(Знач ОписаниеПакета)
202202
// TODO: Нужно скачивание конкретной версии по маркеру
203-
СкачатьИУстановитьПакет(ОписаниеПакета.ИмяПакета, Неопределено);
203+
СкачатьИУстановитьПакет(ОписаниеПакета.ИмяПакета, ОписаниеПакета.МинимальнаяВерсия);
204204
КонецПроцедуры
205205

206206
Процедура СкачатьИУстановитьПакет(Знач ИмяПакета, Знач ВерсияПакета)

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@
7777
Если КомпонентЭтаВерсия <> Неопределено и КомпонентБольшеЧем = Неопределено Тогда
7878
Возврат 1;
7979
КонецЕсли;
80+
81+
Если КомпонентЭтаВерсия = Неопределено И КомпонентБольшеЧем = Неопределено Тогда
82+
Возврат 0;
83+
КонецЕсли;
8084

8185
Попытка
8286
ЧислоЭтаВерсия = Число(КомпонентЭтаВерсия);

tests/pkg-cache.os

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
Утверждения.ПроверитьЛожь(НайденныйКаталог = Неопределено, "в библиотеке должен быть хоть один пакет");
3333

3434
КэшПакетов = Новый КэшУстановленныхПакетов();
35-
Утверждения.ПроверитьИстину(КэшПакетов.ПакетУстановлен(Каталог.Имя), "Должен быть найден пакет " + Каталог.Имя);
35+
ОписаниеЗависимости = Новый Структура("ИмяПакета, МинимальнаяВерсия, МаксимальнаяВерсия", Каталог.Имя);
36+
Утверждения.ПроверитьИстину(КэшПакетов.ПакетУстановлен(ОписаниеЗависимости), "Должен быть найден пакет " + Каталог.Имя);
3637

3738
КонецПроцедуры

0 commit comments

Comments
 (0)