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

Добавлена установка x64 дистрибутивов #10

Merged
merged 6 commits into from
Aug 15, 2022
9 changes: 9 additions & 0 deletions features/integration.feature
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,12 @@
И я вижу в консоли строку подобно ".*oscript$"
И Я выполняю команду "which opm"
И я вижу в консоли строку подобно ".*opm$"

Сценарий: Проверка установки x64 и опции --x86
Когда Я выполняю команду "ovm install stable"
Тогда я вижу в консоли вывод "Скачиваю установщик версии stable-x64..."
И я вижу в консоли вывод "Установка OneScript stable завершена"

Когда Я выполняю команду "ovm install --x86 stable"
Тогда я вижу в консоли вывод "Скачиваю установщик версии stable..."
И я вижу в консоли вывод "Установка OneScript stable завершена"
1 change: 1 addition & 0 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@
.ЗависитОт("logos")
.ЗависитОт("tempfiles")
.ЗависитОт("cli", "0.9.8")
.ЗависитОт("strings")
.ИсполняемыйФайл("src/cmd/ovm.os", "ovm")
;
15 changes: 13 additions & 2 deletions src/cmd/Классы/КомандаInstall.os
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,12 @@

КомандаПриложения.Опция("clean c", Ложь, "Полностью очищать каталог установки (включая установленные библиотеки)")
.ВОкружении("OVM_INSTALL_CLEAN");


Если ПараметрыOVM.Это64БитнаяОперационнаяСистема() Тогда
КомандаПриложения.Опция("x86", Ложь, "Устанавливать 32-разрядный дистрибутив OneScript")
.ВОкружении("OVM_INSTALL_X86");
КонецЕсли;

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

Если ПараметрыOVM.Это64БитнаяОперационнаяСистема() Тогда
ИспользоватьХ64 = НЕ КомандаПриложения.ЗначениеОпции("x86");
Иначе
ИспользоватьХ64 = Ложь;
КонецЕсли;

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

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

Choose a reason for hiding this comment

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

Пробросил для каждой версии в цикле, а не установил параметр в класс установщика, потому что каждую версию нужно проверить на возможность установки х64

КонецЦикла;

Если МассивВерсийКУстановке.Количество() > 0 Тогда
Expand Down
2 changes: 1 addition & 1 deletion src/core/Классы/АктиваторOneScript.os
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@

Если ВыполнятьУстановкуПриНеобходимости Тогда
УстановщикOneScript = Новый УстановщикOneScript();
УстановщикOneScript.УстановитьOneScript(ИспользуемаяВерсия);
УстановщикOneScript.УстановитьOneScript(ИспользуемаяВерсия, , , СистемнаяИнформация.Это64БитнаяОперационнаяСистема);
Иначе
ВызватьИсключение СтрШаблон("Не обнаружена требуемая версия <%1>", ИспользуемаяВерсия);
КонецЕсли;
Expand Down
38 changes: 31 additions & 7 deletions src/core/Классы/УстановщикOneScript.os
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#Использовать fs
#Использовать tempfiles
#Использовать logos
#Использовать strings
240596448 marked this conversation as resolved.
Show resolved Hide resolved

Перем ЭтоWindows;
Перем Лог;
Expand All @@ -18,9 +19,14 @@
Процедура УстановитьOneScript(
Знач ВерсияКУстановке,
Знач АлиасВерсии = "",
Знач ОчищатьКаталогУстановки = Истина
Знач ОчищатьКаталогУстановки = Истина,
Знач ИспользоватьХ64 = Ложь
) Экспорт

Если ИспользоватьХ64 Тогда
ИспользоватьХ64 = ПроверитьВозможностьУстановкиX64(ВерсияКУстановке);
КонецЕсли;

Лог.Информация("Установка OneScript %1...", ВерсияКУстановке);

Если НЕ ЗначениеЗаполнено(АлиасВерсии) Тогда
Copy link
Author

Choose a reason for hiding this comment

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

Была идея для неустановленного алиаса добавлять суффикс х64.
Тогда версии х86 и х64 сразу устанавливались бы в разные папки просто при использовании опции х86 или без нее, а не перезатирали бы друг друга.
Но тогда нарушается логика сопоставления с версиями на сервере.
Не уверен, что автоматом так делать хорошо. Будут вопросы.

