diff --git a/features/install-file.feature b/features/install-file.feature index 481e32d..08301c1 100644 --- a/features/install-file.feature +++ b/features/install-file.feature @@ -21,7 +21,10 @@ И Я добавляю параметр "--local" для команды "opm" И Я добавляю опцию "-f" для команды "opm" из переменной "ИмяФайлаПакета" Когда Я выполняю команду "opm" - Тогда Вывод команды "opm" содержит "ИНФОРМАЦИЯ - Установка завершена" + И я вижу в консоли вывод + | Событие установки - ПередУстановкой - КаталогУстановкиПакета | + | Событие установки - ПриУстановке - КаталогУстановкиПакета | + | ИНФОРМАЦИЯ - Установка завершена | И Вывод команды "opm" не содержит "Внешнее исключение" И Код возврата команды "opm" равен 0 И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules" @@ -29,4 +32,4 @@ И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules/test/opm-metadata.xml" И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules/test/folder" И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules/test/folder/src.os" - И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules/test/folder/src.dll" \ No newline at end of file + И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules/test/folder/src.dll" diff --git a/features/step_definitions/fixtures/testpackage/packagedef b/features/step_definitions/fixtures/testpackage/packagedef index 5ecb489..b6d4996 100644 --- a/features/step_definitions/fixtures/testpackage/packagedef +++ b/features/step_definitions/fixtures/testpackage/packagedef @@ -1,4 +1,80 @@ - +//////////////////////////////////////////////////////////// +// Описание пакета для сборки и установки +// Полную документацию см. на hub.oscript.io/packaging +// + +/////////////////////////////////////////////////////////////////// +// Процедуры установки пакета с клиентской машины +/////////////////////////////////////////////////////////////////// + +// Вызывается пакетным менеджером перед установкой пакета на клиентскую машину. +// +// Параметры: +// КаталогУстановкиПакета - строка. Путь в который пакетный менеджер устанавливает текущий пакет. +// ЧтениеZipФайла - ЧтениеZipФайла. Архив пакета. +// +Процедура ПередУстановкой(Знач КаталогУстановкиПакета, Знач ЧтениеZipФайла) Экспорт + Сообщить(СтрШаблон("Событие установки - ПередУстановкой - КаталогУстановкиПакета %1", + КаталогУстановкиПакета)); +КонецПроцедуры + +// Вызывается пакетным менеджером после распаковки пакета на клиентскую машину. +// +// Параметры: +// КаталогУстановкиПакета - строка. Путь в который пакетный менеджер устанавливает текущий пакет. +// +Процедура ПриУстановке(Знач КаталогУстановкиПакета, СтандартнаяОбработка) Экспорт + + Сообщить(СтрШаблон("Событие установки - ПриУстановке - КаталогУстановкиПакета %1", + КаталогУстановкиПакета)); + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////// +// Процедуры сборки пакета +/////////////////////////////////////////////////////////////////// + + +// Вызывается пакетным менеджером перед началом сборки пакета. +// +// Параметры: +// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета. +// +Процедура ПередСборкой(Знач РабочийКаталог) Экспорт + + Сообщить(СтрШаблон("Событие установки - ПередСборкой - рабочий каталог %1", + РабочийКаталог)); + +КонецПроцедуры + +// Вызывается пакетным менеджером после помещения файлов в пакет. +// +// Параметры: +// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета. +// АрхивПакета - ЗаписьZIPФайла - ZIP-архив с содержимым пакета (включаемые файлы). +// +Процедура ПриСборке(Знач РабочийКаталог, Знач АрхивПакета) Экспорт + + Сообщить(СтрШаблон("Событие установки - ПриСборке - рабочий каталог %1", + РабочийКаталог)); + +КонецПроцедуры + + +// Вызывается пакетным менеджером после сборки пакета. +// +// Параметры: +// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета. +// ПутьКФайлуПакета - Строка - Полный путь к собранному файлу пакета. +// +Процедура ПослеСборки(Знач РабочийКаталог, Знач ПутьКФайлуПакета) Экспорт + + Сообщить(СтрШаблон("Событие установки - ПослеСборки - рабочий каталог %1, ПутьКФайлуПакета %2", + РабочийКаталог, ПутьКФайлуПакета)); + +КонецПроцедуры + Описание.Имя("test") .Версия("0.3.1") + .ВключитьФайл("packagedef") .ВключитьФайл("folder"); diff --git a/features/step_definitions/shared.os b/features/step_definitions/shared.os index 1e77506..de87345 100644 --- a/features/step_definitions/shared.os +++ b/features/step_definitions/shared.os @@ -16,7 +16,6 @@ ВсеШаги.Добавить("ЯДобавляюАргументДляКомандыИзПеременной"); ВсеШаги.Добавить("ЯУстанавливаюПеременнуюОкруженияИзПеременной"); ВсеШаги.Добавить("ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной"); - Возврат ВсеШаги; КонецФункции @@ -25,26 +24,26 @@ // Процедура выполняется перед запуском каждого сценария Процедура ПередЗапускомСценария(Знач Узел) Экспорт - + КонецПроцедуры // Процедура выполняется после завершения каждого сценария Процедура ПослеЗапускаСценария(Знач Узел) Экспорт - + КонецПроцедуры //Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов" Процедура ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной(Знач ИмяПеременной) Экспорт ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); - + БДД.СохранитьВКонтекст(ИмяПеременной, ВременныйКаталог); - + КонецПроцедуры //Я устанавливаю переменную окружения "GITSYNC_STORAGE_PATH" из переменной "КаталогХранилища1С" Процедура ЯУстанавливаюПеременнуюОкруженияИзПеременной(Знач ИмяПеременной, Знач КаталогХранилища1С) Экспорт - + ЗначениеПеременной = БДД.ПолучитьИзКонтекста(КаталогХранилища1С); УстановитьПеременнуюСреды(ИмяПеременной, ЗначениеПеременной); @@ -55,7 +54,7 @@ Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды)); ЗначениеПеременной = БДД.ПолучитьИзКонтекста(ИмяПеременной); - + Команда.ДобавитьПараметр(ЗначениеПеременной); КонецПроцедуры @@ -71,7 +70,7 @@ //|--storage-user Администратор| //|-useVendorUnload| Процедура ЯДобавляюПараметрыДляКоманды(Знач ИмяКоманды, Знач ТаблицаПараметров) Экспорт - + Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды)); Для Каждого Параметр из ТаблицаПараметров Цикл Команда.ДобавитьПараметр(Параметр[0]) @@ -82,19 +81,24 @@ //Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке Процедура ЯУстанавливаюПутьВыполненияКомандыКТекущейБиблиотеке(Знач ИмяКоманды) Экспорт - + ПутьКПриложению = ПутьКИсполняемомуФайлу(); Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды)); Команда.УстановитьКоманду("oscript"); - Команда.ДобавитьПараметр("-encoding=utf-8"); + + СистемнаяИнформация = Новый СистемнаяИнформация; + ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; + Если Не ЭтоWindows Тогда + Команда.ДобавитьПараметр("-encoding=utf-8"); + КонецЕсли; Команда.ДобавитьПараметр(ОбернутьВКавычки(ПутьКПриложению)); - + КонецПроцедуры //В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "AUTHORS" Процедура ВКаталогеИзПеременнойСоздаетсяФайлИлиКаталог(Знач ПутьКаталогаИсходников, Знач ИмяФайла) Экспорт - + ВременныйКаталог = БДД.ПолучитьИзКонтекста(ПутьКаталогаИсходников); ИскомыйФайл = Новый Файл(ОбъединитьПути(ВременныйКаталог, ИмяФайла)); Ожидаем.Что(ИскомыйФайл.Существует(), "Файл должен был существовать").ЭтоИстина(); @@ -115,7 +119,6 @@ КонецФункции - Функция КаталогFixtures() Возврат ОбъединитьПути(КаталогБиблиотеки(), "tests", "fixtures"); КонецФункции diff --git a/packagedef b/packagedef index 7dbd1fc..e0c22bd 100644 --- a/packagedef +++ b/packagedef @@ -46,7 +46,7 @@ Описание.Имя("opm") .Версия(Константы_ЛокальнаяВерсия.ВерсияПродукта) .ВерсияСреды("1.0.19") - .ЗависитОт("fs", "0.4.1") + .ЗависитОт("fs", "0.5.0") .ЗависитОт("asserts", "0.4.0") .ЗависитОт("json", "1.0.1") .ЗависитОт("fluent", "0.3.1") diff --git "a/src/core/\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\320\272\320\260\320\237\320\260\320\272\320\265\321\202\320\260.os" "b/src/core/\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\320\272\320\260\320\237\320\260\320\272\320\265\321\202\320\260.os" index df1aea1..903d5e8 100644 --- "a/src/core/\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\320\272\320\260\320\237\320\260\320\272\320\265\321\202\320\260.os" +++ "b/src/core/\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\320\272\320\260\320\237\320\260\320\272\320\265\321\202\320\260.os" @@ -133,18 +133,22 @@ Процедура УстановитьФайлыПакета(Знач ПутьУстановки, Знач ФайлСодержимого, СтандартнаяОбработка) ЧтениеСодержимого = Новый ЧтениеZipФайла(ФайлСодержимого); + КаталогУстановки = ПутьУстановки.ПолноеИмя; + Попытка Лог.Отладка("Устанавливаю файлы пакета из архива"); УдалитьУстаревшиеФайлы(ПутьУстановки); - ОбработчикСобытий = ПолучитьОбработчикСобытий(ПутьУстановки.ПолноеИмя); + ИзвлечьФайл(ЧтениеСодержимого, КонстантыOpm.ИмяФайлаСпецификацииПакета, КаталогУстановки); + + ОбработчикСобытий = ПолучитьОбработчикСобытий(КаталогУстановки); - ВызватьСобытиеПередУстановкой(ОбработчикСобытий, ПутьУстановки.ПолноеИмя, ЧтениеСодержимого); + ВызватьСобытиеПередУстановкой(ОбработчикСобытий, КаталогУстановки, ЧтениеСодержимого); - ЧтениеСодержимого.ИзвлечьВсе(ПутьУстановки.ПолноеИмя); + ЧтениеСодержимого.ИзвлечьВсе(КаталогУстановки); - ВызватьСобытиеПриУстановке(ОбработчикСобытий, ПутьУстановки.ПолноеИмя, СтандартнаяОбработка); + ВызватьСобытиеПриУстановке(ОбработчикСобытий, КаталогУстановки, СтандартнаяОбработка); Исключение ЧтениеСодержимого.Закрыть(); @@ -156,6 +160,7 @@ КонецПроцедуры Процедура УдалитьУстаревшиеФайлы(Знач ПутьУстановки) + Лог.Отладка("Удаляю устаревшие файлы"); УдалитьФайлыВКаталоге(ПутьУстановки.ПолноеИмя, "*.os", Истина); УдалитьФайлыВКаталоге(ПутьУстановки.ПолноеИмя, "*.dll", Истина); УдалитьФайлыВКаталоге(ПутьУстановки.ПолноеИмя, "packagedef", Ложь); @@ -319,13 +324,25 @@ // Функция ИзвлечьОбязательныйФайл(Знач Чтение, Знач ИмяФайла) - Лог.Отладка("Извлечение: " + ИмяФайла); + + ПутьФайла = ИзвлечьФайл(Чтение, ИмяФайла, мВременныйКаталогУстановки); + Если ПутьФайла = "" Тогда + ВызватьИсключение "Неверная структура пакета. Не найден файл " + ИмяФайла; + КонецЕсли; + + Возврат ПутьФайла; + +КонецФункции + +Функция ИзвлечьФайл(Знач Чтение, Знач ИмяФайла, Знач КаталогКудаИзвлечь) + Лог.Отладка("Извлечение: %1", ИмяФайла); Элемент = Чтение.Элементы.Найти(ИмяФайла); Если Элемент = Неопределено Тогда - ВызватьИсключение "Неверная структура пакета. Не найден файл " + ИмяФайла; + Лог.Отладка("Не удалось извлечь файл %1", ИмяФайла); + Возврат ""; КонецЕсли; - Чтение.Извлечь(Элемент, мВременныйКаталогУстановки); + Чтение.Извлечь(Элемент, КаталогКудаИзвлечь); Возврат ОбъединитьПути(мВременныйКаталогУстановки, ИмяФайла);