diff --git a/features/cmd/step_definitions/shared.os b/features/cmd/step_definitions/shared.os index 614f81aa..6b9844d4 100644 --- a/features/cmd/step_definitions/shared.os +++ b/features/cmd/step_definitions/shared.os @@ -41,7 +41,7 @@ ВсеШаги.Добавить("ЯСоздаюНовыйОбъектМенеджерсинхронизации"); ВсеШаги.Добавить("ЯУстанавливаюАвторизациюВХранилищеПользователяСПаролем"); ВсеШаги.Добавить("ЯУстанавливаюВерсиюПлатформы"); - ВсеШаги.Добавить("ЯВыполняюВыполняютСинхронизацию"); + ВсеШаги.Добавить("ЯВыполняюСинхронизацию"); ВсеШаги.Добавить("ВыводЛогаСодержит"); Возврат ВсеШаги; @@ -289,8 +289,8 @@ КонецПроцедуры -//Я выполняю выполняют синхронизацию -Процедура ЯВыполняюВыполняютСинхронизацию() Экспорт +//Я выполняю синхронизацию +Процедура ЯВыполняюСинхронизацию() Экспорт МенеджерСинхронизации = БДД.ПолучитьИзКонтекста("МенеджерСинхронизации"); ПутьКаталогаИсходников = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников"); diff --git a/features/core/step_definitions/shared.os b/features/core/step_definitions/shared.os index 16160310..24349afa 100644 --- a/features/core/step_definitions/shared.os +++ b/features/core/step_definitions/shared.os @@ -41,7 +41,7 @@ ВсеШаги.Добавить("ЯСоздаюНовыйОбъектМенеджерсинхронизации"); ВсеШаги.Добавить("ЯУстанавливаюАвторизациюВХранилищеПользователяСПаролем"); ВсеШаги.Добавить("ЯУстанавливаюВерсиюПлатформы"); - ВсеШаги.Добавить("ЯВыполняюВыполняютСинхронизацию"); + ВсеШаги.Добавить("ЯВыполняюСинхронизацию"); ВсеШаги.Добавить("ВыводЛогаСодержит"); Возврат ВсеШаги; @@ -254,8 +254,8 @@ КонецПроцедуры -//Я выполняю выполняют синхронизацию -Процедура ЯВыполняюВыполняютСинхронизацию() Экспорт +//Я выполняю синхронизацию +Процедура ЯВыполняюСинхронизацию() Экспорт МенеджерСинхронизации = БДД.ПолучитьИзКонтекста("МенеджерСинхронизации"); ПутьКаталогаИсходников = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников"); diff --git a/features/core/sync.core.feature b/features/core/sync.core.feature index 8791e3d9..1db902cf 100644 --- a/features/core/sync.core.feature +++ b/features/core/sync.core.feature @@ -20,7 +20,7 @@ Сценарий: Простая синхронизация хранилища с git-репозиторием Допустим Я устанавливаю авторизацию в хранилище пользователя "Администратор" с паролем "" И Я устанавливаю версию платформы "8.3" - Когда Я выполняю выполняют синхронизацию + Когда Я выполняю синхронизацию Тогда Вывод лога содержит "Завершена синхронизации с git" Сценарий: Cинхронизация хранилища с git-репозиторием c плагинами @@ -32,7 +32,9 @@ И Я устанавливаю файл плагина из переменной "ПутьКФайлуПлагина" И Я загружаю плагины из каталога в переменной "КаталогПлагинов" И Я подключаю плагины в МенеджерСинхронизации - Когда Я выполняю выполняют синхронизацию + Тогда Вывод лога содержит "ИНФОРМАЦИЯ - Найдена зависимость logos@1.0.1" + # И Вывод лога не содержит "ИНФОРМАЦИЯ - Найдена зависимость 1bdd@1.15.1" + Когда Я выполняю синхронизацию Тогда Вывод лога содержит "Завершена синхронизации с git" И Вывод лога содержит "Вызвано событие <ПриАктивизации> для плагина " \ No newline at end of file diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\321\211\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\321\211\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os" index 4c891c55..76fb6ce1 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\321\211\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\321\211\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os" @@ -1,5 +1,6 @@ #Использовать opm #Использовать logos +#Использовать 1commands Перем Лог; // Объект - логирование операций Перем ВнутреннийМенеджерУстановкиПакетов; // Объект.МенеджерУстановкиПакетов - для установки пакетов @@ -32,7 +33,7 @@ КонецПроцедуры -// Производит установке пакета плагина по файлу +// Производит установку пакета плагина по файлу // // Параметры: // ПутьКФайлуПлагина - Строка - путь к файлу пакета плагинов @@ -48,11 +49,101 @@ ВызватьИсключение ТекстОшибки; КонецЕсли; + // Необходимо распаковать пакет с плагином во временный каталог и прочитать его манифест, + // и по нему установить зависимости. Сделать это нужно до подключения сценариев. + ВременныйКаталогПлагина = ВременныеФайлы.СоздатьКаталог(); + ЧтениеZipФайла = Новый ЧтениеZipФайла(ФайлПлагина.ПолноеИмя); + ЧтениеZipФайла.ИзвлечьВсе(ВременныйКаталогПлагина); + ЧтениеZipФайла = Неопределено; + + Зависимости = ПрочитатьЗависимостиПлагинов(ВременныйКаталогПлагина); + ЗависимостиПредставление = ПредставлениеЗависимостей(Зависимости); + + УстановитьЗависимостиПлагинов(ЗависимостиПредставление); + УстановщикПлагинов = ПолучитьМенеджерУстановкиПакетов(); УстановщикПлагинов.УстановитьПакетИзАрхива(ПолныйПутьКФайлуПлагина); КонецПроцедуры +Функция ПрочитатьЗависимостиПлагинов(Знач КаталогПлагинов) + + Результат = Новый Соответствие(); + + ИмяФайла = "opm-metadata.xml"; + + ФайлМетаданных = Новый Файл(ОбъединитьПути(КаталогПлагинов, ИмяФайла)); + + Чтение = Новый ЧтениеXML; + Чтение.ОткрытьФайл(ФайлМетаданных.ПолноеИмя); + Чтение.ПерейтиКСодержимому(); + + Если Чтение.ЛокальноеИмя <> "opm-metadata" Тогда + Чтение.Закрыть(); + ВызватьИсключение СтрШаблон("Файл %1 имеет некорректный формат", ИмяФайла); + КонецЕсли; + + Пока Чтение.Прочитать() Цикл + + Если Чтение.ТипУзла = ТипУзлаXML.Комментарий Тогда + Продолжить; + КонецЕсли; + + Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + Если Чтение.ЛокальноеИмя = "depends-on" Тогда + + ЭтоЗависимостьРазработки = Чтение.ЗначениеАтрибута("dev") = "true"; + Если ЭтоЗависимостьРазработки Тогда + Продолжить; + КонецЕсли; + + ИмяПакета = Чтение.ЗначениеАтрибута("name"); + ВерсияПакета = Чтение.ЗначениеАтрибута("version"); + + // TODO: обработать ситуацию, когда разные плагины зависят от разных версий одного пакета + Результат.Вставить(ИмяПакета, ВерсияПакета); + Лог.Информация("Найдена зависимость %1@%2", ИмяПакета, ВерсияПакета); + Чтение.Прочитать(); // в конец элемента + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Чтение.Закрыть(); + + Возврат Результат; + +КонецФункции + +Функция ПредставлениеЗависимостей(Зависимости) + + Результат = ""; + + Для Каждого КлючЗначение Из Зависимости Цикл + Результат = Результат + СтрШаблон("%1@%2 ", КлючЗначение.Ключ, КлючЗначение.Значение); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Процедура УстановитьЗависимостиПлагинов(ЗависимостиПредставление) + + Команда = Новый Команда; + Команда.УстановитьКоманду("opm"); + Команда.ДобавитьПараметр("install"); + Команда.ДобавитьПараметр(ЗависимостиПредставление); + + КодВозврата = Команда.Исполнить(); + + Если КодВозврата <> 0 Тогда + ВызватьИсключение Команда.ПолучитьВыводКоманды(); + КонецЕсли; + +КонецПроцедуры + // Производит установку пакета плагина по имени с хаба // // Параметры: