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

468 / cборка простых внешних обработок. #472

Merged
merged 6 commits into from
Dec 18, 2024
Merged
Show file tree
Hide file tree
Changes from 4 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
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//

#Область СлужебныйПрограммныйИнтерфейс

Функция СкомпилирватьВнешнуюОбработку(ТекстМодуляОбъект = "", Знач ТекстМодуляФормы = "") Экспорт

// Для сборки используется утилита v8unpack - https://github.com/e8tools/v8unpack

ИдентификаторМодуляОбъекта = "00ab4620-8498-4b18-a4f8-18b53138fcb5.0";
ИдентификаторФормы = "a10cd1fd-c4ba-437c-9925-b7354192a1ea.0";

РабочийКаталог = ЮТФайлы.ОбъединитьПути(КаталогВременныхФайлов(), "yaxunit-v8unpack");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔗Не рекомендуемый вызов функции КаталогВременныхФайлов()

CODE_SMELL Codesmell  MAJOR Major

standard badpractice  Why is this an issue?

ПодготовитьРабочийКаталог(РабочийКаталог);

КаталогСборки = ЮТФайлы.ОбъединитьПути(РабочийКаталог, "build");
КаталогФайловОбработки = ЮТФайлы.ОбъединитьПути(КаталогСборки, "unpack");

УдалитьФайлы(КаталогСборки);
СоздатьКаталог(КаталогСборки);

РаспаковатьОбработку(РабочийКаталог);

ЮТФайлы.СкопироватьКаталог(ЮТФайлы.ОбъединитьПути(РабочийКаталог, "unpack"), КаталогФайловОбработки);

// Модуль объекта
ИмяФайлаМодуляОбъекта = ЮТФайлы.ОбъединитьПути(КаталогФайловОбработки, ИдентификаторМодуляОбъекта, "text");
ЮТФайлы.ЗаписатьТекстВФайла(ИмяФайлаМодуляОбъекта, ТекстМодуляОбъект);