Лучше все же оставить на усмотрение пользователя такой выбор, путем установки пути-алиаса. По крайней мере чтобы он осмысленно указал 1.4.0-x64 и понимал, что сопоставление ls -r только по версии.
Возможность установить разные битности одной версии при этом есть.

Expand All @@ -42,7 +48,7 @@
Лог.Отладка("Каталог установки версии: %1", КаталогУстановкиВерсии);

Попытка
ФайлУстановщика = СкачатьФайлУстановщика(ВерсияКУстановке);
ФайлУстановщика = СкачатьФайлУстановщика(ВерсияКУстановке, ИспользоватьХ64);

УстановитьOneScriptИзZipАрхива(ФайлУстановщика, КаталогУстановкиВерсии);
ДобавитьSHСкриптыПриНеобходимости(КаталогУстановкиВерсии);
Expand All @@ -56,9 +62,9 @@

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

Функция СкачатьФайлУстановщика(Знач ВерсияКУстановке)
Функция СкачатьФайлУстановщика(Знач ВерсияКУстановке, Знач ИспользоватьХ64)

Лог.Информация("Скачиваю установщик версии %1...", ВерсияКУстановке);
Лог.Информация("Скачиваю установщик версии %1%2...", ВерсияКУстановке, ?(ИспользоватьХ64, "-x64", ""));

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

Expand Down Expand Up @@ -103,7 +109,7 @@
Таймаут
);

Ресурс = ПолучитьПутьКСкачиваниюФайла(ВерсияКУстановке);
Ресурс = ПолучитьПутьКСкачиваниюФайла(ВерсияКУстановке, ИспользоватьХ64);
Запрос = Новый HTTPЗапрос(Ресурс);

Лог.Отладка("Сервер: %1. Ресурс: %2", Соединение.Сервер, Ресурс);
Expand Down Expand Up @@ -215,7 +221,7 @@
КонецЕсли;
КонецПроцедуры

Функция ПолучитьПутьКСкачиваниюФайла(Знач ВерсияКУстановке)
Функция ПолучитьПутьКСкачиваниюФайла(Знач ВерсияКУстановке, Знач ИспользоватьХ64)

Если СтрРазделить(ВерсияКУстановке, ".").Количество() = ПараметрыOVM.КоличествоРазрядовВНомереВерсии() Тогда
КаталогВерсии = СтрЗаменить(ВерсияКУстановке, ".", "_");
Expand All @@ -228,11 +234,29 @@
КонецЕсли;
ИмяФайла = "zip";

Ресурс = СтрШаблон("downloads/%1/%2", КаталогВерсии, ИмяФайла);
ЧастиПути = Новый Массив;
ЧастиПути.Добавить("downloads");
ЧастиПути.Добавить(КаталогВерсии);
Если ИспользоватьХ64 Тогда
ЧастиПути.Добавить("x64");
240596448 marked this conversation as resolved.
Show resolved Hide resolved
КонецЕсли;
ЧастиПути.Добавить(ИмяФайла);

Ресурс = СтрСоединить(ЧастиПути, "/");
Возврат Ресурс;

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

Функция ПроверитьВозможностьУстановкиX64(ВерсияКУстановке)
// Версия х64 доступна для версий 1.2.0 и выше
Если НРег(ВерсияКУстановке) = "stable"
Или НРег(ВерсияКУстановке) = "dev" Тогда
Возврат Истина;
Иначе
Возврат СтроковыеФункции.СравнитьВерсии(ВерсияКУстановке, "1.2.0") >= 0;
КонецЕсли;
КонецФункции

СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0;

Expand Down
8 changes: 8 additions & 0 deletions src/core/Модули/ПараметрыOVM.os
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,14 @@
Возврат АдресСайтаОСкрипт() + "/downloads";
КонецФункции

// Разрядность текущей операционной системы
//
// Возвращаемое значение:
// Булево - это 64 битная операционна система
Функция Это64БитнаяОперационнаяСистема() Экспорт
Возврат СистемнаяИнформация.Это64БитнаяОперационнаяСистема;
nixel2007 marked this conversation as resolved.
Show resolved Hide resolved
КонецФункции

// Количество разрядов в номере версии.
// В приложении используется версионирование вида 1.0.20
//
Expand Down