diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\222\320\265\321\200\321\201\320\270\320\270OneScript.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\222\320\265\321\200\321\201\320\270\320\270OneScript.os"
index ce816db..8c1c343 100644
--- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\222\320\265\321\200\321\201\320\270\320\270OneScript.os"
+++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\222\320\265\321\200\321\201\320\270\320\270OneScript.os"
@@ -1,289 +1,289 @@
-#Использовать 1commands
-#Использовать fluent
-#Использовать fs
-#Использовать logos
-
-Перем Лог;
-Перем ЭтоWindows;
-
-// Проверить, что версия установлена
-//
-// Параметры:
-// ПроверяемаяВерсия - Строка - Алиас версии
-//
-// Возвращаемое значение:
-// Булево - Версия установлена
-//
-Функция ВерсияУстановлена(Знач ПроверяемаяВерсия) Экспорт
-
- КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
- КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ПроверяемаяВерсия);
-
- Результат = ФС.КаталогСуществует(КаталогУстановкиВерсии);
- Результат = Результат И ФС.ФайлСуществует(ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript.exe"));
-
- Лог.Отладка("Версия %1 установлена: %2", ПроверяемаяВерсия, Результат);
- Возврат Результат;
-
-КонецФункции
-
-// Проверить, что переданная версия является текущей (активированной)
-//
-// Параметры:
-// ПроверяемаяВерсия - Строка - Алиас
-//
-// Возвращаемое значение:
-// Булево - Это текущая версия
-//
-Функция ЭтоТекущаяВерсия(Знач ПроверяемаяВерсия) Экспорт
-
- Если ПроверяемаяВерсия = "current" Тогда
- Возврат Истина;
- КонецЕсли;
-
- Если НЕ ВерсияУстановлена("current") Тогда
- Возврат Ложь;
- КонецЕсли;
-
- Если НЕ ВерсияУстановлена(ПроверяемаяВерсия) Тогда
- Возврат Ложь;
- КонецЕсли;
-
- ПутьКДвижкуТекущейВерсии = ПолучитьПутьКУстановленномуДвижкуOneScript("current");
- ПутьКДвижкуПроверяемойВерсии = ПолучитьПутьКУстановленномуДвижкуOneScript(ПроверяемаяВерсия);
-
- ФайлДвижкаТекущейВерсии = Новый Файл(ПутьКДвижкуТекущейВерсии);
- ФайлДвижкаПроверяемойВерсии = Новый Файл(ПутьКДвижкуПроверяемойВерсии);
-
- ФайлыПроверяемойВерсииСовпадаетСТекущейВерсией =
- ФайлДвижкаТекущейВерсии.ПолучитьВремяИзменения() = ФайлДвижкаПроверяемойВерсии.ПолучитьВремяИзменения()
- И ФайлДвижкаТекущейВерсии.ПолучитьВремяСоздания() = ФайлДвижкаПроверяемойВерсии.ПолучитьВремяСоздания();
-
- Возврат ФайлыПроверяемойВерсииСовпадаетСТекущейВерсией;
-
-КонецФункции
-
-// Получить информацию об установленных версиях
-//
-// Возвращаемое значение:
-// ТаблицаЗначений - Информация об установленных версиях:
-// * Алиас - Строка - Алиас версии (имя каталога)
-// * Путь - Строка - Полный путь к каталогу версии
-// * Версия - Строка - Точная версия OneScript
-// * ЭтоСимлинк - Булево - Каталог является символической ссылкой
-//
-Функция ПолучитьСписокУстановленныхВерсий() Экспорт
-
- УстановленныеВерсии = Новый ТаблицаЗначений;
- УстановленныеВерсии.Колонки.Добавить("Алиас");
- УстановленныеВерсии.Колонки.Добавить("Путь");
- УстановленныеВерсии.Колонки.Добавить("Версия");
- УстановленныеВерсии.Колонки.Добавить("ЭтоСимлинк");
-
- // TODO: определение симлинка на основании аттрибутов файла?
- МассивИменСимлинков = Новый Массив;
- МассивИменСимлинков.Добавить("current");
-
- КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
- НайденныеФайлы = НайтиФайлы(КаталогУстановки, ПолучитьМаскуВсеФайлы());
- Для Каждого НайденныйФайл Из НайденныеФайлы Цикл
- Если НЕ ВерсияУстановлена(НайденныйФайл.Имя) Тогда
- Продолжить;
- КонецЕсли;
-
- СтрокаВерсии = УстановленныеВерсии.Добавить();
- СтрокаВерсии.Алиас = НайденныйФайл.Имя;
- СтрокаВерсии.Путь = НайденныйФайл.ПолноеИмя;
- СтрокаВерсии.Версия = ПолучитьТочнуюВерсиюOneScript(СтрокаВерсии.Алиас);
- СтрокаВерсии.ЭтоСимлинк = МассивИменСимлинков.Найти(НайденныйФайл.Имя) <> Неопределено;
-
- КонецЦикла;
-
- Возврат УстановленныеВерсии;
-
-КонецФункции
-
-// Получить информацию о версиях, доступных к установке
-//
-// Возвращаемое значение:
-// ТаблицаЗначений - Информация об установленных версиях:
-// * Алиас - Строка - Алиас версии (имя каталога)
-// * Путь - Строка - Полный путь к каталогу версии
-//
-Функция ПолучитьСписокДоступныхКУстановкеВерсий() Экспорт
-
- ДоступныеВерсии = Новый ТаблицаЗначений;
- ДоступныеВерсии.Колонки.Добавить("Алиас");
- ДоступныеВерсии.Колонки.Добавить("Путь");
-
- АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт();
-
- Соединение = Новый HTTPСоединение(АдресСайтаОСкрипт);
- Запрос = Новый HTTPЗапрос("downloads/archive");
-
- Ответ = Соединение.Получить(Запрос);
- HTTP_OK = 200;
- Если Ответ.КодСостояния <> HTTP_OK Тогда
- ВызватьИсключение Ответ.КодСостояния;
- КонецЕсли;
-
- ТелоСтраницы = Ответ.ПолучитьТелоКакСтроку();
-
- РегулярноеВыражение = Новый РегулярноеВыражение("(\d+\.\d+\.\d+(\.\d+)?)");
- ИндексГруппыАдрес = 1;
- ИндексГруппыВерсия = 2;
-
- Совпадения = РегулярноеВыражение.НайтиСовпадения(ТелоСтраницы);
- Для Каждого СовпадениеРегулярногоВыражения Из Совпадения Цикл
- ГруппаАдрес = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыАдрес];
- ГруппаВерсия = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыВерсия];
-
- // TODO: Убрать после решения https://github.com/EvilBeaver/OneScript/issues/667
- Если ГруппаВерсия.Значение = "1.0.9" Тогда
- Продолжить;
- КонецЕсли;
-
- ДоступнаяВерсия = ДоступныеВерсии.Добавить();
- ДоступнаяВерсия.Алиас = ГруппаВерсия.Значение;
- ДоступнаяВерсия.Путь = АдресСайтаОСкрипт + ГруппаАдрес.Значение;
- КонецЦикла;
-
- ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, "dev", "Путь");
- ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, "stable", "Путь");
-
- Возврат ДоступныеВерсии;
-
-КонецФункции
-
-// <Описание функции>
-//
-// Возвращаемое значение:
-// ТаблицаЗначений - Информация об установленных версиях:
-// * Алиас - Строка - Алиас версии (имя каталога)
-// * ПутьЛокальный - Строка - Полный путь к каталогу версии
-// * ПутьСервер - Строка - Полный путь к каталогу версии на сайте OneScript
-// * Версия - Строка - Точная версия OneScript (только для установленных версий)
-// * ЭтоСимлинк - Булево - Каталог является символической ссылкой
-// * ВерсияУстановлена - Булево - Установлена ли текущая версия
-//
-Функция ПолучитьСписокВсехВерсий() Экспорт
-
- СписокУстановленныхВерсий = ПолучитьСписокУстановленныхВерсий();
- СписокДоступныхВерсий = ПолучитьСписокДоступныхКУстановкеВерсий();
-
- ВсеВерсии = Новый ТаблицаЗначений;
- ВсеВерсии.Колонки.Добавить("Алиас", Новый ОписаниеТипов("Строка"));
- ВсеВерсии.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка"));
- ВсеВерсии.Колонки.Добавить("ПутьЛокальный", Новый ОписаниеТипов("Строка"));
- ВсеВерсии.Колонки.Добавить("ПутьСервер", Новый ОписаниеТипов("Строка"));
- ВсеВерсии.Колонки.Добавить("ЭтоСимлинк", Новый ОписаниеТипов("Булево"));
- ВсеВерсии.Колонки.Добавить("ВерсияУстановлена", Новый ОписаниеТипов("Булево"));
-
- Для Каждого ДоступнаяВерсия Из СписокДоступныхВерсий Цикл
- СтрокаВсеВерсии = ВсеВерсии.Найти(ДоступнаяВерсия.Алиас, "Алиас");
- Если СтрокаВсеВерсии = Неопределено Тогда
- СтрокаВсеВерсии = ВсеВерсии.Добавить();
- СтрокаВсеВерсии.Алиас = ДоступнаяВерсия.Алиас;
- СтрокаВсеВерсии.ЭтоСимлинк = Ложь;
- КонецЕсли;
-
- СтрокаВсеВерсии.ПутьСервер = ДоступнаяВерсия.Путь;
- КонецЦикла;
-
- Для Каждого УстановленнаяВерсия Из СписокУстановленныхВерсий Цикл
- СтрокаВсеВерсии = ВсеВерсии.Найти(УстановленнаяВерсия.Алиас, "Алиас");
- Если СтрокаВсеВерсии = Неопределено Тогда
- СтрокаВсеВерсии = ВсеВерсии.Добавить();
- СтрокаВсеВерсии.Алиас = УстановленнаяВерсия.Алиас;
- СтрокаВсеВерсии.ЭтоСимлинк = УстановленнаяВерсия.ЭтоСимлинк;
- КонецЕсли;
-
- СтрокаВсеВерсии.Версия = УстановленнаяВерсия.Версия;
- СтрокаВсеВерсии.ПутьЛокальный = УстановленнаяВерсия.Путь;
- СтрокаВсеВерсии.ВерсияУстановлена = Истина;
- КонецЦикла;
-
- ОбеспечитьСтрокуВерсииПоАлиасу(ВсеВерсии, "dev");
- ОбеспечитьСтрокуВерсииПоАлиасу(ВсеВерсии, "stable");
-
- ВсеВерсии.Сортировать("Алиас");
-
- Возврат ВсеВерсии;
-
-КонецФункции
-
-// Получить полный путь к установленному движку OneScript (файлу oscript.exe)
-//
-// Параметры:
-// УстановленнаяВерсия - Строка - Алиас проверяемой версии
-//
-// Возвращаемое значение:
-// Строка - Полный путь к файлу oscript.exe
-//
-Функция ПолучитьПутьКУстановленномуДвижкуOneScript(Знач УстановленнаяВерсия) Экспорт
-
- УстановленныеВерсии = ПолучитьСписокУстановленныхВерсий();
-
- ПутьКУстановленнойВерсии = ПроцессорыКоллекций.ИзКоллекции(УстановленныеВерсии)
- .Фильтровать(
- "Элемент.Алиас = ДополнительныеПараметры.УстановленнаяВерсия",
- Новый Структура("УстановленнаяВерсия", УстановленнаяВерсия))
- .Первые(1)
- .Обработать("Результат = ОбъединитьПути(Элемент.Путь, ""bin"", ""oscript.exe"")")
- .ПолучитьПервый();
-
- Возврат ПутьКУстановленнойВерсии;
-
-КонецФункции
-
-Процедура ОбеспечитьСтрокуВерсииПоАлиасу(ТаблицаВерсий, Алиас, ИмяРеквизитаПуть = "ПутьСервер")
-
- СтрокаВерсии = ТаблицаВерсий.Найти(Алиас, "Алиас");
-
- Если СтрокаВерсии = Неопределено Тогда
- СтрокаВерсии = ТаблицаВерсий.Добавить();
- СтрокаВерсии.Алиас = Алиас;
- КонецЕсли;
-
- СтрокаВерсии[ИмяРеквизитаПуть] = ПараметрыOVM.ПолныйАдресККаталогуДистрибутивов();
-
-КонецПроцедуры
-
-Функция ПолучитьТочнуюВерсиюOneScript(Знач ПроверяемаяВерсия)
-
- КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
- КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ПроверяемаяВерсия);
- ПутьКИсполняемомуФайлу = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript.exe");
-
- Команда = Новый Команда();
-
- Если ЭтоWindows Тогда
- Команда.УстановитьКоманду(ПутьКИсполняемомуФайлу);
- Иначе
- Команда.УстановитьКоманду("mono");
- Команда.ДобавитьПараметр(ПутьКИсполняемомуФайлу);
- КонецЕсли;
-
- Команда.ДобавитьПараметр("-version");
-
- Команда.Исполнить();
-
- ВыводКоманды = СокрЛП(Команда.ПолучитьВывод());
- Если СтрЧислоСтрок(ВыводКоманды) > 1 Тогда
- РегулярноеВыражение = Новый РегулярноеВыражение("Version (\d+\.\d+\.\d+\.\d+)");
- Совпадения = РегулярноеВыражение.НайтиСовпадения(ВыводКоманды);
- Если Совпадения.Количество() = 1 Тогда
- ВыводКоманды = Совпадения[0].Группы[1].Значение;
- Иначе
- ВыводКоманды = "unknown";
- КонецЕсли;
- КонецЕсли;
-
- Возврат ВыводКоманды;
-
-КонецФункции
-
-СистемнаяИнформация = Новый СистемнаяИнформация;
-ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0;
-// TODO: После фикса движка вернуться на получение лога из ПараметровOVM
-Лог = Логирование.ПолучитьЛог("oscript.app.ovm");
+#Использовать 1commands
+#Использовать fluent
+#Использовать fs
+#Использовать logos
+
+Перем Лог;
+Перем ЭтоWindows;
+
+// Проверить, что версия установлена
+//
+// Параметры:
+// ПроверяемаяВерсия - Строка - Алиас версии
+//
+// Возвращаемое значение:
+// Булево - Версия установлена
+//
+Функция ВерсияУстановлена(Знач ПроверяемаяВерсия) Экспорт
+
+ КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
+ КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ПроверяемаяВерсия);
+
+ Результат = ФС.КаталогСуществует(КаталогУстановкиВерсии);
+ Результат = Результат И ФС.ФайлСуществует(ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript.exe"));
+
+ Лог.Отладка("Версия %1 установлена: %2", ПроверяемаяВерсия, Результат);
+ Возврат Результат;
+
+КонецФункции
+
+// Проверить, что переданная версия является текущей (активированной)
+//
+// Параметры:
+// ПроверяемаяВерсия - Строка - Алиас
+//
+// Возвращаемое значение:
+// Булево - Это текущая версия
+//
+Функция ЭтоТекущаяВерсия(Знач ПроверяемаяВерсия) Экспорт
+
+ Если ПроверяемаяВерсия = "current" Тогда
+ Возврат Истина;
+ КонецЕсли;
+
+ Если НЕ ВерсияУстановлена("current") Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ Если НЕ ВерсияУстановлена(ПроверяемаяВерсия) Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ ПутьКДвижкуТекущейВерсии = ПолучитьПутьКУстановленномуДвижкуOneScript("current");
+ ПутьКДвижкуПроверяемойВерсии = ПолучитьПутьКУстановленномуДвижкуOneScript(ПроверяемаяВерсия);
+
+ ФайлДвижкаТекущейВерсии = Новый Файл(ПутьКДвижкуТекущейВерсии);
+ ФайлДвижкаПроверяемойВерсии = Новый Файл(ПутьКДвижкуПроверяемойВерсии);
+
+ ФайлыПроверяемойВерсииСовпадаетСТекущейВерсией =
+ ФайлДвижкаТекущейВерсии.ПолучитьВремяИзменения() = ФайлДвижкаПроверяемойВерсии.ПолучитьВремяИзменения()
+ И ФайлДвижкаТекущейВерсии.ПолучитьВремяСоздания() = ФайлДвижкаПроверяемойВерсии.ПолучитьВремяСоздания();
+
+ Возврат ФайлыПроверяемойВерсииСовпадаетСТекущейВерсией;
+
+КонецФункции
+
+// Получить информацию об установленных версиях
+//
+// Возвращаемое значение:
+// ТаблицаЗначений - Информация об установленных версиях:
+// * Алиас - Строка - Алиас версии (имя каталога)
+// * Путь - Строка - Полный путь к каталогу версии
+// * Версия - Строка - Точная версия OneScript
+// * ЭтоСимлинк - Булево - Каталог является символической ссылкой
+//
+Функция ПолучитьСписокУстановленныхВерсий() Экспорт
+
+ УстановленныеВерсии = Новый ТаблицаЗначений;
+ УстановленныеВерсии.Колонки.Добавить("Алиас");
+ УстановленныеВерсии.Колонки.Добавить("Путь");
+ УстановленныеВерсии.Колонки.Добавить("Версия");
+ УстановленныеВерсии.Колонки.Добавить("ЭтоСимлинк");
+
+ // TODO: определение симлинка на основании аттрибутов файла?
+ МассивИменСимлинков = Новый Массив;
+ МассивИменСимлинков.Добавить("current");
+
+ КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
+ НайденныеФайлы = НайтиФайлы(КаталогУстановки, ПолучитьМаскуВсеФайлы());
+ Для Каждого НайденныйФайл Из НайденныеФайлы Цикл
+ Если НЕ ВерсияУстановлена(НайденныйФайл.Имя) Тогда
+ Продолжить;
+ КонецЕсли;
+
+ СтрокаВерсии = УстановленныеВерсии.Добавить();
+ СтрокаВерсии.Алиас = НайденныйФайл.Имя;
+ СтрокаВерсии.Путь = НайденныйФайл.ПолноеИмя;
+ СтрокаВерсии.Версия = ПолучитьТочнуюВерсиюOneScript(СтрокаВерсии.Алиас);
+ СтрокаВерсии.ЭтоСимлинк = МассивИменСимлинков.Найти(НайденныйФайл.Имя) <> Неопределено;
+
+ КонецЦикла;
+
+ Возврат УстановленныеВерсии;
+
+КонецФункции
+
+// Получить информацию о версиях, доступных к установке
+//
+// Возвращаемое значение:
+// ТаблицаЗначений - Информация об установленных версиях:
+// * Алиас - Строка - Алиас версии (имя каталога)
+// * Путь - Строка - Полный путь к каталогу версии
+//
+Функция ПолучитьСписокДоступныхКУстановкеВерсий() Экспорт
+
+ ДоступныеВерсии = Новый ТаблицаЗначений;
+ ДоступныеВерсии.Колонки.Добавить("Алиас");
+ ДоступныеВерсии.Колонки.Добавить("Путь");
+
+ АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт();
+
+ Соединение = Новый HTTPСоединение(АдресСайтаОСкрипт);
+ Запрос = Новый HTTPЗапрос("downloads/archive");
+
+ Ответ = Соединение.Получить(Запрос);
+ HTTP_OK = 200;
+ Если Ответ.КодСостояния <> HTTP_OK Тогда
+ ВызватьИсключение Ответ.КодСостояния;
+ КонецЕсли;
+
+ ТелоСтраницы = Ответ.ПолучитьТелоКакСтроку();
+
+ РегулярноеВыражение = Новый РегулярноеВыражение("(\d+\.\d+\.\d+(\.\d+)?)");
+ ИндексГруппыАдрес = 1;
+ ИндексГруппыВерсия = 2;
+
+ Совпадения = РегулярноеВыражение.НайтиСовпадения(ТелоСтраницы);
+ Для Каждого СовпадениеРегулярногоВыражения Из Совпадения Цикл
+ ГруппаАдрес = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыАдрес];
+ ГруппаВерсия = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыВерсия];
+
+ // TODO: Убрать после решения https://github.com/EvilBeaver/OneScript/issues/667
+ Если ГруппаВерсия.Значение = "1.0.9" Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ДоступнаяВерсия = ДоступныеВерсии.Добавить();
+ ДоступнаяВерсия.Алиас = ГруппаВерсия.Значение;
+ ДоступнаяВерсия.Путь = АдресСайтаОСкрипт + ГруппаАдрес.Значение;
+ КонецЦикла;
+
+ ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, "dev", "Путь");
+ ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, "stable", "Путь");
+
+ Возврат ДоступныеВерсии;
+
+КонецФункции
+
+// <Описание функции>
+//
+// Возвращаемое значение:
+// ТаблицаЗначений - Информация об установленных версиях:
+// * Алиас - Строка - Алиас версии (имя каталога)
+// * ПутьЛокальный - Строка - Полный путь к каталогу версии
+// * ПутьСервер - Строка - Полный путь к каталогу версии на сайте OneScript
+// * Версия - Строка - Точная версия OneScript (только для установленных версий)
+// * ЭтоСимлинк - Булево - Каталог является символической ссылкой
+// * ВерсияУстановлена - Булево - Установлена ли текущая версия
+//
+Функция ПолучитьСписокВсехВерсий() Экспорт
+
+ СписокУстановленныхВерсий = ПолучитьСписокУстановленныхВерсий();
+ СписокДоступныхВерсий = ПолучитьСписокДоступныхКУстановкеВерсий();
+
+ ВсеВерсии = Новый ТаблицаЗначений;
+ ВсеВерсии.Колонки.Добавить("Алиас", Новый ОписаниеТипов("Строка"));
+ ВсеВерсии.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка"));
+ ВсеВерсии.Колонки.Добавить("ПутьЛокальный", Новый ОписаниеТипов("Строка"));
+ ВсеВерсии.Колонки.Добавить("ПутьСервер", Новый ОписаниеТипов("Строка"));
+ ВсеВерсии.Колонки.Добавить("ЭтоСимлинк", Новый ОписаниеТипов("Булево"));
+ ВсеВерсии.Колонки.Добавить("ВерсияУстановлена", Новый ОписаниеТипов("Булево"));
+
+ Для Каждого ДоступнаяВерсия Из СписокДоступныхВерсий Цикл
+ СтрокаВсеВерсии = ВсеВерсии.Найти(ДоступнаяВерсия.Алиас, "Алиас");
+ Если СтрокаВсеВерсии = Неопределено Тогда
+ СтрокаВсеВерсии = ВсеВерсии.Добавить();
+ СтрокаВсеВерсии.Алиас = ДоступнаяВерсия.Алиас;
+ СтрокаВсеВерсии.ЭтоСимлинк = Ложь;
+ КонецЕсли;
+
+ СтрокаВсеВерсии.ПутьСервер = ДоступнаяВерсия.Путь;
+ КонецЦикла;
+
+ Для Каждого УстановленнаяВерсия Из СписокУстановленныхВерсий Цикл
+ СтрокаВсеВерсии = ВсеВерсии.Найти(УстановленнаяВерсия.Алиас, "Алиас");
+ Если СтрокаВсеВерсии = Неопределено Тогда
+ СтрокаВсеВерсии = ВсеВерсии.Добавить();
+ СтрокаВсеВерсии.Алиас = УстановленнаяВерсия.Алиас;
+ СтрокаВсеВерсии.ЭтоСимлинк = УстановленнаяВерсия.ЭтоСимлинк;
+ КонецЕсли;
+
+ СтрокаВсеВерсии.Версия = УстановленнаяВерсия.Версия;
+ СтрокаВсеВерсии.ПутьЛокальный = УстановленнаяВерсия.Путь;
+ СтрокаВсеВерсии.ВерсияУстановлена = Истина;
+ КонецЦикла;
+
+ ОбеспечитьСтрокуВерсииПоАлиасу(ВсеВерсии, "dev");
+ ОбеспечитьСтрокуВерсииПоАлиасу(ВсеВерсии, "stable");
+
+ ВсеВерсии.Сортировать("Алиас");
+
+ Возврат ВсеВерсии;
+
+КонецФункции
+
+// Получить полный путь к установленному движку OneScript (файлу oscript.exe)
+//
+// Параметры:
+// УстановленнаяВерсия - Строка - Алиас проверяемой версии
+//
+// Возвращаемое значение:
+// Строка - Полный путь к файлу oscript.exe
+//
+Функция ПолучитьПутьКУстановленномуДвижкуOneScript(Знач УстановленнаяВерсия) Экспорт
+
+ УстановленныеВерсии = ПолучитьСписокУстановленныхВерсий();
+
+ ПутьКУстановленнойВерсии = ПроцессорыКоллекций.ИзКоллекции(УстановленныеВерсии)
+ .Фильтровать(
+ "Результат = Элемент.Алиас = ДополнительныеПараметры.УстановленнаяВерсия",
+ Новый Структура("УстановленнаяВерсия", УстановленнаяВерсия))
+ .Первые(1)
+ .Обработать("Результат = ОбъединитьПути(Элемент.Путь, ""bin"", ""oscript.exe"")")
+ .ПолучитьПервый();
+
+ Возврат ПутьКУстановленнойВерсии;
+
+КонецФункции
+
+Процедура ОбеспечитьСтрокуВерсииПоАлиасу(ТаблицаВерсий, Алиас, ИмяРеквизитаПуть = "ПутьСервер")
+
+ СтрокаВерсии = ТаблицаВерсий.Найти(Алиас, "Алиас");
+
+ Если СтрокаВерсии = Неопределено Тогда
+ СтрокаВерсии = ТаблицаВерсий.Добавить();
+ СтрокаВерсии.Алиас = Алиас;
+ КонецЕсли;
+
+ СтрокаВерсии[ИмяРеквизитаПуть] = ПараметрыOVM.ПолныйАдресККаталогуДистрибутивов();
+
+КонецПроцедуры
+
+Функция ПолучитьТочнуюВерсиюOneScript(Знач ПроверяемаяВерсия)
+
+ КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
+ КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ПроверяемаяВерсия);
+ ПутьКИсполняемомуФайлу = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript.exe");
+
+ Команда = Новый Команда();
+
+ Если ЭтоWindows Тогда
+ Команда.УстановитьКоманду(ПутьКИсполняемомуФайлу);
+ Иначе
+ Команда.УстановитьКоманду("mono");
+ Команда.ДобавитьПараметр(ПутьКИсполняемомуФайлу);
+ КонецЕсли;
+
+ Команда.ДобавитьПараметр("-version");
+
+ Команда.Исполнить();
+
+ ВыводКоманды = СокрЛП(Команда.ПолучитьВывод());
+ Если СтрЧислоСтрок(ВыводКоманды) > 1 Тогда
+ РегулярноеВыражение = Новый РегулярноеВыражение("Version (\d+\.\d+\.\d+\.\d+)");
+ Совпадения = РегулярноеВыражение.НайтиСовпадения(ВыводКоманды);
+ Если Совпадения.Количество() = 1 Тогда
+ ВыводКоманды = Совпадения[0].Группы[1].Значение;
+ Иначе
+ ВыводКоманды = "unknown";
+ КонецЕсли;
+ КонецЕсли;
+
+ Возврат ВыводКоманды;
+
+КонецФункции
+
+СистемнаяИнформация = Новый СистемнаяИнформация;
+ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0;
+// TODO: После фикса движка вернуться на получение лога из ПараметровOVM
+Лог = Логирование.ПолучитьЛог("oscript.app.ovm");