Skip to content
This repository was archived by the owner on May 25, 2021. It is now read-only.

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Jan 18, 2018
2 parents e2a9702 + e484e58 commit cc8e59f
Show file tree
Hide file tree
Showing 7 changed files with 150 additions and 18 deletions.
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,21 @@
# OneScript Version Manager

```
Приложение: ovm
OneScript Version Manager
Строка запуска: ovm [OPTIONS] КОМАНДА [аргументы...]
Опции:
-v, --version показать версию и выйти
Доступные команды:
install, i Установка OneScript указанной версии
use, u Использовать OneScript указанной версии
uninstall, delete, d Удаление OneScript указанных версий
list, ls Вывести список установленных версий
run, r Запустить исполняемый файл в окружении указанной версии
which, w Вывести путь к установленной версии OneScript
Для вывода справки по доступным командам наберите: ovm КОМАНДА --help
```
1 change: 0 additions & 1 deletion src/cmd/ovm.os
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
КонсольноеПриложение.ДобавитьКоманду("run r", "Запустить исполняемый файл в окружении указанной версии", Новый КомандаRun());
КонсольноеПриложение.ДобавитьКоманду("which w", "Вывести путь к установленной версии OneScript", Новый КомандаWhich());

// КонсольноеПриложение.УстановитьОсновноеДействие(ЭтотОбъект);
КонсольноеПриложение.Запустить(АргументыКоманднойСтроки);

КонецПроцедуры
Expand Down
4 changes: 2 additions & 2 deletions src/cmd/Классы/КомандаInstall.os
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
МассивВерсийКУстановке = Команда.ЗначениеАргумента("VERSION");

УстановщикOneScript = Новый УстановщикOneScript();

Для каждого ВерсияКУстановке Из МассивВерсийКУстановке Цикл
Для Каждого ВерсияКУстановке Из МассивВерсийКУстановке Цикл
УстановщикOneScript.УстановитьOneScript(ВерсияКУстановке);
КонецЦикла;

Expand Down
37 changes: 35 additions & 2 deletions src/cmd/Классы/КомандаList.os
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,55 @@

КомандаПриложения.Опция("remote r", Ложь, "Вывести список доступных к установке версий").Флаговый();
КомандаПриложения.Опция("quiet q", Ложь, "Тихий режим, вывод только алиасов версий");
КомандаПриложения.Опция("all a", Ложь, "Вывести список всех версий: установленных и доступных на сайте");

КонецПроцедуры

Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт

ВыводитьСписокВерсийНаСайте = КомандаПриложения.ЗначениеОпции("--remote");
ВыводитьВсеВерсии = КомандаПриложения.ЗначениеОпции("--all");
ТихийРежим = КомандаПриложения.ЗначениеОпции("--quiet");

Если ВыводитьСписокВерсийНаСайте Тогда

Если ВыводитьВсеВерсии Тогда
ВывестиВсеВерсии(ТихийРежим);
ИначеЕсли ВыводитьСписокВерсийНаСайте Тогда
ВывестиСписокДоступныхКУстановкеВерсий(ТихийРежим);
Иначе
ВывестиСписокУстановленныхВерсий(ТихийРежим);
КонецЕсли;

КонецПроцедуры

Процедура ВывестиВсеВерсии(Знач ТихийРежим)

ВсеВерсии = ВерсииOneScript.ПолучитьСписокВсехВерсий();

Для Каждого СтрокаВерсия Из ВсеВерсии Цикл

Если ТихийРежим И (СтрокаВерсия.ЭтоСимлинк ИЛИ НЕ СтрокаВерсия.ВерсияУстановлена) Тогда
Продолжить;
КонецЕсли;

Если ТихийРежим Тогда
Сообщение = СтрокаВерсия.Алиас;
Иначе
Сообщение = СтрШаблон(
"%1 -> %2 -> %3 -> %4",
СтрокаВерсия.Алиас,
?(СтрокаВерсия.Версия = "", "unknown", СтрокаВерсия.Версия),
?(СтрокаВерсия.ПутьЛокальный = "", "not installed", СтрокаВерсия.ПутьЛокальный),
?(СтрокаВерсия.ПутьСервер = "", "unknown", СтрокаВерсия.ПутьСервер)
);
КонецЕсли;

УстанавливаемыйСтатусСообщения = ?(СтрокаВерсия.Алиас = "current", СтатусСообщения.Информация, СтатусСообщения.БезСтатуса);
Сообщить(Сообщение, УстанавливаемыйСтатусСообщения);

КонецЦикла;

КонецПроцедуры

