|
1 | 1 | #Использовать opm |
2 | 2 | #Использовать logos |
| 3 | +#Использовать 1commands |
3 | 4 |
|
4 | 5 | Перем Лог; // Объект - логирование операций |
5 | 6 | Перем ВнутреннийМенеджерУстановкиПакетов; // Объект.МенеджерУстановкиПакетов - для установки пакетов |
|
32 | 33 |
|
33 | 34 | КонецПроцедуры |
34 | 35 |
|
35 | | -// Производит установке пакета плагина по файлу |
| 36 | +// Производит установку пакета плагина по файлу |
36 | 37 | // |
37 | 38 | // Параметры: |
38 | 39 | // ПутьКФайлуПлагина - Строка - путь к файлу пакета плагинов |
|
48 | 49 | ВызватьИсключение ТекстОшибки; |
49 | 50 | КонецЕсли; |
50 | 51 |
|
| 52 | + // Необходимо распаковать пакет с плагином во временный каталог и прочитать его манифест, |
| 53 | + // и по нему установить зависимости. Сделать это нужно до подключения сценариев. |
| 54 | + ВременныйКаталогПлагина = ВременныеФайлы.СоздатьКаталог(); |
| 55 | + ЧтениеZipФайла = Новый ЧтениеZipФайла(ПутьКФайлуПлагина); |
| 56 | + ЧтениеZipФайла.ИзвлечьВсе(ВременныйКаталогПлагина); |
| 57 | + ЧтениеZipФайла = Неопределено; |
| 58 | + |
| 59 | + Зависимости = ПрочитатьЗависимостиПлагинов(ВременныйКаталогПлагина); |
| 60 | + ЗависимостиПредставление = ПредставлениеЗависимостей(Зависимости); |
| 61 | + |
| 62 | + УстановитьЗависимостиПлагинов(ЗависимостиПредставление); |
| 63 | + |
51 | 64 | УстановщикПлагинов = ПолучитьМенеджерУстановкиПакетов(); |
52 | 65 | УстановщикПлагинов.УстановитьПакетИзАрхива(ПолныйПутьКФайлуПлагина); |
53 | 66 |
|
54 | 67 | КонецПроцедуры |
55 | 68 |
|
| 69 | + |
| 70 | +Функция ПрочитатьЗависимостиПлагинов(Знач КаталогПлагинов) |
| 71 | + |
| 72 | + Результат = Новый Соответствие(); |
| 73 | + |
| 74 | + ИмяФайла = "opm-metadata.xml"; |
| 75 | + |
| 76 | + ФайлМетаданных = Новый Файл(ОбъединитьПути(КаталогПлагинов, ИмяФайла)); |
| 77 | + |
| 78 | + Чтение = Новый ЧтениеXML; |
| 79 | + Чтение.ОткрытьФайл(ФайлМетаданных.ПолноеИмя); |
| 80 | + Чтение.ПерейтиКСодержимому(); |
| 81 | + |
| 82 | + Если Чтение.ЛокальноеИмя <> "opm-metadata" Тогда |
| 83 | + Чтение.Закрыть(); |
| 84 | + ВызватьИсключение СтрШаблон("Файл %1 имеет некорректный формат", ИмяФайла); |
| 85 | + КонецЕсли; |
| 86 | + |
| 87 | + Пока Чтение.Прочитать() Цикл |
| 88 | + |
| 89 | + Если Чтение.ТипУзла = ТипУзлаXML.Комментарий Тогда |
| 90 | + Продолжить; |
| 91 | + КонецЕсли; |
| 92 | + |
| 93 | + Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда |
| 94 | + |
| 95 | + Если Чтение.ЛокальноеИмя = "depends-on" Тогда |
| 96 | + |
| 97 | + ЭтоЗависимостьРазработки = Чтение.ЗначениеАтрибута("dev") = "true"; |
| 98 | + Если ЭтоЗависимостьРазработки Тогда |
| 99 | + Продолжить; |
| 100 | + КонецЕсли; |
| 101 | + |
| 102 | + ИмяПакета = Чтение.ЗначениеАтрибута("name"); |
| 103 | + ВерсияПакета = Чтение.ЗначениеАтрибута("version"); |
| 104 | + |
| 105 | + // TODO: обработать ситуацию, когда разные плагины зависят от разных версий одного пакета |
| 106 | + Результат.Вставить(ИмяПакета, ВерсияПакета); |
| 107 | + Лог.Информация("Найдена зависимость %1@%2", ИмяПакета, ВерсияПакета); |
| 108 | + Чтение.Прочитать(); // в конец элемента |
| 109 | + КонецЕсли; |
| 110 | + |
| 111 | + КонецЕсли; |
| 112 | + |
| 113 | + КонецЦикла; |
| 114 | + |
| 115 | + Чтение.Закрыть(); |
| 116 | + |
| 117 | + Возврат Результат; |
| 118 | + |
| 119 | +КонецФункции |
| 120 | + |
| 121 | +Функция ПредставлениеЗависимостей(Зависимости) |
| 122 | + |
| 123 | + Результат = ""; |
| 124 | + |
| 125 | + Для Каждого КлючЗначение Из Зависимости Цикл |
| 126 | + Результат = Результат + СтрШаблон("%1@%2 ", КлючЗначение.Ключ, КлючЗначение.Значение); |
| 127 | + КонецЦикла; |
| 128 | + |
| 129 | + Возврат Результат; |
| 130 | + |
| 131 | +КонецФункции |
| 132 | + |
| 133 | +Процедура УстановитьЗависимостиПлагинов(ЗависимостиПредставление) |
| 134 | + |
| 135 | + Команда = Новый Команда; |
| 136 | + Команда.УстановитьКоманду("opm"); |
| 137 | + Команда.ДобавитьПараметр("install"); |
| 138 | + Команда.ДобавитьПараметр(ЗависимостиПредставление); |
| 139 | + |
| 140 | + КодВозврата = Команда.Исполнить(); |
| 141 | + |
| 142 | + Если КодВозврата <> 0 Тогда |
| 143 | + ВызватьИсключение Команда.ПолучитьВыводКоманды(); |
| 144 | + КонецЕсли; |
| 145 | + |
| 146 | +КонецПроцедуры |
| 147 | + |
56 | 148 | // Производит установку пакета плагина по имени с хаба |
57 | 149 | // |
58 | 150 | // Параметры: |
|
0 commit comments