From b1d176367fab3e929ab4b36982afa7a0f46119ee Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 30 Sep 2018 23:33:58 +0300 Subject: [PATCH 1/5] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=B4=20=D0=B4=D0=BB=D1=8F=20=D1=83=D1=87=D0=B5?= =?UTF-8?q?=D1=82=D0=B0=20#813=20-=20=D0=BA=D0=BE=D0=B3=D0=B4=D0=B0=20?= =?UTF-8?q?=D1=82=D1=80=D0=B5=D0=B1=D1=83=D0=B5=D0=BC=D1=8B=D0=B9=20=D1=81?= =?UTF-8?q?=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B8=20=D0=B5=D1=89=D0=B5=20=D0=BD=D0=B5=20=D0=B8?= =?UTF-8?q?=D0=B7=D0=B2=D0=BB=D0=B5=D1=87=D0=B5=D0=BD=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=B0=D1=80=D1=85=D0=B8=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/testpackage/testpackage-0.3.2/packagedef | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/testpackage/testpackage-0.3.2/packagedef b/tests/testpackage/testpackage-0.3.2/packagedef index 0513c69..9ab4bea 100644 --- a/tests/testpackage/testpackage-0.3.2/packagedef +++ b/tests/testpackage/testpackage-0.3.2/packagedef @@ -1,4 +1,7 @@ - +ПутьКВложенномуФайлу = ОбъединитьПути(ТекущийСценарий().Каталог, "folder", "src-new.os"); +Заглушка = ЗагрузитьСценарий(ПутьКВложенномуФайлу); + Описание.Имя("test") .Версия("0.3.2") - .ВключитьФайл("folder"); + .ВключитьФайл("folder") + .ВключитьФайл("packagedef"); From aa846b5bff9217624960ba74d635ba28915d1fb9 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 30 Sep 2018 23:34:22 +0300 Subject: [PATCH 2/5] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=88=D0=B0=D0=B3=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF=D0=BE=D0=BB=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=82=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/tasks.json | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .vscode/tasks.json diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..d6b77b9 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,45 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + // "_runner": "terminal", + "windows": { + "command": "cmd", + "args": ["/c", "chcp 65001 && "] + }, + "linux": { + "command": "sh", + "args": ["-c"] + }, + "type": "shell", + "suppressTaskName": true, + "tasks": [ + { + "label": "Full testing", + "args": [ + "oscript", + "${workspaceRoot}/tasks/test.os" + ], + "group": { + "kind": "build", + "isDefault": true + }, + // "presentation": { + // "echo": true, + // "reveal": "always", + // "focus": false, + // "panel": "shared", + // "showReuseMessage": true + // }, + "problemMatcher": { + "fileLocation": "absolute", + "pattern": { + "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", + "file": 1, + "location": 2, + "message": 3 + } + } + } + ] +} From 57e445388fa10ac88cc21150691e0954314adef8 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 30 Sep 2018 23:35:00 +0300 Subject: [PATCH 3/5] =?UTF-8?q?=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D1=83=D1=8E=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20=D0=B8?= =?UTF-8?q?=D0=B7=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0,=20=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B5=20=D0=B8=D0=B7=20=D1=81=D0=B8=D1=81=D1=82=D0=B5?= =?UTF-8?q?=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=B0=D1=82=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=B0=20=D0=B4=D0=B2=D0=B8=D0=B6=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/build-install-test.os | 44 ++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/tests/build-install-test.os b/tests/build-install-test.os index 975f75a..c6e2882 100644 --- a/tests/build-install-test.os +++ b/tests/build-install-test.os @@ -1,20 +1,20 @@ -#Использовать asserts +#Использовать "../src/core" +#Использовать asserts #Использовать fs #Использовать tempfiles -#Использовать "../src/core" Перем юТест; Перем мВременныеФайлы; Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт - + юТест = Тестирование; - + ИменаТестов = Новый Массив; - + ИменаТестов.Добавить("ТестДолжен_ПроверитьЧтоПакетСобранКорректно"); ИменаТестов.Добавить("ТестДолжен_ОчиститьКаталогОтСтарыхСкриптовПриОбновленииПакета"); - + Возврат ИменаТестов; КонецФункции @@ -33,51 +33,51 @@ Процедура ТестДолжен_ПроверитьЧтоПакетСобранКорректно() Экспорт Сборщик = Новый СборщикПакета; - + КаталогСборки = юТест.ИмяВременногоФайла(); СоздатьКаталог(КаталогСборки); Сборщик.СобратьПакет(ОбъединитьПути(ТекущийСценарий().Каталог, "testpackage", "testpackage-0.3.1"), Неопределено, КаталогСборки); - + ФайлПакета = Новый Файл(ОбъединитьПути(КаталогСборки, "test-0.3.1.ospx")); - + Утверждения.ПроверитьИстину(ФайлПакета.Существует(), "Файл пакета должен существовать"); ЧтениеАрхива = Новый ЧтениеZipФайла(ФайлПакета.ПолноеИмя); - + ЭлементСодержимого = ЧтениеАрхива.Элементы.Найти("content.zip"); ЭлементМанифеста = ЧтениеАрхива.Элементы.Найти("opm-metadata.xml"); - + Утверждения.ПроверитьНеравенство(Неопределено, ЭлементСодержимого); Утверждения.ПроверитьНеравенство(Неопределено, ЭлементМанифеста); - + КаталогПроверки = ПолучитьИмяВременногоФайла();//юТест.ИмяВременногоФайла(); СоздатьКаталог(КаталогПроверки); - + ЧтениеАрхива.Извлечь(ЭлементСодержимого, КаталогПроверки); ЧтениеАрхива.Закрыть(); - + ЧтениеАрхива = Новый ЧтениеZipФайла(ОбъединитьПути(КаталогПроверки, "content.zip")); ЧтениеАрхива.ИзвлечьВсе(КаталогПроверки); ЧтениеАрхива.Закрыть(); ФайлИсходника = Новый Файл(ОбъединитьПути(КаталогПроверки, "folder/src.os")); Утверждения.ПроверитьИстину(ФайлИсходника.Существует(), "Существует файл в подкаталоге"); - + КонецПроцедуры Процедура ТестДолжен_ОчиститьКаталогОтСтарыхСкриптовПриОбновленииПакета() Экспорт - + //устанавливаем новую версию пакета в которой есть test-new.os // //ожидаем что в каталоге пакета есть только test-new.os //подготовка двух версий пакета - + Сборщик = Новый СборщикПакета; - + КаталогСборкиПервойВерсии = мВременныеФайлы.СоздатьКаталог(); Сборщик.СобратьПакет( - ОбъединитьПути(ТекущийСценарий().Каталог, "testpackage", "testpackage-0.3.1"), + ОбъединитьПути(ТекущийСценарий().Каталог, "testpackage", "testpackage-0.3.1"), Неопределено, КаталогСборкиПервойВерсии); ФайлПакетаВерсии1 = Новый Файл(ОбъединитьПути(КаталогСборкиПервойВерсии, "test-0.3.1.ospx")); @@ -85,11 +85,11 @@ КаталогСборкиВторойВерсии = мВременныеФайлы.СоздатьКаталог(); Сборщик.СобратьПакет( - ОбъединитьПути(ТекущийСценарий().Каталог, "testpackage", "testpackage-0.3.2"), + ОбъединитьПути(ТекущийСценарий().Каталог, "testpackage", "testpackage-0.3.2"), Неопределено, КаталогСборкиВторойВерсии); ФайлПакетаВерсии2 = Новый Файл(ОбъединитьПути(КаталогСборкиВторойВерсии, "test-0.3.2.ospx")); - + Установщик = Новый МенеджерУстановкиПакетов(); Установщик.УстановитьРежимУстановкиПакетов(РежимУстановкиПакетов.Локально); Установщик.УстановитьПакетИзАрхива(ФайлПакетаВерсии1.ПолноеИмя, Истина); @@ -101,7 +101,7 @@ ПутьКФайлуDllТестовогоПакета = ОбъединитьПути( КонстантыOpm.ЛокальныйКаталогУстановкиПакетов, "test","folder","src.dll"); ФайлDllИзСтарогоПакета = Новый Файл(ПутьКФайлуDllТестовогоПакета); - + Ожидаем.Что(ФайлOsИзСтарогоПакета.Существует(), "Файл src.os должен существовать").ЭтоИстина(); Ожидаем.Что(ФайлDllИзСтарогоПакета.Существует(), "Файл src.dll должен существовать").ЭтоИстина(); From 8525c55c68f850fabe28320a15c8f8e30478be20 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 30 Sep 2018 23:46:04 +0300 Subject: [PATCH 4/5] =?UTF-8?q?=D0=95=D1=81=D0=BB=D0=B8=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B5?= =?UTF-8?q?=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=D0=B0=20=D0=B8=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F=D1=86=D0=B8=D0=B8=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=B0=20packagedef=20=D0=B2=D0=BE=D0=B7=D0=BD?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=D0=B5=D1=82=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=BE=D0=B2,=20=D1=82=D0=BE=D0=B3=D0=B4=D0=B0=20?= =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BD=D1=8B=D0=B9=20=D0=BF=D0=BE=D0=B8=D1=81?= =?UTF-8?q?=D0=BA=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=B2=D0=BD?= =?UTF-8?q?=D1=83=D1=82=D1=80=D0=B8=20=D0=B0=D1=80=D1=85=D0=B8=D0=B2=D0=B0?= =?UTF-8?q?=20#813=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B2=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=BD=D1=83=D1=8E=20=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B1=D0=BA=D1=83=20=D0=BE=D1=87=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BA=D0=B0=D1=82=D0=B0=D0=BB=D0=BE=D0=B3=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=D0=B0=20=D0=A3=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B8=D0=BB=20=D0=B4=D0=B0=D0=B2=D0=BD=D0=BE?= =?UTF-8?q?=20=D0=B2=D0=BE=D0=B7=D0=BD=D0=B8=D0=BA=D1=88=D1=83=D1=8E=20?= =?UTF-8?q?=D0=BF=D1=83=D1=82=D0=B0=D0=BD=D0=B8=D1=86=D1=83=20=D0=B2=20?= =?UTF-8?q?=D0=BE=D0=B4=D0=B8=D0=BD=D0=B0=D0=BA=D0=BE=D0=B2=D1=8B=D1=85=20?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=B0=D1=85=20=D0=BE=D0=B1=D1=8A=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D0=B2=20=D1=80=D0=B0=D0=B7=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B2,=20=D0=B8=D0=B7-=D0=B7=D0=B0?= =?UTF-8?q?=20=D1=87=D0=B5=D0=B3=D0=BE=20=D0=B8=20=D0=B1=D1=8B=D0=BB=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=BF=D1=83=D1=89=D0=B5=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D0=B4=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D1=85=20=D0=BE=D1=82?= =?UTF-8?q?=D0=BB=D0=B0=D0=B4=D0=BE=D1=87=D0=BD=D1=8B=D1=85=20=D1=81=D0=BE?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9=20=D1=80=D0=B5=D1=84?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\260\320\272\320\265\321\202\320\260.os" | 199 +++++++++++------- 1 file changed, 121 insertions(+), 78 deletions(-) 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 903d5e8..31f4a83 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" @@ -13,60 +13,65 @@ Перем Метаданные; Процедура УстановитьПакетИзАрхива(Знач ФайлАрхива) Экспорт - + Лог.Отладка("Устанавливаю пакет из архива: " + ФайлАрхива); Если мЗависимостиВРаботе = Неопределено Тогда мЗависимостиВРаботе = Новый Соответствие; КонецЕсли; - + мВременныйКаталогУстановки = ВременныеФайлы.СоздатьКаталог(); Лог.Отладка("Временный каталог установки: " + мВременныйКаталогУстановки); - + + ПутьУстановки = ""; Попытка - + Лог.Отладка("Открываем архив пакета"); ЧтениеПакета = Новый ЧтениеZipФайла; ЧтениеПакета.Открыть(ФайлАрхива); - + ФайлСодержимого = ИзвлечьОбязательныйФайл(ЧтениеПакета, КонстантыOpm.ИмяФайлаСодержимогоПакета); ФайлМетаданных = ИзвлечьОбязательныйФайл(ЧтениеПакета, КонстантыOpm.ИмяФайлаМетаданныхПакета); - + Метаданные = ПрочитатьМетаданныеПакета(ФайлМетаданных); ИмяПакета = Метаданные.Свойства().Имя; - - ПутьУстановки = НайтиСоздатьКаталогУстановки(ИмяПакета); - + + ОбъектКаталогУстановки = НайтиСоздатьКаталогУстановки(ИмяПакета); + ПутьУстановки = ОбъектКаталогУстановки.ПолноеИмя; + Лог.Информация("Устанавливаю пакет " + ИмяПакета); ПроверитьВерсиюСреды(Метаданные); Если мЗависимостиВРаботе[ИмяПакета] = "ВРаботе" Тогда ВызватьИсключение "Циклическая зависимость по пакету " + ИмяПакета; КонецЕсли; - + мЗависимостиВРаботе.Вставить(ИмяПакета, "ВРаботе"); - + СтандартнаяОбработка = Истина; - УстановитьФайлыПакета(ПутьУстановки, ФайлСодержимого, СтандартнаяОбработка); + УстановитьФайлыПакета(ОбъектКаталогУстановки, ФайлСодержимого, СтандартнаяОбработка); Если СтандартнаяОбработка Тогда - СгенерироватьСкриптыЗапускаПриложенийПриНеобходимости(ПутьУстановки.ПолноеИмя, Метаданные); - РаботаСПакетами.СоздатьКонфигурационныеФайлыОСкрипт(ПутьУстановки.ПолноеИмя, Метаданные, мРежимУстановкиПакетов); + СгенерироватьСкриптыЗапускаПриложенийПриНеобходимости(ПутьУстановки, Метаданные); + РаботаСПакетами.СоздатьКонфигурационныеФайлыОСкрипт(ПутьУстановки, Метаданные, мРежимУстановкиПакетов); КонецЕсли; - СохранитьФайлМетаданныхПакета(ПутьУстановки.ПолноеИмя, ФайлМетаданных); - + СохранитьФайлМетаданныхПакета(ПутьУстановки, ФайлМетаданных); + ЧтениеПакета.Закрыть(); - + ВременныеФайлы.УдалитьФайл(мВременныйКаталогУстановки); - + мЗависимостиВРаботе.Вставить(ИмяПакета, "Установлен"); - + Исключение - УдалитьКаталогУстановкиПриОшибке(ПутьУстановки); + Лог.Предупреждение("Обрабатываю возникшую ошибку..."); + Если ЗначениеЗаполнено(ПутьУстановки) Тогда + УдалитьКаталогУстановкиПриОшибке(ПутьУстановки); + КонецЕсли; ЧтениеПакета.Закрыть(); ВременныеФайлы.УдалитьФайл(мВременныйКаталогУстановки); ВызватьИсключение; КонецПопытки; - + Лог.Информация("Установка завершена"); - + КонецПроцедуры Процедура УстановитьКешПакетов(КэшПакетовВУстановке) Экспорт @@ -82,12 +87,12 @@ КонецПроцедуры Процедура ПроверитьВерсиюСреды(Манифест) - + Свойства = Манифест.Свойства(); Если НЕ Свойства.Свойство("ВерсияСреды") Тогда Возврат; КонецЕсли; - + ИмяПакета = Свойства.Имя; ТребуемаяВерсияСреды = Свойства.ВерсияСреды; СистемнаяИнформация = Новый СистемнаяИнформация; @@ -98,12 +103,12 @@ "Ошибка установки пакета <%1>: Обнаружена устаревшая версия движка OneScript. |Требуемая версия: %2 |Текущая версия: %3 - |Обновите OneScript перед установкой пакета", + |Обновите OneScript перед установкой пакета", ИмяПакета, ТребуемаяВерсияСреды, ВерсияСреды ); - + ВызватьИсключение ТекстСообщения; КонецЕсли; @@ -116,54 +121,72 @@ КонецПроцедуры Функция НайтиСоздатьКаталогУстановки(Знач ИдентификаторПакета) - - ПутьУстановки = Новый Файл(ОбъединитьПути(мЦелевойКаталог, ИдентификаторПакета)); - Лог.Отладка("Путь установки пакета: " + ПутьУстановки.ПолноеИмя); - - Если Не ПутьУстановки.Существует() Тогда - СоздатьКаталог(ПутьУстановки.ПолноеИмя); - ИначеЕсли ПутьУстановки.ЭтоФайл() Тогда - ВызватьИсключение "Не удалось создать каталог " + ПутьУстановки.ПолноеИмя; + + ОбъектКаталогУстановки = Новый Файл(ОбъединитьПути(мЦелевойКаталог, ИдентификаторПакета)); + ПутьУстановки = ОбъектКаталогУстановки.ПолноеИмя; + Лог.Отладка("Путь установки пакета: " + ПутьУстановки); + + Если Не ОбъектКаталогУстановки.Существует() Тогда + СоздатьКаталог(ПутьУстановки); + ИначеЕсли ОбъектКаталогУстановки.ЭтоФайл() Тогда + ВызватьИсключение "Не удалось создать каталог " + ПутьУстановки; КонецЕсли; - - Возврат ПутьУстановки; - + + Возврат ОбъектКаталогУстановки; + КонецФункции -Процедура УстановитьФайлыПакета(Знач ПутьУстановки, Знач ФайлСодержимого, СтандартнаяОбработка) - +Процедура УстановитьФайлыПакета(Знач ОбъектКаталогУстановки, Знач ФайлСодержимого, СтандартнаяОбработка) + ЧтениеСодержимого = Новый ЧтениеZipФайла(ФайлСодержимого); - КаталогУстановки = ПутьУстановки.ПолноеИмя; + КаталогУстановки = ОбъектКаталогУстановки.ПолноеИмя; + + Попытка - Попытка - Лог.Отладка("Устанавливаю файлы пакета из архива"); - УдалитьУстаревшиеФайлы(ПутьУстановки); + УдалитьУстаревшиеФайлы(ОбъектКаталогУстановки); ИзвлечьФайл(ЧтениеСодержимого, КонстантыOpm.ИмяФайлаСпецификацииПакета, КаталогУстановки); - ОбработчикСобытий = ПолучитьОбработчикСобытий(КаталогУстановки); + Попытка + ОбработчикСобытий = ПолучитьОбработчикСобытий(КаталогУстановки); + Исключение + ОписаниеОшибки = ОписаниеОшибки(); + Если Найти(ОписаниеОшибки, "System.IO.FileNotFoundException") <> 0 Тогда + ОбработчикСобытий = Неопределено; + Иначе + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + ПолученОбработчикСобытий = ОбработчикСобытий <> Неопределено; - ВызватьСобытиеПередУстановкой(ОбработчикСобытий, КаталогУстановки, ЧтениеСодержимого); + Если ПолученОбработчикСобытий Тогда + ВызватьСобытиеПередУстановкой(ОбработчикСобытий, КаталогУстановки, ЧтениеСодержимого); + КонецЕсли; ЧтениеСодержимого.ИзвлечьВсе(КаталогУстановки); - + + Если Не ПолученОбработчикСобытий Тогда + ОбработчикСобытий = ПолучитьОбработчикСобытий(КаталогУстановки); + КонецЕсли; + ВызватьСобытиеПриУстановке(ОбработчикСобытий, КаталогУстановки, СтандартнаяОбработка); - + Исключение ЧтениеСодержимого.Закрыть(); ВызватьИсключение; КонецПопытки; - + ЧтениеСодержимого.Закрыть(); - + КонецПроцедуры -Процедура УдалитьУстаревшиеФайлы(Знач ПутьУстановки) +Процедура УдалитьУстаревшиеФайлы(Знач ОбъектКаталогУстановки) Лог.Отладка("Удаляю устаревшие файлы"); - УдалитьФайлыВКаталоге(ПутьУстановки.ПолноеИмя, "*.os", Истина); - УдалитьФайлыВКаталоге(ПутьУстановки.ПолноеИмя, "*.dll", Истина); - УдалитьФайлыВКаталоге(ПутьУстановки.ПолноеИмя, "packagedef", Ложь); + ПутьУстановки = ОбъектКаталогУстановки.ПолноеИмя; + УдалитьФайлыВКаталоге(ПутьУстановки, "*.os", Истина); + УдалитьФайлыВКаталоге(ПутьУстановки, "*.dll", Истина); + УдалитьФайлыВКаталоге(ПутьУстановки, "packagedef", Ложь); КонецПроцедуры Процедура УдалитьФайлыВКаталоге(Знач ПутьКаталога, Знач МаскаФайлов, Знач ИскатьВПодкаталогах = Истина) @@ -180,7 +203,7 @@ Если ФС.ФайлСуществует(ПутьКФайлуСпецификации) Тогда Лог.Отладка("Найден файл спецификации пакета"); Лог.Отладка("Компиляция файла спецификации пакета"); - + ОписаниеПакета = Новый ОписаниеПакета(); ВнешнийКонтекст = Новый Структура("Описание", ОписаниеПакета); ОбработчикСобытий = ЗагрузитьСценарий(ПутьКФайлуСпецификации, ВнешнийКонтекст); @@ -218,21 +241,21 @@ КонецПроцедуры Процедура СгенерироватьСкриптыЗапускаПриложенийПриНеобходимости(Знач КаталогУстановки, Знач ОписаниеПакета) - + ИмяПакета = ОписаниеПакета.Свойства().Имя; - + Для Каждого ФайлПриложения Из ОписаниеПакета.ИсполняемыеФайлы() Цикл - + ИмяСкриптаЗапуска = ?(ПустаяСтрока(ФайлПриложения.ИмяПриложения), ИмяПакета, ФайлПриложения.ИмяПриложения); Лог.Информация("Регистрация приложения: " + ИмяСкриптаЗапуска); - + ОбъектФайл = Новый Файл(ОбъединитьПути(КаталогУстановки, ФайлПриложения.Путь)); - + Если Не ОбъектФайл.Существует() Тогда Лог.Ошибка("Файл приложения " + ОбъектФайл.ПолноеИмя + " не существует"); ВызватьИсключение "Некорректные данные в метаданных пакета"; КонецЕсли; - + Если мРежимУстановкиПакетов = РежимУстановкиПакетов.Локально Тогда КаталогУстановкиСкриптовЗапускаПриложений = ОбъединитьПути(КонстантыOpm.ЛокальныйКаталогУстановкиПакетов, "bin"); ФС.ОбеспечитьКаталог(КаталогУстановкиСкриптовЗапускаПриложений); @@ -245,11 +268,11 @@ Иначе ВызватьИсключение "Неизвестный режим установки пакетов <" + мРежимУстановкиПакетов + ">"; КонецЕсли; - + СоздатьСкриптЗапуска(ИмяСкриптаЗапуска, ОбъектФайл.ПолноеИмя, КаталогУстановкиСкриптовЗапускаПриложений); - + КонецЦикла; - + КонецПроцедуры Процедура СоздатьСкриптЗапуска(Знач ИмяСкриптаЗапуска, Знач ПутьФайлаПриложения, Знач Каталог) Экспорт @@ -281,7 +304,7 @@ КонецПроцедуры Функция ПрочитатьМетаданныеПакета(Знач ФайлМетаданных) - + Перем Метаданные; Лог.Отладка("Чтение метаданных пакета"); Попытка @@ -290,24 +313,24 @@ Лог.Отладка("XML загружен"); Сериализатор = Новый СериализацияМетаданныхПакета; Метаданные = Сериализатор.ПрочитатьXML(Чтение); - + Чтение.Закрыть(); Исключение Чтение.Закрыть(); ВызватьИсключение; КонецПопытки; Лог.Отладка("Метаданные прочитаны"); - + Возврат Метаданные; - + КонецФункции -Процедура СохранитьФайлМетаданныхПакета(Знач КаталогУстановки, Знач ПутьКФайлуМетаданных) - - ПутьСохранения = ОбъединитьПути(КаталогУстановки, КонстантыOpm.ИмяФайлаМетаданныхПакета); +Процедура СохранитьФайлМетаданныхПакета(Знач ПутьУстановки, Знач ПутьКФайлуМетаданных) + + ПутьСохранения = ОбъединитьПути(ПутьУстановки, КонстантыOpm.ИмяФайлаМетаданныхПакета); ДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлуМетаданных); ДанныеФайла.Записать(ПутьСохранения); - + КонецПроцедуры Процедура УдалитьКаталогУстановкиПриОшибке(Знач Каталог) @@ -324,28 +347,48 @@ // Функция ИзвлечьОбязательныйФайл(Знач Чтение, Знач ИмяФайла) - + ПутьФайла = ИзвлечьФайл(Чтение, ИмяФайла, мВременныйКаталогУстановки); Если ПутьФайла = "" Тогда ВызватьИсключение "Неверная структура пакета. Не найден файл " + ИмяФайла; КонецЕсли; - + Возврат ПутьФайла; - + КонецФункции Функция ИзвлечьФайл(Знач Чтение, Знач ИмяФайла, Знач КаталогКудаИзвлечь) Лог.Отладка("Извлечение: %1", ИмяФайла); - Элемент = Чтение.Элементы.Найти(ИмяФайла); + Лог.Отладка("Извлечение: КаталогКудаИзвлечь %1", КаталогКудаИзвлечь); + + Элемент = НайтиЭлементАрхива(Чтение, ИмяФайла); Если Элемент = Неопределено Тогда Лог.Отладка("Не удалось извлечь файл %1", ИмяФайла); Возврат ""; КонецЕсли; - + Чтение.Извлечь(Элемент, КаталогКудаИзвлечь); - + Возврат ОбъединитьПути(мВременныйКаталогУстановки, ИмяФайла); - + +КонецФункции + +Функция НайтиЭлементАрхива(Знач Чтение, Знач ПолноеИмя) + Лог.Отладка("НайтиЭлементАрхива: ищем в архиве файл %1", ПолноеИмя); + Файл = Новый Файл(ПолноеИмя); + Если Лев(Файл.Путь, 2) = ".\" Или Лев(Файл.Путь, 2) = "./" Тогда + ПолноеИмя = Файл.Имя; + КонецЕсли; + Для Каждого Элемент Из Чтение.Элементы Цикл + + Если НРег(Элемент.ПолноеИмя) = НРег(ПолноеИмя) Тогда + Лог.Отладка("НайтиЭлементАрхива: нашли Элемент.ПолноеИмя %1", Элемент.ПолноеИмя); + + Возврат Элемент; + КонецЕсли; + КонецЦикла; + Лог.Отладка("НайтиЭлементАрхива: не нашли элемент"); + Возврат Неопределено; КонецФункции Лог = Логирование.ПолучитьЛог("oscript.app.opm"); From 2baf42a2bde46bf5ed99c7e5abc031a54a87d872 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 30 Sep 2018 23:50:39 +0300 Subject: [PATCH 5/5] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=81=D0=BF=D0=B5=D1=86=D0=B8=D0=B0=D0=BB=D1=8C=D0=BD=D1=83?= =?UTF-8?q?=D1=8E=20=D0=B7=D0=B0=D0=B3=D0=BB=D1=83=D1=88=D0=BA=D1=83=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20packagedef=20=D0=BF=D1=80=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D1=8B=D1=85=20=D0=B4=D0=B5=D0=B9=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=B8=D0=B9=20=D0=BF=D1=80=D0=B8=20=D1=83=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B5=20=D0=BF=D0=B0=D0=BA=D0=B5?= =?UTF-8?q?=D1=82=D0=B0,=20=D0=BA=D0=BE=D0=B3=D0=B4=D0=B0=20=D0=B5=D1=89?= =?UTF-8?q?=D0=B5=20=D0=BD=D0=B5=20=D0=B8=D0=B7=D0=B2=D0=BB=D0=B5=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BD=D0=B8=D0=BA=D0=B0=D0=BA=D0=B8=D1=85?= =?UTF-8?q?=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=BF=D0=B0=D0=BA?= =?UTF-8?q?=D0=B5=D1=82=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=20packagedef=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B2=D1=8B=D0=BC=20=D0=B2=20=D1=81=D0=BF=D0=B8=D1=81=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D0=B5=D0=BC=D1=8B?= =?UTF-8?q?=D1=85=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=83=D1=81=D0=BA=D0=BE=D1=80=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0=20=D0=94=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BF=D1=83=D1=81=D1=82=D1=8B=D0=B5?= =?UTF-8?q?=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B8=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D0=B9=20=D0=9F?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B4=D0=A3=D1=81=D1=82=D0=B0=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=BE=D0=B9=20=D0=9F=D1=80=D0=B8=D0=A3=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 55 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/packagedef b/packagedef index e0c22bd..323c7a3 100644 --- a/packagedef +++ b/packagedef @@ -1,4 +1,32 @@ +//////////////////////////////////////////////////////////// +// Описание пакета для сборки и установки +// Полную документацию см. на hub.oscript.io/packaging +// + +/////////////////////////////////////////////////////////////////// +// Процедуры установки пакета с клиентской машины +/////////////////////////////////////////////////////////////////// + +// Вызывается пакетным менеджером перед установкой пакета на клиентскую машину. +// +// Параметры: +// КаталогУстановкиПакета - строка. Путь в который пакетный менеджер устанавливает текущий пакет. +// ЧтениеZipФайла - ЧтениеZipФайла. Архив пакета. +// +Процедура ПередУстановкой(Знач КаталогУстановкиПакета, Знач ЧтениеZipФайла) Экспорт + +КонецПроцедуры + +// Вызывается пакетным менеджером после распаковки пакета на клиентскую машину. +// +// Параметры: +// КаталогУстановкиПакета - строка. Путь в который пакетный менеджер устанавливает текущий пакет. +// +Процедура ПриУстановке(Знач КаталогУстановкиПакета, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + Процедура ПередСборкой(Знач РабочийКаталог) Экспорт КаталогМодулей = ОбъединитьПути(РабочийКаталог, "oscript_modules"); @@ -14,37 +42,46 @@ СтрокаЗапуска = СтрШаблон("%1 install -l", ИмяУтилиты); ВыполнитьОбязательныйШаг(СтрокаЗапуска, РабочийКаталог); - + СобираемаяВерсия = Описание.Свойства().Версия; Если СобираемаяВерсия = "0.14.4" Тогда УдалитьФайлы(ОбъединитьПути(КаталогМодулей, "gitrunner")); СтрокаЗапуска = "oscript src/cmd/opm.os install -l"; ВыполнитьОбязательныйШаг(СтрокаЗапуска, РабочийКаталог); - + // Подчищаем за 1bdd // TODO: сделать зависимости этапа разработки УдалитьФайлы(ОбъединитьПути(КаталогМодулей, "bin")); УдалитьФайлы(ОбъединитьПути(КаталогМодулей, "1bdd")); - + КонецЕсли; - + КонецПроцедуры Процедура ВыполнитьОбязательныйШаг(Знач СтрокаЗапуска, Знач РабочийКаталог) Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог); Процесс.Запустить(); Процесс.ОжидатьЗавершения(); - + Если Процесс.КодВозврата <> 0 Тогда ВызватьИсключение "Ошибка сборки пакета"; КонецЕсли; КонецПроцедуры ПутьКСценариюКонстант = ОбъединитьПути(ТекущийСценарий().Каталог, "src/core", "Модули", "КонстантыOpm.os"); -Константы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюКонстант); + +// специальная заглушка для правильной компиляции packagedef при первых действий при установке пакета, +// когда еще не извлечено никаких файлов пакет +ФайлКонстант = Новый Файл(ПутьКСценариюКонстант); +Если ФайлКонстант.Существует() Тогда + Константы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюКонстант); + ВерсияПродукта = Константы_ЛокальнаяВерсия.ВерсияПродукта; +Иначе + ВерсияПродукта = "1.0.0"; +КонецЕсли; Описание.Имя("opm") - .Версия(Константы_ЛокальнаяВерсия.ВерсияПродукта) + .Версия(ВерсияПродукта) .ВерсияСреды("1.0.19") .ЗависитОт("fs", "0.5.0") .ЗависитОт("asserts", "0.4.0") @@ -54,9 +91,9 @@ .ЗависитОт("cli", "0.9.10") .ЗависитОт("tempfiles", "0.2.2") .ЗависитОт("gitrunner", "1.5.1") + .ВключитьФайл("packagedef") .ВключитьФайл("src") .ВключитьФайл("oscript_modules") - .ВключитьФайл("packagedef") .ОпределяетКласс("КэшУстановленныхПакетов", "src/core/Классы/КэшУстановленныхПакетов.os") .ОпределяетКласс("МенеджерПолученияПакетов", "src/core/Классы/МенеджерПолученияПакетов.os") .ОпределяетКласс("МенеджерУстановкиПакетов", "src/core/Классы/МенеджерУстановкиПакетов.os") @@ -71,4 +108,4 @@ .ОпределяетМодуль("РаботаСОписаниемПакета", "src/core/Модули/РаботаСОписаниемПакета.os") .ОпределяетМодуль("РаботаСПакетами", "src/core/Модули/РаботаСПакетами.os") .ОпределяетМодуль("РежимУстановкиПакетов", "src/core/Модули/РежимУстановкиПакетов.os") - .ИсполняемыйФайл("src/cmd/opm.os"); + .ИсполняемыйФайл("src/cmd/opm.os");