diff --git a/.travis.yml b/.travis.yml index e6f1fde..4a740d0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ jdk: - openjdk11 before_install: - - wget -O os.deb http://oscript.io/downloads/1_0_21/deb + - wget -O os.deb http://oscript.io/downloads/night-build/deb?bitness=x64 - sudo dpkg -i os.deb; sudo apt install -f - oscript diff --git a/README.md b/README.md index e759a6e..c3646db 100644 --- a/README.md +++ b/README.md @@ -170,13 +170,53 @@ $ ovm which 1.0.19 C:\Users\NikitaGryzlov\AppData\Local\ovm\1.0.19\bin\oscript.exe ``` +## Конфигурирование ovm + +ovm имеет несколько конфигурационных параметров, управляющих его поведением. Эти параметры можно задать с помощью команды `config` + +### Синтаксис команды + +```sh +$ ovm config <имя параметра> <значение> +``` + +### Настройка сайта с релизами + +```sh +$ ovm config oscript.server https://internal.oscript.io +``` + +### Настройка прокси-сервера + +При работе за корпоративным прокси-сервером может потребоваться указание настроек прокси. +Предусмотрены следующие параметры: + +|Параметр|Возможное значение|Пояснение +|-|-|- +proxy.use|true/false|Включение использования прокси. Если параметр не задан - прокси не используется +|proxy.server|адрес прокси-сервера|Если параметр задан, то будут использованы ручные настройки прокси: имя сервера, порт, логин, пароль. Если параметр не задан, но задан proxy.use=true - используется системный прокси. +|proxy.port|Порт прокси-сервера|используется только если задан proxy.server +|proxy.user|Имя пользователя прокси-сервера|используется только если задан proxy.server +|proxy.password|Пароль прокси-сервера|используется только если задан proxy.server +|proxy.osAuthentication|true/false|Авторизация на прокси средствами ОС. Используется только если задан proxy.server + +#### Пример использования + + # использование системного прокси + ovm config proxy.use true + + # ручные настройки прокси + ovm config proxy.use true + ovm config proxy.server enterpise-proxy.server.lan + ovm config proxy.osAuthentication true + ## Вывод команды ovm ``` Приложение: ovm - OneScript Version Manager v1.0.0 + OneScript Version Manager v1.0.0-RC14 -Строка запуска: ovm [OPTIONS] КОМАНДА [аргументы...] +Строка запуска: ovm [ОПЦИИ] КОМАНДА [аргументы...] Опции: -v, --version показать версию и выйти @@ -188,6 +228,7 @@ C:\Users\NikitaGryzlov\AppData\Local\ovm\1.0.19\bin\oscript.exe list, ls Вывести список установленных и/или доступных версий OneScript run, r Запустить исполняемый файл в окружении указанной версии OneScript which, w Вывести путь к установленной версии OneScript + config Настройки ovm. Прокси, сервера и т.п. Для вывода справки по доступным командам наберите: ovm КОМАНДА --help ``` diff --git a/packagedef b/packagedef index e1fc576..5ae92f6 100644 --- a/packagedef +++ b/packagedef @@ -4,7 +4,7 @@ .АдресАвтора("nixel2007@gmail.com") .Описание("OneScript Version Manager") .ВерсияСреды("1.0.20") - // .ВключитьФайл("src") + .ЗависитОт("json") .ЗависитОт("1commands", "1.3.2") .ЗависитОт("fluent", "0.3.1") .ЗависитОт("fs") diff --git a/src/cmd/ovm.os b/src/cmd/ovm.os index 68cdae2..a2c49db 100644 --- a/src/cmd/ovm.os +++ b/src/cmd/ovm.os @@ -56,6 +56,11 @@ "Вывести путь к установленной версии OneScript", Новый КомандаWhich() ); + КонсольноеПриложение.ДобавитьКоманду( + "config", + "Настройки ovm. Прокси, сервера и т.п.", + Новый КомандаConfig() + ); КонсольноеПриложение.УстановитьОсновноеДействие(ЭтотОбъект); КонсольноеПриложение.Запустить(АргументыКоманднойСтроки); 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" new file mode 100644 index 0000000..4ef1a1e --- /dev/null +++ "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" @@ -0,0 +1,32 @@ +#Использовать "../../core" + +Процедура ОписаниеКоманды(КомандаПриложения) Экспорт + + КомандаПриложения.Аргумент( + "NAME", + , + "Название опции") + .ТСтрока(); + + КомандаПриложения.Аргумент( + "VALUE", + , + "Значение опции (массив строк)") + .ТСтрока(); + +КонецПроцедуры + +// Обработчик выполнения команды +// +// Параметры: +// КомандаПриложения - КомандаПриложения - Выполняемая команда +// +Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт + Имя = КомандаПриложения.ЗначениеАргумента("NAME"); + Значение = КомандаПриложения.ЗначениеАргумента("VALUE"); + + Хранилище = ПараметрыOVM.ХранилищеНастроек(); + Хранилище.Установить(Имя, Значение); + Хранилище.Записать(); + +КонецПроцедуры \ No newline at end of file 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" index 18289bb..a955388 100644 --- "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" @@ -13,6 +13,6 @@ // Строка - Строковое представление версии // Функция Версия() Экспорт - Версия = "1.0.0-RC14"; + Версия = "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 33657b4..6cbae40 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" @@ -393,9 +393,11 @@ Команда = Новый Команда; Команда.УстановитьКоманду("where"); Команда.ДобавитьПараметр("oscript"); - Команда.УстановитьПравильныйКодВозврата(0); - Команда.Исполнить(); + КодВозврата = Команда.Исполнить(); + Если КодВозврата <> 0 Тогда + Возврат Ложь; + КонецЕсли; ВыводКоманды = Команда.ПолучитьВывод(); Лог.Отладка(ВыводКоманды); 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 16f5c04..a2402fd 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,6 +1,7 @@ #Использовать 1commands #Использовать fs #Использовать tempfiles +#Использовать logos Перем ЭтоWindows; Перем Лог; @@ -62,13 +63,43 @@ ПутьКСохраняемомуФайлу = ВременныеФайлы.НовоеИмяФайла("zip"); АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт(); + + СерверПрокси = ПараметрыOVM.ЗначениеНастройки("proxy.server"); + ИспользоватьПрокси = ПараметрыOVM.ЗначениеНастройки("proxy.use"); + + Если ИспользоватьПрокси = "true" Тогда + Если Не ЗначениеЗаполнено(СерверПрокси) Тогда + Лог.Отладка("Использую системный прокси"); + Прокси = Новый ИнтернетПрокси(Истина); + ИначеЕсли ЗначениеЗаполнено(СерверПрокси) Тогда + Лог.Отладка("Использую прокси %1", ПараметрыOVM.ЗначениеНастройки("proxy.server")); + Прокси = Новый ИнтернетПрокси(); + Прокси.Установить("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")); + КонецЕсли; + Иначе + Лог.Отладка("Прокси не используется"); + Прокси = Неопределено; + КонецЕсли; + Таймаут = 10; Соединение = Новый HTTPСоединение( АдресСайтаОСкрипт, , , , - , + Прокси, Таймаут ); 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" new file mode 100644 index 0000000..f0a0b12 --- /dev/null +++ "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" @@ -0,0 +1,115 @@ +#Использовать fs +#Использовать logos + +Перем ЗначенияНастроек; +Перем Индекс; +Перем ПутьКФайлу; + +Перем Лог; + +Процедура ПриСозданииОбъекта(Знач ИмяФайлаНастроек) + ПутьКФайлу = ИмяФайлаНастроек; + Лог = Логирование.ПолучитьЛог("oscript.app.ovm"); + ПрочитатьНастройки(); +КонецПроцедуры + +Функция Получить(Знач Имя) Экспорт + Лог.Отладка("Запрошено значение %1", Имя); + НомерСтроки = Индекс[Имя]; + Если НомерСтроки = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Значение = ЗначенияНастроек[НомерСтроки].Значение; + Лог.Отладка("Получено значение %1=%2", Имя, Значение); + Возврат Значение; +КонецФункции + +Процедура Установить(Знач Имя, Знач Значение) Экспорт + + РегулярноеВыражение = Новый РегулярноеВыражение("[A-Za-z0-9\.]+"); + РегулярноеВыражение.Многострочный = Ложь; + Если Не РегулярноеВыражение.Совпадает(Имя) Тогда + ВызватьИсключение "Некорректно задано имя параметра"; + КонецЕсли; + + НомерСтроки = Индекс[Имя]; + Если НомерСтроки = Неопределено Тогда + НомерСтроки = ЗначенияНастроек.Количество(); + Индекс[Имя] = НомерСтроки; + СтрокаНастроек = ЗначенияНастроек.Добавить(); + СтрокаНастроек.Имя = Имя; + КонецЕсли; + + ЗначенияНастроек[НомерСтроки].Значение = Значение; +КонецПроцедуры + +Процедура Записать() Экспорт + + ФайлОпций = Новый Файл(ПутьКФайлу); + ФС.ОбеспечитьКаталог(ФайлОпций.Путь); + + ТД = Новый ТекстовыйДокумент(); + Для Каждого Настройка Из ЗначенияНастроек Цикл + + Если ЗначениеЗаполнено(Настройка.Имя) Тогда + ТД.ДобавитьСтроку(СтрШаблон("%1=%2", Настройка.Имя, Настройка.Значение)); + Иначе + ТД.ДобавитьСтроку(Настройка.Содержимое); + КонецЕсли; + КонецЦикла; + + ТД.Записать(ПутьКФайлу); + +КонецПроцедуры + +// ------------------------------------------------------ +Процедура ПрочитатьНастройки() + + Если Не ФС.ФайлСуществует(ПутьКФайлу) Тогда + Лог.Отладка("Отсутствует файл настроек %1", ПутьКФайлу); + Возврат; + КонецЕсли; + + ТД = Новый ТекстовыйДокумент(); + ТД.Прочитать(ПутьКФайлу); + + Лог.Отладка("Прочитан файл настроек %1", ПутьКФайлу); + Для Сч = 1 По ТД.КоличествоСтрок() Цикл + СтрокаНастроек = ТД.ПолучитьСтроку(Сч); + Если ПустаяСтрока(СтрокаНастроек) или Лев(СтрокаНастроек, 1) = "#" Тогда + ДобавитьНеактивнуюСтроку(СтрокаНастроек); + Продолжить; + КонецЕсли; + + Поз = СтрНайти(СтрокаНастроек, "="); + Если Поз = 0 Тогда + ДобавитьНеактивнуюСтроку(СтрокаНастроек); + Продолжить; + КонецЕсли; + + Ключ = СокрЛП(Лев(СтрокаНастроек, Поз - 1)); + Значение = СокрЛП(Сред(СтрокаНастроек, Поз + 1)); + + Попытка + Установить(Ключ, Значение); + Исключение + // сбойный ключ + Лог.Ошибка("Ключ настроек %1 некорректен", Ключ); + ДобавитьНеактивнуюСтроку(СтрокаНастроек); + КонецПопытки; + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьНеактивнуюСтроку(Знач Содержимое) + СтрокаНастроек = ЗначенияНастроек.Добавить(); + СтрокаНастроек.Содержимое = Содержимое; +КонецПроцедуры + +// ------------------------------------------------------ +ЗначенияНастроек = Новый ТаблицаЗначений(); +ЗначенияНастроек.Колонки.Добавить("Имя"); +ЗначенияНастроек.Колонки.Добавить("Значение"); +ЗначенияНастроек.Колонки.Добавить("Содержимое"); + +Индекс = Новый Соответствие(); \ No newline at end of file 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" index 247174c..55fbdd7 100644 --- "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" @@ -4,6 +4,8 @@ Перем Лог; Перем ОсновнойСпособВывода; +Перем ФайлНастроек; + // Путь к каталогу установки версий OneScript по умолчанию // // Возвращаемое значение: @@ -29,7 +31,7 @@ // Строка - Адрес сайта OneScript // Функция АдресСайтаОСкрипт() Экспорт - Возврат "https://oscript.io"; + Возврат ЗначениеНастройки("oscript.server", "https://oscript.io"); КонецФункции // Полный адрес к каталогу дистрибутивов OneScript @@ -88,9 +90,30 @@ КонецФункции +////////////////////////////////////////////////////////////////////// + +Функция ЗначениеНастройки(Знач Ключ, Знач ЗначениеПоУмолчанию = Неопределено) Экспорт + Опция = ФайлНастроек.Получить(Ключ); + Если Опция = Неопределено Тогда + Возврат ЗначениеПоУмолчанию; + КонецЕсли; + + Возврат Опция; + +КонецФункции + +Функция ХранилищеНастроек() Экспорт + Возврат ФайлНастроек; +КонецФункции + +////////////////////////////////////////////////////////////////////// + СистемнаяИнформация = Новый СистемнаяИнформация; ОсновнойСпособВывода = ЛогосАппендер; Лог = Логирование.ПолучитьЛог("oscript.app.ovm"); Лог.УстановитьРаскладку(ЭтотОбъект); Лог.ДобавитьСпособВывода(ОсновнойСпособВывода); + +ИмяФайлаНастроек = ОбъединитьПути(КаталогУстановкиПоУмолчанию(), "ovm.config"); +ФайлНастроек = Новый ФайлНастроек(ИмяФайлаНастроек);