Skip to content

Commit

Permalink
Merge branch 'release/1.2.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
artbear committed May 2, 2017
2 parents c1ca825 + cb2c177 commit ad10d17
Show file tree
Hide file tree
Showing 7 changed files with 111 additions and 55 deletions.
6 changes: 3 additions & 3 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"version": "0.1.0",
"version": "2.0.0",
"_runner": "terminal",
"windows": {
"command": "cmd",
// "args": ["/c"]
"args": ["/c", "chcp 65001 >nul &"]
"args": ["/c", "chcp 65001 ;"]
},
"linux": {
"command": "sh",
Expand Down
12 changes: 12 additions & 0 deletions features/step_definitions/ВыполнениеКоманды.os
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

ВсеШаги = Новый Массив;

ВсеШаги.Добавить("ЯДобавляюПараметрыДляКоманды");
ВсеШаги.Добавить("ЯВыполняюКомандуЧерезКомандныйПроцессорСистемы");
ВсеШаги.Добавить("ЯВыполняюКомандуБезКомандногоПроцессораСистемы");
ВсеШаги.Добавить("ЯУстанавливаюОжидаемыйКодВозвратаДляКоманды");
Expand Down Expand Up @@ -88,6 +89,17 @@
Команда.ПоказыватьВыводНемедленно(Ложь);
КонецПроцедуры

//Я добавляю параметры для команды "oscript"
//| -version |
//| -encoding=utf-8 |
Процедура ЯДобавляюПараметрыДляКоманды(Знач ИмяИлиТекстКоманды, Знач ТаблицаПараметров) Экспорт
//TODO перенести шаг в библиотеку 1bdd
Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды);

// ПараметрКоманды = ЗаменитьШаблоныВПараметрахКоманды(ПараметрКоманды);//TODO раскомментировать код внутри 1bdd
МассивПараметров = ТаблицаПараметров.ВыгрузитьКолонку(0);
Команда.ДобавитьПараметры(МассивПараметров);
КонецПроцедуры

// { Служебные функции

Expand Down
7 changes: 7 additions & 0 deletions features/ВыполнениеКоманды.feature
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@
И Вывод команды "git" содержит "version"
И Код возврата команды "git" равен 0

Сценарий: Выполнение команды с массивом параметров
Когда Я добавляю параметры для команды "oscript"
| -version |
| -encoding=utf-8 |
И Я выполняю команду "oscript"
Тогда я вижу в консоли строку подобно "(\d+\.){3}\d+"

Сценарий: Выполнение команды через командный процессор системы
Когда Я выполняю команду "oscript" через командный процессор системы
Тогда Вывод команды "oscript" содержит "1Script Execution Engine"
Expand Down
6 changes: 2 additions & 4 deletions features/КомандныеФайлы.feature
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,8 @@

Сценарий: Выполнение простого командного файла
Когда Я создаю командный файл
И Я добавляю строку "chcp 1251" в командный файл
И Я добавляю строку "echo командный файл" в командный файл
И Я добавляю строку "chcp 866" в командный файл
И Я добавляю строку "echo command file" в командный файл
И Я сообщаю содержимое командного файла
И Я выполняю командный файл
Тогда Вывод командного файла содержит "командный файл"
Тогда Вывод командного файла содержит "command file"
И Код возврата командного файла равен 0
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

Описание.Имя("1commands")
.Версия("1.1.1")
.Версия("1.2.0")
.ВерсияСреды("1.0.16")
.ЗависитОт("logos")
.ЗависитОт("asserts")
Expand Down
131 changes: 85 additions & 46 deletions src/Команда.os
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
Процедура УстановитьКоманду(Знач ПутьКоманды) Экспорт
Приложение = ПутьКоманды;
ИспользуетсяЕдинаяСтрокаЗапуска = Ложь;
КонецПроцедуры // УстановитьКоманду()
КонецПроцедуры

