Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Возобновил работу событий установки ПередУстановкой и ПриУстановке #139

Merged
merged 4 commits into from
Sep 19, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions features/install-file.feature
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,15 @@
И Я добавляю параметр "--local" для команды "opm"
И Я добавляю опцию "-f" для команды "opm" из переменной "ИмяФайлаПакета"
Когда Я выполняю команду "opm"
Тогда Вывод команды "opm" содержит "ИНФОРМАЦИЯ - Установка завершена"
И я вижу в консоли вывод
| Событие установки - ПередУстановкой - КаталогУстановкиПакета |
| Событие установки - ПриУстановке - КаталогУстановкиПакета |
| ИНФОРМАЦИЯ - Установка завершена |
И Вывод команды "opm" не содержит "Внешнее исключение"
И Код возврата команды "opm" равен 0
И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules"
И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules/test"
И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules/test/opm-metadata.xml"
И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules/test/folder"
И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules/test/folder/src.os"
И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules/test/folder/src.dll"
И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules/test/folder/src.dll"
78 changes: 77 additions & 1 deletion features/step_definitions/fixtures/testpackage/packagedef
Original file line number Diff line number Diff line change
@@ -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");
29 changes: 16 additions & 13 deletions features/step_definitions/shared.os
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
ВсеШаги.Добавить("ЯДобавляюАргументДляКомандыИзПеременной");
ВсеШаги.Добавить("ЯУстанавливаюПеременнуюОкруженияИзПеременной");
ВсеШаги.Добавить("ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной");


Возврат ВсеШаги;
КонецФункции
Expand All @@ -25,26 +24,26 @@

// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт

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

// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт

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

//Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов"
Процедура ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной(Знач ИмяПеременной) Экспорт

ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();

БДД.СохранитьВКонтекст(ИмяПеременной, ВременныйКаталог);

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

//Я устанавливаю переменную окружения "GITSYNC_STORAGE_PATH" из переменной "КаталогХранилища1С"
Процедура ЯУстанавливаюПеременнуюОкруженияИзПеременной(Знач ИмяПеременной, Знач КаталогХранилища1С) Экспорт

ЗначениеПеременной = БДД.ПолучитьИзКонтекста(КаталогХранилища1С);
УстановитьПеременнуюСреды(ИмяПеременной, ЗначениеПеременной);

Expand All @@ -55,7 +54,7 @@

Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды));
ЗначениеПеременной = БДД.ПолучитьИзКонтекста(ИмяПеременной);

Команда.ДобавитьПараметр(ЗначениеПеременной);

КонецПроцедуры
Expand All @@ -71,7 +70,7 @@
//|--storage-user Администратор|
//|-useVendorUnload|
Процедура ЯДобавляюПараметрыДляКоманды(Знач ИмяКоманды, Знач ТаблицаПараметров) Экспорт

Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды));
Для Каждого Параметр из ТаблицаПараметров Цикл
Команда.ДобавитьПараметр(Параметр[0])
Expand All @@ -82,19 +81,24 @@

//Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке
Процедура ЯУстанавливаюПутьВыполненияКомандыКТекущейБиблиотеке(Знач ИмяКоманды) Экспорт

ПутьКПриложению = ПутьКИсполняемомуФайлу();
Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды));
Команда.УстановитьКоманду("oscript");
Команда.ДобавитьПараметр("-encoding=utf-8");

СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
Если Не ЭтоWindows Тогда
Команда.ДобавитьПараметр("-encoding=utf-8");
КонецЕсли;

Команда.ДобавитьПараметр(ОбернутьВКавычки(ПутьКПриложению));

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

//В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "AUTHORS"
Процедура ВКаталогеИзПеременнойСоздаетсяФайлИлиКаталог(Знач ПутьКаталогаИсходников, Знач ИмяФайла) Экспорт

ВременныйКаталог = БДД.ПолучитьИзКонтекста(ПутьКаталогаИсходников);
ИскомыйФайл = Новый Файл(ОбъединитьПути(ВременныйКаталог, ИмяФайла));
Ожидаем.Что(ИскомыйФайл.Существует(), "Файл должен был существовать").ЭтоИстина();
Expand All @@ -115,7 +119,6 @@

