diff --git a/README.md b/README.md
index c3646db..27fec9a 100644
--- a/README.md
+++ b/README.md
@@ -86,7 +86,7 @@ export $HOME/.local/share/ovm/current/bin:$PATH
Для `ConEmu` активация производится через `Settings` -> `Startup` -> `Environment`. В метод установки PATH необходимо добавить путь к %OVM_OSCRIPTBIN% перед текущим `%PATH%`. Например, `set PATH=%OVM_OSCRIPTBIN%;%PATH%`
-Современные версии `Cmder` для Windows автоматически подхватывают переменные среды и переопределение автозапуска в реестре (см. Активация в cmd)
+Современные версии `Cmder` для Windows автоматически подхватывают переменные среды и переопределение автозапуска в реестре (см. Активация в cmd)
## Использование
@@ -170,6 +170,22 @@ $ ovm which 1.0.19
C:\Users\NikitaGryzlov\AppData\Local\ovm\1.0.19\bin\oscript.exe
```
+### Отладка скриптов, запускаемых через OVM, в VSCode
+
+После первичной настройки OVM в каталоге вашего проекта нужно штатно настроить отладчик 1скрипт
+
+Далее нужно добавить\изменить файл `.vscode/launch.json`
+
+В разделе `configurations` файла нужно добавить\установить следующие строки
+```json
+ "windows": {
+ "runtimeExecutable": "${env:OVM_OSCRIPTBIN}\\oscript.exe"
+ },
+ "linux": {
+ "runtimeExecutable": "${env:OVM_OSCRIPTBIN}/oscript"
+ }
+```
+
## Конфигурирование ovm
ovm имеет несколько конфигурационных параметров, управляющих его поведением. Эти параметры можно задать с помощью команды `config`
diff --git a/features/install-with-alias.feature b/features/install-with-alias.feature
index 376395e..60a8f8a 100644
--- a/features/install-with-alias.feature
+++ b/features/install-with-alias.feature
@@ -3,7 +3,7 @@
Функциональность: Установка движка с алиасом
Как разработчик библиотек
-Я иметь возможность установить несколько версий одного и того же движка
+Я хочу иметь возможность установить несколько версий одного и того же движка
Чтобы тестировать свою библиотеку с разным набором системных пакетов
Контекст:
diff --git a/features/install-with-clean.feature b/features/install-with-clean.feature
index f62780e..09ca0a1 100644
--- a/features/install-with-clean.feature
+++ b/features/install-with-clean.feature
@@ -3,7 +3,7 @@
Функциональность: Установка движка с учетом сохранения библиотек
Как пользователь OneScript
-Я иметь возможность обновлять движок без последующей переустановки библиотек
+Я хочу иметь возможность обновлять движок без последующей переустановки библиотек
Чтобы не тратить свое время
Контекст:
diff --git a/features/integration.feature b/features/integration.feature
index b4fb0e9..1f93ada 100644
--- a/features/integration.feature
+++ b/features/integration.feature
@@ -12,7 +12,7 @@
Сценарий: Вывод справки
Когда Я выполняю команду "ovm"
Тогда я вижу в консоли вывод "OneScript Version Manager"
- И я вижу в консоли вывод "Строка запуска: ovm [ОПЦИИ] КОМАНДА [аргументы...]"
+ И я вижу в консоли вывод "Строка запуска: ovm [ОПЦИИ] КОМАНДА [аргументы...]"
Сценарий: Вывод версии
Когда Я выполняю команду "ovm -v"
@@ -32,6 +32,17 @@
И Я выполняю команду "ovm use stable"
Тогда я вижу в консоли вывод "OneScript stable активирован"
+Сценарий: Удаление версии тождественной текущей
+ Когда Я выполняю команду "ovm install --name latest stable"
+ Тогда я вижу в консоли вывод "Установка OneScript stable..."
+ И я вижу в консоли вывод "Установка OneScript stable завершена"
+ И я вижу в консоли вывод "ovm use latest"
+
+ Когда Я выполняю команду "ovm delete latest"
+ Тогда Я Показываю вывод команды
+ И я не вижу в консоли вывод "Версия не удалена, т.к. является текущей."
+ И я вижу в консоли вывод "Версия latest удалена"
+
Сценарий: Проверка использования версии
Когда Я выполняю команду "ovm ls"
И Я Показываю вывод команды
@@ -40,3 +51,12 @@
И я вижу в консоли строку подобно ".*oscript$"
И Я выполняю команду "which opm"
И я вижу в консоли строку подобно ".*opm$"
+
+Сценарий: Проверка установки x64 и опции --x86
+ Когда Я выполняю команду "ovm install stable"
+ Тогда я вижу в консоли вывод "Скачиваю установщик версии stable-x64..."
+ И я вижу в консоли вывод "Установка OneScript stable завершена"
+
+ Когда Я выполняю команду "ovm install --x86 stable"
+ Тогда я вижу в консоли вывод "Скачиваю установщик версии stable..."
+ И я вижу в консоли вывод "Установка OneScript stable завершена"
diff --git a/features/step_definitions/install-with-alias.os b/features/step_definitions/install-with-alias.os
index b98104d..e054d34 100644
--- a/features/step_definitions/install-with-alias.os
+++ b/features/step_definitions/install-with-alias.os
@@ -28,7 +28,13 @@
//Я удаляю каталог "./temp/ovm"
Процедура ЯУдаляюКаталог(Знач ПутьККаталогу) Экспорт
Если ФС.Существует(ПутьККаталогу) Тогда
- УдалитьФайлы(Новый Файл(ПутьККаталогу).ПолноеИмя);
+ ПолноеИмя = Новый Файл(ПутьККаталогу).ПолноеИмя;
+
+ // Обход ошибки удаления каталога с символической ссылкой внутри (windows only)
+ // junction нужно удалять явно
+ УдалитьФайлы(ОбъединитьПути(ПолноеИмя, "current"));
+
+ УдалитьФайлы(ПолноеИмя);
КонецЕсли;
КонецПроцедуры
diff --git a/packagedef b/packagedef
index 5ae92f6..6ce02d7 100644
--- a/packagedef
+++ b/packagedef
@@ -6,10 +6,13 @@
.ВерсияСреды("1.0.20")
.ЗависитОт("json")
.ЗависитОт("1commands", "1.3.2")
- .ЗависитОт("fluent", "0.3.1")
+ .ЗависитОт("fluent", "0.6.1")
.ЗависитОт("fs")
- .ЗависитОт("logos")
.ЗависитОт("tempfiles")
- .ЗависитОт("cli", "0.9.8")
+ .ЗависитОт("strings")
+ .ЗависитОт("decorator", "1.5.2")
+ .ЗависитОт("autumn", "3.2.0")
+ .ЗависитОт("autumn-logos", "1.1.1")
+ .ЗависитОт("autumn-cli", "1.0.3")
.ИсполняемыйФайл("src/cmd/ovm.os", "ovm")
;
diff --git a/src/cmd/ovm.os b/src/cmd/ovm.os
index a2c49db..7e3b8ed 100644
--- a/src/cmd/ovm.os
+++ b/src/cmd/ovm.os
@@ -1,81 +1,67 @@
-#Использовать cli
-#Использовать tempfiles
+#Использовать autumn
+#Использовать autumn-logos
+#Использовать autumn-cli
#Использовать "."
#Использовать "../core"
-///////////////////////////////////////////////////////////////////////////////
-
-// Обработчик выполнения команды
-//
-// Параметры:
-// КомандаПриложения - КомандаПриложения - Выполняемая команда
-//
-Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт
-
- КомандаПриложения.ВывестиСправку();
-
-КонецПроцедуры
-
-Процедура ВыполнитьПриложение()
-
- КонсольноеПриложение = Новый КонсольноеПриложение(
- ПараметрыПриложения.ИмяПриложения(),
- "OneScript Version Manager v" + ПараметрыПриложения.Версия()
- );
-
- КонсольноеПриложение.Версия("v version", ПараметрыПриложения.Версия());
-
- КонсольноеПриложение.ДобавитьКоманду(
- "install i",
- "Установить OneScript указанных версий",
- Новый КомандаInstall()
- );
- КонсольноеПриложение.ДобавитьКоманду(
- "use u",
- "Использовать OneScript указанной версии",
- Новый КомандаUse()
- );
- КонсольноеПриложение.ДобавитьКоманду(
- "uninstall delete d",
- "Удалить OneScript указанных версий",
- Новый КомандаUninstall()
- );
- КонсольноеПриложение.ДобавитьКоманду(
- "list ls",
- "Вывести список установленных и/или доступных версий OneScript",
- Новый КомандаList()
- );
- КонсольноеПриложение.ДобавитьКоманду(
- "run r",
- "Запустить исполняемый файл в окружении указанной версии OneScript",
- Новый КомандаRun()
- );
- КонсольноеПриложение.ДобавитьКоманду(
- "which w",
- "Вывести путь к установленной версии OneScript",
- Новый КомандаWhich()
- );
- КонсольноеПриложение.ДобавитьКоманду(
- "config",
- "Настройки ovm. Прокси, сервера и т.п.",
- Новый КомандаConfig()
- );
-
- КонсольноеПриложение.УстановитьОсновноеДействие(ЭтотОбъект);
- КонсольноеПриложение.Запустить(АргументыКоманднойСтроки);
-
-КонецПроцедуры
-
-Лог = ПараметрыOVM.ПолучитьЛог();
-КодСостояния = 0;
-Попытка
- ВыполнитьПриложение();
-Исключение
- Лог.Ошибка(ОписаниеОшибки());
- КодСостояния = 1;
-КонецПопытки;
-
-ВременныеФайлы.Удалить();
-
-ЗавершитьРаботу(КодСостояния);
+Функция НастройкиЛогоса()
+
+ НастройкиЛога = Новый Соответствие;
+ НастройкиЛога.Вставить("level", "INFO");
+ НастройкиЛога.Вставить("appenders", "logos");
+ НастройкиЛога.Вставить("classlayout", "РаскладкаЛогOVM");
+
+ НастройкиУровнейЛогов = Новый Соответствие;
+ НастройкиУровнейЛогов.Вставить("oscript.app.ovm", НастройкиЛога);
+
+ НастройкаАппендера = Новый Соответствие;
+ НастройкаАппендера.Вставить("type", "АппендерЛогOVM");
+ НастройкаАппендера.Вставить("level", "INFO");
+
+ НастройкиАппендеров = Новый Соответствие;
+
+ НастройкиАппендеров.Вставить("logos", НастройкаАппендера);
+
+ Результат = Новый Соответствие;
+
+ Результат.Вставить("logos.logger", НастройкиУровнейЛогов);
+ Результат.Вставить("logos.appender", НастройкиАппендеров);
+
+ Возврат Результат;
+
+КонецФункции
+
+СоветДругогоМастера = Новый СоветДругогоМастера;
+СоветДругогоМастера.ЗначенияДеталек(НастройкиЛогоса());
+
+Поделка = Новый Поделка(СоветДругогоМастера);
+
+УпакованВИсполняемыйФайл = СтрНайти(ТекущийСценарий().Источник, "oscript://") <> 0;
+
+Если УпакованВИсполняемыйФайл Тогда
+ Поделка
+ .ДобавитьЗаготовку(Тип("ИнициализацияИнтефейсаКоманднойСтроки"))
+ .ДобавитьЗаготовку(Тип("ИнициализацияФабрикиЛогов"));
+КонецЕсли;
+
+Поделка
+ .ДобавитьАннотацию(Тип("АннотацияЛогOVM"))
+ .ДобавитьЖелудь(Тип("ФайлНастроек"))
+ .ДобавитьЖелудь(Тип("УстановщикOneScript"))
+ .ДобавитьЖелудь(Тип("РаскладкаЛогOVM"))
+ .ДобавитьЖелудь(Тип("ПараметрыOVM"))
+ .ДобавитьЖелудь(Тип("ПараметрыПриложения"))
+ .ДобавитьЖелудь(Тип("ДеинсталляторOneScript"))
+ .ДобавитьЖелудь(Тип("ВерсииOneScript"))
+ .ДобавитьЖелудь(Тип("АппендерЛогOVM"))
+ .ДобавитьЖелудь(Тип("АктиваторOneScript"))
+ .ДобавитьЖелудь(Тип("КомандаConfig"))
+ .ДобавитьЖелудь(Тип("КомандаInstall"))
+ .ДобавитьЖелудь(Тип("КомандаList"))
+ .ДобавитьЖелудь(Тип("КомандаRun"))
+ .ДобавитьЖелудь(Тип("КомандаUninstall"))
+ .ДобавитьЖелудь(Тип("КомандаUse"))
+ .ДобавитьЖелудь(Тип("КомандаWhich"));
+
+Поделка.ЗапуститьПриложение();
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Config.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Config.os"
index 4ef1a1e..0cb3e29 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Config.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Config.os"
@@ -1,32 +1,22 @@
#Использовать "../../core"
-Процедура ОписаниеКоманды(КомандаПриложения) Экспорт
-
- КомандаПриложения.Аргумент(
- "NAME",
- ,
- "Название опции")
- .ТСтрока();
+&Аргумент(Имя = "NAME", Описание = "Название опции")
+&ТСтрока
+Перем Имя;
- КомандаПриложения.Аргумент(
- "VALUE",
- ,
- "Значение опции (массив строк)")
- .ТСтрока();
-
-КонецПроцедуры
+&Аргумент(Имя = "VALUE", Описание = "Значение опции (массив строк)")
+&ТСтрока
+Перем Значение;
-// Обработчик выполнения команды
-//
-// Параметры:
-// КомандаПриложения - КомандаПриложения - Выполняемая команда
-//
-Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт
- Имя = КомандаПриложения.ЗначениеАргумента("NAME");
- Значение = КомандаПриложения.ЗначениеАргумента("VALUE");
+&Пластилин
+Перем ФайлНастроек;
- Хранилище = ПараметрыOVM.ХранилищеНастроек();
- Хранилище.Установить(Имя, Значение);
- Хранилище.Записать();
+&КомандаПриложения(Имя = "config", Описание = "Настройки ovm. Прокси, сервера и т.п.")
+Процедура ПриСозданииОбъекта()
+КонецПроцедуры
-КонецПроцедуры
\ No newline at end of file
+&ВыполнениеКоманды
+Процедура ВыполнениеКоманды() Экспорт
+ ФайлНастроек.Установить(Имя, Значение);
+ ФайлНастроек.Записать();
+КонецПроцедуры
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Install.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Install.os"
index 6edcfe6..5922dfd 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Install.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Install.os"
@@ -1,7 +1,18 @@
#Использовать "../../core"
+&ЛогOVM
Перем Лог;
+&Пластилин
+Перем УстановщикOneScript;
+
+&Пластилин
+Перем ПараметрыOVM;
+
+&КомандаПриложения(Имя = "install i", Описание = "Установить OneScript указанных версий")
+Процедура ПриСозданииОбъекта()
+КонецПроцедуры
+
// Заполняет описание команды для библиотеки cli
//
// Параметры:
@@ -15,7 +26,12 @@
КомандаПриложения.Опция("clean c", Ложь, "Полностью очищать каталог установки (включая установленные библиотеки)")
.ВОкружении("OVM_INSTALL_CLEAN");
-
+
+ Если ПараметрыOVM.Это64БитнаяОперационнаяСистема() Тогда
+ КомандаПриложения.Опция("x86", Ложь, "Устанавливать 32-разрядный дистрибутив OneScript")
+ .ВОкружении("OVM_INSTALL_X86");
+ КонецЕсли;
+
КомандаПриложения.Аргумент(
"VERSION",
,
@@ -33,21 +49,25 @@
// КомандаПриложения - КомандаПриложения - Выполняемая команда
//
Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт
-
+
МассивВерсийКУстановке = КомандаПриложения.ЗначениеАргумента("VERSION");
АлиасВерсии = КомандаПриложения.ЗначениеОпции("name");
ОчищатьКаталогУстановки = КомандаПриложения.ЗначениеОпции("clean");
-
+
Если ЗначениеЗаполнено(АлиасВерсии) И МассивВерсийКУстановке.Количество() > 1 Тогда
ВызватьИсключение "Опция <--name> может быть задана только при установке одной версии OneScript";
КонецЕсли;
-
- УстановщикOneScript = Новый УстановщикOneScript();
-
+
+ Если ПараметрыOVM.Это64БитнаяОперационнаяСистема() Тогда
+ ИспользоватьХ64 = НЕ КомандаПриложения.ЗначениеОпции("x86");
+ Иначе
+ ИспользоватьХ64 = Ложь;
+ КонецЕсли;
+
Для Каждого ВерсияКУстановке Из МассивВерсийКУстановке Цикл
- УстановщикOneScript.УстановитьOneScript(ВерсияКУстановке, АлиасВерсии, ОчищатьКаталогУстановки);
+ УстановщикOneScript.УстановитьOneScript(ВерсияКУстановке, АлиасВерсии, ОчищатьКаталогУстановки, ИспользоватьХ64);
КонецЦикла;
-
+
Если МассивВерсийКУстановке.Количество() > 0 Тогда
Лог.Информация(
"Для начала использования версии OneScript, выполните команду:
@@ -57,5 +77,3 @@
КонецЕсли;
КонецПроцедуры
-
-Лог = ПараметрыOVM.ПолучитьЛог();
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260List.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260List.os"
index 9e5dbb8..411b1f6 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260List.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260List.os"
@@ -1,50 +1,50 @@
#Использовать "../../core"
+&ЛогOVM
Перем Лог;
-// Заполняет описание команды для библиотеки cli
-//
-// Параметры:
-// КомандаПриложения - КомандаПриложения - Настраиваемая команда
-//
-Процедура ОписаниеКоманды(КомандаПриложения) Экспорт
-
- КомандаПриложения
- .Опция("remote r", Ложь, "Вывести список доступных к установке версий")
- .ВОкружении("OVM_LIST_REMOTE");
-
- КомандаПриложения
- .Опция("quiet q", Ложь, "Тихий режим, вывод только алиасов версий")
- .ВОкружении("OVM_LIST_QUIET");
-
- КомандаПриложения
- .Опция("all a", Ложь, "Вывести список всех версий: установленных и доступных на сайте")
- .ВОкружении("OVM_LIST_ALL");
+&Пластилин("АппендерЛогOVM")
+Перем Аппендер;
+
+&Пластилин
+Перем ВерсииOneScript;
+
+&Опция(Имя = "remote r", Описание = "Вывести список доступных к установке версий")
+&ВОкружении("OVM_LIST_REMOTE")
+&ТБулево
+&ПоУмолчанию(Ложь)
+Перем ВыводитьСписокВерсийНаСайте;
+
+&Опция(Имя = "all a", Описание = "Вывести список всех версий: установленных и доступных на сайте")
+&ВОкружении("OVM_LIST_ALL")
+&ТБулево
+&ПоУмолчанию(Ложь)
+Перем ВыводитьВсеВерсии;
+
+&Опция(Имя = "quiet q", Описание = "Тихий режим, вывод только алиасов версий")
+&ВОкружении("OVM_LIST_QUIET")
+&ТБулево
+&ПоУмолчанию(Ложь)
+Перем ТихийРежим;
+&КомандаПриложения(Имя = "list ls", Описание = "Вывести список установленных и/или доступных версий OneScript")
+Процедура ПриСозданииОбъекта()
КонецПроцедуры
-// Обработчик выполнения команды
-//
-// Параметры:
-// КомандаПриложения - КомандаПриложения - Выполняемая команда
-//
-Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт
-
- ВыводитьСписокВерсийНаСайте = КомандаПриложения.ЗначениеОпции("remote");
- ВыводитьВсеВерсии = КомандаПриложения.ЗначениеОпции("all");
- ТихийРежим = КомандаПриложения.ЗначениеОпции("quiet");
-
+&ВыполнениеКоманды
+Процедура ВыполнениеКоманды() Экспорт
+
Если ВыводитьВсеВерсии Тогда
- ВывестиВсеВерсии(ТихийРежим);
+ ВывестиВсеВерсии();
ИначеЕсли ВыводитьСписокВерсийНаСайте Тогда
- ВывестиСписокДоступныхКУстановкеВерсий(ТихийРежим);
+ ВывестиСписокДоступныхКУстановкеВерсий();
Иначе
- ВывестиСписокУстановленныхВерсий(ТихийРежим);
+ ВывестиСписокУстановленныхВерсий();
КонецЕсли;
КонецПроцедуры
-Процедура ВывестиВсеВерсии(Знач ТихийРежим)
+Процедура ВывестиВсеВерсии()
ВсеВерсии = ВерсииOneScript.ПолучитьСписокВсехВерсий();
@@ -71,7 +71,7 @@
СтатусСообщения.Информация,
СтатусСообщения.БезСтатуса
);
- Аппендер = ПараметрыOVM.ПолучитьОсновнойСпособВывода();
+
Аппендер.УстановитьСвойство("message-status", УстанавливаемыйСтатусСообщения);
Лог.Информация(Сообщение);
@@ -79,7 +79,7 @@
КонецПроцедуры
-Процедура ВывестиСписокУстановленныхВерсий(Знач ТихийРежим)
+Процедура ВывестиСписокУстановленныхВерсий()
СписокУстановленныхВерсий = ВерсииOneScript.ПолучитьСписокУстановленныхВерсий();
Для Каждого УстановленнаяВерсия Из СписокУстановленныхВерсий Цикл
@@ -103,14 +103,14 @@
СтатусСообщения.Информация,
СтатусСообщения.БезСтатуса
);
- Аппендер = ПараметрыOVM.ПолучитьОсновнойСпособВывода();
+
Аппендер.УстановитьСвойство("message-status", УстанавливаемыйСтатусСообщения);
Лог.Информация(Сообщение);
КонецЦикла;
КонецПроцедуры
-Процедура ВывестиСписокДоступныхКУстановкеВерсий(Знач ТихийРежим)
+Процедура ВывестиСписокДоступныхКУстановкеВерсий()
СписокДоступныВерсий = ВерсииOneScript.ПолучитьСписокДоступныхКУстановкеВерсий();
Для Каждого ДоступнаяВерсия Из СписокДоступныВерсий Цикл
@@ -123,5 +123,3 @@
КонецЦикла;
КонецПроцедуры
-
-Лог = ПараметрыOVM.ПолучитьЛог();
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Run.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Run.os"
index d86e495..dee13d3 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Run.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Run.os"
@@ -2,49 +2,40 @@
Перем ЭтоWindows;
-// Заполняет описание команды для библиотеки cli
-//
-// Параметры:
-// КомандаПриложения - КомандаПриложения - Настраиваемая команда
-//
-Процедура ОписаниеКоманды(КомандаПриложения) Экспорт
-
- КомандаПриложения
- .Аргумент(
- "VERSION",
- "current",
- "Используемое окружение OneScript. " +
- "Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev, current")
- .ВОкружении("OVM_RUN_VERSION");
-
- КомандаПриложения
- .Аргумент("APP", "oscript", "Используемое приложение. Например, oscript, opm, vrunner...")
- .ВОкружении("OVM_RUN_APP");
-
- КомандаПриложения
- .Аргумент("ARGS", "", "Аргументы, передаваемые приложению").ТМассивСтрок()
- .ВОкружении("OVM_RUN_ARGS");
-
- // TODO: Убрать, после реализации https://github.com/khorevaa/cli/issues/10
- КомандаПриложения.Спек = "VERSION APP [-- ARGS...]";
-
+&Пластилин
+Перем ПараметрыOVM;
+
+&Аргумент(
+ Имя = "VERSION",
+ Описание = "Используемое окружение OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev, current"
+)
+&ПоУмолчанию("current")
+&ВОкружении("OVM_RUN_VERSION")
+Перем ИспользуемаяВерсия;
+
+&Аргумент(Имя = "APP", Описание = "Используемое приложение. Например, oscript, opm, vrunner...")
+&ПоУмолчанию("oscript")
+&ВОкружении("OVM_RUN_APP")
+Перем Приложение;
+
+&Аргумент(Имя = "ARGS", Описание = "Аргументы, передаваемые приложению")
+&ПоУмолчанию("")
+&ТМассивСтрок
+&Обязательный(Ложь)
+&ВОкружении("OVM_RUN_ARGS")
+Перем Аргументы;
+
+&КомандаПриложения(Имя = "run r", Описание = "Запустить исполняемый файл в окружении указанной версии OneScript")
+Процедура ПриСозданииОбъекта()
КонецПроцедуры
-// Обработчик выполнения команды
-//
-// Параметры:
-// КомандаПриложения - КомандаПриложения - Выполняемая команда
-//
-Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт
-
- ИспользуемаяВерсия = КомандаПриложения.ЗначениеАргумента("VERSION");
- Приложение = КомандаПриложения.ЗначениеАргумента("APP");
- Аргументы = КомандаПриложения.ЗначениеАргумента("ARGS");
+&ВыполнениеКоманды
+Процедура ВыполнениеКоманды() Экспорт
КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ИспользуемаяВерсия);
КаталогBin = ОбъединитьПути(КаталогУстановкиВерсии, "bin");
-
+
ПеременнаяPATH = ПолучитьПеременнуюСреды("PATH");
Если ЭтоWindows Тогда
ПеременнаяPATH = КаталогBin + ";" + ПеременнаяPATH;
@@ -53,13 +44,13 @@
КонецЕсли;
УстановитьПеременнуюСреды("PATH", ПеременнаяPATH, РасположениеПеременнойСреды.Процесс);
-
+
Команда = Новый Команда;
Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь);
Команда.УстановитьКоманду(Приложение);
Команда.ДобавитьПараметры(Аргументы);
Команда.ПоказыватьВыводНемедленно(Истина);
-
+
Команда.Исполнить();
КонецПроцедуры
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Uninstall.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Uninstall.os"
index 32bfe9b..0f57a80 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Uninstall.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Uninstall.os"
@@ -1,50 +1,41 @@
+&ЛогOVM
Перем Лог;
-// Заполняет описание команды для библиотеки cli
-//
-// Параметры:
-// КомандаПриложения - КомандаПриложения - Настраиваемая команда
-//
-Процедура ОписаниеКоманды(КомандаПриложения) Экспорт
-
- КомандаПриложения
- .Опция("force f", Ложь, "Удалять даже текущую используемую версию")
- .ВОкружении("OVM_UNINSTALL_FORCE");
-
- КомандаПриложения
- .Опция("all a", Ложь, "Удаление всех установленных версий OneScript")
- .ВОкружении("OVM_UNINSTALL_ALL");
-
- КомандаПриложения
- .Аргумент(
- "VERSION",
- ,
- "Удаляемая версия (версии) OneScript. " +
- "Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev. " +
- "Может быть передано несколько значений")
- .ВОкружении("OVM_UNINSTALL_VERSION")
- .ТМассивСтрок();
-
- КомандаПриложения.Спек = "[--force] [--all] [VERSION...]";
+&Пластилин
+Перем ДеинсталляторOneScript;
+
+&Пластилин
+Перем ВерсииOneScript;
+
+&Аргумент(
+ Имя = "VERSION",
+ Описание = "Удаляемая версия (версии) OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev. Может быть передано несколько значений"
+)
+&ТМассивСтрок
+&ВОкружении("OVM_UNINSTALL_VERSION")
+Перем МассивВерсийКУдалению;
+
+&Опция(Имя = "force f", Описание = "Удалять даже текущую используемую версию")
+&ПоУмолчанию(Ложь)
+&ВОкружении("OVM_UNINSTALL_FORCE")
+Перем УдалятьТекущуюВерсию;
+
+&Опция(Имя = "all a", Описание = "Удаление всех установленных версий OneScript")
+&ПоУмолчанию(Ложь)
+&ВОкружении("OVM_UNINSTALL_ALL")
+Перем УдалятьВсеВерсии;
+
+&КомандаПриложения(Имя = "uninstall delete d", Описание = "Удалить OneScript указанных версий")
+Процедура ПриСозданииОбъекта()
КонецПроцедуры
-// Обработчик выполнения команды
-//
-// Параметры:
-// КомандаПриложения - КомандаПриложения - Выполняемая команда
-//
-Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт
-
- МассивВерсийКУдалению = КомандаПриложения.ЗначениеАргумента("VERSION");
- УдалятьТекущуюВерсию = КомандаПриложения.ЗначениеОпции("force");
- УдалятьВсеВерсии = КомандаПриложения.ЗначениеОпции("all");
-
- ДеинсталляторOneScript = Новый ДеинсталляторOneScript();
-
+&ВыполнениеКоманды
+Процедура ВыполнениеКоманды() Экспорт
+
Если УдалятьВсеВерсии Тогда
ДеинсталляторOneScript.УдалитьВсеВерсииOneScript();
Иначе
-
+
Для Каждого ВерсияКУдалению Из МассивВерсийКУдалению Цикл
Если ВерсииOneScript.ЭтоТекущаяВерсия(ВерсияКУдалению) И НЕ УдалятьТекущуюВерсию Тогда
Лог.Информация("Версия <%1> не удалена, т.к. является текущей.", ВерсияКУдалению);
@@ -52,9 +43,7 @@
КонецЕсли;
ДеинсталляторOneScript.УдалитьOneScript(ВерсияКУдалению);
КонецЦикла;
-
+
КонецЕсли;
-
-КонецПроцедуры
-Лог = ПараметрыOVM.ПолучитьЛог();
+КонецПроцедуры
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Use.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Use.os"
index 0c88fcb..a8eb916 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Use.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Use.os"
@@ -1,38 +1,21 @@
-#Использовать fs
+&Пластилин
+Перем АктиваторOneScript;
-Перем ЭтоWindows;
+&Аргумент(Имя = "VERSION", Описание = "Используемая версия OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev")
+&ВОкружении("OVM_USE_VERSION")
+&ТСтрока
+Перем ИспользуемаяВерсия;
-// Заполняет описание команды для библиотеки cli
-//
-// Параметры:
-// КомандаПриложения - КомандаПриложения - Настраиваемая команда
-//
-Процедура ОписаниеКоманды(КомандаПриложения) Экспорт
-
- КомандаПриложения
- .Опция("install i", Ложь, "Выполнять установку требуемой версии в случае ее отсутствия")
- .ВОкружении("OVM_USE_INSTALL");
-
- КомандаПриложения
- .Аргумент(
- "VERSION",
- ,
- "Используемая версия OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev")
- .ВОкружении("OVM_USE_VERSION")
- .ТСтрока();
+&Опция(Имя = "install i", Описание = "Выполнять установку требуемой версии в случае ее отсутствия")
+&ПоУмолчанию(Ложь)
+&ВОкружении("OVM_USE_INSTALL")
+Перем ВыполнятьУстановкуПриНеобходимости;
+&КомандаПриложения(Имя = "use u", Описание = "Использовать OneScript указанной версии")
+Процедура ПриСозданииОбъекта()
КонецПроцедуры
-// Обработчик выполнения команды
-//
-// Параметры:
-// КомандаПриложения - КомандаПриложения - Выполняемая команда
-//
-Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт
- ИспользуемаяВерсия = КомандаПриложения.ЗначениеАргумента("VERSION");
- ВыполнятьУстановкуПриНеобходимости = КомандаПриложения.ЗначениеОпции("install");
-
- АктиваторOneScript = Новый АктиваторOneScript();
+&ВыполнениеКоманды
+Процедура ВыполнениеКоманды() Экспорт
АктиваторOneScript.ИспользоватьВерсиюOneScript(ИспользуемаяВерсия, ВыполнятьУстановкуПриНеобходимости);
-
КонецПроцедуры
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Which.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Which.os"
index 891165d..baf35d2 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Which.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Which.os"
@@ -1,38 +1,27 @@
#Использовать "../../core"
+&ЛогOVM
Перем Лог;
-// Заполняет описание команды для библиотеки cli
-//
-// Параметры:
-// КомандаПриложения - КомандаПриложения - Настраиваемая команда
-//
-Процедура ОписаниеКоманды(КомандаПриложения) Экспорт
-
- КомандаПриложения
- .Аргумент(
- "VERSION",
- "current",
- "Искомая версия OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev"
- )
- .ВОкружении("OVM_WHICH_VERSION")
- .ТСтрока();
-
-КонецПроцедуры
+&Пластилин
+Перем ВерсииOneScript;
-// Обработчик выполнения команды
-//
-// Параметры:
-// КомандаПриложения - КомандаПриложения - Выполняемая команда
-//
-Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт
+&Аргумент(Имя = "VERSION", Описание = "Искомая версия OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev")
+&ПоУмолчанию("current")
+&Обязательный(Ложь)
+&ВОкружении("OVM_WHICH_VERSION")
+&ТСтрока
+Перем ИскомаяВерсия;
- ИскомаяВерсия = КомандаПриложения.ЗначениеАргумента("VERSION");
+&КомандаПриложения(Имя = "which w", Описание = "Вывести путь к установленной версии OneScript")
+Процедура ПриСозданииОбъекта()
+КонецПроцедуры
- ПутьКУстановленнойВерсии = ВерсииOneScript.ПолучитьПутьКУстановленномуДвижкуOneScript(ИскомаяВерсия);
+&ВыполнениеКоманды
+Процедура ВыполнениеКоманды() Экспорт
- Лог.Информация(ПутьКУстановленнойВерсии);
+ Лог.Информация(
+ ВерсииOneScript.ПолучитьПутьКУстановленномуДвижкуOneScript(ИскомаяВерсия)
+ );
КонецПроцедуры
-
-Лог = ПараметрыOVM.ПолучитьЛог();
diff --git "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os"
deleted file mode 100644
index a955388..0000000
--- "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os"
+++ /dev/null
@@ -1,18 +0,0 @@
-// Имя приложения
-//
-// Возвращаемое значение:
-// Строка - Имя приложения
-//
-Функция ИмяПриложения() Экспорт
- Возврат "ovm";
-КонецФункции
-
-// Версия приложения
-//
-// Возвращаемое значение:
-// Строка - Строковое представление версии
-//
-Функция Версия() Экспорт
- Версия = "1.0.0-RC15";
- Возврат Версия;
-КонецФункции
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\272\321\202\320\270\320\262\320\260\321\202\320\276\321\200OneScript.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\272\321\202\320\270\320\262\320\260\321\202\320\276\321\200OneScript.os"
index 6cbae40..5c5b70a 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\272\321\202\320\270\320\262\320\260\321\202\320\276\321\200OneScript.os"
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\272\321\202\320\270\320\262\320\260\321\202\320\276\321\200OneScript.os"
@@ -3,8 +3,20 @@
Перем СистемнаяИнформация;
Перем ЭтоWindows;
+
+&ЛогOVM
Перем Лог;
+&Пластилин
+Перем ПараметрыOVM;
+
+&Пластилин
+Перем ВерсииOneScript;
+
+&Желудь
+Процедура ПриСозданииОбъекта()
+КонецПроцедуры
+
// Активирует указанную версию OneScript.
// Создает необходимые симлинки и оперирует PATH.
//
@@ -67,8 +79,8 @@
Команда = Новый Команда;
Команда.УстановитьКоманду("mklink");
Команда.ДобавитьПараметр("/J");
- Команда.ДобавитьПараметр(ПутьКСсылке);
- Команда.ДобавитьПараметр(ПутьККаталогуНазначения);
+ Команда.ДобавитьПараметр(Команда.ОбернутьВКавычки(ПутьКСсылке));
+ Команда.ДобавитьПараметр(Команда.ОбернутьВКавычки(ПутьККаталогуНазначения));
Команда.УстановитьПравильныйКодВозврата(0);
Команда.Исполнить();
@@ -222,19 +234,19 @@
ТекстФайлаПрофиля = "export PATH=""" + ПутьККаталогуBin + ":$PATH""
|export OSCRIPTBIN=""" + ПутьККаталогуBin + """";
- ПутьКФайлу = ОбъединитьПути(
- СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя),
- ".profile"
- );
-
- ДобавитьТекстВНовыйИлиИмеющийсяФайл(ТекстФайлаПрофиля, ПутьКФайлу);
-
- ПутьКФайлу = ОбъединитьПути(
- СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя),
- ".bashrc"
- );
-
- ДобавитьТекстВНовыйИлиИмеющийсяФайл(ТекстФайлаПрофиля, ПутьКФайлу);
+ ИменаДляОбработки = Новый Массив;
+ ИменаДляОбработки.Добавить(".profile");
+ ИменаДляОбработки.Добавить(".bashrc");
+ ИменаДляОбработки.Добавить(".zprofile");
+ ИменаДляОбработки.Добавить(".zshrc");
+
+ КаталогПрофиля = СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя);
+ Для Каждого ИмяФайла Из ИменаДляОбработки Цикл
+
+ ПутьКФайлу = ОбъединитьПути(КаталогПрофиля, ИмяФайла);
+ ДобавитьТекстВНовыйИлиИмеющийсяФайл(ТекстФайлаПрофиля, ПутьКФайлу);
+
+ КонецЦикла;
КонецПроцедуры
@@ -246,7 +258,7 @@
Если ВыполнятьУстановкуПриНеобходимости Тогда
УстановщикOneScript = Новый УстановщикOneScript();
- УстановщикOneScript.УстановитьOneScript(ИспользуемаяВерсия);
+ УстановщикOneScript.УстановитьOneScript(ИспользуемаяВерсия, , , СистемнаяИнформация.Это64БитнаяОперационнаяСистема);
Иначе
ВызватьИсключение СтрШаблон("Не обнаружена требуемая версия <%1>", ИспользуемаяВерсия);
КонецЕсли;
@@ -413,4 +425,3 @@
СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0;
-Лог = ПараметрыOVM.ПолучитьЛог();
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\233\320\276\320\263OVM.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\233\320\276\320\263OVM.os"
new file mode 100644
index 0000000..d49179c
--- /dev/null
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\233\320\276\320\263OVM.os"
@@ -0,0 +1,4 @@
+&Аннотация("ЛогOVM")
+&Лог("oscript.app.ovm")
+Процедура ПриСозданииОбъекта()
+КонецПроцедуры
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\277\320\277\320\265\320\275\320\264\320\265\321\200\320\233\320\276\320\263OVM.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\277\320\277\320\265\320\275\320\264\320\265\321\200\320\233\320\276\320\263OVM.os"
new file mode 100644
index 0000000..5791710
--- /dev/null
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\277\320\277\320\265\320\275\320\264\320\265\321\200\320\233\320\276\320\263OVM.os"
@@ -0,0 +1,54 @@
+//////////////////////////////////////////////////////////////////////////
+//
+// LOGOS: вывод в консоль
+//
+//////////////////////////////////////////////////////////////////////////
+
+Перем КартаСтатусовИУровней Экспорт;
+Перем УстанавливаемыйСтатусСообщения Экспорт;
+
+// Вывести сообщение через аппендер
+//
+// Параметры:
+// Сообщение - Строка - Выводимое сообщение
+// УровеньСообщения - Число - Числовое представление УровниЛога.
+//
+Процедура Вывести(Знач Сообщение, УровеньСообщения) Экспорт
+
+ ПередаваемыйСтатусСообщения = ?(УстанавливаемыйСтатусСообщения = Неопределено,
+ КартаСтатусовИУровней[УровеньСообщения],
+ УстанавливаемыйСтатусСообщения
+ );
+ Сообщить(Сообщение, ПередаваемыйСтатусСообщения);
+
+КонецПроцедуры
+
+// Закрыть аппендер
+//
+Процедура Закрыть() Экспорт
+ // NO-OP
+КонецПроцедуры
+
+// Устанавливает свойство аппендера, заданное в конфигурационном файле
+//
+// Параметры:
+// ИмяСвойства - Строка - Имя свойства
+// Значение - Произвольный - Значение свойства
+//
+Процедура УстановитьСвойство(Знач ИмяСвойства, Знач Значение) Экспорт
+ Если ИмяСвойства = "message-status" Тогда
+ УстанавливаемыйСтатусСообщения = Значение;
+ КонецЕсли;
+КонецПроцедуры // УстановитьСвойство()
+
+&Желудь
+Процедура ПриСозданииОбъекта()
+
+ КартаСтатусовИУровней = Новый Соответствие;
+ КартаСтатусовИУровней.Вставить(УровниЛога.Отладка, СтатусСообщения.БезСтатуса);
+ КартаСтатусовИУровней.Вставить(УровниЛога.Информация, СтатусСообщения.Обычное);
+ КартаСтатусовИУровней.Вставить(УровниЛога.Предупреждение, СтатусСообщения.Внимание);
+ КартаСтатусовИУровней.Вставить(УровниЛога.Ошибка, СтатусСообщения.Важное);
+ КартаСтатусовИУровней.Вставить(УровниЛога.КритичнаяОшибка, СтатусСообщения.ОченьВажное);
+
+КонецПроцедуры
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\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\265\321\200\321\201\320\270\320\270OneScript.os"
similarity index 68%
rename from "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"
rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\265\321\200\321\201\320\270\320\270OneScript.os"
index b3e5d87..5ce9edc 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\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\265\321\200\321\201\320\270\320\270OneScript.os"
@@ -1,297 +1,393 @@
-#Использовать 1commands
-#Использовать fluent
-#Использовать fs
-#Использовать logos
-
-Перем Лог;
-Перем ЭтоWindows;
-
-// Проверить, что версия установлена
-//
-// Параметры:
-// ПроверяемаяВерсия - Строка - Алиас версии
-//
-// Возвращаемое значение:
-// Булево - Версия установлена
-//
-Функция ВерсияУстановлена(Знач ПроверяемаяВерсия) Экспорт
-
- КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
- КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ПроверяемаяВерсия);
-
- Результат = ФС.КаталогСуществует(КаталогУстановкиВерсии);
- Результат = Результат И ФС.ФайлСуществует(ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript.exe"));
-
- Лог.Отладка("Версия %1 установлена: %2", ПроверяемаяВерсия, Результат);
- Возврат Результат;
-
-КонецФункции
-
-// Проверить, что переданная версия является текущей (активированной)
-//
-// Параметры:
-// ПроверяемаяВерсия - Строка - Алиас
-//
-// Возвращаемое значение:
-// Булево - Это текущая версия
-//
-Функция ЭтоТекущаяВерсия(Знач ПроверяемаяВерсия) Экспорт
-
- Если ПроверяемаяВерсия = "current" Тогда
- Возврат Истина;
- КонецЕсли;
-
- Если НЕ ВерсияУстановлена("current") Тогда
- Возврат Ложь;
- КонецЕсли;
-
- Если НЕ ВерсияУстановлена(ПроверяемаяВерсия) Тогда
- Возврат Ложь;
- КонецЕсли;
-
- ПутьКДвижкуТекущейВерсии = ПолучитьПутьКУстановленномуДвижкуOneScript("current");
- ПутьКДвижкуПроверяемойВерсии = ПолучитьПутьКУстановленномуДвижкуOneScript(ПроверяемаяВерсия);
-
- ФайлДвижкаТекущейВерсии = Новый Файл(ПутьКДвижкуТекущейВерсии);
- ФайлДвижкаПроверяемойВерсии = Новый Файл(ПутьКДвижкуПроверяемойВерсии);
-
- ФайлыПроверяемойВерсииСовпадаетСТекущейВерсией =
- ФайлДвижкаТекущейВерсии.ПолучитьВремяИзменения() = ФайлДвижкаПроверяемойВерсии.ПолучитьВремяИзменения()
- И ФайлДвижкаТекущейВерсии.ПолучитьВремяСоздания() = ФайлДвижкаПроверяемойВерсии.ПолучитьВремяСоздания();
-
- Возврат ФайлыПроверяемойВерсииСовпадаетСТекущейВерсией;
-
-КонецФункции
-
-// Получить информацию об установленных версиях
-//
-// Возвращаемое значение:
-// ТаблицаЗначений - Информация об установленных версиях:
-// * Алиас - Строка - Алиас версии (имя каталога)
-// * Путь - Строка - Полный путь к каталогу версии
-// * Версия - Строка - Точная версия OneScript
-// * ЭтоСимлинк - Булево - Каталог является символической ссылкой
-//
-Функция ПолучитьСписокУстановленныхВерсий() Экспорт
-
- УстановленныеВерсии = Новый ТаблицаЗначений;
- УстановленныеВерсии.Колонки.Добавить("Алиас");
- УстановленныеВерсии.Колонки.Добавить("Путь");
- УстановленныеВерсии.Колонки.Добавить("Версия");
- УстановленныеВерсии.Колонки.Добавить("ЭтоСимлинк");
-
- // TODO: определение симлинка на основании аттрибутов файла?
- МассивИменСимлинков = Новый Массив;
- МассивИменСимлинков.Добавить("current");
-
- КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
- НайденныеФайлы = НайтиФайлы(КаталогУстановки, ПолучитьМаскуВсеФайлы());
- Для Каждого НайденныйФайл Из НайденныеФайлы Цикл
- Если НЕ ВерсияУстановлена(НайденныйФайл.Имя) Тогда
- Продолжить;
- КонецЕсли;
-
- СтрокаВерсии = УстановленныеВерсии.Добавить();
- СтрокаВерсии.Алиас = НайденныйФайл.Имя;
- СтрокаВерсии.Путь = НайденныйФайл.ПолноеИмя;
- СтрокаВерсии.Версия = ПолучитьТочнуюВерсиюOneScript(СтрокаВерсии.Алиас);
- СтрокаВерсии.ЭтоСимлинк = МассивИменСимлинков.Найти(НайденныйФайл.Имя) <> Неопределено;
-
- КонецЦикла;
-
- Возврат УстановленныеВерсии;
-
-КонецФункции
-
-// Получить информацию о версиях, доступных к установке
-//
-// Возвращаемое значение:
-// ТаблицаЗначений - Информация об установленных версиях:
-// * Алиас - Строка - Алиас версии (имя каталога)
-// * Путь - Строка - Полный путь к каталогу версии
-//
-Функция ПолучитьСписокДоступныхКУстановкеВерсий() Экспорт
-
- ДоступныеВерсии = Новый ТаблицаЗначений;
- ДоступныеВерсии.Колонки.Добавить("Алиас");
- ДоступныеВерсии.Колонки.Добавить("Путь");
-
- АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт();
-
- Таймаут = 10;
- Соединение = Новый HTTPСоединение(
- АдресСайтаОСкрипт,
- ,
- ,
- ,
- ,
- Таймаут
- );
- Запрос = Новый HTTPЗапрос("downloads");
-
- Ответ = Соединение.Получить(Запрос);
- 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
+
+&ЛогOVM
+Перем Лог;
+
+&Пластилин
+Перем ПараметрыOVM;
+
+Перем ЭтоWindows;
+
+&Желудь
+Процедура ПриСозданииОбъекта()
+КонецПроцедуры
+
+// Проверить, что версия установлена
+//
+// Параметры:
+// ПроверяемаяВерсия - Строка - Алиас версии
+//
+// Возвращаемое значение:
+// Булево - Версия установлена
+//
+Функция ВерсияУстановлена(Знач ПроверяемаяВерсия) Экспорт
+
+ КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
+ КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ПроверяемаяВерсия);
+
+ СуществуетКаталогУстановкиВерсии = ФС.КаталогСуществует(КаталогУстановкиВерсии);
+ СуществуетOscriptExe = ФС.ФайлСуществует(ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript.exe"));
+ ЭтоКаталогВерсии2 = ЭтоКаталогВерсии2(КаталогУстановкиВерсии);
+ Результат = СуществуетКаталогУстановкиВерсии И (СуществуетOscriptExe ИЛИ ЭтоКаталогВерсии2);
+
+ Лог.Отладка("Версия %1 установлена: %2", ПроверяемаяВерсия, Результат);
+ Возврат Результат;
+
+КонецФункции
+
+// Проверить, что переданная версия является текущей (активированной)
+//
+// Параметры:
+// ПроверяемаяВерсия - Строка - Алиас
+//
+// Возвращаемое значение:
+// Булево - Это текущая версия
+//
+Функция ЭтоТекущаяВерсия(Знач ПроверяемаяВерсия) Экспорт
+
+ Если ПроверяемаяВерсия = "current" Тогда
+ Возврат Истина;
+ КонецЕсли;
+
+ Если НЕ ВерсияУстановлена("current") Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ Если НЕ ВерсияУстановлена(ПроверяемаяВерсия) Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ АлиасыСимлинков = ПолучитьАлиасыСимлинков();
+
+ ТекущаяВерсия = АлиасыСимлинков["current"];
+
+ Возврат ПроверяемаяВерсия = ТекущаяВерсия;
+
+КонецФункции
+
+// Проверяет, что переданный каталог является каталогом OneScript 2.0+
+//
+// Параметры:
+// КаталогУстановкиВерсии - Строка - Путь к конкретной версии.
+//
+// Возвращаемое значение:
+// Булево
+//
+Функция ЭтоКаталогВерсии2(КаталогУстановкиВерсии) Экспорт
+ Возврат ФС.ФайлСуществует(ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript.dll"));
+КонецФункции
+
+// Получает путь к исполняемому файлу OneScript по шаблону версии 1.x.
+//
+// Параметры:
+// КаталогУстановкиВерсии - Строка - Путь к конкретной версии.
+//
+// Возвращаемое значение:
+// Строка - Путь к исполняемому файлу.
+//
+Функция ПутьКИсполняемомуФайлуВерсии1(КаталогУстановкиВерсии) Экспорт
+
+ ПутьКИсполняемомуФайлу = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript");
+ Если ЭтоWindows Тогда
+ ПутьКИсполняемомуФайлу = ПутьКИсполняемомуФайлу + ".exe";
+ КонецЕсли;
+
+ Возврат ПутьКИсполняемомуФайлу;
+
+КонецФункции
+
+// Получает путь к исполняемому файлу OneScript по шаблону версии 1.x.
+//
+// Параметры:
+// КаталогУстановкиВерсии - Строка - Путь к конкретной версии.
+//
+// Возвращаемое значение:
+// Строка - Путь к исполняемому файлу.
+//
+Функция ПутьКИсполняемомуФайлуВерсии2(КаталогУстановкиВерсии) Экспорт
+
+ ПутьКИсполняемомуФайлу = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript");
+ Если ЭтоWindows Тогда
+ ПутьКИсполняемомуФайлу = ПутьКИсполняемомуФайлу + ".bat";
+ КонецЕсли;
+
+ Возврат ПутьКИсполняемомуФайлу;
+
+КонецФункции
+
+// Получить информацию об установленных версиях
+//
+// Возвращаемое значение:
+// ТаблицаЗначений - Информация об установленных версиях:
+// * Алиас - Строка - Алиас версии (имя каталога)
+// * Путь - Строка - Полный путь к каталогу версии
+// * Версия - Строка - Точная версия OneScript
+// * ЭтоСимлинк - Булево - Каталог является символической ссылкой
+//
+Функция ПолучитьСписокУстановленныхВерсий() Экспорт
+
+ УстановленныеВерсии = Новый ТаблицаЗначений;
+ УстановленныеВерсии.Колонки.Добавить("Алиас");
+ УстановленныеВерсии.Колонки.Добавить("Путь");
+ УстановленныеВерсии.Колонки.Добавить("Версия");
+ УстановленныеВерсии.Колонки.Добавить("ЭтоСимлинк");
+
+ АлиасыСимлинков = ПолучитьАлиасыСимлинков();
+
+ КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
+ НайденныеФайлы = НайтиФайлы(КаталогУстановки, ПолучитьМаскуВсеФайлы());
+ Для Каждого НайденныйФайл Из НайденныеФайлы Цикл
+ Если НЕ ВерсияУстановлена(НайденныйФайл.Имя) Тогда
+ Продолжить;
+ КонецЕсли;
+
+ СтрокаВерсии = УстановленныеВерсии.Добавить();
+ СтрокаВерсии.Алиас = НайденныйФайл.Имя;
+ СтрокаВерсии.Путь = НайденныйФайл.ПолноеИмя;
+ СтрокаВерсии.Версия = ПолучитьТочнуюВерсиюOneScript(СтрокаВерсии.Алиас);
+ СтрокаВерсии.ЭтоСимлинк = АлиасыСимлинков.Получить(НайденныйФайл.Имя) <> Неопределено;
+
+ КонецЦикла;
+
+ Возврат УстановленныеВерсии;
+
+КонецФункции
+
+Функция ПолучитьАлиасыСимлинков()
+
+ КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
+
+ Команда = Новый Команда();
+
+ Если ЭтоWindows Тогда
+ Команда.УстановитьКоманду("dir");
+ Иначе
+ Команда.УстановитьКоманду("ls");
+ Команда.ДобавитьПараметр("-la");
+ КонецЕсли;
+ Команда.ДобавитьПараметр(КаталогУстановки);
+
+ Команда.Исполнить();
+
+ ВыводКоманды = Команда.ПолучитьВывод();
+
+ Если ЭтоWindows Тогда
+ Выражение = "(|)\s*(.+?)\s*\[(.+)\]";
+ Иначе
+ Выражение = "l.+?(\d\d:\d\d)\s*(.+?)\s*->\s*(.+)";
+ КонецЕсли;
+
+ РВ = Новый РегулярноеВыражение(Выражение);
+ РВ.МногоСтрочный = Ложь;
+ Совпадения = РВ.НайтиСовпадения(ВыводКоманды);
+
+ АлиасыСимлинков = Новый Соответствие;
+ РазделительПути = ПолучитьРазделительПути();
+
+ Для Каждого Совпадение Из Совпадения Цикл
+ Группы = Совпадение.Группы;
+ ЧастиПути = СтрРазделить(Группы[3].Значение, РазделительПути);
+ АлиасыСимлинков.Вставить(Группы[2].Значение, ЧастиПути[ЧастиПути.ВГраница()]);
+ КонецЦикла;
+
+ Возврат АлиасыСимлинков;
+
+КонецФункции
+
+// Получить информацию о версиях, доступных к установке
+//
+// Возвращаемое значение:
+// ТаблицаЗначений - Информация об установленных версиях:
+// * Алиас - Строка - Алиас версии (имя каталога)
+// * Путь - Строка - Полный путь к каталогу версии
+//
+Функция ПолучитьСписокДоступныхКУстановкеВерсий() Экспорт
+
+ ДоступныеВерсии = Новый ТаблицаЗначений;
+ ДоступныеВерсии.Колонки.Добавить("Алиас");
+ ДоступныеВерсии.Колонки.Добавить("Путь");
+
+ АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт();
+
+ Таймаут = 10;
+ Соединение = Новый HTTPСоединение(
+ АдресСайтаОСкрипт,
+ ,
+ ,
+ ,
+ ,
+ Таймаут
+ );
+ Запрос = Новый HTTPЗапрос("downloads");
+
+ Ответ = Соединение.Получить(Запрос);
+ 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.bat|oscript)
+//
+// Параметры:
+// УстановленнаяВерсия - Строка - Алиас проверяемой версии
+//
+// Возвращаемое значение:
+// Строка - Полный путь к исполняемому файлу oscript
+//
+Функция ПолучитьПутьКУстановленномуДвижкуOneScript(Знач УстановленнаяВерсия) Экспорт
+
+ УстановленныеВерсии = ПолучитьСписокУстановленныхВерсий();
+
+ ПутьКУстановленнойВерсии = ПроцессорыКоллекций.ИзКоллекции(УстановленныеВерсии)
+ .Фильтровать(
+ "(Элемент) -> Элемент.Алиас = УстановленнаяВерсия",
+ Новый Структура("УстановленнаяВерсия", УстановленнаяВерсия)
+ )
+ .Первые(1)
+ .Обработать("(Элемент) ->
+ |Если ЭтоКаталогВерсии2(Элемент.Путь) Тогда
+ | Возврат ПутьКИсполняемомуФайлуВерсии2(Элемент.Путь);
+ |Иначе
+ | Возврат ПутьКИсполняемомуФайлуВерсии1(Элемент.Путь);
+ |КонецЕсли;
+ |", ЭтотОбъект)
+ .ПолучитьПервый();
+
+ Возврат ПутьКУстановленнойВерсии;
+
+КонецФункции
+
+Процедура ОбеспечитьСтрокуВерсииПоАлиасу(ТаблицаВерсий, Алиас, ИмяРеквизитаПуть = "ПутьСервер")
+
+ СтрокаВерсии = ТаблицаВерсий.Найти(Алиас, "Алиас");
+
+ Если СтрокаВерсии = Неопределено Тогда
+ СтрокаВерсии = ТаблицаВерсий.Добавить();
+ СтрокаВерсии.Алиас = Алиас;
+ КонецЕсли;
+
+ СтрокаВерсии[ИмяРеквизитаПуть] = ПараметрыOVM.ПолныйАдресККаталогуДистрибутивов();
+
+КонецПроцедуры
+
+Функция ПолучитьТочнуюВерсиюOneScript(Знач ПроверяемаяВерсия)
+
+ КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
+ КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ПроверяемаяВерсия);
+ ЭтоКаталогВерсии2 = ЭтоКаталогВерсии2(КаталогУстановкиВерсии);
+ Если ЭтоКаталогВерсии2 Тогда
+ ПутьКИсполняемомуФайлу = ПутьКИсполняемомуФайлуВерсии2(КаталогУстановкиВерсии);
+ Иначе
+ ПутьКИсполняемомуФайлу = ПутьКИсполняемомуФайлуВерсии1(КаталогУстановкиВерсии);
+ КонецЕсли;
+
+ Команда = Новый Команда();
+ Команда.УстановитьКоманду(ПутьКИсполняемомуФайлу);
+ Команда.ДобавитьПараметр("-version");
+
+ Команда.Исполнить();
+
+ ВыводКоманды = СокрЛП(Команда.ПолучитьВывод());
+ Если СтрЧислоСтрок(ВыводКоманды) > 1 Тогда
+ РегулярноеВыражение = Новый РегулярноеВыражение("Version (\d+\.\d+\.\d+\.\d+)");
+ Совпадения = РегулярноеВыражение.НайтиСовпадения(ВыводКоманды);
+ Если Совпадения.Количество() = 1 Тогда
+ ВыводКоманды = Совпадения[0].Группы[1].Значение;
+ Иначе
+ ВыводКоманды = "unknown";
+ КонецЕсли;
+ КонецЕсли;
+
+ Возврат ВыводКоманды;
+
+КонецФункции
+
+СистемнаяИнформация = Новый СистемнаяИнформация;
+ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0;
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\320\270\320\275\321\201\321\202\320\260\320\273\320\273\321\217\321\202\320\276\321\200OneScript.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\320\270\320\275\321\201\321\202\320\260\320\273\320\273\321\217\321\202\320\276\321\200OneScript.os"
index ba88869..1f2dc32 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\320\270\320\275\321\201\321\202\320\260\320\273\320\273\321\217\321\202\320\276\321\200OneScript.os"
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\320\270\320\275\321\201\321\202\320\260\320\273\320\273\321\217\321\202\320\276\321\200OneScript.os"
@@ -1,5 +1,16 @@
+&ЛогOVM
Перем Лог;
+&Пластилин
+Перем ВерсииOneScript;
+
+&Пластилин
+Перем ПараметрыOVM;
+
+&Желудь
+Процедура ПриСозданииОбъекта()
+КонецПроцедуры
+
// Удалить установленную версию OneScript
//
// Параметры:
@@ -36,5 +47,3 @@
КонецЦикла;
КонецПроцедуры
-
-Лог = ПараметрыOVM.ПолучитьЛог();
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213OVM.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213OVM.os"
new file mode 100644
index 0000000..23a770f
--- /dev/null
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213OVM.os"
@@ -0,0 +1,67 @@
+#Использовать logos
+
+Перем СистемнаяИнформация;
+
+&Деталька(Значение = "oscript.server", ЗначениеПоУмолчанию = "https://oscript.io")
+Перем АдресСайтаОСкрипт;
+
+&Желудь
+Процедура ПриСозданииОбъекта()
+КонецПроцедуры
+
+// Путь к каталогу установки версий OneScript по умолчанию
+//
+// Возвращаемое значение:
+// Строка - Путь к каталогу установки по умолчанию
+//
+Функция КаталогУстановкиПоУмолчанию() Экспорт
+
+ КаталогУстановкиПоУмолчанию = ПолучитьПеременнуюСреды("OVM_INSTALL_PATH");
+ Если НЕ ЗначениеЗаполнено(КаталогУстановкиПоУмолчанию) Тогда
+ КаталогУстановкиПоУмолчанию = ОбъединитьПути(
+ СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений),
+ "ovm"
+ );
+ КонецЕсли;
+
+ Возврат КаталогУстановкиПоУмолчанию;
+
+КонецФункции
+
+// Адрес сайта OneScript
+//
+// Возвращаемое значение:
+// Строка - Адрес сайта OneScript
+//
+Функция АдресСайтаОСкрипт() Экспорт
+ Возврат АдресСайтаОСкрипт;
+КонецФункции
+
+// Полный адрес к каталогу дистрибутивов OneScript
+//
+// Возвращаемое значение:
+// Строка - Полный адрес к каталогу дистрибутивов OneScript
+//
+Функция ПолныйАдресККаталогуДистрибутивов() Экспорт
+ Возврат АдресСайтаОСкрипт() + "/downloads";
+КонецФункции
+
+// Разрядность текущей операционной системы
+//
+// Возвращаемое значение:
+// Булево - это 64 битная операционна система
+Функция Это64БитнаяОперационнаяСистема() Экспорт
+ Возврат СистемнаяИнформация.Это64БитнаяОперационнаяСистема;
+КонецФункции
+
+// Количество разрядов в номере версии.
+// В приложении используется версионирование вида 1.0.20
+//
+// Возвращаемое значение:
+// Число - Количество разрядов в номере версии
+//
+Функция КоличествоРазрядовВНомереВерсии() Экспорт
+ Возврат 3;
+КонецФункции
+
+СистемнаяИнформация = Новый СистемнаяИнформация;
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os"
new file mode 100644
index 0000000..dc1d6af
--- /dev/null
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os"
@@ -0,0 +1,16 @@
+&Желудь("ОписаниеКонсольногоПриложения")
+&Верховный
+Процедура ПриСозданииОбъекта()
+КонецПроцедуры
+
+Функция ИмяПриложения() Экспорт
+ Возврат "ovm";
+КонецФункции
+
+Функция ПолноеИмяПриложения() Экспорт
+ Возврат "OneScript Version Manager";
+КонецФункции
+
+Функция ВерсияПриложения() Экспорт
+ Возврат "1.1.0";
+КонецФункции
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\321\201\320\272\320\273\320\260\320\264\320\272\320\260\320\233\320\276\320\263OVM.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\321\201\320\272\320\273\320\260\320\264\320\272\320\260\320\233\320\276\320\263OVM.os"
new file mode 100644
index 0000000..bfd2104
--- /dev/null
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\321\201\320\272\320\273\320\260\320\264\320\272\320\260\320\233\320\276\320\263OVM.os"
@@ -0,0 +1,25 @@
+#Использовать logos
+
+// Форматирование строки, выводимой в лог (раскладка).
+//
+// Параметры:
+// Уровень - УровниЛога - Уровень логирования выводимого сообщения
+// Сообщение - Строка - Выводимое сообщение
+//
+// Возвращаемое значение:
+// Строка - Сообщение, отформатированное с учетом раскладки
+//
+Функция Форматировать(Знач Уровень, Знач Сообщение) Экспорт
+
+ Если Уровень = УровниЛога.Отладка ИЛИ Уровень = УровниЛога.Ошибка Тогда
+ Сообщение = СтрШаблон("%1 - %2", УровниЛога.НаименованиеУровня(Уровень), Сообщение);
+ КонецЕсли;
+
+ Возврат Сообщение;
+
+КонецФункции
+
+&Желудь
+&Прозвище("РаскладкаЛогоса")
+Процедура ПриСозданииОбъекта()
+КонецПроцедуры
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\321\211\320\270\320\272OneScript.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\321\211\320\270\320\272OneScript.os"
index a2402fd..2b0fe22 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\321\211\320\270\320\272OneScript.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\321\211\320\270\320\272OneScript.os"
@@ -1,11 +1,41 @@
#Использовать 1commands
#Использовать fs
#Использовать tempfiles
-#Использовать logos
+#Использовать strings
Перем ЭтоWindows;
+
+&ЛогOVM
Перем Лог;
+&Пластилин
+Перем ПараметрыOVM;
+
+&Пластилин
+Перем ВерсииOneScript;
+
+&Деталька("proxy.use")
+Перем ИспользоватьПрокси;
+
+&Деталька("proxy.server")
+Перем ПроксиСервер;
+
+&Деталька("proxy.port")
+Перем ПроксиПорт;
+
+&Деталька("proxy.user")
+Перем ПроксиПользователь;
+
+&Деталька("proxy.password")
+Перем ПроксиПароль;
+
+&Деталька("proxy.osAuthentication")
+Перем ПроксиАвторизацияОС;
+
+&Желудь
+Процедура ПриСозданииОбъекта()
+КонецПроцедуры
+
// Установка указанной версии OneScript.
// Допустимо использовать трех-разрядные номера версий и шорткаты dev и stable
//
@@ -18,9 +48,14 @@
Процедура УстановитьOneScript(
Знач ВерсияКУстановке,
Знач АлиасВерсии = "",
- Знач ОчищатьКаталогУстановки = Истина
+ Знач ОчищатьКаталогУстановки = Истина,
+ Знач ИспользоватьХ64 = Ложь
) Экспорт
+ Если ИспользоватьХ64 Тогда
+ ИспользоватьХ64 = ПроверитьВозможностьУстановкиX64(ВерсияКУстановке);
+ КонецЕсли;
+
Лог.Информация("Установка OneScript %1...", ВерсияКУстановке);
Если НЕ ЗначениеЗаполнено(АлиасВерсии) Тогда
@@ -42,7 +77,7 @@
Лог.Отладка("Каталог установки версии: %1", КаталогУстановкиВерсии);
Попытка
- ФайлУстановщика = СкачатьФайлУстановщика(ВерсияКУстановке);
+ ФайлУстановщика = СкачатьФайлУстановщика(ВерсияКУстановке, ИспользоватьХ64);
УстановитьOneScriptИзZipАрхива(ФайлУстановщика, КаталогУстановкиВерсии);
ДобавитьSHСкриптыПриНеобходимости(КаталогУстановкиВерсии);
@@ -56,37 +91,42 @@
КонецПроцедуры
-Функция СкачатьФайлУстановщика(Знач ВерсияКУстановке)
+Функция СкачатьФайлУстановщика(Знач ВерсияКУстановке, Знач ИспользоватьХ64)
- Лог.Информация("Скачиваю установщик версии %1...", ВерсияКУстановке);
+ Лог.Информация("Скачиваю установщик версии %1%2...", ВерсияКУстановке, ?(ИспользоватьХ64, "-x64", ""));
ПутьКСохраняемомуФайлу = ВременныеФайлы.НовоеИмяФайла("zip");
АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт();
- СерверПрокси = ПараметрыOVM.ЗначениеНастройки("proxy.server");
- ИспользоватьПрокси = ПараметрыOVM.ЗначениеНастройки("proxy.use");
-
Если ИспользоватьПрокси = "true" Тогда
- Если Не ЗначениеЗаполнено(СерверПрокси) Тогда
+
+ Если Не ЗначениеЗаполнено(ПроксиСервер) Тогда
+
Лог.Отладка("Использую системный прокси");
Прокси = Новый ИнтернетПрокси(Истина);
- ИначеЕсли ЗначениеЗаполнено(СерверПрокси) Тогда
- Лог.Отладка("Использую прокси %1", ПараметрыOVM.ЗначениеНастройки("proxy.server"));
+
+ ИначеЕсли ЗначениеЗаполнено(ПроксиСервер) Тогда
+
+ Лог.Отладка("Использую прокси %1", ПроксиСервер);
Прокси = Новый ИнтернетПрокси();
+
Прокси.Установить("http",
- ПараметрыOVM.ЗначениеНастройки("proxy.server"),
- ПараметрыOVM.ЗначениеНастройки("proxy.port"),
- ПараметрыOVM.ЗначениеНастройки("proxy.user"),
- ПараметрыOVM.ЗначениеНастройки("proxy.password"),
- ПараметрыOVM.ЗначениеНастройки("proxy.osAuthentication"));
+ ПроксиСервер,
+ ПроксиПорт,
+ ПроксиПользователь,
+ ПроксиПароль,
+ ПроксиАвторизацияОС
+ );
Прокси.Установить("https",
- ПараметрыOVM.ЗначениеНастройки("proxy.server"),
- ПараметрыOVM.ЗначениеНастройки("proxy.port"),
- ПараметрыOVM.ЗначениеНастройки("proxy.user"),
- ПараметрыOVM.ЗначениеНастройки("proxy.password"),
- ПараметрыOVM.ЗначениеНастройки("proxy.osAuthentication"));
+ ПроксиСервер,
+ ПроксиПорт,
+ ПроксиПользователь,
+ ПроксиПароль,
+ ПроксиАвторизацияОС
+ );
+
КонецЕсли;
Иначе
Лог.Отладка("Прокси не используется");
@@ -103,7 +143,7 @@
Таймаут
);
- Ресурс = ПолучитьПутьКСкачиваниюФайла(ВерсияКУстановке);
+ Ресурс = ПолучитьПутьКСкачиваниюФайла(ВерсияКУстановке, ИспользоватьХ64);
Запрос = Новый HTTPЗапрос(Ресурс);
Лог.Отладка("Сервер: %1. Ресурс: %2", Соединение.Сервер, Ресурс);
@@ -141,17 +181,37 @@
Процедура ДобавитьSHСкриптыПриНеобходимости(Знач КаталогУстановкиВерсии)
+ ЭтоКаталогВерсии2 = ВерсииOneScript.ЭтоКаталогВерсии2(КаталогУстановкиВерсии);
Если ЭтоWindows Тогда
+ Если ЭтоКаталогВерсии2 Тогда
+
+ ПутьКСкрипту = ВерсииOneScript.ПутьКИсполняемомуФайлуВерсии2(КаталогУстановкиВерсии);
+ ТекстСкрипта =
+ "@dotnet %~dp0\oscript.dll %*
+ |@exit /b %ERRORLEVEL%
+ |";
+
+ ДобавитьBatСкрипт(ПутьКСкрипту, ТекстСкрипта);
+
+ КонецЕсли;
Возврат;
КонецЕсли;
-
- ПутьКСкрипту = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript");
- ТекстСкрипта =
- "#!/bin/sh
- |dirpath=`dirname $0`
- |mono $dirpath/oscript.exe ""$@""
- |";
-
+
+ ПутьКСкрипту = ВерсииOneScript.ПутьКИсполняемомуФайлуВерсии2(КаталогУстановкиВерсии);
+
+ Если ЭтоКаталогВерсии2 Тогда
+ ТекстСкрипта =
+ "#!/bin/sh
+ |dirpath=`dirname $0`
+ |dotnet $dirpath/oscript.dll ""$@""
+ |";
+ Иначе
+ ТекстСкрипта =
+ "#!/bin/sh
+ |dirpath=`dirname $0`
+ |mono $dirpath/oscript.exe ""$@""
+ |";
+ КонецЕсли;
ДобавитьShСкрипт(ПутьКСкрипту, ТекстСкрипта);
ПутьКСкрипту = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "opm");
@@ -204,6 +264,30 @@
КонецПроцедуры
+Процедура ДобавитьBatСкрипт(Знач ПутьКСкрипту, Знач ТекстСкрипта)
+
+ Лог.Информация("Создание bat-скрипта %1...", Новый Файл(ПутьКСкрипту).ИмяБезРасширения);
+
+ Лог.Отладка("Путь с bat-скрипту: %1", ПутьКСкрипту);
+
+ Лог.Отладка(
+ "Текст скрипта:
+ |%1",
+ ТекстСкрипта
+ );
+
+ Если ФС.ФайлСуществует(ПутьКСкрипту) Тогда
+ Лог.Отладка("bat-скрипт уже существует");
+ Возврат;
+ КонецЕсли;
+
+ ЗаписьТекста = Новый ЗаписьТекста(ПутьКСкрипту, КодировкаТекста.ANSI, , , Символы.ПС);
+
+ ЗаписьТекста.Записать(ТекстСкрипта);
+ ЗаписьТекста.Закрыть();
+
+КонецПроцедуры
+
Процедура ПроверитьКорректностьПереданнойВерсии(Знач ВерсияКУстановке)
Если СтрРазделить(ВерсияКУстановке, ".").Количество() <> ПараметрыOVM.КоличествоРазрядовВНомереВерсии()
И НРег(ВерсияКУстановке) <> "stable"
@@ -215,7 +299,7 @@
КонецЕсли;
КонецПроцедуры
-Функция ПолучитьПутьКСкачиваниюФайла(Знач ВерсияКУстановке)
+Функция ПолучитьПутьКСкачиваниюФайла(Знач ВерсияКУстановке, Знач ИспользоватьХ64)
Если СтрРазделить(ВерсияКУстановке, ".").Количество() = ПараметрыOVM.КоличествоРазрядовВНомереВерсии() Тогда
КаталогВерсии = СтрЗаменить(ВерсияКУстановке, ".", "_");
@@ -228,12 +312,28 @@
КонецЕсли;
ИмяФайла = "zip";
- Ресурс = СтрШаблон("downloads/%1/%2", КаталогВерсии, ИмяФайла);
+ ЧастиПути = Новый Массив;
+ ЧастиПути.Добавить("downloads");
+ ЧастиПути.Добавить(КаталогВерсии);
+ Если ИспользоватьХ64 Тогда
+ ЧастиПути.Добавить("x64");
+ КонецЕсли;
+ ЧастиПути.Добавить(ИмяФайла);
+
+ Ресурс = СтрСоединить(ЧастиПути, "/");
Возврат Ресурс;
КонецФункции
+Функция ПроверитьВозможностьУстановкиX64(ВерсияКУстановке)
+ // Версия х64 доступна для версий 1.2.0 и выше
+ Если НРег(ВерсияКУстановке) = "stable"
+ Или НРег(ВерсияКУстановке) = "dev" Тогда
+ Возврат Истина;
+ Иначе
+ Возврат СтроковыеФункции.СравнитьВерсии(ВерсияКУстановке, "1.2.0") >= 0;
+ КонецЕсли;
+КонецФункции
+
СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0;
-
-Лог = ПараметрыOVM.ПолучитьЛог();
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os"
index f0a0b12..3a80d73 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os"
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os"
@@ -7,25 +7,19 @@
Перем Лог;
-Процедура ПриСозданииОбъекта(Знач ИмяФайлаНастроек)
- ПутьКФайлу = ИмяФайлаНастроек;
- Лог = Логирование.ПолучитьЛог("oscript.app.ovm");
+&Желудь
+Процедура ПриСозданииОбъекта(&ЛогOVM пЛог, &Пластилин ПараметрыOVM)
+
+ Лог = пЛог;
+
+ ПутьКФайлу = ОбъединитьПути(ПараметрыOVM.КаталогУстановкиПоУмолчанию(), "autumn-properties.ini");
+
ПрочитатьНастройки();
-КонецПроцедуры
-Функция Получить(Знач Имя) Экспорт
- Лог.Отладка("Запрошено значение %1", Имя);
- НомерСтроки = Индекс[Имя];
- Если НомерСтроки = Неопределено Тогда
- Возврат Неопределено;
- КонецЕсли;
- Значение = ЗначенияНастроек[НомерСтроки].Значение;
- Лог.Отладка("Получено значение %1=%2", Имя, Значение);
- Возврат Значение;
-КонецФункции
+КонецПроцедуры
Процедура Установить(Знач Имя, Знач Значение) Экспорт
-
+
РегулярноеВыражение = Новый РегулярноеВыражение("[A-Za-z0-9\.]+");
РегулярноеВыражение.Многострочный = Ложь;
Если Не РегулярноеВыражение.Совпадает(Имя) Тогда
@@ -44,7 +38,7 @@
КонецПроцедуры
Процедура Записать() Экспорт
-
+
ФайлОпций = Новый Файл(ПутьКФайлу);
ФС.ОбеспечитьКаталог(ФайлОпций.Путь);
diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\233\320\276\320\263\320\276\321\201\320\220\320\277\320\277\320\265\320\275\320\264\320\265\321\200.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\233\320\276\320\263\320\276\321\201\320\220\320\277\320\277\320\265\320\275\320\264\320\265\321\200.os"
deleted file mode 100644
index b66411e..0000000
--- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\233\320\276\320\263\320\276\321\201\320\220\320\277\320\277\320\265\320\275\320\264\320\265\321\200.os"
+++ /dev/null
@@ -1,43 +0,0 @@
-//////////////////////////////////////////////////////////////////////////
-//
-// LOGOS: вывод в консоль
-//
-//////////////////////////////////////////////////////////////////////////
-
-Перем КартаСтатусовИУровней;
-
-// Вывести сообщение через аппендер
-//
-// Параметры:
-// Сообщение - Строка - Выводимое сообщение
-//
-Процедура Вывести(Знач Сообщение, УровеньСообщения) Экспорт
-
- Сообщить(Сообщение, КартаСтатусовИУровней[УровеньСообщения]);
-
-КонецПроцедуры
-
-// Закрыть аппендер
-//
-Процедура Закрыть() Экспорт
- // NO-OP
-КонецПроцедуры
-
-// Устанавливает свойство аппендера, заданное в конфигурационном файле
-//
-// Параметры:
-// ИмяСвойства - Строка - Имя свойства
-// Значение - Произвольный - Значение свойства
-//
-Процедура УстановитьСвойство(Знач ИмяСвойства, Знач Значение) Экспорт
- Если ИмяСвойства = "message-status" Тогда
- УстанавливаемыйСтатусСообщения = Значение;
- КонецЕсли;
-КонецПроцедуры // УстановитьСвойство()
-
-КартаСтатусовИУровней = Новый Соответствие;
-КартаСтатусовИУровней.Вставить(УровниЛога.Отладка, СтатусСообщения.БезСтатуса);
-КартаСтатусовИУровней.Вставить(УровниЛога.Информация, СтатусСообщения.Обычное);
-КартаСтатусовИУровней.Вставить(УровниЛога.Предупреждение, СтатусСообщения.Внимание);
-КартаСтатусовИУровней.Вставить(УровниЛога.Ошибка, СтатусСообщения.Важное);
-КартаСтатусовИУровней.Вставить(УровниЛога.КритичнаяОшибка, СтатусСообщения.ОченьВажное);
diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213OVM.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213OVM.os"
deleted file mode 100644
index 55fbdd7..0000000
--- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213OVM.os"
+++ /dev/null
@@ -1,119 +0,0 @@
-#Использовать logos
-
-Перем СистемнаяИнформация;
-Перем Лог;
-Перем ОсновнойСпособВывода;
-
-Перем ФайлНастроек;
-
-// Путь к каталогу установки версий OneScript по умолчанию
-//
-// Возвращаемое значение:
-// Строка - Путь к каталогу установки по умолчанию
-//
-Функция КаталогУстановкиПоУмолчанию() Экспорт
-
- КаталогУстановкиПоУмолчанию = ПолучитьПеременнуюСреды("OVM_INSTALL_PATH");
- Если НЕ ЗначениеЗаполнено(КаталогУстановкиПоУмолчанию) Тогда
- КаталогУстановкиПоУмолчанию = ОбъединитьПути(
- СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений),
- "ovm"
- );
- КонецЕсли;
-
- Возврат КаталогУстановкиПоУмолчанию;
-
-КонецФункции
-
-// Адрес сайта OneScript
-//
-// Возвращаемое значение:
-// Строка - Адрес сайта OneScript
-//
-Функция АдресСайтаОСкрипт() Экспорт
- Возврат ЗначениеНастройки("oscript.server", "https://oscript.io");
-КонецФункции
-
-// Полный адрес к каталогу дистрибутивов OneScript
-//
-// Возвращаемое значение:
-// Строка - Полный адрес к каталогу дистрибутивов OneScript
-//
-Функция ПолныйАдресККаталогуДистрибутивов() Экспорт
- Возврат АдресСайтаОСкрипт() + "/downloads";
-КонецФункции
-
-// Количество разрядов в номере версии.
-// В приложении используется версионирование вида 1.0.20
-//
-// Возвращаемое значение:
-// Число - Количество разрядов в номере версии
-//
-Функция КоличествоРазрядовВНомереВерсии() Экспорт
- Возврат 3;
-КонецФункции
-
-// Получить основной лог приложения
-//
-// Возвращаемое значение:
-// Лог - Основной лог приложения
-//
-Функция ПолучитьЛог() Экспорт
- Возврат Лог;
-КонецФункции
-
-// Получить основной способ вывода
-//
-// Возвращаемое значение:
-// СпособВывода - Способ вывода фреймворка логирования logos
-//
-Функция ПолучитьОсновнойСпособВывода() Экспорт
- Возврат ОсновнойСпособВывода;
-КонецФункции
-
-// Форматирование строки, выводимой в лог (раскладка).
-//
-// Параметры:
-// Уровень - УровниЛога - Уровень логирования выводимого сообщения
-// Сообщение - Строка - Выводимое сообщение
-//
-// Возвращаемое значение:
-// Строка - Сообщение, отформатированное с учетом раскладки
-//
-Функция Форматировать(Знач Уровень, Знач Сообщение) Экспорт
-
- Если Уровень = УровниЛога.Отладка ИЛИ Уровень = УровниЛога.Ошибка Тогда
- Сообщение = СтрШаблон("%1 - %2", УровниЛога.НаименованиеУровня(Уровень), Сообщение);
- КонецЕсли;
-
- Возврат Сообщение;
-
-КонецФункции
-
-//////////////////////////////////////////////////////////////////////
-
-Функция ЗначениеНастройки(Знач Ключ, Знач ЗначениеПоУмолчанию = Неопределено) Экспорт
- Опция = ФайлНастроек.Получить(Ключ);
- Если Опция = Неопределено Тогда
- Возврат ЗначениеПоУмолчанию;
- КонецЕсли;
-
- Возврат Опция;
-
-КонецФункции
-
-Функция ХранилищеНастроек() Экспорт
- Возврат ФайлНастроек;
-КонецФункции
-
-//////////////////////////////////////////////////////////////////////
-
-СистемнаяИнформация = Новый СистемнаяИнформация;
-ОсновнойСпособВывода = ЛогосАппендер;
-
-Лог = Логирование.ПолучитьЛог("oscript.app.ovm");
-Лог.УстановитьРаскладку(ЭтотОбъект);
-Лог.ДобавитьСпособВывода(ОсновнойСпособВывода);
-
-ИмяФайлаНастроек = ОбъединитьПути(КаталогУстановкиПоУмолчанию(), "ovm.config");
-ФайлНастроек = Новый ФайлНастроек(ИмяФайлаНастроек);