Skip to content

Commit 995faf5

Browse files
committed
Поддержка установки версий SNAPSHOT из packagedef
1 parent 438c4a5 commit 995faf5

File tree

1 file changed

+182
-175
lines changed

1 file changed

+182
-175
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,175 +1,182 @@
1-
2-
#Использовать fs
3-
#Использовать logos
4-
5-
Перем Лог;
6-
7-
// Массив каталогов в порядке возрастания приоритета
8-
Перем МассивКаталоговПоискаБиблиотек;
9-
10-
Перем УстановленныеПакеты;
11-
12-
Функция ПакетУстановлен(Знач ОписаниеЗависимости, Знач КаталогПоискаБиблиотек = "") Экспорт
13-
14-
Перем УстановленныеПакеты;
15-
УстановленныеПакеты = ПолучитьУстановленныеПакеты();
16-
17-
ДанныеПакета = УстановленныеПакеты.Получить(ОписаниеЗависимости.ИмяПакета);
18-
ПакетУстановлен = ДанныеПакета <> Неопределено;
19-
Если ПакетУстановлен И НЕ ПустаяСтрока(КаталогПоискаБиблиотек) Тогда
20-
КаталогБиблиотекПакета = Новый Файл(ОбъединитьПути(ДанныеПакета.КаталогПакета, "..")).ПолноеИмя;
21-
ПакетУстановлен = КаталогБиблиотекПакета = КаталогПоискаБиблиотек;
22-
КонецЕсли;
23-
24-
ПутьКФайлуМетаданных = ПолучитьПутьКФайлуМетаданныхБиблиотеки(ОписаниеЗависимости.ИмяПакета);
25-
26-
ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных);
27-
Если ФайлМетаданных.Существует() Тогда
28-
МетаОписаниеПакета = ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных);
29-
УстановленнаяВерсия = МетаОписаниеПакета.Свойства().Версия;
30-
Иначе
31-
// @deprecated
32-
УстановленнаяВерсия = 0;
33-
КонецЕсли;
34-
Лог.Отладка("ПакетУстановлен: Перед вызовом СравнитьВерсии(ЭтаВерсия = <%1>, БольшеЧемВерсия = <%2>)", УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия);
35-
36-
УстановленаКорректнаяВерсия = ОписаниеЗависимости.МинимальнаяВерсия = Неопределено
37-
ИЛИ РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия) >= 0;
38-
39-
Лог.Отладка("Пакет установлен: " + ПакетУстановлен);
40-
Лог.Отладка("Установлена корректная версия: " + УстановленаКорректнаяВерсия);
41-
Возврат ПакетУстановлен И УстановленаКорректнаяВерсия;
42-
43-
КонецФункции
44-
45-
Процедура Обновить() Экспорт
46-
47-
УстановленныеПакеты = Новый Соответствие;
48-
Для Каждого КаталогБиблиотек Из МассивКаталоговПоискаБиблиотек Цикл
49-
50-
Лог.Отладка("КаталогБиблиотек " + КаталогБиблиотек);
51-
52-
НайденныеФайлы = НайтиФайлы(КаталогБиблиотек, ПолучитьМаскуВсеФайлы());
53-
Для Каждого ФайлКаталога Из НайденныеФайлы Цикл
54-
Если ФайлКаталога.ЭтоКаталог() Тогда
55-
56-
// ДобавитьУстановленныйПакет заменит уже добавленный пакет при совпадении имён
57-
// Соответственно, более поздние каталоги будут иметь приоритет
58-
ДобавитьУстановленныйПакет(ФайлКаталога);
59-
60-
КонецЕсли;
61-
КонецЦикла;
62-
63-
КонецЦикла;
64-
65-
КонецПроцедуры
66-
67-
Функция ПолучитьУстановленныеПакеты() Экспорт
68-
69-
Если УстановленныеПакеты = Неопределено Тогда
70-
Обновить();
71-
КонецЕсли;
72-
73-
Возврат УстановленныеПакеты;
74-
75-
КонецФункции
76-
77-
Процедура Инициализация()
78-
79-
Лог = Логирование.ПолучитьЛог("oscript.app.opm");
80-
МассивКаталоговПоискаБиблиотек = Новый Массив;
81-
82-
КаталогСистемныхБиблиотек = ОбъединитьПути(
83-
КаталогПрограммы(),
84-
ПолучитьЗначениеСистемнойНастройки("lib.system")
85-
);
86-
87-
МассивКаталоговПоискаБиблиотек.Добавить(КаталогСистемныхБиблиотек);
88-
ДобавитьКаталогБиблиотек("./" + КонстантыOpm.ЛокальныйКаталогУстановкиПакетов);
89-
90-
КонецПроцедуры
91-
92-
// Добавляет каталог в список, по которому выполняется поиск библиотек
93-
Процедура ДобавитьКаталогБиблиотек(Знач Каталог) Экспорт
94-
95-
МассивКаталоговПоискаБиблиотек.Добавить(Каталог);
96-
97-
КонецПроцедуры
98-
99-
Процедура ДобавитьУстановленныйПакет(Знач ФайлКаталога)
100-
101-
ПутьКФайлуМетаданных = ОбъединитьПути(ФайлКаталога.ПолноеИмя, КонстантыOpm.ИмяФайлаМетаданныхПакета);
102-
ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных);
103-
Если ФайлМетаданных.Существует() Тогда
104-
МетаОписаниеПакета = ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных);
105-
Иначе
106-
// @deprecated
107-
МетаОписаниеПакета = Истина;
108-
КонецЕсли;
109-
110-
СтруктураДанных = Новый Структура();
111-
СтруктураДанных.Вставить("МетаданныеПакета", МетаОписаниеПакета);
112-
СтруктураДанных.Вставить("КаталогПакета", ФайлКаталога.ПолноеИмя);
113-
114-
УстановленныеПакеты.Вставить(ФайлКаталога.Имя, СтруктураДанных);
115-
116-
КонецПроцедуры
117-
118-
Функция ПрочитатьМетаданныеПакета(Знач ПутьКФайлуМетаданных)
119-
120-
Перем Метаданные;
121-
Попытка
122-
Чтение = Новый ЧтениеXML;
123-
Чтение.ОткрытьФайл(ПутьКФайлуМетаданных);
124-
Сериализатор = Новый СериализацияМетаданныхПакета;
125-
Метаданные = Сериализатор.ПрочитатьXML(Чтение);
126-
127-
Чтение.Закрыть();
128-
Исключение
129-
Чтение.Закрыть();
130-
ВызватьИсключение;
131-
КонецПопытки;
132-
133-
Возврат Метаданные;
134-
135-
КонецФункции
136-
137-
Функция ПолучитьПутьКФайлуМетаданныхБиблиотеки(ИмяПакета) Экспорт
138-
139-
ПутьКФайлуМетаданных = "";
140-
Для Каждого КаталогБиблиотек Из МассивКаталоговПоискаБиблиотек Цикл
141-
ВремПутьКФайлуМетаданных = ОбъединитьПути(
142-
КаталогБиблиотек,
143-
ИмяПакета,
144-
КонстантыOpm.ИмяФайлаМетаданныхПакета
145-
);
146-
147-
Лог.Отладка(Новый Файл(ВремПутьКФайлуМетаданных).ПолноеИмя);
148-
Если ФС.ФайлСуществует(ВремПутьКФайлуМетаданных) Тогда
149-
ПутьКФайлуМетаданных = ВремПутьКФайлуМетаданных;
150-
КонецЕсли;
151-
КонецЦикла;
152-
153-
Возврат ПутьКФайлуМетаданных;
154-
155-
КонецФункции
156-
157-
Процедура ПриСозданииОбъекта(КаталогПоискаБиблиотек = "")
158-
159-
Лог = Логирование.ПолучитьЛог("oscript.app.opm");
160-
МассивКаталоговПоискаБиблиотек = Новый Массив;
161-
162-
Если ЗначениеЗаполнено(КаталогПоискаБиблиотек) Тогда
163-
МассивКаталоговПоискаБиблиотек.Добавить(КаталогПоискаБиблиотек);
164-
Иначе
165-
КаталогСистемныхБиблиотек = ОбъединитьПути(
166-
КаталогПрограммы(),
167-
ПолучитьЗначениеСистемнойНастройки("lib.system")
168-
);
169-
170-
МассивКаталоговПоискаБиблиотек.Добавить(КаталогСистемныхБиблиотек);
171-
ДобавитьКаталогБиблиотек("./" + КонстантыOpm.ЛокальныйКаталогУстановкиПакетов);
172-
КонецЕсли;
173-
174-
КонецПроцедуры
175-
1+
2+
#Использовать fs
3+
#Использовать logos
4+
5+
Перем Лог;
6+
7+
// Массив каталогов в порядке возрастания приоритета
8+
Перем МассивКаталоговПоискаБиблиотек;
9+
10+
Перем УстановленныеПакеты;
11+
12+
Функция ПакетУстановлен(Знач ОписаниеЗависимости, Знач КаталогПоискаБиблиотек = "") Экспорт
13+
14+
Перем УстановленныеПакеты;
15+
УстановленныеПакеты = ПолучитьУстановленныеПакеты();
16+
17+
ДанныеПакета = УстановленныеПакеты.Получить(ОписаниеЗависимости.ИмяПакета);
18+
ПакетУстановлен = ДанныеПакета <> Неопределено;
19+
Если ПакетУстановлен И НЕ ПустаяСтрока(КаталогПоискаБиблиотек) Тогда
20+
КаталогБиблиотекПакета = Новый Файл(ОбъединитьПути(ДанныеПакета.КаталогПакета, "..")).ПолноеИмя;
21+
ПакетУстановлен = КаталогБиблиотекПакета = КаталогПоискаБиблиотек;
22+
КонецЕсли;
23+
24+
ПутьКФайлуМетаданных = ПолучитьПутьКФайлуМетаданныхБиблиотеки(ОписаниеЗависимости.ИмяПакета);
25+
26+
ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных);
27+
Если ФайлМетаданных.Существует() Тогда
28+
МетаОписаниеПакета = ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных);
29+
УстановленнаяВерсия = МетаОписаниеПакета.Свойства().Версия;
30+
Иначе
31+
// @deprecated
32+
УстановленнаяВерсия = 0;
33+
КонецЕсли;
34+
Лог.Отладка("ПакетУстановлен: Перед вызовом СравнитьВерсии(ЭтаВерсия = <%1>, БольшеЧемВерсия = <%2>)", УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия);
35+
36+
ВерсияSNAPSHOT = "SNAPSHOT";
37+
Если ОписаниеЗависимости.МинимальнаяВерсия = ВерсияSNAPSHOT И УстановленнаяВерсия = ВерсияSNAPSHOT Тогда
38+
УстановленаКорректнаяВерсия = Истина;
39+
ИначеЕсли ОписаниеЗависимости.МинимальнаяВерсия = ВерсияSNAPSHOT И УстановленнаяВерсия <> ВерсияSNAPSHOT Тогда
40+
УстановленаКорректнаяВерсия = Ложь;
41+
Иначе
42+
УстановленаКорректнаяВерсия = ОписаниеЗависимости.МинимальнаяВерсия = Неопределено
43+
ИЛИ РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия) >= 0;
44+
КонецЕсли;
45+
46+
Лог.Отладка("Пакет установлен: " + ПакетУстановлен);
47+
Лог.Отладка("Установлена корректная версия: " + УстановленаКорректнаяВерсия);
48+
Возврат ПакетУстановлен И УстановленаКорректнаяВерсия;
49+
50+
КонецФункции
51+
52+
Процедура Обновить() Экспорт
53+
54+
УстановленныеПакеты = Новый Соответствие;
55+
Для Каждого КаталогБиблиотек Из МассивКаталоговПоискаБиблиотек Цикл
56+
57+
Лог.Отладка("КаталогБиблиотек " + КаталогБиблиотек);
58+
59+
НайденныеФайлы = НайтиФайлы(КаталогБиблиотек, ПолучитьМаскуВсеФайлы());
60+
Для Каждого ФайлКаталога Из НайденныеФайлы Цикл
61+
Если ФайлКаталога.ЭтоКаталог() Тогда
62+
63+
// ДобавитьУстановленныйПакет заменит уже добавленный пакет при совпадении имён
64+
// Соответственно, более поздние каталоги будут иметь приоритет
65+
ДобавитьУстановленныйПакет(ФайлКаталога);
66+
67+
КонецЕсли;
68+
КонецЦикла;
69+
70+
КонецЦикла;
71+
72+
КонецПроцедуры
73+
74+
Функция ПолучитьУстановленныеПакеты() Экспорт
75+
76+
Если УстановленныеПакеты = Неопределено Тогда
77+
Обновить();
78+
КонецЕсли;
79+
80+
Возврат УстановленныеПакеты;
81+
82+
КонецФункции
83+
84+
Процедура Инициализация()
85+
86+
Лог = Логирование.ПолучитьЛог("oscript.app.opm");
87+
МассивКаталоговПоискаБиблиотек = Новый Массив;
88+
89+
КаталогСистемныхБиблиотек = ОбъединитьПути(
90+
КаталогПрограммы(),
91+
ПолучитьЗначениеСистемнойНастройки("lib.system")
92+
);
93+
94+
МассивКаталоговПоискаБиблиотек.Добавить(КаталогСистемныхБиблиотек);
95+
ДобавитьКаталогБиблиотек("./" + КонстантыOpm.ЛокальныйКаталогУстановкиПакетов);
96+
97+
КонецПроцедуры
98+
99+
// Добавляет каталог в список, по которому выполняется поиск библиотек
100+
Процедура ДобавитьКаталогБиблиотек(Знач Каталог) Экспорт
101+
102+
МассивКаталоговПоискаБиблиотек.Добавить(Каталог);
103+
104+
КонецПроцедуры
105+
106+
Процедура ДобавитьУстановленныйПакет(Знач ФайлКаталога)
107+
108+
ПутьКФайлуМетаданных = ОбъединитьПути(ФайлКаталога.ПолноеИмя, КонстантыOpm.ИмяФайлаМетаданныхПакета);
109+
ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных);
110+
Если ФайлМетаданных.Существует() Тогда
111+
МетаОписаниеПакета = ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных);
112+
Иначе
113+
// @deprecated
114+
МетаОписаниеПакета = Истина;
115+
КонецЕсли;
116+
117+
СтруктураДанных = Новый Структура();
118+
СтруктураДанных.Вставить("МетаданныеПакета", МетаОписаниеПакета);
119+
СтруктураДанных.Вставить("КаталогПакета", ФайлКаталога.ПолноеИмя);
120+
121+
УстановленныеПакеты.Вставить(ФайлКаталога.Имя, СтруктураДанных);
122+
123+
КонецПроцедуры
124+
125+
Функция ПрочитатьМетаданныеПакета(Знач ПутьКФайлуМетаданных)
126+
127+
Перем Метаданные;
128+
Попытка
129+
Чтение = Новый ЧтениеXML;
130+
Чтение.ОткрытьФайл(ПутьКФайлуМетаданных);
131+
Сериализатор = Новый СериализацияМетаданныхПакета;
132+
Метаданные = Сериализатор.ПрочитатьXML(Чтение);
133+
134+
Чтение.Закрыть();
135+
Исключение
136+
Чтение.Закрыть();
137+
ВызватьИсключение;
138+
КонецПопытки;
139+
140+
Возврат Метаданные;
141+
142+
КонецФункции
143+
144+
Функция ПолучитьПутьКФайлуМетаданныхБиблиотеки(ИмяПакета) Экспорт
145+
146+
ПутьКФайлуМетаданных = "";
147+
Для Каждого КаталогБиблиотек Из МассивКаталоговПоискаБиблиотек Цикл
148+
ВремПутьКФайлуМетаданных = ОбъединитьПути(
149+
КаталогБиблиотек,
150+
ИмяПакета,
151+
КонстантыOpm.ИмяФайлаМетаданныхПакета
152+
);
153+
154+
Лог.Отладка(Новый Файл(ВремПутьКФайлуМетаданных).ПолноеИмя);
155+
Если ФС.ФайлСуществует(ВремПутьКФайлуМетаданных) Тогда
156+
ПутьКФайлуМетаданных = ВремПутьКФайлуМетаданных;
157+
КонецЕсли;
158+
КонецЦикла;
159+
160+
Возврат ПутьКФайлуМетаданных;
161+
162+
КонецФункции
163+
164+
Процедура ПриСозданииОбъекта(КаталогПоискаБиблиотек = "")
165+
166+
Лог = Логирование.ПолучитьЛог("oscript.app.opm");
167+
МассивКаталоговПоискаБиблиотек = Новый Массив;
168+
169+
Если ЗначениеЗаполнено(КаталогПоискаБиблиотек) Тогда
170+
МассивКаталоговПоискаБиблиотек.Добавить(КаталогПоискаБиблиотек);
171+
Иначе
172+
КаталогСистемныхБиблиотек = ОбъединитьПути(
173+
КаталогПрограммы(),
174+
ПолучитьЗначениеСистемнойНастройки("lib.system")
175+
);
176+
177+
МассивКаталоговПоискаБиблиотек.Добавить(КаталогСистемныхБиблиотек);
178+
ДобавитьКаталогБиблиотек("./" + КонстантыOpm.ЛокальныйКаталогУстановкиПакетов);
179+
КонецЕсли;
180+
181+
КонецПроцедуры
182+

0 commit comments

Comments
 (0)