КонецФункции


Функция КаталогFixtures()
Возврат ОбъединитьПути(КаталогБиблиотеки(), "tests", "fixtures");
КонецФункции
Expand Down
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
31 changes: 24 additions & 7 deletions src/core/Классы/УстановкаПакета.os
Original file line number Diff line number Diff line change
Expand Up @@ -133,18 +133,22 @@
Процедура УстановитьФайлыПакета(Знач ПутьУстановки, Знач ФайлСодержимого, СтандартнаяОбработка)

ЧтениеСодержимого = Новый ЧтениеZipФайла(ФайлСодержимого);
КаталогУстановки = ПутьУстановки.ПолноеИмя;

Попытка

Лог.Отладка("Устанавливаю файлы пакета из архива");
УдалитьУстаревшиеФайлы(ПутьУстановки);

ОбработчикСобытий = ПолучитьОбработчикСобытий(ПутьУстановки.ПолноеИмя);
ИзвлечьФайл(ЧтениеСодержимого, КонстантыOpm.ИмяФайлаСпецификацииПакета, КаталогУстановки);

ОбработчикСобытий = ПолучитьОбработчикСобытий(КаталогУстановки);

ВызватьСобытиеПередУстановкой(ОбработчикСобытий, ПутьУстановки.ПолноеИмя, ЧтениеСодержимого);
ВызватьСобытиеПередУстановкой(ОбработчикСобытий, КаталогУстановки, ЧтениеСодержимого);

ЧтениеСодержимого.ИзвлечьВсе(ПутьУстановки.ПолноеИмя);
ЧтениеСодержимого.ИзвлечьВсе(КаталогУстановки);

ВызватьСобытиеПриУстановке(ОбработчикСобытий, ПутьУстановки.ПолноеИмя, СтандартнаяОбработка);
ВызватьСобытиеПриУстановке(ОбработчикСобытий, КаталогУстановки, СтандартнаяОбработка);

Исключение
ЧтениеСодержимого.Закрыть();
Expand All @@ -156,6 +160,7 @@
КонецПроцедуры

Процедура УдалитьУстаревшиеФайлы(Знач ПутьУстановки)
Лог.Отладка("Удаляю устаревшие файлы");
УдалитьФайлыВКаталоге(ПутьУстановки.ПолноеИмя, "*.os", Истина);
УдалитьФайлыВКаталоге(ПутьУстановки.ПолноеИмя, "*.dll", Истина);
УдалитьФайлыВКаталоге(ПутьУстановки.ПолноеИмя, "packagedef", Ложь);
Expand Down Expand Up @@ -319,13 +324,25 @@
//

Функция ИзвлечьОбязательныйФайл(Знач Чтение, Знач ИмяФайла)
Лог.Отладка("Извлечение: " + ИмяФайла);

ПутьФайла = ИзвлечьФайл(Чтение, ИмяФайла, мВременныйКаталогУстановки);
Если ПутьФайла = "" Тогда
ВызватьИсключение "Неверная структура пакета. Не найден файл " + ИмяФайла;
КонецЕсли;

Возврат ПутьФайла;

КонецФункции

Функция ИзвлечьФайл(Знач Чтение, Знач ИмяФайла, Знач КаталогКудаИзвлечь)
Лог.Отладка("Извлечение: %1", ИмяФайла);
Элемент = Чтение.Элементы.Найти(ИмяФайла);
Если Элемент = Неопределено Тогда
ВызватьИсключение "Неверная структура пакета. Не найден файл " + ИмяФайла;
Лог.Отладка("Не удалось извлечь файл %1", ИмяФайла);
Возврат "";
КонецЕсли;

Чтение.Извлечь(Элемент, мВременныйКаталогУстановки);
Чтение.Извлечь(Элемент, КаталогКудаИзвлечь);
artbear marked this conversation as resolved.
Show resolved Hide resolved

Возврат ОбъединитьПути(мВременныйКаталогУстановки, ИмяФайла);

Expand Down