Процедура ВывестиСписокУстановленныхВерсий(Знач ТихийРежим)
СписокУстановленныхВерсий = ВерсииOneScript.ПолучитьСписокУстановленныхВерсий();
Для Каждого УстановленнаяВерсия Из СписокУстановленныхВерсий Цикл
Expand Down
19 changes: 16 additions & 3 deletions src/cmd/Классы/КомандаRun.os
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#Использовать "../../core"

Перем ЭтоWindows;

Процедура ОписаниеКоманды(КомандаПриложения) Экспорт

КомандаПриложения.Аргумент("VERSION", "current", "Используемое окружение OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev, current");
Expand All @@ -19,14 +21,25 @@

КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ИспользуемаяВерсия);
ПутьКПриложению = ОбъединитьПути(КаталогУстановкиВерсии, "bin", Приложение);
КаталогBin = ОбъединитьПути(КаталогУстановкиВерсии, "bin");

ПеременнаяPATH = ПолучитьПеременнуюСреды("PATH");
Если ЭтоWindows Тогда
ПеременнаяPATH = КаталогBin + ";" + ПеременнаяPATH;
Иначе
ПеременнаяPATH = КаталогBin + ":" + ПеременнаяPATH;
КонецЕсли;

УстановитьПеременнуюСреды("PATH", ПеременнаяPATH, РасположениеПеременнойСреды.Процесс);

Команда = Новый Команда;
Команда.УстановитьКоманду(ПутьКПриложению);
Команда.УстановитьКоманду(Приложение);
Команда.ДобавитьПараметры(Аргументы);
Команда.ПоказыватьВыводНемедленно(Истина);

Команда.Исполнить();

КонецПроцедуры

СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0;
80 changes: 75 additions & 5 deletions src/core/Классы/ВерсииOneScript.os
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,7 @@
// TODO: определение симлинка на основании аттрибутов файла?
МассивИменСимлинков = Новый Массив;
МассивИменСимлинков.Добавить("current");
// TODO: Раскомментировать для/после реализации https://github.com/silverbulleters/ovm/issues/16
//МассивИменСимлинков.Добавить("dev");
//МассивИменСимлинков.Добавить("latest");


КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
НайденныеФайлы = НайтиФайлы(КаталогУстановки, ПолучитьМаскуВсеФайлы());
Для Каждого НайденныйФайл Из НайденныеФайлы Цикл
Expand Down Expand Up @@ -100,6 +97,11 @@
ГруппаАдрес = СовпадениеРегулярногоВыражения.Группы[1];
ГруппаВерсия = СовпадениеРегулярногоВыражения.Группы[2];

// TODO: Убрать после решения https://github.com/EvilBeaver/OneScript/issues/667
Если ГруппаВерсия.Значение = "1.0.9" Тогда
Продолжить;
КонецЕсли;

ДоступнаяВерсия = ДоступныеВерсии.Добавить();
ДоступнаяВерсия.Алиас = ГруппаВерсия.Значение;
ДоступнаяВерсия.Путь = "http://oscript.io" + ГруппаАдрес.Значение;
Expand All @@ -109,6 +111,65 @@

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

Функция ПолучитьСписокВсехВерсий() Экспорт

СписокУстановленныхВерсий = ПолучитьСписокУстановленныхВерсий();
СписокДоступныхВерсий = ПолучитьСписокДоступныхКУстановкеВерсий();

ВсеВерсии = Новый ТаблицаЗначений;
ВсеВерсии.Колонки.Добавить("Алиас", Новый ОписаниеТипов("Строка"));
ВсеВерсии.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка"));
ВсеВерсии.Колонки.Добавить("ПутьЛокальный", Новый ОписаниеТипов("Строка"));
ВсеВерсии.Колонки.Добавить("ПутьСервер", Новый ОписаниеТипов("Строка"));
ВсеВерсии.Колонки.Добавить("ЭтоСимлинк", Новый ОписаниеТипов("Булево"));
ВсеВерсии.Колонки.Добавить("ВерсияУстановлена", Новый ОписаниеТипов("Булево"));

Для Каждого ДоступнаяВерсия Из СписокДоступныхВерсий Цикл
СтрокаВсеВерсии = ВсеВерсии.Найти(ДоступнаяВерсия.Алиас, "Алиас");
Если СтрокаВсеВерсии = Неопределено Тогда
СтрокаВсеВерсии = ВсеВерсии.Добавить();
СтрокаВсеВерсии.Алиас = ДоступнаяВерсия.Алиас;
СтрокаВсеВерсии.ЭтоСимлинк = Ложь;
КонецЕсли;

СтрокаВсеВерсии.ПутьСервер = ДоступнаяВерсия.Путь;
КонецЦикла;

