From 43d19a07617f14821d8a2db3efdd3d70073e6b54 Mon Sep 17 00:00:00 2001 From: Aleksey Khorev Date: Tue, 29 Jan 2019 21:08:33 +0300 Subject: [PATCH 1/3] =?UTF-8?q?fix=20#38=20=D0=97=D0=B0=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5=D1=81=D1=81=D0=B0=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 1 + ...20\274\320\260\320\275\320\264\320\260.os" | 104 ++++++++++++------ 2 files changed, 72 insertions(+), 33 deletions(-) diff --git a/packagedef b/packagedef index 7d41ab5..b3d59be 100644 --- a/packagedef +++ b/packagedef @@ -4,6 +4,7 @@ .ВерсияСреды("1.0.17") .ЗависитОт("logos") .ЗависитОт("asserts") + .ЗависитОт("semver") .ЗависитОт("tempfiles") .ВключитьФайл("src") .ВключитьФайл("features") diff --git "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" index b3aa234..308765b 100644 --- "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" +++ "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" @@ -3,6 +3,7 @@ #Использовать logos #Использовать asserts +#Использовать semver Перем Приложение; Перем ИспользуетсяЕдинаяСтрокаЗапуска; @@ -19,6 +20,7 @@ Перем НемедленнныйВывод; Перем ПодключенныеЛоги; +Перем ВерсияБольшеИлиРавна21; Перем ЭтоWindows; Перем Лог; @@ -38,6 +40,23 @@ КонецФункции +// Выполнение произвольной команды +// +// Возвращаемое значение: +// Число - код возврата команды +// +Функция ЗапуститьПроцесс() Экспорт + + ПроверитьВозможностьВыполненияКоманды(); + + Процесс = ЗапуститьПроцессКоманды(); + + Лог.Отладка("Запущен процесс с идентификатором <%1>", Процесс.Идентификатор); + + Возврат Процесс; + +КонецФункции + // Получить имя лога продукта // // Возвращаемое значение: @@ -304,48 +323,63 @@ ПерехватыватьПотоки = Истина; - Попытка - - Если КодировкаВывода = Неопределено Тогда - Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, , ПеременныеСреды()); - Иначе - Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды()); - КонецЕсли; + Процесс = ЗапуститьПроцессКоманды(ПерехватыватьПотоки); + + ПолучитьВыводПокаПроцессИсполняется(Процесс); - Исключение - Инфо = ИнформацияОбОшибке(); + КодВозврата = Процесс.КодВозврата; + ПроверитьКодВозврата(КодВозврата); - // TODO код проверки на регулярку (ниже) убрать после выпуска релиза OneScript 1.0.21 - РегуляркаОшибкиПеременныхСреды = Новый РегулярноеВыражение("\(System\.ArgumentException\):[^:]+:.*HOME[^:]+:.*home"); - Если РегуляркаОшибкиПеременныхСреды.Совпадает(Инфо.Описание) Тогда - Лог.Предупреждение("Возникла ошибка, связанная с переменными среды при старте нового процесса - |В связи с багом в движке OneScript до версии 1.0.21 - |%1 - | - |Выполняю старт процесса без указания переменных среды.", Инфо.Описание); + Возврат КодВозврата; + +КонецФункции - Лог.Отладка("Полное описание ошибки: - |%1", Инфо.ПодробноеОписаниеОшибки()); +// Запустить команду в операционной системе с ожиданием ее выполнения +// +// Параметры: +// Параметры - Массив - Массив строковых аргументов, передаваемых в командную +// строку. Добавляются после исполняемого файла. +// +// Возвращаемое значение: +// Число - Код возврата приложения +// +Функция ЗапуститьПроцессКоманды(ПерехватыватьПотоки = Ложь) + + СтрокаЗапуска = СформироватьСтрокуЗапускаПроцесса(); + + Попытка + + Если ВерсияБольшеИлиРавна21 Тогда + Если КодировкаВывода = Неопределено Тогда - Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки); + Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, , ПеременныеСреды()); Иначе - Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода); + Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды()); КонецЕсли; + + Иначе - ВызватьИсключение Инфо.ПодробноеОписаниеОшибки(); + + Если КодировкаВывода = Неопределено Тогда + Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки); + Иначе + Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода); + КонецЕсли; + КонецЕсли; + + Исключение + + Инфо = ИнформацияОбОшибке(); + + ВызватьИсключение Инфо.ПодробноеОписаниеОшибки(); КонецПопытки; - Процесс.Запустить(); + Процесс.Запустить(); - ПолучитьВыводПокаПроцессИсполняется(Процесс); - - КодВозврата = Процесс.КодВозврата; - ПроверитьКодВозврата(КодВозврата); - - Возврат КодВозврата; + Возврат Процесс; КонецФункции @@ -375,14 +409,14 @@ Если ИспользуемКомандныйПроцессор Тогда Если ЭтоWindows Тогда - ШаблонЗапуска = "cmd /c ""%1"""; + ШаблонЗапуска = "cmd /c %1"; Иначе ШаблонЗапуска = "sh -c '%1'"; КонецЕсли; СтрокаЗапуска = СтрШаблон(ШаблонЗапуска, СтрокаЗапуска); КонецЕсли; - Лог.Отладка("СтрокаЗапуска <%1>", СтрокаЗапуска); + Лог.Отладка("СтрокаЗапуска <%1>", СтрокаЗапуска); Возврат СтрокаЗапуска; КонецФункции // СформироватьСтрокуЗапускаПроцесса() @@ -482,7 +516,7 @@ РабочийКаталог = "."; ВыводКоманды = ""; - КодировкаВывода = Неопределено; //КодировкаТекста.UTF8; + КодировкаВывода = Неопределено;//КодировкаТекста.UTF8; Параметры = Новый Массив; ИспользуетсяЕдинаяСтрокаЗапуска = Ложь; @@ -495,7 +529,11 @@ НемедленнныйВывод = Ложь; ПодключенныеЛоги = Новый Массив; - + + СИ = Новый СистемнаяИнформация; + ТекущаяВерсия = Новый Версия(СИ.Версия); + ВерсияБольшеИлиРавна21 = ТекущаяВерсия.БольшеИлиРавны(Новый Версия("1.0.21")); + КонецПроцедуры Инициализация(); From e84c179797667b5ba74bc7a25adb475fbe569782 Mon Sep 17 00:00:00 2001 From: Aleksey Khorev Date: Mon, 18 Feb 2019 20:38:39 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=A3=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\274\320\260\320\275\320\264\320\260.os" | 32 +++++-------------- 1 file changed, 8 insertions(+), 24 deletions(-) diff --git "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" index 308765b..87acb3f 100644 --- "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" +++ "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" @@ -3,7 +3,7 @@ #Использовать logos #Использовать asserts -#Использовать semver + Перем Приложение; Перем ИспользуетсяЕдинаяСтрокаЗапуска; @@ -40,10 +40,10 @@ КонецФункции -// Выполнение произвольной команды +// Запуск на выполнение процесса // // Возвращаемое значение: -// Число - код возврата команды +// Процесс - объект класса Процесс // Функция ЗапуститьПроцесс() Экспорт @@ -350,25 +350,13 @@ Попытка - Если ВерсияБольшеИлиРавна21 Тогда - - Если КодировкаВывода = Неопределено Тогда - Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, , ПеременныеСреды()); - Иначе - Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды()); - КонецЕсли; - - + Если КодировкаВывода = Неопределено Тогда + Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, , ПеременныеСреды()); Иначе - - Если КодировкаВывода = Неопределено Тогда - Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки); - Иначе - Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода); - КонецЕсли; - + Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды()); КонецЕсли; - + + Исключение Инфо = ИнформацияОбОшибке(); @@ -530,10 +518,6 @@ ПодключенныеЛоги = Новый Массив; - СИ = Новый СистемнаяИнформация; - ТекущаяВерсия = Новый Версия(СИ.Версия); - ВерсияБольшеИлиРавна21 = ТекущаяВерсия.БольшеИлиРавны(Новый Версия("1.0.21")); - КонецПроцедуры Инициализация(); From cfaed0cbff52a09a100f28246606c2704d87cabb Mon Sep 17 00:00:00 2001 From: Aleksey Khorev Date: Wed, 20 Feb 2019 20:17:18 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=20=D0=B7=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 1 - ...20\232\320\276\320\274\320\260\320\275\320\264\320\260.os" | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packagedef b/packagedef index b3d59be..7d41ab5 100644 --- a/packagedef +++ b/packagedef @@ -4,7 +4,6 @@ .ВерсияСреды("1.0.17") .ЗависитОт("logos") .ЗависитОт("asserts") - .ЗависитОт("semver") .ЗависитОт("tempfiles") .ВключитьФайл("src") .ВключитьФайл("features") diff --git "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" index 87acb3f..88c15c6 100644 --- "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" +++ "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" @@ -341,8 +341,8 @@ // Параметры - Массив - Массив строковых аргументов, передаваемых в командную // строку. Добавляются после исполняемого файла. // -// Возвращаемое значение: -// Число - Код возврата приложения +// Возвращаемое значение: +// Процесс - запущенный процесс // Функция ЗапуститьПроцессКоманды(ПерехватыватьПотоки = Ложь)