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"); -ФайлНастроек = Новый ФайлНастроек(ИмяФайлаНастроек);