Для Каждого УстановленнаяВерсия Из СписокУстановленныхВерсий Цикл
СтрокаВсеВерсии = ВсеВерсии.Найти(УстановленнаяВерсия.Алиас, "Алиас");
Если СтрокаВсеВерсии = Неопределено Тогда
СтрокаВсеВерсии = ВсеВерсии.Добавить();
СтрокаВсеВерсии.Алиас = УстановленнаяВерсия.Алиас;
СтрокаВсеВерсии.ЭтоСимлинк = УстановленнаяВерсия.ЭтоСимлинк;
КонецЕсли;

СтрокаВсеВерсии.Версия = УстановленнаяВерсия.Версия;
СтрокаВсеВерсии.ПутьЛокальный = УстановленнаяВерсия.Путь;
СтрокаВсеВерсии.ВерсияУстановлена = Истина;
КонецЦикла;

ОбеспечитьСтрокуВерсииПоАлиасу(ВсеВерсии, "dev");
ОбеспечитьСтрокуВерсииПоАлиасу(ВсеВерсии, "stable");

ВсеВерсии.Сортировать("Алиас");

Возврат ВсеВерсии;

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

Процедура ОбеспечитьСтрокуВерсииПоАлиасу(ТаблицаВерсий, Алиас)

СтрокаВерсии = ТаблицаВерсий.Найти(Алиас, "Алиас");

Если СтрокаВерсии = Неопределено Тогда
СтрокаВерсии = ТаблицаВерсий.Добавить();
СтрокаВерсии.Алиас = Алиас;
КонецЕсли;

СтрокаВерсии.ПутьСервер = "http://oscript.io/downloads";

КонецПроцедуры

Функция ПолучитьТочнуюВерсиюOneScript(Знач ПроверяемаяВерсия)

КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
Expand All @@ -129,7 +190,16 @@
Команда.Исполнить();

ВыводКоманды = СокрЛП(Команда.ПолучитьВывод());

Если СтрЧислоСтрок(ВыводКоманды) > 1 Тогда
РегулярноеВыражение = Новый РегулярноеВыражение("Version (\d+\.\d+\.\d+\.\d+)");
Совпадения = РегулярноеВыражение.НайтиСовпадения(ВыводКоманды);
Если Совпадения.Количество() = 1 Тогда
ВыводКоманды = Совпадения[0].Группы[1].Значение;
Иначе
ВыводКоманды = "unknown";
КонецЕсли;
КонецЕсли;

Возврат ВыводКоманды;

КонецФункции
Expand Down
7 changes: 2 additions & 5 deletions src/core/Классы/УстановщикOneScript.os
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

ПутьКСохраняемомуФайлу = ВременныеФайлы.НовоеИмяФайла("zip");

ПутьКСкачиваниюВерсии = ПолучитьПутьКСкачиваниюФайла(ВерсияКУстановке);
Ресурс = ПолучитьПутьКСкачиваниюФайла(ВерсияКУстановке);
Соединение = Новый HTTPСоединение("http://oscript.io");
Запрос = Новый HTTPЗапрос(Ресурс);
Expand All @@ -39,7 +38,7 @@

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

Процедура УстановитьOneScriptИзZipАрхива(Знач ПутьКФайлуУстановщика, Знач КаталогУстановкиВерсии);
Процедура УстановитьOneScriptИзZipАрхива(Знач ПутьКФайлуУстановщика, Знач КаталогУстановкиВерсии)

ЧтениеZIPФайла = Новый ЧтениеZipФайла(ПутьКФайлуУстановщика);
ЧтениеZIPФайла.ИзвлечьВсе(КаталогУстановкиВерсии);
Expand Down Expand Up @@ -91,16 +90,14 @@

Если СтрРазделить(ВерсияКУстановке, ".").Количество() = 3 Тогда
КаталогВерсии = СтрЗаменить(ВерсияКУстановке, ".", "_");
ИмяФайла = СтрШаблон("OneScript-%1.zip", ВерсияКУстановке);
ИначеЕсли НРег(ВерсияКУстановке) = "stable" Тогда
КаталогВерсии = "latest";
ИмяФайла = "zip";
ИначеЕсли НРег(ВерсияКУстановке) = "dev" Тогда
КаталогВерсии = "night-build";
ИмяФайла = "zip";
Иначе
ВызватьИсключение "Ошибка получения пути к файлу по версии";
КонецЕсли;
ИмяФайла = "zip";

Ресурс = СтрШаблон("downloads/%1/%2", КаталогВерсии, ИмяФайла);
Возврат Ресурс;
Expand Down

0 comments on commit cc8e59f

Please sign in to comment.