// Модуль формы
ИмяФайлаФормы = ЮТФайлы.ОбъединитьПути(КаталогФайловОбработки, ИдентификаторФормы);
ДанныеФормы = ЮТФайлы.ДанныеТекстовогоФайла(ИмяФайлаФормы);
ТекстМодуляФормы = СтрЗаменить(ТекстМодуляФормы, """", """""");
ДанныеФормы = СтрЗаменить(ДанныеФормы, "MODULE_PLACEHOLDER", ТекстМодуляФормы);
ЮТФайлы.ЗаписатьТекстВФайла(ИмяФайлаФормы, ДанныеФормы);

СобратьОбработку(РабочийКаталог);

Возврат ЮТФайлы.ОбъединитьПути(КаталогСборки, "out.epf");

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура ПодготовитьРабочийКаталог(РабочийКаталог)

Если ЮТФайлы.Существует(РабочийКаталог) И НайтиФайлы(РабочийКаталог, "*").Количество() Тогда
Возврат;
КонецЕсли;

СоздатьКаталог(РабочийКаталог);
Данные = ПолучитьОбщийМакет("ЮТV8UnpackWS");
Архив = Новый ЧтениеZipФайла(Данные.ОткрытьПотокДляЧтения());
Архив.ИзвлечьВсе(РабочийКаталог);
Архив.Закрыть();

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

Процедура РаспаковатьОбработку(РабочийКаталог)

Если ЮТФайлы.Существует(ЮТФайлы.ОбъединитьПути(РабочийКаталог, "unpack")) Тогда
Возврат;
КонецЕсли;

Если ЮТОкружение.ЭтоWindows() Тогда
Команда = "unpack-epf.bat";
Иначе
Команда = "/bin/bash unpack-epf.sh";
КонецЕсли;

ВыполнитьКомандуСистемы(РабочийКаталог, Команда, "Распаковка шаблона обработки");

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

Процедура СобратьОбработку(РабочийКаталог)

Если ЮТОкружение.ЭтоWindows() Тогда
Команда = "build-epf.bat";
Иначе
Команда = "/bin/bash build-epf.sh";
КонецЕсли;

ВыполнитьКомандуСистемы(РабочийКаталог, Команда, "Сборка обработки");

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

Процедура ВыполнитьКомандуСистемы(РабочийКаталог, Знач Команда, Описание)

КодВозврата = Неопределено;
ФайлЛога = ПолучитьИмяВременногоФайла("log");
Команда = СтрШаблон("%1 > %2 2>&1", Команда, ФайлЛога);

Если ЮТОкружение.ЭтоWindows() Тогда
КодВозврата = ВыполнитьКомандуОСБезПоказаЧерногоОкна(Команда, РабочийКаталог);
Иначе
Команда = "timeout 5s " + Команда;
КодВозврата = Неопределено;
ЗапуститьПриложение(Команда, РабочийКаталог, Истина, КодВозврата);
КонецЕсли;

Если КодВозврата <> 0 Тогда
Сообщение = СтрШаблон("%1 завершилась с ошибкой. Команда: `%2`; рабочий каталог: `%3`", Описание, Команда, РабочийКаталог);
Если ЮТФайлы.Существует(ФайлЛога) Тогда
Сообщение = СтрШаблон("%1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔗Уберите инициализацию параметров метода "СтрШаблон" вложенными методами

CODE_SMELL Codesmell  MINOR Minor

standard badpractice brainoverload parameters  Why is this an issue?

|Вывод команды:
|%2", Сообщение, ЮТФайлы.ДанныеТекстовогоФайла(ФайлЛога));
// УдалитьФайлы(ФайлЛога);
КонецЕсли;

ВызватьИсключение Сообщение;
КонецЕсли;

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

Функция ВыполнитьКомандуОСБезПоказаЧерногоОкна(ТекстКоманды, РабочийКаталог) Экспорт

#Если НЕ ВебКлиент Тогда

WshShell = Новый COMОбъект("WScript.Shell");
WshShell.CurrentDirectory = РабочийКаталог;
Рез = WshShell.Run(ТекстКоманды, 0, -1);

Возврат Рез;

#КонецЕсли
КонецФункции

#КонецОбласти
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="8c504a00-5ff1-46bb-9895-ee06bcb64454">
<name>ЮТВнешниеОбработкиСлужебныйСервер</name>
<synonym>
<key>ru</key>
<value>Внешние обработки служебный сервер</value>
</synonym>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
Original file line number Diff line number Diff line change
Expand Up @@ -499,10 +499,13 @@

Функция ВыполнитьТестыМодуля(ТестовыйМодуль)

МетаданныеМодуля = ТестовыйМодуль.Метаданные;
ЮТЛогирование.Информация(СтрШаблон("Запуск тестов модуля `%1.%2`", МетаданныеМодуля.Расширение, МетаданныеМодуля.Имя));

Наборы = НаборыТестовПоКонтекстам(ТестовыйМодуль);
ТестовыйМодульОблегченный = ЮТКоллекции.СкопироватьСтруктуру(ТестовыйМодуль);
ТестовыйМодульОблегченный.НаборыТестов = Новый Массив();

РезультатыКлиентскихТестов = Неопределено;
РезультатыСерверныхТестов = Неопределено;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,6 @@
Контекст.КоличествоВыполненныхТестов = ПрогрессСервер;
КонецЕсли;
#КонецЕсли
МетаданныеМодуля = ОписаниеСобытия.Модуль.Метаданные;
ЮТЛогирование.Информация(СтрШаблон("Запуск тестов модуля `%1.%2`", МетаданныеМодуля.Расширение, МетаданныеМодуля.Имя));

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

Expand Down
12 changes: 2 additions & 10 deletions exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -160,16 +160,8 @@

Функция ДанныеТекстовогоФайла(ИмяФайла) Экспорт

#Если НЕ ВебКлиент Тогда
Чтение = Новый ЧтениеТекста;
Чтение.Открыть(ИмяФайла, "UTF-8");
Текст = Чтение.Прочитать();
Чтение.Закрыть();

Возврат Текст;
#Иначе
ВызватьИсключение "Чтение данных текстовых файлов в веб-клиенте не поддерживается";
#КонецЕсли
ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ДанныеТекстовогоФайла", "ЮТФайлы.ДанныеТекстовогоФайла", "24.12");
Возврат ЮТФайлы.ДанныеТекстовогоФайла(ИмяФайла);

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

Expand Down
33 changes: 33 additions & 0 deletions exts/yaxunit/src/CommonModules/ЮТОкружение/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,39 @@

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

// Проверяет тип текущей операционной системы
//
// Возвращаемое значение:
// Булево
Функция ЭтоWindows() Экспорт

Информация = Новый СистемнаяИнформация();
Возврат Информация.ТипПлатформы = ТипПлатформы.Windows_x86 Или Информация.ТипПлатформы = ТипПлатформы.Windows_x86_64;

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

// Проверяет тип текущей операционной системы
//
// Возвращаемое значение:
// Булево
Функция ЭтоLinux() Экспорт

Информация = Новый СистемнаяИнформация();
Возврат Информация.ТипПлатформы = ТипПлатформы.Linux_x86 Или Информация.ТипПлатформы = ТипПлатформы.Linux_x86_64;

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

// Проверяет тип текущей операционной системы
//
// Возвращаемое значение:
// Булево
Функция ЭтоMac() Экспорт

Информация = Новый СистемнаяИнформация();
Возврат Информация.ТипПлатформы = ТипПлатформы.MacOS_x86 Или Информация.ТипПлатформы = ТипПлатформы.MacOS_x86_64;

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

// Возвращает код языка интерфейса.
//
// Возвращаемое значение:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@

Попытка

Текст = ЮТОбщий.ДанныеТекстовогоФайла(ПутьКФайлу);
Текст = ЮТФайлы.ДанныеТекстовогоФайла(ПутьКФайлу);

Если ЗначениеЗаполнено(Текст) Тогда
ДанныеФайла = ЮТОбщий.ЗначениеИзJSON(Текст);
Expand Down
48 changes: 48 additions & 0 deletions exts/yaxunit/src/CommonModules/ЮТФайлы/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,26 @@

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

Процедура СкопироватьКаталог(КаталогИсточник, КаталогПриемник) Экспорт

Если НЕ Существует(КаталогПриемник) Тогда
СоздатьКаталог(КаталогПриемник);
КонецЕсли;

Для Каждого Файл Из НайтиФайлы(КаталогИсточник, "*") Цикл

Если СтрСравнить(Файл.ПолноеИмя, КаталогИсточник) = 0 Тогда
Продолжить;
ИначеЕсли Файл.ЭтоКаталог() Тогда
СкопироватьКаталог(Файл.ПолноеИмя, ОбъединитьПути(КаталогПриемник, Файл.Имя));
Иначе
КопироватьФайл(Файл.ПолноеИмя, ОбъединитьПути(КаталогПриемник, Файл.Имя));
КонецЕсли;

КонецЦикла;

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

Процедура СоздатьКаталогРекурсивно(Путь) Экспорт

Файл = Новый Файл(Путь);
Expand All @@ -174,6 +194,34 @@

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

Функция ДанныеТекстовогоФайла(ИмяФайла) Экспорт

#Если НЕ ВебКлиент Тогда
Чтение = Новый ЧтениеТекста;
Чтение.Открыть(ИмяФайла, "UTF-8");
Текст = Чтение.Прочитать();
Чтение.Закрыть();

Возврат Текст;
#Иначе
ВызватьИсключение "Чтение данных текстовых файлов в веб-клиенте не поддерживается";
#КонецЕсли

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

Процедура ЗаписатьТекстВФайла(ИмяФайла, Данные) Экспорт

#Если НЕ ВебКлиент Тогда
Запись = Новый ЗаписьТекста(ИмяФайла, "UTF-8");
Запись.Записать(Данные);
Запись.Закрыть();

#Иначе
ВызватьИсключение "Запись данных текстовых файлов в веб-клиенте не поддерживается";
#КонецЕсли

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции
Expand Down
Binary file not shown.
10 changes: 10 additions & 0 deletions exts/yaxunit/src/CommonTemplates/ЮТV8UnpackWS/ЮТV8UnpackWS.mdo
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonTemplate xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c08cb885-86fb-41fb-b8fc-9a407c087f60">
<name>ЮТV8UnpackWS</name>
<synonym>
<key>ru</key>
<value>v8unpack рабочий каталог</value>
</synonym>
<comment>Содержит исполняемые файлы, скрипты и шаблоны обработок</comment>
<templateType>BinaryData</templateType>
</mdclass:CommonTemplate>
2 changes: 2 additions & 0 deletions exts/yaxunit/src/Configuration/Configuration.mdo
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
<commonTemplates>CommonTemplate.ЮТ_СловарьПодражателя_Люди_МужскиеОтчества_ru</commonTemplates>
<commonTemplates>CommonTemplate.ЮТ_СловарьПодражателя_Люди_МужскиеФамилии_ru</commonTemplates>
<commonTemplates>CommonTemplate.ЮТRegEx1CAddin</commonTemplates>
<commonTemplates>CommonTemplate.ЮТV8UnpackWS</commonTemplates>
<commonTemplates>CommonTemplate.ЮТYaxUnitAddIn</commonTemplates>
<commonTemplates>CommonTemplate.ЮТИнформацияОбОшибке</commonTemplates>
<commonTemplates>CommonTemplate.ЮТОписаниеМетаданных</commonTemplates>
Expand All @@ -64,6 +65,7 @@
<commonModules>CommonModule.МокитоПроверки</commonModules>
<commonModules>CommonModule.МокитоСлужебный</commonModules>
<commonModules>CommonModule.ЮТАсинхроннаяОбработкаСлужебныйКлиент</commonModules>
<commonModules>CommonModule.ЮТВнешниеОбработкиСлужебныйСервер</commonModules>
<commonModules>CommonModule.ЮТДымовыеТесты</commonModules>
<commonModules>CommonModule.ЮТДымовыеТестыСлужебныйВызовСервера</commonModules>
<commonModules>CommonModule.ЮТДымовыеТестыСлужебныйКлиентСервер</commonModules>
Expand Down
Loading
Loading