// Установить строку запуска команды.
// В этом случае обрамления кавычками не выполняется.
Expand All @@ -69,7 +69,7 @@
Процедура УстановитьСтрокуЗапуска(Знач СтрокаЗапуска) Экспорт
Приложение = СтрокаЗапуска;
ИспользуетсяЕдинаяСтрокаЗапуска = Истина;
КонецПроцедуры // УстановитьКоманду()
КонецПроцедуры

// Получить путь команды.
//
Expand All @@ -87,7 +87,18 @@
//
Процедура ДобавитьПараметр(Знач Параметр) Экспорт
Параметры.Добавить(Параметр);
КонецПроцедуры // УстановитьКоманду()
КонецПроцедуры

// Добавить параметры команды.
//
// Параметры:
// Массив - массив параметров
//
Процедура ДобавитьПараметры(Знач МассивПараметров) Экспорт
Для каждого Параметр Из МассивПараметров Цикл
Параметры.Добавить(Параметр);
КонецЦикла;
КонецПроцедуры

// Установить новые параметры команды.
// Может использовать для очистки параметров. Для этого нужно передать пустую строку
Expand All @@ -98,7 +109,16 @@
Процедура УстановитьПараметры(Знач СтрокаПараметров) Экспорт
Параметры = Новый Массив;
Параметры.Добавить(СтрокаПараметров);
КонецПроцедуры // УстановитьКоманду()
КонецПроцедуры

// Получить параметры команды.
//
// Возвращаемое значение:
// Массив - Параметры команды
//
Функция ПолучитьПараметры() Экспорт
Возврат Параметры;
КонецФункции

// Получить вывод выполненной команды.
//
Expand Down Expand Up @@ -261,6 +281,28 @@
// Число - Код возврата приложения
//
Функция ЗапуститьИПодождать()

СтрокаЗапуска = СформироватьСтрокуЗапускаПроцесса();

ПерехватыватьПотоки = Истина;

Если КодировкаВывода = Неопределено Тогда
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки);
Иначе
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода);
КонецЕсли;
Процесс.Запустить();

ПолучитьВыводПокаПроцессИсполняется(Процесс);

КодВозврата = Процесс.КодВозврата;
ПроверитьКодВозврата(КодВозврата);

Возврат КодВозврата;

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

Функция СформироватьСтрокуЗапускаПроцесса()
Перем ПутьПриложения;

ПутьПриложения = Приложение;
Expand Down Expand Up @@ -293,62 +335,60 @@

СтрокаЗапуска = СтрШаблон(ШаблонЗапуска, СтрокаЗапуска);
КонецЕсли;


Возврат СтрокаЗапуска;
КонецФункции // СформироватьСтрокуЗапускаПроцесса()

Процедура ПолучитьВыводПокаПроцессИсполняется(Процесс)
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();

Если КодировкаВывода = Неопределено Тогда
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, Истина, Истина);
Иначе
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, Истина, Истина, КодировкаВывода);
КонецЕсли;
Процесс.Запустить();

Если Не НемедленнныйВывод Тогда
Процесс.ОжидатьЗавершения();
ЗаписьXML.ЗаписатьБезОбработки(Процесс.ПотокВывода.Прочитать());
Иначе
Если ПериодОпросаВМиллисекундах <> 0 Тогда
Приостановить(ПериодОпросаВМиллисекундах);
КонецЕсли;

Пока НЕ Процесс.Завершен ИЛИ Процесс.ПотокВывода.ЕстьДанные ИЛИ Процесс.ПотокОшибок.ЕстьДанные Цикл
Если ПериодОпросаВМиллисекундах <> 0 Тогда
Приостановить(ПериодОпросаВМиллисекундах);
КонецЕсли;
Пока НЕ Процесс.Завершен ИЛИ Процесс.ПотокВывода.ЕстьДанные ИЛИ Процесс.ПотокОшибок.ЕстьДанные Цикл
Если ПериодОпросаВМиллисекундах <> 0 Тогда
Приостановить(ПериодОпросаВМиллисекундах);
КонецЕсли;

