Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ОСенний OVM #20

Merged
merged 7 commits into from
Oct 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +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")
Copy link
Member

@nixel2007 nixel2007 Oct 1, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А он зачем? Не вижу импортов

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Импорты у autumn-cli/autumn-logos но там импорты версии которая не поддерживает упаковку в exe, овм просто задирает версию чтоб собраться

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А, ну так давай там бампнем сразу, чего тут тащить.

.ЗависитОт("autumn", "3.2.0")
.ЗависитОт("autumn-logos", "1.1.1")
.ЗависитОт("autumn-cli", "1.0.3")
.ИсполняемыйФайл("src/cmd/ovm.os", "ovm")
;
140 changes: 63 additions & 77 deletions src/cmd/ovm.os
Original file line number Diff line number Diff line change
@@ -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"));

Поделка.ЗапуститьПриложение();
42 changes: 16 additions & 26 deletions src/cmd/Классы/КомандаConfig.os
Original file line number Diff line number Diff line change
@@ -1,32 +1,22 @@
#Использовать "../../core"

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

КомандаПриложения.Аргумент(
"NAME",
,
"Название опции")
.ТСтрока();
&Аргумент(Имя = "NAME", Описание = "Название опции")
&ТСтрока
Перем Имя;

КомандаПриложения.Аргумент(
"VALUE",
,
"Значение опции (массив строк)")
.ТСтрока();

КонецПроцедуры
&Аргумент(Имя = "VALUE", Описание = "Значение опции (массив строк)")
&ТСтрока
Перем Значение;

// Обработчик выполнения команды
//
// Параметры:
// КомандаПриложения - КомандаПриложения - Выполняемая команда
//
Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт
Имя = КомандаПриложения.ЗначениеАргумента("NAME");
Значение = КомандаПриложения.ЗначениеАргумента("VALUE");
&Пластилин
Перем ФайлНастроек;

Хранилище = ПараметрыOVM.ХранилищеНастроек();
Хранилище.Установить(Имя, Значение);
Хранилище.Записать();
&КомандаПриложения(Имя = "config", Описание = "Настройки ovm. Прокси, сервера и т.п.")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

КонецПроцедуры
&ВыполнениеКоманды
Процедура ВыполнениеКоманды() Экспорт
ФайлНастроек.Установить(Имя, Значение);
ФайлНастроек.Записать();
КонецПроцедуры
23 changes: 15 additions & 8 deletions src/cmd/Классы/КомандаInstall.os
Original file line number Diff line number Diff line change
@@ -1,7 +1,18 @@
#Использовать "../../core"

&ЛогOVM
Перем Лог;

&Пластилин
Перем УстановщикOneScript;

&Пластилин
Перем ПараметрыOVM;

&КомандаПриложения(Имя = "install i", Описание = "Установить OneScript указанных версий")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

// Заполняет описание команды для библиотеки cli
//
// Параметры:
Expand Down Expand Up @@ -38,11 +49,11 @@
// КомандаПриложения - КомандаПриложения - Выполняемая команда
//
Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт

МассивВерсийКУстановке = КомандаПриложения.ЗначениеАргумента("VERSION");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А тут специально не стал переводить на осень опции?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Там опциональная опция есть, типа добавляется по условию, autumn-cli так не умеет

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Там опциональная опция есть, типа добавляется по условию, autumn-cli так не умеет

Заведешь ишусь пожалуйста? 🙂

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Посмотрел код команды, чо-т вообще не особо себе представляю, как это сделать на уровне метаданных. Хотя можно попробовать указать имя функции-предиката. Ну, либо выпилить условие :)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Посмотрел код команды, чо-т вообще не особо себе представляю, как это сделать на уровне метаданных. Хотя можно попробовать указать имя функции-предиката. Ну, либо выпилить условие :)

Можно в теории сделать аннотацию которая на входе будет принимать лямбду и захватывать объект в котором аннотация расположена.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Там опциональная опция есть, типа добавляется по условию, autumn-cli так не умеет

Заведешь ишусь пожалуйста? 🙂

autumn-library/autumn-cli#1

АлиасВерсии = КомандаПриложения.ЗначениеОпции("name");
ОчищатьКаталогУстановки = КомандаПриложения.ЗначениеОпции("clean");

Если ЗначениеЗаполнено(АлиасВерсии) И МассивВерсийКУстановке.Количество() > 1 Тогда
ВызватьИсключение "Опция <--name> может быть задана только при установке одной версии OneScript";
КонецЕсли;
Expand All @@ -52,13 +63,11 @@
Иначе
ИспользоватьХ64 = Ложь;
КонецЕсли;

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


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

Если МассивВерсийКУстановке.Количество() > 0 Тогда
Лог.Информация(
"Для начала использования версии OneScript, выполните команду:
Expand All @@ -68,5 +77,3 @@
КонецЕсли;

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

Лог = ПараметрыOVM.ПолучитьЛог();
76 changes: 37 additions & 39 deletions src/cmd/Классы/КомандаList.os
Original file line number Diff line number Diff line change
@@ -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.ПолучитьСписокВсехВерсий();

Expand All @@ -71,15 +71,15 @@
СтатусСообщения.Информация,
СтатусСообщения.БезСтатуса
);
Аппендер = ПараметрыOVM.ПолучитьОсновнойСпособВывода();

Аппендер.УстановитьСвойство("message-status", УстанавливаемыйСтатусСообщения);
Лог.Информация(Сообщение);

КонецЦикла;

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

Процедура ВывестиСписокУстановленныхВерсий(Знач ТихийРежим)
Процедура ВывестиСписокУстановленныхВерсий()
СписокУстановленныхВерсий = ВерсииOneScript.ПолучитьСписокУстановленныхВерсий();
Для Каждого УстановленнаяВерсия Из СписокУстановленныхВерсий Цикл

Expand All @@ -103,14 +103,14 @@
СтатусСообщения.Информация,
СтатусСообщения.БезСтатуса
);
Аппендер = ПараметрыOVM.ПолучитьОсновнойСпособВывода();

Аппендер.УстановитьСвойство("message-status", УстанавливаемыйСтатусСообщения);
Лог.Информация(Сообщение);

КонецЦикла;
КонецПроцедуры

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

СписокДоступныВерсий = ВерсииOneScript.ПолучитьСписокДоступныхКУстановкеВерсий();
Для Каждого ДоступнаяВерсия Из СписокДоступныВерсий Цикл
Expand All @@ -123,5 +123,3 @@
КонецЦикла;

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

Лог = ПараметрыOVM.ПолучитьЛог();
Loading