ОчереднаяСтрокаВывода = Процесс.ПотокВывода.Прочитать();
ОчереднаяСтрокаОшибок = Процесс.ПотокОшибок.Прочитать();
ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокВывода, ЗаписьXML, "В цикле");
ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "В цикле");

Если Не ПустаяСтрока(ОчереднаяСтрокаВывода) Тогда
ОчереднаяСтрокаВывода = СтрЗаменить(ОчереднаяСтрокаВывода, Символы.ВК, "");
Если ОчереднаяСтрокаВывода <> "" Тогда
Лог.Отладка("%2%1", ОчереднаяСтрокаВывода, Символы.ПС);
ЗаписьXML.ЗаписатьБезОбработки(ОчереднаяСтрокаВывода);
КонецЕсли;
КонецЕсли;
КонецЦикла;

Если Не ПустаяСтрока(ОчереднаяСтрокаОшибок) Тогда
ОчереднаяСтрокаОшибок = СтрЗаменить(ОчереднаяСтрокаОшибок, Символы.ВК, "");
Если ОчереднаяСтрокаОшибок <> "" Тогда
Лог.Отладка("%2%1", ОчереднаяСтрокаОшибок, Символы.ПС);
ЗаписьXML.ЗаписатьБезОбработки(ОчереднаяСтрокаОшибок);
КонецЕсли;
КонецЕсли;
ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокВывода, ЗаписьXML, "После цикла");
ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "После цикла");

КонецЦикла;

КонецЕсли;

РезультатРаботыПроцесса = ЗаписьXML.Закрыть();
Если Не НемедленнныйВывод Тогда
Лог.Отладка("%2%1", РезультатРаботыПроцесса, Символы.ПС);
Лог.Отладка("РезультатРаботыПроцесса %2-----%2%1%2------%2", РезультатРаботыПроцесса, Символы.ПС);
КонецЕсли;

Лог.Отладка("Длина вывода %1, количество строк %2", СтрДлина(РезультатРаботыПроцесса), СтрЧислоСтрок(РезультатРаботыПроцесса));

УстановитьВывод(РезультатРаботыПроцесса);
КонецПроцедуры

КодВозврата = Процесс.КодВозврата;
Функция ОбработатьОчереднуюСтрокуВывода(ПотокПроцесса, ЗаписьXML, Знач ПрефиксДляОтладки)
Рез = "";
Если ПотокПроцесса.ЕстьДанные Тогда
Рез = ПотокПроцесса.Прочитать();
КонецЕсли;

Если Рез <> "" Тогда
Лог.Отладка("в цикле %2%1", Рез, Символы.ПС);
ЗаписьXML.ЗаписатьБезОбработки(Рез + Символы.ПС);

Если НемедленнныйВывод Тогда
Сообщить(Рез);
КонецЕсли;
КонецЕсли;

Возврат Рез;
КонецФункции

Процедура ПроверитьКодВозврата(Знач КодВозврата)
Если ПроверяемКодВозврата Тогда
Если КодВозврата < МинимальныйОжидаемыйКодВозврата или КодВозврата > МаксимальныйОжидаемыйКодВозврата Тогда
Если МинимальныйОжидаемыйКодВозврата <> МаксимальныйОжидаемыйКодВозврата Тогда
Expand All @@ -363,10 +403,7 @@
МеньшеИлиРавно(МаксимальныйОжидаемыйКодВозврата);
КонецЕсли;
КонецЕсли;

Возврат Процесс.КодВозврата;

КонецФункции
КонецПроцедуры

// Инициализация работы библиотеки.
// Задает минимальные настройки.
Expand Down Expand Up @@ -395,3 +432,5 @@
КонецПроцедуры

Инициализация();

// Лог.УстановитьУровень(УровниЛога.Отладка);
2 changes: 1 addition & 1 deletion src/КомандныйФайл.os
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@
ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;

ТекстФайла = "";
НемедленнныйВывод = Истина;
НемедленнныйВывод = Ложь;
КодировкаВывода = КодировкаТекста.OEM;

Создать();
Expand Down

0 comments on commit ad10d17

Please sign in to comment.