From 110b5433c71abd3577276393646910ea8c686587 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Sun, 25 May 2025 09:07:52 +0300 Subject: [PATCH 01/24] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20dev-=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8?= =?UTF-8?q?=D0=BC=D0=BE=D1=81=D1=82=D1=8C=20moskito?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 1 + 1 file changed, 1 insertion(+) diff --git a/packagedef b/packagedef index 2885239..145f25d 100644 --- a/packagedef +++ b/packagedef @@ -16,5 +16,6 @@ .ЗависитОт("collectionos", "0.3.0") .ЗависитОт("cpuinfo", "1.1.0") .РазработкаЗависитОт("1bdd", "1.13.0") + .РазработкаЗависитОт("moskito") .ИсполняемыйФайл("src/cmd/ovm.os", "ovm") ; From 196fd4e61ace4a5f7525a070a29a9a90eed7ecf0 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Sun, 25 May 2025 09:08:21 +0300 Subject: [PATCH 02/24] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D1=8B=20=D0=B2?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=BC=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=B1=D0=BB=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\200\321\201\320\270\320\270OneScript.os" | 134 ++------- ...20\266\320\265\320\275\320\270\321\217.os" | 27 ++ ...21\203\321\202\320\270\320\262\320\260.os" | 112 +++++++ ...274\320\265\321\202\321\200\321\213OVM.os" | 21 +- ...20\265\321\200\321\201\320\270\320\270.os" | 122 ++++++++ ...0\262\321\211\320\270\320\272OneScript.os" | 156 +--------- ...20\275\320\265\320\275\320\270\321\217.os" | 75 +++++ tests/distrSelectorTests.os | 283 ++++++++++++++++++ 8 files changed, 663 insertions(+), 267 deletions(-) create mode 100644 "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\202\320\265\320\272\321\202\320\276\321\200\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" create mode 100644 "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" create mode 100644 "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\276\320\262\320\222\320\265\321\200\321\201\320\270\320\270.os" create mode 100644 "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\230\320\275\321\202\320\265\321\200\320\275\320\265\321\202\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os" create mode 100644 tests/distrSelectorTests.os diff --git "a/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" "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" index 4ab5bd3..66eec04 100644 --- "a/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" +++ "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" @@ -9,6 +9,9 @@ &Пластилин Перем ПараметрыOVM; +&Пластилин +Перем ПровайдерДистрибутивовВерсии; + Перем ЭтоWindows; Перем ДопустимыеАлиасы; // Кеш коллекции допустимых алиасов @@ -215,17 +218,17 @@ // Функция ПолучитьСписокДоступныхКУстановкеВерсий() Экспорт - Таймаут = 10; - Соединение = Новый HTTPСоединение( - ПараметрыOVM.АдресСайтаОСкрипт(), - , - , - , - , - Таймаут - ); - - Возврат ПолучитьВерсииПоAPI(Соединение); + // Запрашиваем сайт + ДоступныеВерсии = ПровайдерДистрибутивовВерсии.ПолучитьСписокДоступныхКУстановкеВерсий(); + + // Дополняем таблицу нашими алиасами + Итератор = ДопустимыеАлиасы().Ключи().Итератор(); + + Пока Итератор.ЕстьСледующий() Цикл + ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, Итератор.Следующий(), "Путь"); + КонецЦикла; + + Возврат ДоступныеВерсии; КонецФункции @@ -245,73 +248,7 @@ // https://oscript.io/api/archive/<токен версии> - данная таблица // Функция ПолучитьДоступныеВидыДистрибутивовВерсии(Знач НомерВерсии) Экспорт - Таймаут = 10; - Соединение = Новый HTTPСоединение( - ПараметрыOVM.АдресСайтаОСкрипт(), - , - , - , - , - Таймаут - ); - - Запрос = Новый HTTPЗапрос("api/archive?all=true"); - Ответ = Соединение.Получить(Запрос); - HTTP_OK = 200; - Если Ответ.КодСостояния <> HTTP_OK Тогда - ВызватьИсключение СтрШаблон("Не удалось найти версию %1 на сайте: Статус: %2, Ответ: %3", - НомерВерсии, - Ответ.КодСостояния, - Ответ.ПолучитьТелоКакСтроку() - ); - КонецЕсли; - - ЧтениеJSON = Новый ЧтениеJSON(); - ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); - - МассивВерсий = ПрочитатьJSON(ЧтениеJSON, Ложь); - ИскомыйТокенВерсии = Неопределено; - Для Каждого ОписаниеВерсии Из МассивВерсий Цикл - Если НомерВерсии = ОписаниеВерсии.presentation Тогда - ИскомыйТокенВерсии = ОписаниеВерсии.token; - КонецЕсли; - КонецЦикла; - - Если ИскомыйТокенВерсии = Неопределено Тогда - ВызватьИсключение СтрШаблон("Не удалось найти версию %1 на сайте.", НомерВерсии); - КонецЕсли; - - Запрос = Новый HTTPЗапрос("api/archive/" + ИскомыйТокенВерсии); - Ответ = Соединение.Получить(Запрос); - HTTP_OK = 200; - Если Ответ.КодСостояния <> HTTP_OK Тогда - ВызватьИсключение СтрШаблон("Не удалось найти файлы версии %1 на сайте: Статус: %2, Ответ: %3", - НомерВерсии, - Ответ.КодСостояния, - Ответ.ПолучитьТелоКакСтроку() - ); - КонецЕсли; - - ТаблицаРезультата = Новый ТаблицаЗначений(); - ТаблицаРезультата.Колонки.Добавить("Вид"); - ТаблицаРезультата.Колонки.Добавить("ИмяФайла"); - ТаблицаРезультата.Колонки.Добавить("Архитектура"); - ТаблицаРезультата.Колонки.Добавить("Ссылка"); - - ЧтениеJSON = Новый ЧтениеJSON(); - ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); - - МассивФайлов = ПрочитатьJSON(ЧтениеJSON, Ложь); - Для Каждого ОписаниеФайла Из МассивФайлов Цикл - СтрокаТаблицы = ТаблицаРезультата.Добавить(); - СтрокаТаблицы.Вид = ОписаниеФайла.id; - СтрокаТаблицы.ИмяФайла = ОписаниеФайла.filename; - СтрокаТаблицы.Архитектура = ОписаниеФайла.arch; - СтрокаТаблицы.Ссылка = ОписаниеФайла.link; - КонецЦикла; - - Возврат ТаблицаРезультата; - + Возврат ПровайдерДистрибутивовВерсии.ПолучитьДоступныеВидыДистрибутивовВерсии(НомерВерсии); КонецФункции // <Описание функции> @@ -399,36 +336,19 @@ КонецФункции -Функция ПолучитьВерсииПоAPI(Знач Соединение) - Запрос = Новый HTTPЗапрос("api/archive"); - Ответ = Соединение.Получить(Запрос); - HTTP_OK = 200; - Если Ответ.КодСостояния <> HTTP_OK Тогда - ВызватьИсключение СтрШаблон("Не удалось получить список версий с сайта. Код ошибки: %1", Ответ.КодСостояния); - КонецЕсли; - - ЧтениеJSON = Новый ЧтениеJSON(); - ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); +// Регулярное выражение версии по semver +// +// Возвращаемое значение: +// Строка - Регулярное выражение +// +Функция МаскаНомераВерсииSemver() Экспорт + // https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string + // https://regex101.com/r/vkijKf/1/ + + // BSLLS:LineLength-off + Возврат "^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$"; + // BSLLS:LineLength-on - ДоступныеВерсии = Новый ТаблицаЗначений; - ДоступныеВерсии.Колонки.Добавить("Алиас"); - ДоступныеВерсии.Колонки.Добавить("Путь"); - - АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт(); - МассивВерсий = ПрочитатьJSON(ЧтениеJSON, Ложь); - Для Каждого ОписаниеВерсии Из МассивВерсий Цикл - ДоступнаяВерсия = ДоступныеВерсии.Добавить(); - ДоступнаяВерсия.Алиас = ОписаниеВерсии.presentation; - ДоступнаяВерсия.Путь = АдресСайтаОСкрипт + ОписаниеВерсии.link; - КонецЦикла; - - Итератор = ДопустимыеАлиасы().Ключи().Итератор(); - - Пока Итератор.ЕстьСледующий() Цикл - ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, Итератор.Следующий(), "Путь"); - КонецЦикла; - - Возврат ДоступныеВерсии; КонецФункции Процедура ОбеспечитьСтрокуВерсииПоАлиасу(ТаблицаВерсий, Алиас, ИмяРеквизитаПуть = "ПутьСервер") diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\202\320\265\320\272\321\202\320\276\321\200\320\236\320\272\321\200\321\203\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\224\320\265\321\202\320\265\320\272\321\202\320\276\321\200\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" new file mode 100644 index 0000000..2694e43 --- /dev/null +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\202\320\265\320\272\321\202\320\276\321\200\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" @@ -0,0 +1,27 @@ +#Использовать cpuinfo + +Перем СистемнаяИнформация; +Перем ИнформацияОПроцессоре; + +&Желудь +Процедура ПриСозданииОбъекта() + // получение cpuinfo тяжелая операция с запуском процессов + // поэтому инициализация ленивая и в конструкторе желудя не выполняется. +КонецПроцедуры + +Функция ТипПлатформы() Экспорт + Инициализировать(); + Возврат СистемнаяИнформация.ТипПлатформы; +КонецФункции + +Функция АрхитектураПроцессора() Экспорт + Инициализировать(); + Возврат ИнформацияОПроцессоре.Архитектура; +КонецФункции + +Процедура Инициализировать() + Если СистемнаяИнформация = Неопределено Тогда + СистемнаяИнформация = Новый СистемнаяИнформация; + ИнформацияОПроцессоре = Новый ИнформацияОПроцессоре; + КонецЕсли; +КонецПроцедуры \ No newline at end of file diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" new file mode 100644 index 0000000..0cff434 --- /dev/null +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" @@ -0,0 +1,112 @@ +Перем ДетекторОкружения; + +Перем ИспользоватьFDD; +Перем ИспользоватьХ64; +Перем ЭтоДистрибутивНеткор; + +Процедура ПриСозданииОбъекта(Знач Детектор) + ДетекторОкружения = Детектор; +КонецПроцедуры + +Функция ИспользоватьFDD(Знач Использовать) Экспорт + ИспользоватьFDD = Использовать; + Возврат ЭтотОбъект; +КонецФункции + +Функция ИспользоватьХ64(Знач Использовать) Экспорт + ИспользоватьХ64 = Использовать; + Возврат ЭтотОбъект; +КонецФункции + +Функция ЭтоДистрибутивНеткор(Знач Да) Экспорт + ЭтоДистрибутивНеткор = Да; + Возврат ЭтотОбъект; +КонецФункции + +Функция Выбрать(Знач ПереченьФайлов) Экспорт + + Если ЭтоДистрибутивНеткор = Истина Тогда + ВидДистрибутива = ?(ИспользоватьFDD, "fdd", ТипДистрибутиваТекущейПлатформы()); + ИначеЕсли ЭтоДистрибутивНеткор = Ложь Тогда + ВидДистрибутива = "zip"; + ИначеЕсли ИспользоватьFDD Тогда + ЭтоДистрибутивНеткор = Истина; + ВидДистрибутива = "fdd"; + Иначе + // Это установка по алиасу и мы не знаем, версия 2 это или нет. + // Определим это с двух попыток ниже. + ВидДистрибутива = Неопределено; + КонецЕсли; + + Возврат НайтиПодходящийДистрибутив(ПереченьФайлов, ВидДистрибутива, ИспользоватьХ64); + +КонецФункции + +Функция ПризнакАрхитектуры(Знач ИспользоватьХ64) + Возврат ?(ИспользоватьХ64, "x64", "x86"); +КонецФункции + +Функция НайтиПодходящийДистрибутив(Знач ПереченьФайлов, Знач ВидДистрибутива, Знач ИспользоватьХ64) + КритерийПоиска = Новый Структура; + КритерийПоиска.Вставить("Вид"); + КритерийПоиска.Вставить("Архитектура"); + + РежимАлиаса = (ВидДистрибутива = Неопределено); + + Если РежимАлиаса Тогда + КритерийПоиска.Вид = ТипДистрибутиваТекущейПлатформы(); + Иначе + КритерийПоиска.Вид = ВидДистрибутива; + КонецЕсли; + + КритерийПоиска.Архитектура = ПризнакАрхитектуры(ИспользоватьХ64); + + НайденныеСтроки = ПереченьФайлов.НайтиСтроки(КритерийПоиска); + Если НайденныеСтроки.Количество() <> 1 Тогда + // Это может быть установка по алиасу и тогда есть шанс у дистрибутива zip для версии 1 + Если РежимАлиаса Тогда + КритерийПоиска.Вид = "zip"; + КонецЕсли; + + НайденныеСтроки = ПереченьФайлов.НайтиСтроки(КритерийПоиска); + Если НайденныеСтроки.Количество() <> 1 Тогда + ТекстОшибки = СтрШаблон( + "Не найден дистрибутив для критериев: Вид=%1, Архитектура=%2. Найдено файлов: %3", + КритерийПоиска.Вид, + ?(КритерийПоиска.Свойство("Архитектура"), КритерийПоиска.Архитектура, "<любая>"), + НайденныеСтроки.Количество() + ); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + КонецЕсли; + + Возврат НайденныеСтроки[0].Ссылка; +КонецФункции + +Функция ТипДистрибутиваТекущейПлатформы() + + ТекущаяПлатформа = ДетекторОкружения.ТипПлатформы(); + + Если ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 + Или ТекущаяПлатформа = ТипПлатформы.Windows_x86 Тогда + Возврат "scd-win"; + ИначеЕсли ТекущаяПлатформа = ТипПлатформы.Linux_x86_64 + Или ТекущаяПлатформа = ТипПлатформы.Linux_x86 Тогда + Возврат "scd-lin"; + ИначеЕсли ТекущаяПлатформа = ТипПлатформы.MacOS_x86_64 + Или ТекущаяПлатформа = ТипПлатформы.MacOS_x86 Тогда + + АрхитектураПроцессора = ДетекторОкружения.АрхитектураПроцессора(); + + Если АрхитектураПроцессора = АрхитектурыПроцессоров.ARM + Или АрхитектураПроцессора = АрхитектурыПроцессоров.ARM64 Тогда + Возврат "osx-arm64"; + Иначе + Возврат "osx-x64"; + КонецЕсли; + + Иначе + ВызватьИсключение "Не удалось определить текущую операционную систему"; + КонецЕсли; + +КонецФункции 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" index 4367ff4..6b2edb6 100644 --- "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" @@ -5,7 +5,7 @@ &Деталька(Значение = "oscript.server", ЗначениеПоУмолчанию = "https://oscript.io") Перем АдресСайтаОСкрипт; -&Желудь +&Дуб Процедура ПриСозданииОбъекта() КонецПроцедуры @@ -14,6 +14,7 @@ // Возвращаемое значение: // Строка - Путь к каталогу установки по умолчанию // +&Завязь(Тип = "Строка") Функция КаталогУстановкиПоУмолчанию() Экспорт КаталогУстановкиПоУмолчанию = ПолучитьПеременнуюСреды("OVM_INSTALL_PATH"); @@ -33,6 +34,7 @@ // Возвращаемое значение: // Строка - Адрес сайта OneScript // +&Завязь(Тип = "Строка") Функция АдресСайтаОСкрипт() Экспорт Возврат АдресСайтаОСкрипт; КонецФункции @@ -42,6 +44,7 @@ // Возвращаемое значение: // Строка - Полный адрес к каталогу дистрибутивов OneScript // +&Завязь(Тип = "Строка") Функция ПолныйАдресККаталогуДистрибутивов() Экспорт Возврат АдресСайтаОСкрипт() + "/downloads"; КонецФункции @@ -50,23 +53,9 @@ // // Возвращаемое значение: // Булево - это 64 битная операционна система +&Завязь(Тип = "Булево") Функция Это64БитнаяОперационнаяСистема() Экспорт Возврат СистемнаяИнформация.Это64БитнаяОперационнаяСистема; КонецФункции -// Регулярное выражение версии по semver -// -// Возвращаемое значение: -// Строка - Регулярное выражение -// -Функция МаскаНомераВерсииSemver() Экспорт - // https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string - // https://regex101.com/r/vkijKf/1/ - - // BSLLS:LineLength-off - Возврат "^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$"; - // BSLLS:LineLength-on - -КонецФункции - СистемнаяИнформация = Новый СистемнаяИнформация; diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\276\320\262\320\222\320\265\321\200\321\201\320\270\320\270.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\276\320\262\320\222\320\265\321\200\321\201\320\270\320\270.os" new file mode 100644 index 0000000..0d8c105 --- /dev/null +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\276\320\262\320\222\320\265\321\200\321\201\320\270\320\270.os" @@ -0,0 +1,122 @@ +&Пластилин +Перем ФабрикаИнтернетСоединения; + +&Пластилин +Перем АдресСайтаОСкрипт; + +&Желудь +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +// Получить информацию о версиях, доступных к установке +// +// Возвращаемое значение: +// ТаблицаЗначений - Информация об установленных версиях: +// * Алиас - Строка - Алиас версии (имя каталога) +// * Путь - Строка - Полный путь к каталогу версии +// +Функция ПолучитьСписокДоступныхКУстановкеВерсий() Экспорт + + Соединение = ФабрикаИнтернетСоединения.Создать(); + + Запрос = Новый HTTPЗапрос("api/archive"); + Ответ = Соединение.Получить(Запрос); + HTTP_OK = 200; + Если Ответ.КодСостояния <> HTTP_OK Тогда + ВызватьИсключение СтрШаблон("Не удалось получить список версий с сайта. Код ошибки: %1", Ответ.КодСостояния); + КонецЕсли; + + ЧтениеJSON = Новый ЧтениеJSON(); + ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); + + ДоступныеВерсии = Новый ТаблицаЗначений; + ДоступныеВерсии.Колонки.Добавить("Алиас"); + ДоступныеВерсии.Колонки.Добавить("Путь"); + + МассивВерсий = ПрочитатьJSON(ЧтениеJSON, Ложь); + Для Каждого ОписаниеВерсии Из МассивВерсий Цикл + ДоступнаяВерсия = ДоступныеВерсии.Добавить(); + ДоступнаяВерсия.Алиас = ОписаниеВерсии.presentation; + ДоступнаяВерсия.Путь = АдресСайтаОСкрипт + ОписаниеВерсии.link; + КонецЦикла; + + Возврат ДоступныеВерсии; + +КонецФункции + +// Возвращает таблицу файлов конкретной версии +// +// Параметры: +// НомерВерсии - Строка - версия для которой получаем файлы. +// +// Возвращаемое значение: +// ТаблицаЗначений - Вид,ИмяФайла,Архитектура,Ссылка +// Вид: vsix,exe,zip,fdd,scd-win,scd-lin,osx-x64,osx-arm64 +// ИмяФайла: имя файла +// Архитектура: x64,x86 +// Ссылка: прямая ссылка на данный файл +// См. также: +// https://oscript.io/api/archive/ - список всех токенов +// https://oscript.io/api/archive/<токен версии> - данная таблица +// +Функция ПолучитьДоступныеВидыДистрибутивовВерсии(Знач НомерВерсии) Экспорт + Соединение = ФабрикаИнтернетСоединения.Создать(); + + Запрос = Новый HTTPЗапрос("api/archive?all=true"); + Ответ = Соединение.Получить(Запрос); + HTTP_OK = 200; + Если Ответ.КодСостояния <> HTTP_OK Тогда + ВызватьИсключение СтрШаблон("Не удалось найти версию %1 на сайте: Статус: %2, Ответ: %3", + НомерВерсии, + Ответ.КодСостояния, + Ответ.ПолучитьТелоКакСтроку() + ); + КонецЕсли; + + ЧтениеJSON = Новый ЧтениеJSON(); + ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); + + МассивВерсий = ПрочитатьJSON(ЧтениеJSON, Ложь); + ИскомыйТокенВерсии = Неопределено; + Для Каждого ОписаниеВерсии Из МассивВерсий Цикл + Если НомерВерсии = ОписаниеВерсии.presentation Тогда + ИскомыйТокенВерсии = ОписаниеВерсии.token; + КонецЕсли; + КонецЦикла; + + Если ИскомыйТокенВерсии = Неопределено Тогда + ВызватьИсключение СтрШаблон("Не удалось найти версию %1 на сайте.", НомерВерсии); + КонецЕсли; + + Запрос = Новый HTTPЗапрос("api/archive/" + ИскомыйТокенВерсии); + Ответ = Соединение.Получить(Запрос); + HTTP_OK = 200; + Если Ответ.КодСостояния <> HTTP_OK Тогда + ВызватьИсключение СтрШаблон("Не удалось найти файлы версии %1 на сайте: Статус: %2, Ответ: %3", + НомерВерсии, + Ответ.КодСостояния, + Ответ.ПолучитьТелоКакСтроку() + ); + КонецЕсли; + + ТаблицаРезультата = Новый ТаблицаЗначений(); + ТаблицаРезультата.Колонки.Добавить("Вид"); + ТаблицаРезультата.Колонки.Добавить("ИмяФайла"); + ТаблицаРезультата.Колонки.Добавить("Архитектура"); + ТаблицаРезультата.Колонки.Добавить("Ссылка"); + + ЧтениеJSON = Новый ЧтениеJSON(); + ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); + + МассивФайлов = ПрочитатьJSON(ЧтениеJSON, Ложь); + Для Каждого ОписаниеФайла Из МассивФайлов Цикл + СтрокаТаблицы = ТаблицаРезультата.Добавить(); + СтрокаТаблицы.Вид = ОписаниеФайла.id; + СтрокаТаблицы.ИмяФайла = ОписаниеФайла.filename; + СтрокаТаблицы.Архитектура = ОписаниеФайла.arch; + СтрокаТаблицы.Ссылка = ОписаниеФайла.link; + КонецЦикла; + + Возврат ТаблицаРезультата; + +КонецФункции 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 199f7e3..80546ee 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" @@ -2,7 +2,6 @@ #Использовать fs #Использовать tempfiles #Использовать strings -#Использовать cpuinfo Перем ЭтоWindows; @@ -15,23 +14,11 @@ &Пластилин Перем ВерсииOneScript; -&Деталька("proxy.use") -Перем ИспользоватьПрокси; - -&Деталька("proxy.server") -Перем ПроксиСервер; - -&Деталька("proxy.port") -Перем ПроксиПорт; - -&Деталька("proxy.user") -Перем ПроксиПользователь; - -&Деталька("proxy.password") -Перем ПроксиПароль; +&Пластилин +Перем ФабрикаИнтернетСоединения; -&Деталька("proxy.osAuthentication") -Перем ПроксиАвторизацияОС; +&Пластилин +Перем ДетекторОкружения; &Желудь Процедура ПриСозданииОбъекта() @@ -125,51 +112,7 @@ ПутьКСохраняемомуФайлу = ВременныеФайлы.НовоеИмяФайла("zip"); - АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт(); - - Если ИспользоватьПрокси = "true" Тогда - - Если Не ЗначениеЗаполнено(ПроксиСервер) Тогда - - Лог.Отладка("Использую системный прокси"); - Прокси = Новый ИнтернетПрокси(Истина); - - ИначеЕсли ЗначениеЗаполнено(ПроксиСервер) Тогда - - Лог.Отладка("Использую прокси %1", ПроксиСервер); - Прокси = Новый ИнтернетПрокси(); - - Прокси.Установить("http", - ПроксиСервер, - ПроксиПорт, - ПроксиПользователь, - ПроксиПароль, - ПроксиАвторизацияОС - ); - - Прокси.Установить("https", - ПроксиСервер, - ПроксиПорт, - ПроксиПользователь, - ПроксиПароль, - ПроксиАвторизацияОС - ); - - КонецЕсли; - Иначе - Лог.Отладка("Прокси не используется"); - Прокси = Неопределено; - КонецЕсли; - - Таймаут = 10; - Соединение = Новый HTTPСоединение( - АдресСайтаОСкрипт, - , - , - , - Прокси, - Таймаут - ); + Соединение = ФабрикаИнтернетСоединения.Создать(); Ресурс = ПолучитьПутьКСкачиваниюФайла(ВерсияКУстановке, ИспользоватьХ64, ИспользоватьFDD); Запрос = Новый HTTPЗапрос(Ресурс); @@ -305,7 +248,7 @@ КонецПроцедуры Функция ЭтоДопустимыйНомерВерсии(ВерсияКУстановке) - РВ = Новый РегулярноеВыражение(ПараметрыOVM.МаскаНомераВерсииSemver()); + РВ = Новый РегулярноеВыражение(ВерсииOneScript.МаскаНомераВерсииSemver()); РВ.ИгнорироватьРегистр = Ложь; РВ.МногоСтрочный = Ложь; Возврат РВ.Совпадает(ВерсияКУстановке); @@ -323,10 +266,14 @@ Функция ПолучитьПутьКСкачиваниюФайла(Знач ВерсияКУстановке, Знач ИспользоватьХ64, Знач ИспользоватьFDD) + ОпределительДистрибутива = Новый ОпределительДистрибутива(ДетекторОкружения) + .ИспользоватьХ64(ИспользоватьХ64) + .ИспользоватьFDD(ИспользоватьFDD); + Если ЭтоДопустимыйНомерВерсии(ВерсияКУстановке) Тогда ИскомаяВерсия = ВерсияКУстановке; - ЭтоВерсия2 = СтроковыеФункции.СравнитьВерсии(ВерсияКУстановке, "2.0") >= 0; + ОпределительДистрибутива.ЭтоДистрибутивНеткор(СтроковыеФункции.СравнитьВерсии(ВерсияКУстановке, "2.0") >= 0); Иначе @@ -335,91 +282,12 @@ .ИначеВызватьИсключение("Ошибка получения пути к файлу по версии"); ИскомаяВерсия = ДанныеВерсии.Метка; - // Когда v2 выйдет из preview мы не будем знать к какой версии относится алиас stable. - ЭтоВерсия2 = Неопределено; КонецЕсли; - Если ЭтоВерсия2 = Истина Тогда - ВидДистрибутива = ?(ИспользоватьFDD, "fdd", ТипДистрибутиваТекущейПлатформы()); - ИначеЕсли ЭтоВерсия2 = Ложь Тогда - ВидДистрибутива = "zip"; - ИначеЕсли ИспользоватьFDD Тогда - ЭтоВерсия2 = Истина; - ВидДистрибутива = "fdd"; - Иначе - // Это установка по алиасу и мы не знаем, версия 2 это или нет. - // Определим это с двух попыток ниже. - ВидДистрибутива = ТипДистрибутиваТекущейПлатформы(); - КонецЕсли; - ПереченьФайлов = ВерсииOneScript.ПолучитьДоступныеВидыДистрибутивовВерсии(ИскомаяВерсия); - Возврат НайтиПодходящийДистрибутив(ПереченьФайлов, ВидДистрибутива, ИспользоватьХ64, ЭтоВерсия2 = Неопределено); - -КонецФункции - -Функция НайтиПодходящийДистрибутив(Знач ПереченьФайлов, Знач ВидДистрибутива, Знач ИспользоватьХ64, Знач РежимАлиаса) - КритерийПоиска = Новый Структура; - КритерийПоиска.Вставить("Вид", ВидДистрибутива); - - Если ВидДистрибутива = "scd-win" или ВидДистрибутива = "fdd" или ВидДистрибутива = "zip" Тогда - Если ИспользоватьХ64 Тогда - КритерийПоиска.Вставить("Архитектура", "x64"); - Иначе - КритерийПоиска.Вставить("Архитектура", "x86"); - КонецЕсли; - КонецЕсли; - - НайденныеСтроки = ПереченьФайлов.НайтиСтроки(КритерийПоиска); - Если НайденныеСтроки.Количество() <> 1 Тогда - // Это может быть установка по алиасу и тогда есть шанс у дистрибутива zip для версии 1 - Если РежимАлиаса Тогда - КритерийПоиска.Вид = "zip"; - КонецЕсли; - - НайденныеСтроки = ПереченьФайлов.НайтиСтроки(КритерийПоиска); - Если НайденныеСтроки.Количество() <> 1 Тогда - ТекстОшибки = СтрШаблон( - "Не найден дистрибутив для критериев: Вид=%1, Архитектура=%2. Найдено файлов: %3", - КритерийПоиска.Вид, - ?(КритерийПоиска.Свойство("Архитектура"), КритерийПоиска.Архитектура, "<любая>"), - НайденныеСтроки.Количество() - ); - ВызватьИсключение ТекстОшибки; - КонецЕсли; - КонецЕсли; - - Возврат НайденныеСтроки[0].Ссылка; -КонецФункции - -Функция ТипДистрибутиваТекущейПлатформы() - - СистемнаяИнформация = Новый СистемнаяИнформация; - ТекущаяПлатформа = СистемнаяИнформация.ТипПлатформы; - - Если ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 - Или ТекущаяПлатформа = ТипПлатформы.Windows_x86 Тогда - Возврат "scd-win"; - ИначеЕсли ТекущаяПлатформа = ТипПлатформы.Linux_x86_64 - Или ТекущаяПлатформа = ТипПлатформы.Linux_x86 Тогда - Возврат "scd-lin"; - ИначеЕсли ТекущаяПлатформа = ТипПлатформы.MacOS_x86_64 - Или ТекущаяПлатформа = ТипПлатформы.MacOS_x86 Тогда - - ИнформацияОПроцессоре = Новый ИнформацияОПроцессоре; - АрхитектураПроцессора = ИнформацияОПроцессоре.Архитектура; - - Если АрхитектураПроцессора = АрхитектурыПроцессоров.ARM - Или АрхитектураПроцессора = АрхитектурыПроцессоров.ARM64 Тогда - Возврат "osx-arm64"; - Иначе - Возврат "osx-x64"; - КонецЕсли; - - Иначе - ВызватьИсключение "Не удалось определить текущую операционную систему"; - КонецЕсли; + Возврат ОпределительДистрибутива.Выбрать(ПереченьФайлов); КонецФункции diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\230\320\275\321\202\320\265\321\200\320\275\320\265\321\202\320\241\320\276\320\265\320\264\320\270\320\275\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\244\320\260\320\261\321\200\320\270\320\272\320\260\320\230\320\275\321\202\320\265\321\200\320\275\320\265\321\202\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os" new file mode 100644 index 0000000..0d76d57 --- /dev/null +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\230\320\275\321\202\320\265\321\200\320\275\320\265\321\202\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os" @@ -0,0 +1,75 @@ +&Деталька("proxy.use") +Перем ИспользоватьПрокси; + +&Деталька("proxy.server") +Перем ПроксиСервер; + +&Деталька("proxy.port") +Перем ПроксиПорт; + +&Деталька("proxy.user") +Перем ПроксиПользователь; + +&Деталька("proxy.password") +Перем ПроксиПароль; + +&Деталька("proxy.osAuthentication") +Перем ПроксиАвторизацияОС; + +&Пластилин +Перем АдресСайтаОСкрипт; + +&ЛогOVM +Перем Лог; + +&Желудь +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +Функция Создать() Экспорт + Если ИспользоватьПрокси = "true" Тогда + + Если Не ЗначениеЗаполнено(ПроксиСервер) Тогда + + Лог.Отладка("Использую системный прокси"); + Прокси = Новый ИнтернетПрокси(Истина); + + ИначеЕсли ЗначениеЗаполнено(ПроксиСервер) Тогда + + Лог.Отладка("Использую прокси %1", ПроксиСервер); + Прокси = Новый ИнтернетПрокси(); + + Прокси.Установить("http", + ПроксиСервер, + ПроксиПорт, + ПроксиПользователь, + ПроксиПароль, + ПроксиАвторизацияОС + ); + + Прокси.Установить("https", + ПроксиСервер, + ПроксиПорт, + ПроксиПользователь, + ПроксиПароль, + ПроксиАвторизацияОС + ); + + КонецЕсли; + Иначе + Лог.Отладка("Прокси не используется"); + Прокси = Неопределено; + КонецЕсли; + + Таймаут = 10; + Соединение = Новый HTTPСоединение( + АдресСайтаОСкрипт, + , + , + , + Прокси, + Таймаут + ); + + Возврат Соединение; +КонецФункции \ No newline at end of file diff --git a/tests/distrSelectorTests.os b/tests/distrSelectorTests.os new file mode 100644 index 0000000..4f8d4a7 --- /dev/null +++ b/tests/distrSelectorTests.os @@ -0,0 +1,283 @@ +///////////////////////////////////////////////////// +// Тесты выбора дистрибутива в перечне файлов +///////////////////////////////////////////////////// + +#Использовать "../src/cmd" +#Использовать "../src/core" +#Использовать moskito +#Использовать cpuinfo + +Перем Арх32; +Перем Арх64; + +// BSLLS:DuplicateStringLiteral-off + +&ПараметризованныйТест +&ИсточникЗначение(Ложь, Ложь, Неопределено) +&ИсточникЗначение(Ложь, Истина, Неопределено) +&ИсточникЗначение(Истина, Ложь, Неопределено) +&ИсточникЗначение(Истина, Истина, Неопределено) +&ИсточникЗначение(Ложь, Ложь, Истина) +&ИсточникЗначение(Ложь, Истина, Истина) +&ИсточникЗначение(Истина, Ложь, Истина) +&ИсточникЗначение(Истина, Истина, Истина) +Процедура ТестУстановкиВерсии2Windows(ИспользоватьFDD, ИспользоватьХ64, ЭтоВерсия2) Экспорт + + УниверсальныйТестВерсии( + ПереченьФайловВерсии2(), + ИспользоватьFDD, + ИспользоватьХ64, + ЭтоВерсия2, + ТипПлатформы.Windows_x86_64, + "scd-win"); + +КонецПроцедуры + +&ПараметризованныйТест +&ИсточникЗначение(Ложь, Ложь, Неопределено) +&ИсточникЗначение(Ложь, Истина, Неопределено) +&ИсточникЗначение(Истина, Ложь, Неопределено) +&ИсточникЗначение(Истина, Истина, Неопределено) +&ИсточникЗначение(Ложь, Ложь, Истина) +&ИсточникЗначение(Ложь, Истина, Истина) +&ИсточникЗначение(Истина, Ложь, Истина) +&ИсточникЗначение(Истина, Истина, Истина) +Процедура ТестУстановкиВерсии2Linux(ИспользоватьFDD, ИспользоватьХ64, ЭтоВерсия2) Экспорт + + Если ИспользоватьХ64 = Ложь И ИспользоватьFDD = Ложь Тогда // На линуксе нет варианта x86 + ТекстИсключения = ?(ЭтоВерсия2 = Неопределено, "Вид=zip", "Вид=scd-lin"); + Иначе + ТекстИсключения = Неопределено; + КонецЕсли; + + УниверсальныйТестВерсии( + ПереченьФайловВерсии2(), + ИспользоватьFDD, + ИспользоватьХ64, + ЭтоВерсия2, + ТипПлатформы.Linux_x86_64, + "scd-lin", + ТекстИсключения); + +КонецПроцедуры + +&ПараметризованныйТест +&ИсточникЗначение(Ложь, Ложь, Неопределено) +&ИсточникЗначение(Ложь, Истина, Неопределено) +&ИсточникЗначение(Истина, Ложь, Неопределено) +&ИсточникЗначение(Истина, Истина, Неопределено) +&ИсточникЗначение(Ложь, Ложь, Истина) +&ИсточникЗначение(Ложь, Истина, Истина) +&ИсточникЗначение(Истина, Ложь, Истина) +&ИсточникЗначение(Истина, Истина, Истина) +Процедура ТестУстановкиВерсии2Mac(ИспользоватьFDD, ИспользоватьХ64, ЭтоВерсия2) Экспорт + + Если ИспользоватьХ64 = Ложь И ИспользоватьFDD = Ложь Тогда // На маке нет варианта x86 + ТекстИсключения = ?(ЭтоВерсия2 = Неопределено, "Вид=zip", "Вид=osx-x64"); + Иначе + ТекстИсключения = Неопределено; + КонецЕсли; + + УниверсальныйТестВерсии( + ПереченьФайловВерсии2(), + ИспользоватьFDD, + ИспользоватьХ64, + ЭтоВерсия2, + ТипПлатформы.MacOs_x86_64, + "osx-x64", + ТекстИсключения); + +КонецПроцедуры + +&ПараметризованныйТест +&ИсточникЗначение(Ложь, Ложь, Неопределено) +&ИсточникЗначение(Ложь, Истина, Неопределено) +&ИсточникЗначение(Истина, Ложь, Неопределено) +&ИсточникЗначение(Истина, Истина, Неопределено) +&ИсточникЗначение(Ложь, Ложь, Истина) +&ИсточникЗначение(Ложь, Истина, Истина) +&ИсточникЗначение(Истина, Ложь, Истина) +&ИсточникЗначение(Истина, Истина, Истина) +Процедура ТестУстановкиВерсии2MacARM(ИспользоватьFDD, ИспользоватьХ64, ЭтоВерсия2) Экспорт + + Если ИспользоватьХ64 = Ложь И ИспользоватьFDD = Ложь Тогда // На маке нет варианта x86 + ТекстИсключения = ?(ЭтоВерсия2 = Неопределено, "Вид=zip", "Вид=osx-arm64"); + Иначе + ТекстИсключения = Неопределено; + КонецЕсли; + + УниверсальныйТестВерсии( + ПереченьФайловВерсии2(), + ИспользоватьFDD, + ИспользоватьХ64, + ЭтоВерсия2, + ТипПлатформы.MacOs_x86_64, + "osx-arm64", + ТекстИсключения, + АрхитектурыПроцессоров.ARM64); + +КонецПроцедуры + +&ПараметризованныйТест +&ИсточникЗначение(Ложь, Ложь, Неопределено) +&ИсточникЗначение(Ложь, Истина, Неопределено) +&ИсточникЗначение(Истина, Ложь, Неопределено) +&ИсточникЗначение(Истина, Истина, Неопределено) +&ИсточникЗначение(Ложь, Ложь, Ложь) +&ИсточникЗначение(Ложь, Истина, Ложь) +&ИсточникЗначение(Истина, Ложь, Ложь) +&ИсточникЗначение(Истина, Истина, Ложь) +Процедура ТестУстановкиВерсии1Windows(ИспользоватьFDD, ИспользоватьХ64, ЭтоВерсия2) Экспорт + Если ИспользоватьFDD Тогда // На версии 1 нет варианта fdd + ТекстИсключения = ?(ЭтоВерсия2 = Неопределено, "Вид=fdd", Неопределено); + Иначе + ТекстИсключения = Неопределено; + КонецЕсли; + + УниверсальныйТестВерсии( + ПереченьФайловВерсии1(), + ИспользоватьFDD, + ИспользоватьХ64, + ЭтоВерсия2, + ТипПлатформы.Windows_x86_64, + "zip", + ТекстИсключения); + +КонецПроцедуры + +&ПараметризованныйТест +&ИсточникЗначение(Ложь, Ложь, Неопределено) +&ИсточникЗначение(Ложь, Истина, Неопределено) +&ИсточникЗначение(Истина, Ложь, Неопределено) +&ИсточникЗначение(Истина, Истина, Неопределено) +&ИсточникЗначение(Ложь, Ложь, Ложь) +&ИсточникЗначение(Ложь, Истина, Ложь) +&ИсточникЗначение(Истина, Ложь, Ложь) +&ИсточникЗначение(Истина, Истина, Ложь) +Процедура ТестУстановкиВерсии1Linux(ИспользоватьFDD, ИспользоватьХ64, ЭтоВерсия2) Экспорт + Если ИспользоватьFDD Тогда // На версии 1 нет варианта fdd + ТекстИсключения = ?(ЭтоВерсия2 = Неопределено, "Вид=fdd", Неопределено); + Иначе + ТекстИсключения = Неопределено; + КонецЕсли; + + УниверсальныйТестВерсии( + ПереченьФайловВерсии1(), + ИспользоватьFDD, + ИспользоватьХ64, + ЭтоВерсия2, + ТипПлатформы.Linux_x86_64, + "zip", + ТекстИсключения); + +КонецПроцедуры + +// BSLLS:NumberOfParams-off +Процедура УниверсальныйТестВерсии( + ПереченьФайлов, + ИспользоватьFDD, + ИспользоватьХ64, + ЭтоВерсия2, + Платформа, + ОжидаемыйДистрибутив, + ТекстИсключения = Неопределено, + Архитектура = Неопределено) + + СисИнфо = МокОкружения(Платформа, Архитектура); + Определитель = Новый ОпределительДистрибутива(СисИнфо); + + Определитель + .ИспользоватьFDD(ИспользоватьFDD) + .ИспользоватьХ64(ИспользоватьХ64) + .ЭтоДистрибутивНеткор(ЭтоВерсия2); + + Вид = ?(ИспользоватьFDD, "fdd", ОжидаемыйДистрибутив); + Арх = ?(ИспользоватьХ64, Арх64, Арх32); + + Если ИспользоватьFDD и ОжидаемыйДистрибутив = "zip" Тогда + // Для версии 1 ключ fdd не должен влиять на результат + // т.к. все версии 1 являются "fdd" (framework dependent) + Вид = "zip"; + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстИсключения) Тогда + ПараметрыДействия = Новый Массив; + ПараметрыДействия.Добавить(ПереченьФайлов); + Ожидаем.Что(Определитель).Метод("Выбрать", ПараметрыДействия) + .ВыбрасываетИсключение("Не найден дистрибутив для критериев: " + ТекстИсключения); + Иначе + Ссылка = Определитель.Выбрать(ПереченьФайлов); + Ожидаем.Что(Ссылка).Равно(Вид + "/" + Арх); + КонецЕсли; + +КонецПроцедуры + +Функция ПереченьФайловВерсии1() + + Таблица = ТаблицаФайловДистрибутивов(); + ЗаписьДистрибутива(Таблица, "vsix", Арх32); + ЗаписьДистрибутива(Таблица, "exe", Арх32); + ЗаписьДистрибутива(Таблица, "exe", Арх64); + ЗаписьДистрибутива(Таблица, "zip", Арх32); + ЗаписьДистрибутива(Таблица, "zip", Арх64); + ЗаписьДистрибутива(Таблица, "rpm", Арх64); + ЗаписьДистрибутива(Таблица, "deb", Арх64); + + Возврат Таблица; + +КонецФункции + +Функция ПереченьФайловВерсии2() + + Таблица = ТаблицаФайловДистрибутивов(); + ЗаписьДистрибутива(Таблица, "vsix", Арх32); + ЗаписьДистрибутива(Таблица, "fdd", Арх32); + ЗаписьДистрибутива(Таблица, "fdd", Арх64); + ЗаписьДистрибутива(Таблица, "scd-win", Арх32); + ЗаписьДистрибутива(Таблица, "scd-win", Арх64); + ЗаписьДистрибутива(Таблица, "scd-lin", Арх64); + ЗаписьДистрибутива(Таблица, "osx-x64", Арх64); + ЗаписьДистрибутива(Таблица, "osx-arm64", Арх64); + + Возврат Таблица; + +КонецФункции + +Функция МокОкружения(Знач ВидПлатформы, Знач Архитектура) + Если Архитектура = Неопределено Тогда + Архитектура = АрхитектурыПроцессоров.X64; + КонецЕсли; + + МокСИ = Мок.Получить(Новый ДетекторОкружения); + МокСИ.Когда().ТипПлатформы().ТогдаВозвращает(ВидПлатформы); + МокСИ.Когда().АрхитектураПроцессора().ТогдаВозвращает(Архитектура); + + Возврат МокСИ; + +КонецФункции + +Процедура ЗаписьДистрибутива(Знач Таблица, Знач Вид, Знач Архитектура, Знач Ссылка = Неопределено, Знач ИмяФайла = Неопределено) + + Стр = Таблица.Добавить(); + Стр.Вид = Вид; + Стр.Архитектура = Архитектура; + Если Стр.Ссылка = Неопределено Тогда + Стр.Ссылка = Вид + "/" + Архитектура; + КонецЕсли; + Стр.ИмяФайла = ИмяФайла; + +КонецПроцедуры + +Функция ТаблицаФайловДистрибутивов() + ТаблицаРезультата = Новый ТаблицаЗначений(); + ТаблицаРезультата.Колонки.Добавить("Вид"); + ТаблицаРезультата.Колонки.Добавить("ИмяФайла"); + ТаблицаРезультата.Колонки.Добавить("Архитектура"); + ТаблицаРезультата.Колонки.Добавить("Ссылка"); + + Возврат ТаблицаРезультата; +КонецФункции + +/////////////////////////// +Арх32 = "x86"; +Арх64 = "x64"; \ No newline at end of file From 72106e11c6d14c993d61d95c51df02fbc762a918 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Sun, 25 May 2025 09:45:12 +0300 Subject: [PATCH 03/24] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=B0=D0=BB=20=D1=80=D0=B0=D0=B7=D1=80=D0=B5=D0=B7=20?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2=20=D0=BF=D0=BE=D1=83=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=B5=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/distrSelectorTests.os | 270 ++++++++++++++++++++---------------- 1 file changed, 147 insertions(+), 123 deletions(-) diff --git a/tests/distrSelectorTests.os b/tests/distrSelectorTests.os index 4f8d4a7..85d6fde 100644 --- a/tests/distrSelectorTests.os +++ b/tests/distrSelectorTests.os @@ -12,166 +12,190 @@ // BSLLS:DuplicateStringLiteral-off +#Область ПоискПоАлиасу + &ПараметризованныйТест -&ИсточникЗначение(Ложь, Ложь, Неопределено) -&ИсточникЗначение(Ложь, Истина, Неопределено) -&ИсточникЗначение(Истина, Ложь, Неопределено) -&ИсточникЗначение(Истина, Истина, Неопределено) -&ИсточникЗначение(Ложь, Ложь, Истина) -&ИсточникЗначение(Ложь, Истина, Истина) -&ИсточникЗначение(Истина, Ложь, Истина) -&ИсточникЗначение(Истина, Истина, Истина) -Процедура ТестУстановкиВерсии2Windows(ИспользоватьFDD, ИспользоватьХ64, ЭтоВерсия2) Экспорт +&ИсточникЗначение("Windows_x86_64", Неопределено) +&ИсточникЗначение("Windows_x86", Неопределено) +&ИсточникЗначение("Linux_x86", Неопределено) +&ИсточникЗначение("Linux_x86_64", Неопределено) +&ИсточникЗначение("MacOS_x86_64", "X64") +&ИсточникЗначение("MacOS_x86_64", "ARM64") +Процедура ДляФайловВерсии1СФлагомFDDИАлиасомНеНаходитДистрибутив(Знач ОС, Знач Архитектура) Экспорт УниверсальныйТестВерсии( - ПереченьФайловВерсии2(), - ИспользоватьFDD, - ИспользоватьХ64, - ЭтоВерсия2, - ТипПлатформы.Windows_x86_64, - "scd-win"); + ПереченьФайловВерсии1(), + Истина, + СтрЗаканчиваетсяНа(ОС, "_x86_64"), + Неопределено, + ТипПлатформы[ОС], + "zip", + "Вид=fdd", + Архитектура + ); КонецПроцедуры &ПараметризованныйТест -&ИсточникЗначение(Ложь, Ложь, Неопределено) -&ИсточникЗначение(Ложь, Истина, Неопределено) -&ИсточникЗначение(Истина, Ложь, Неопределено) -&ИсточникЗначение(Истина, Истина, Неопределено) -&ИсточникЗначение(Ложь, Ложь, Истина) -&ИсточникЗначение(Ложь, Истина, Истина) -&ИсточникЗначение(Истина, Ложь, Истина) -&ИсточникЗначение(Истина, Истина, Истина) -Процедура ТестУстановкиВерсии2Linux(ИспользоватьFDD, ИспользоватьХ64, ЭтоВерсия2) Экспорт +&ИсточникЗначение("Windows_x86_64", Неопределено) +&ИсточникЗначение("Windows_x86", Неопределено) +&ИсточникЗначение("Linux_x86", Неопределено) +&ИсточникЗначение("Linux_x86_64", Неопределено) +&ИсточникЗначение("MacOS_x86_64", "X64") +&ИсточникЗначение("MacOS_x86_64", "ARM64") +Процедура ДляФайловВерсии1БезФлагаFDDИАлиасомНаходитДистрибутив(Знач ОС, Знач Архитектура) Экспорт - Если ИспользоватьХ64 = Ложь И ИспользоватьFDD = Ложь Тогда // На линуксе нет варианта x86 - ТекстИсключения = ?(ЭтоВерсия2 = Неопределено, "Вид=zip", "Вид=scd-lin"); - Иначе - ТекстИсключения = Неопределено; - КонецЕсли; - УниверсальныйТестВерсии( - ПереченьФайловВерсии2(), - ИспользоватьFDD, - ИспользоватьХ64, - ЭтоВерсия2, - ТипПлатформы.Linux_x86_64, - "scd-lin", - ТекстИсключения); + ПереченьФайловВерсии1(), + Ложь, + СтрЗаканчиваетсяНа(ОС, "_x86_64"), + Неопределено, + ТипПлатформы[ОС], + "zip", + Неопределено, + Архитектура + ); КонецПроцедуры &ПараметризованныйТест -&ИсточникЗначение(Ложь, Ложь, Неопределено) -&ИсточникЗначение(Ложь, Истина, Неопределено) -&ИсточникЗначение(Истина, Ложь, Неопределено) -&ИсточникЗначение(Истина, Истина, Неопределено) -&ИсточникЗначение(Ложь, Ложь, Истина) -&ИсточникЗначение(Ложь, Истина, Истина) -&ИсточникЗначение(Истина, Ложь, Истина) -&ИсточникЗначение(Истина, Истина, Истина) -Процедура ТестУстановкиВерсии2Mac(ИспользоватьFDD, ИспользоватьХ64, ЭтоВерсия2) Экспорт +&ИсточникЗначение("Windows_x86_64", Неопределено) +&ИсточникЗначение("Windows_x86", Неопределено) +&ИсточникЗначение("Linux_x86", Неопределено) +&ИсточникЗначение("Linux_x86_64", Неопределено) +&ИсточникЗначение("MacOS_x86_64", "X64") +&ИсточникЗначение("MacOS_x86_64", "ARM64") +Процедура ДляФайловВерсии2СФлагомFDDИАлиасомНаходитДистрибутив(Знач ОС, Знач Архитектура) Экспорт - Если ИспользоватьХ64 = Ложь И ИспользоватьFDD = Ложь Тогда // На маке нет варианта x86 - ТекстИсключения = ?(ЭтоВерсия2 = Неопределено, "Вид=zip", "Вид=osx-x64"); - Иначе - ТекстИсключения = Неопределено; - КонецЕсли; - УниверсальныйТестВерсии( - ПереченьФайловВерсии2(), - ИспользоватьFDD, - ИспользоватьХ64, - ЭтоВерсия2, - ТипПлатформы.MacOs_x86_64, - "osx-x64", - ТекстИсключения); + ПереченьФайловВерсии2(), + Истина, + СтрЗаканчиваетсяНа(ОС, "_x86_64"), + Неопределено, + ТипПлатформы[ОС], + "fdd", + Неопределено, + Архитектура + ); КонецПроцедуры &ПараметризованныйТест -&ИсточникЗначение(Ложь, Ложь, Неопределено) -&ИсточникЗначение(Ложь, Истина, Неопределено) -&ИсточникЗначение(Истина, Ложь, Неопределено) -&ИсточникЗначение(Истина, Истина, Неопределено) -&ИсточникЗначение(Ложь, Ложь, Истина) -&ИсточникЗначение(Ложь, Истина, Истина) -&ИсточникЗначение(Истина, Ложь, Истина) -&ИсточникЗначение(Истина, Истина, Истина) -Процедура ТестУстановкиВерсии2MacARM(ИспользоватьFDD, ИспользоватьХ64, ЭтоВерсия2) Экспорт +&ИсточникЗначение("Windows_x86_64", Неопределено, "scd-win") +&ИсточникЗначение("Windows_x86", Неопределено, "scd-win") +&ИсточникЗначение("Linux_x86", Неопределено, "scd-lin") +&ИсточникЗначение("Linux_x86_64", Неопределено, "scd-lin") +&ИсточникЗначение("MacOS_x86_64", "X64", "osx-x64") +&ИсточникЗначение("MacOS_x86_64", "ARM64", "osx-arm64") +Процедура ДляФайловВерсии2БезФлагаFDDИАлиасомНаходитДистрибутив(Знач ОС, Знач Архитектура, Знач Дистр) Экспорт - Если ИспользоватьХ64 = Ложь И ИспользоватьFDD = Ложь Тогда // На маке нет варианта x86 - ТекстИсключения = ?(ЭтоВерсия2 = Неопределено, "Вид=zip", "Вид=osx-arm64"); - Иначе - ТекстИсключения = Неопределено; - КонецЕсли; - УниверсальныйТестВерсии( - ПереченьФайловВерсии2(), - ИспользоватьFDD, - ИспользоватьХ64, - ЭтоВерсия2, - ТипПлатформы.MacOs_x86_64, - "osx-arm64", - ТекстИсключения, - АрхитектурыПроцессоров.ARM64); + ПереченьФайловВерсии2(), + Истина, + СтрЗаканчиваетсяНа(ОС, "_x86_64"), + Неопределено, + ТипПлатформы[ОС], + Дистр, + Неопределено, + Архитектура + ); КонецПроцедуры +#КонецОбласти + +#Область ПоискПоНомеруВерсии + &ПараметризованныйТест -&ИсточникЗначение(Ложь, Ложь, Неопределено) -&ИсточникЗначение(Ложь, Истина, Неопределено) -&ИсточникЗначение(Истина, Ложь, Неопределено) -&ИсточникЗначение(Истина, Истина, Неопределено) -&ИсточникЗначение(Ложь, Ложь, Ложь) -&ИсточникЗначение(Ложь, Истина, Ложь) -&ИсточникЗначение(Истина, Ложь, Ложь) -&ИсточникЗначение(Истина, Истина, Ложь) -Процедура ТестУстановкиВерсии1Windows(ИспользоватьFDD, ИспользоватьХ64, ЭтоВерсия2) Экспорт - Если ИспользоватьFDD Тогда // На версии 1 нет варианта fdd - ТекстИсключения = ?(ЭтоВерсия2 = Неопределено, "Вид=fdd", Неопределено); - Иначе - ТекстИсключения = Неопределено; - КонецЕсли; +&ИсточникЗначение("Windows_x86_64", Неопределено) +&ИсточникЗначение("Windows_x86", Неопределено) +&ИсточникЗначение("Linux_x86", Неопределено) +&ИсточникЗначение("Linux_x86_64", Неопределено) +&ИсточникЗначение("MacOS_x86_64", "X64") +&ИсточникЗначение("MacOS_x86_64", "ARM64") +Процедура ДляФайловВерсии1СФлагомFDDИНомеромНаходитДистрибутив(Знач ОС, Знач Архитектура) Экспорт + + УниверсальныйТестВерсии( + ПереченьФайловВерсии1(), + Истина, + СтрЗаканчиваетсяНа(ОС, "_x86_64"), + Ложь, + ТипПлатформы[ОС], + "zip", + Неопределено, + Архитектура + ); + +КонецПроцедуры +&ПараметризованныйТест +&ИсточникЗначение("Windows_x86_64", Неопределено) +&ИсточникЗначение("Windows_x86", Неопределено) +&ИсточникЗначение("Linux_x86", Неопределено) +&ИсточникЗначение("Linux_x86_64", Неопределено) +&ИсточникЗначение("MacOS_x86_64", "X64") +&ИсточникЗначение("MacOS_x86_64", "ARM64") +Процедура ДляФайловВерсии1БезФлагаFDDИНомеромНаходитДистрибутив(Знач ОС, Знач Архитектура) Экспорт + УниверсальныйТестВерсии( - ПереченьФайловВерсии1(), - ИспользоватьFDD, - ИспользоватьХ64, - ЭтоВерсия2, - ТипПлатформы.Windows_x86_64, + ПереченьФайловВерсии1(), + Ложь, + СтрЗаканчиваетсяНа(ОС, "_x86_64"), + Ложь, + ТипПлатформы[ОС], "zip", - ТекстИсключения); + Неопределено, + Архитектура + ); КонецПроцедуры &ПараметризованныйТест -&ИсточникЗначение(Ложь, Ложь, Неопределено) -&ИсточникЗначение(Ложь, Истина, Неопределено) -&ИсточникЗначение(Истина, Ложь, Неопределено) -&ИсточникЗначение(Истина, Истина, Неопределено) -&ИсточникЗначение(Ложь, Ложь, Ложь) -&ИсточникЗначение(Ложь, Истина, Ложь) -&ИсточникЗначение(Истина, Ложь, Ложь) -&ИсточникЗначение(Истина, Истина, Ложь) -Процедура ТестУстановкиВерсии1Linux(ИспользоватьFDD, ИспользоватьХ64, ЭтоВерсия2) Экспорт - Если ИспользоватьFDD Тогда // На версии 1 нет варианта fdd - ТекстИсключения = ?(ЭтоВерсия2 = Неопределено, "Вид=fdd", Неопределено); - Иначе - ТекстИсключения = Неопределено; - КонецЕсли; +&ИсточникЗначение("Windows_x86_64", Неопределено) +&ИсточникЗначение("Windows_x86", Неопределено) +&ИсточникЗначение("Linux_x86", Неопределено) +&ИсточникЗначение("Linux_x86_64", Неопределено) +&ИсточникЗначение("MacOS_x86_64", "X64") +&ИсточникЗначение("MacOS_x86_64", "ARM64") +Процедура ДляФайловВерсии2СФлагомFDDИНомеромНаходитДистрибутив(Знач ОС, Знач Архитектура) Экспорт + + УниверсальныйТестВерсии( + ПереченьФайловВерсии2(), + Истина, + СтрЗаканчиваетсяНа(ОС, "_x86_64"), + Истина, + ТипПлатформы[ОС], + "fdd", + Неопределено, + Архитектура + ); + +КонецПроцедуры +&ПараметризованныйТест +&ИсточникЗначение("Windows_x86_64", Неопределено, "scd-win") +&ИсточникЗначение("Windows_x86", Неопределено, "scd-win") +&ИсточникЗначение("Linux_x86", Неопределено, "scd-lin") +&ИсточникЗначение("Linux_x86_64", Неопределено, "scd-lin") +&ИсточникЗначение("MacOS_x86_64", "X64", "osx-x64") +&ИсточникЗначение("MacOS_x86_64", "ARM64", "osx-arm64") +Процедура ДляФайловВерсии2БезФлагаFDDИНомеромНаходитДистрибутив(Знач ОС, Знач Архитектура, Знач Дистр) Экспорт + УниверсальныйТестВерсии( - ПереченьФайловВерсии1(), - ИспользоватьFDD, - ИспользоватьХ64, - ЭтоВерсия2, - ТипПлатформы.Linux_x86_64, - "zip", - ТекстИсключения); + ПереченьФайловВерсии2(), + Истина, + СтрЗаканчиваетсяНа(ОС, "_x86_64"), + Истина, + ТипПлатформы[ОС], + Дистр, + Неопределено, + Архитектура + ); КонецПроцедуры +#КонецОбласти + // BSLLS:NumberOfParams-off Процедура УниверсальныйТестВерсии( ПереченьФайлов, From 82ba57d8d80aec2e156f092a5442a4a7863ac907 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Sun, 25 May 2025 19:22:19 +0300 Subject: [PATCH 04/24] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D1=8B=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=B6?= =?UTF-8?q?=D0=B5=D0=BB=D1=83=D0=B4=D0=B8=20=D0=B2=D1=80=D1=83=D1=87=D0=BD?= =?UTF-8?q?=D1=83=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cmd/ovm.os | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cmd/ovm.os b/src/cmd/ovm.os index 7e3b8ed..9bfad88 100644 --- a/src/cmd/ovm.os +++ b/src/cmd/ovm.os @@ -47,10 +47,13 @@ Поделка .ДобавитьАннотацию(Тип("АннотацияЛогOVM")) + .ДобавитьДуб(Тип("ПараметрыOVM")) .ДобавитьЖелудь(Тип("ФайлНастроек")) + .ДобавитьЖелудь(Тип("ФабрикаИнтернетСоединения")) + .ДобавитьЖелудь(Тип("ДетекторОкружения")) + .ДобавитьЖелудь(Тип("ПровайдерДистрибутивовВерсии")) .ДобавитьЖелудь(Тип("УстановщикOneScript")) .ДобавитьЖелудь(Тип("РаскладкаЛогOVM")) - .ДобавитьЖелудь(Тип("ПараметрыOVM")) .ДобавитьЖелудь(Тип("ПараметрыПриложения")) .ДобавитьЖелудь(Тип("ДеинсталляторOneScript")) .ДобавитьЖелудь(Тип("ВерсииOneScript")) From 1c03d9dd4a73c2cc57313d12396d3b7af71771f1 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Sun, 25 May 2025 19:27:00 +0300 Subject: [PATCH 05/24] =?UTF-8?q?=D0=92=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20mo?= =?UTF-8?q?skito?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packagedef b/packagedef index 145f25d..f70f7b1 100644 --- a/packagedef +++ b/packagedef @@ -16,6 +16,6 @@ .ЗависитОт("collectionos", "0.3.0") .ЗависитОт("cpuinfo", "1.1.0") .РазработкаЗависитОт("1bdd", "1.13.0") - .РазработкаЗависитОт("moskito") + .РазработкаЗависитОт("moskito", "0.4.1") .ИсполняемыйФайл("src/cmd/ovm.os", "ovm") ; From 5f0bbce55597445869be13ec5e5b3d93456b3117 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Sun, 25 May 2025 19:30:04 +0300 Subject: [PATCH 06/24] =?UTF-8?q?=D0=98=D0=BD=D0=B8=D1=86=D0=B8=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=A1=D0=B8=D1=81?= =?UTF-8?q?=D0=98=D0=BD=D1=84=D0=BE=20=D0=B2=20=D0=9F=D0=B0=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D1=80=D1=8BOVM=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=B0=20=D0=B2=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\200\320\260\320\274\320\265\321\202\321\200\321\213OVM.os" | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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" index 6b2edb6..fa5e47d 100644 --- "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" @@ -7,6 +7,7 @@ &Дуб Процедура ПриСозданииОбъекта() + СистемнаяИнформация = Новый СистемнаяИнформация; КонецПроцедуры // Путь к каталогу установки версий OneScript по умолчанию @@ -57,5 +58,3 @@ Функция Это64БитнаяОперационнаяСистема() Экспорт Возврат СистемнаяИнформация.Это64БитнаяОперационнаяСистема; КонецФункции - -СистемнаяИнформация = Новый СистемнаяИнформация; From 7df8922533030c3829bf429a399453c6636eec25 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Sun, 25 May 2025 19:31:43 +0300 Subject: [PATCH 07/24] =?UTF-8?q?=D0=A4=D0=B8=D0=BD=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4?= =?UTF-8?q?=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os" | 2 +- tests/distrSelectorTests.os | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\230\320\275\321\202\320\265\321\200\320\275\320\265\321\202\320\241\320\276\320\265\320\264\320\270\320\275\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\244\320\260\320\261\321\200\320\270\320\272\320\260\320\230\320\275\321\202\320\265\321\200\320\275\320\265\321\202\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os" index 0d76d57..6733265 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\230\320\275\321\202\320\265\321\200\320\275\320\265\321\202\320\241\320\276\320\265\320\264\320\270\320\275\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\244\320\260\320\261\321\200\320\270\320\272\320\260\320\230\320\275\321\202\320\265\321\200\320\275\320\265\321\202\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os" @@ -72,4 +72,4 @@ ); Возврат Соединение; -КонецФункции \ No newline at end of file +КонецФункции diff --git a/tests/distrSelectorTests.os b/tests/distrSelectorTests.os index 85d6fde..9f13a45 100644 --- a/tests/distrSelectorTests.os +++ b/tests/distrSelectorTests.os @@ -304,4 +304,4 @@ /////////////////////////// Арх32 = "x86"; -Арх64 = "x64"; \ No newline at end of file +Арх64 = "x64"; From a88aa7c7861c5734979e866f0b1f3e58438de642 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Mon, 26 May 2025 10:33:31 +1000 Subject: [PATCH 08/24] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=85=D0=BE?= =?UTF-8?q?=D0=B4=20=D0=BD=D0=B0=20autumn-library/workflows=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=82=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B8=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Удалёно использование неактуальной библиотеки json - Обновлены зависимости в packagedef: - 1commands до версии 1.5.0 - fs до версии 1.2.0 - tempfiles до версии 1.1.1 - strings до версии 0.5.0 - autumn до версии 4.3.9 - autumn-logos до версии 1.2.0 - autumn-cli до версии 1.1.0 - collectionos до версии 0.8.1 - cpuinfo до версии 1.2.0 - annotations до версии 1.3.0 - 1bdd до версии 1.15.1 - moskito до версии 0.4.1 - Добавлен workflow тестирования через autumn-library/workflows/.github/workflows/test.yml - В tasks/coverage.os удалена зависимость от json, чтение JSON осуществляется через встроенный механизм. - В src/cmd/ovm.os удален код, связанный с добавлением желудей (bean definitions) и заготовками (template definitions) в поделку (Craft). - В features/integration.feature удалены проверки на установку opm ввиду того что оно падает под win. - Добавлен файл tests/oscript.cfg для указания пути к oscript_modules для тестирования --- .github/workflows/testing.yml | 23 +++++++++++++++++++++++ features/integration.feature | 2 -- packagedef | 22 +++++++++++----------- src/cmd/ovm.os | 31 ------------------------------- tasks/coverage.os | 12 ++++-------- tests/oscript.cfg | 1 + 6 files changed, 39 insertions(+), 52 deletions(-) create mode 100644 .github/workflows/testing.yml create mode 100644 tests/oscript.cfg diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml new file mode 100644 index 0000000..ae3082c --- /dev/null +++ b/.github/workflows/testing.yml @@ -0,0 +1,23 @@ +name: Тестирование + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + test: + strategy: + fail-fast: false + matrix: + include: + - oscript_version: 'default' + test_engiene: '1testrunner' + - oscript_version: 'stable' + test_engiene: '1testrunner' + - oscript_version: 'dev' + test_engiene: 'oneunit' + uses: autumn-library/workflows/.github/workflows/test.yml@oneunit + with: + oscript_version: ${{ matrix.oscript_version }} + test_engine: ${{ matrix.test_engiene }} diff --git a/features/integration.feature b/features/integration.feature index 1f93ada..98540a4 100644 --- a/features/integration.feature +++ b/features/integration.feature @@ -49,8 +49,6 @@ Тогда я вижу в консоли строку подобно "current -> .*" И Я выполняю команду "which oscript" И я вижу в консоли строку подобно ".*oscript$" - И Я выполняю команду "which opm" - И я вижу в консоли строку подобно ".*opm$" Сценарий: Проверка установки x64 и опции --x86 Когда Я выполняю команду "ovm install stable" diff --git a/packagedef b/packagedef index f70f7b1..65c1083 100644 --- a/packagedef +++ b/packagedef @@ -4,18 +4,18 @@ .АдресАвтора("nixel2007@gmail.com") .Описание("OneScript Version Manager") .ВерсияСреды("1.9.2") - .ЗависитОт("json") - .ЗависитОт("1commands", "1.3.2") + .ЗависитОт("1commands", "1.5.0") .ЗависитОт("fluent", "0.6.1") - .ЗависитОт("fs") - .ЗависитОт("tempfiles") - .ЗависитОт("strings") - .ЗависитОт("autumn", "3.2.0") - .ЗависитОт("autumn-logos", "1.1.1") - .ЗависитОт("autumn-cli", "1.0.5") - .ЗависитОт("collectionos", "0.3.0") - .ЗависитОт("cpuinfo", "1.1.0") - .РазработкаЗависитОт("1bdd", "1.13.0") + .ЗависитОт("fs", "1.2.0") + .ЗависитОт("tempfiles", "1.1.1") + .ЗависитОт("strings", "0.5.0") + .ЗависитОт("autumn", "4.3.9") + .ЗависитОт("autumn-logos", "1.2.0") + .ЗависитОт("autumn-cli", "1.1.0") + .ЗависитОт("collectionos", "0.8.1") + .ЗависитОт("cpuinfo", "1.2.0") + .ЗависитОт("annotations", "1.3.0") + .РазработкаЗависитОт("1bdd", "1.15.1") .РазработкаЗависитОт("moskito", "0.4.1") .ИсполняемыйФайл("src/cmd/ovm.os", "ovm") ; diff --git a/src/cmd/ovm.os b/src/cmd/ovm.os index 9bfad88..6c10faf 100644 --- a/src/cmd/ovm.os +++ b/src/cmd/ovm.os @@ -36,35 +36,4 @@ СоветДругогоМастера.ЗначенияДеталек(НастройкиЛогоса()); Поделка = Новый Поделка(СоветДругогоМастера); - -УпакованВИсполняемыйФайл = СтрНайти(ТекущийСценарий().Источник, "oscript://") <> 0; - -Если УпакованВИсполняемыйФайл Тогда - Поделка - .ДобавитьЗаготовку(Тип("ИнициализацияИнтефейсаКоманднойСтроки")) - .ДобавитьЗаготовку(Тип("ИнициализацияФабрикиЛогов")); -КонецЕсли; - -Поделка - .ДобавитьАннотацию(Тип("АннотацияЛогOVM")) - .ДобавитьДуб(Тип("ПараметрыOVM")) - .ДобавитьЖелудь(Тип("ФайлНастроек")) - .ДобавитьЖелудь(Тип("ФабрикаИнтернетСоединения")) - .ДобавитьЖелудь(Тип("ДетекторОкружения")) - .ДобавитьЖелудь(Тип("ПровайдерДистрибутивовВерсии")) - .ДобавитьЖелудь(Тип("УстановщикOneScript")) - .ДобавитьЖелудь(Тип("РаскладкаЛогOVM")) - .ДобавитьЖелудь(Тип("ПараметрыПриложения")) - .ДобавитьЖелудь(Тип("ДеинсталляторOneScript")) - .ДобавитьЖелудь(Тип("ВерсииOneScript")) - .ДобавитьЖелудь(Тип("АппендерЛогOVM")) - .ДобавитьЖелудь(Тип("АктиваторOneScript")) - .ДобавитьЖелудь(Тип("КомандаConfig")) - .ДобавитьЖелудь(Тип("КомандаInstall")) - .ДобавитьЖелудь(Тип("КомандаList")) - .ДобавитьЖелудь(Тип("КомандаRun")) - .ДобавитьЖелудь(Тип("КомандаUninstall")) - .ДобавитьЖелудь(Тип("КомандаUse")) - .ДобавитьЖелудь(Тип("КомандаWhich")); - Поделка.ЗапуститьПриложение(); diff --git a/tasks/coverage.os b/tasks/coverage.os index 66f574e..539b6c6 100644 --- a/tasks/coverage.os +++ b/tasks/coverage.os @@ -1,7 +1,6 @@ #Использовать 1commands #Использовать asserts #Использовать fs -#Использовать json СистемнаяИнформация = Новый СистемнаяИнформация; ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; @@ -23,13 +22,10 @@ Файл_Стат = Новый Файл(ПутьКСтат); Ожидаем.Что(Файл_Стат.Существует(), СтрШаблон("Файл <%1> с результатами покрытия не существует!", Файл_Стат.ПолноеИмя)).ЭтоИстина(); -ЧтениеТекста = Новый ЧтениеТекста(ПутьКСтат, КодировкаТекста.UTF8); - -СтрокаJSON = ЧтениеТекста.Прочитать(); -ЧтениеТекста.Закрыть(); - -Парсер = Новый ПарсерJSON(); -ДанныеПокрытия = Парсер.ПрочитатьJSON(СтрокаJSON); +ЧтениеJSON = Новый ЧтениеJSON(); +ЧтениеJSON.ОткрытьФайл(ПутьКСтат); +ДанныеПокрытия = ПрочитатьJSON(ЧтениеJSON, Истина); +ЧтениеJSON.Закрыть(); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл("coverage/genericCoverage.xml"); diff --git a/tests/oscript.cfg b/tests/oscript.cfg new file mode 100644 index 0000000..874f3d2 --- /dev/null +++ b/tests/oscript.cfg @@ -0,0 +1 @@ +lib.system=../oscript_modules From 15fd2a2cb73365f18fe739761743d041a33515e3 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Mon, 26 May 2025 18:49:11 +1000 Subject: [PATCH 09/24] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BF=D1=80=D0=BE=D0=B3=D0=BE=D0=BD=201bdd=20?= =?UTF-8?q?=D0=BD=D0=B0=20dev?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/testing.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index ae3082c..2a7b85f 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -10,13 +10,11 @@ jobs: strategy: fail-fast: false matrix: + oscript_version: ['default', 'stable', 'dev'] include: - - oscript_version: 'default' - test_engiene: '1testrunner' - - oscript_version: 'stable' - test_engiene: '1testrunner' - oscript_version: 'dev' test_engiene: 'oneunit' + uses: autumn-library/workflows/.github/workflows/test.yml@oneunit with: oscript_version: ${{ matrix.oscript_version }} From 1f2949b37fa74610d23f3f2ff8f050e385bf13ac Mon Sep 17 00:00:00 2001 From: sfaqer Date: Mon, 26 May 2025 18:51:32 +1000 Subject: [PATCH 10/24] =?UTF-8?q?=D0=95=D1=89=D1=91=20=D0=BE=D0=B4=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=BE=D0=BF=D1=8B=D1=82=D0=BA=D0=B0=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D1=82=D0=B8=D1=82=D1=8C=201bdd=20?= =?UTF-8?q?=D0=BD=D0=B0=20dev?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/testing.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 2a7b85f..ecbba6f 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -10,8 +10,10 @@ jobs: strategy: fail-fast: false matrix: - oscript_version: ['default', 'stable', 'dev'] + oscript_version: ['default', 'stable'] include: + - oscript_version: 'dev' + test_engiene: '1testrunner' - oscript_version: 'dev' test_engiene: 'oneunit' From e249ab89b0028ebf9dc25331e10821f2ba96c138 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Mon, 26 May 2025 18:56:43 +1000 Subject: [PATCH 11/24] =?UTF-8?q?=D0=98=20=D0=B5=D1=89=D1=91=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B7=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/testing.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index ecbba6f..4255440 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -10,10 +10,9 @@ jobs: strategy: fail-fast: false matrix: - oscript_version: ['default', 'stable'] + oscript_version: ['default', 'stable', 'dev'] + test_engiene: ['1testrunner'] include: - - oscript_version: 'dev' - test_engiene: '1testrunner' - oscript_version: 'dev' test_engiene: 'oneunit' From aa7b66a2d18386d7ad525891bcf50c350d24ff35 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Mon, 26 May 2025 19:14:49 +1000 Subject: [PATCH 12/24] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/testing.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 4255440..8e49149 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -11,12 +11,12 @@ jobs: fail-fast: false matrix: oscript_version: ['default', 'stable', 'dev'] - test_engiene: ['1testrunner'] + test_engine: ['1testrunner'] include: - oscript_version: 'dev' - test_engiene: 'oneunit' + test_engine: 'oneunit' uses: autumn-library/workflows/.github/workflows/test.yml@oneunit with: oscript_version: ${{ matrix.oscript_version }} - test_engine: ${{ matrix.test_engiene }} + test_engine: ${{ matrix.test_engine }} From 778e9f709c68ffa640ac89a7f9660d7939f9ca52 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Mon, 26 May 2025 20:49:48 +1000 Subject: [PATCH 13/24] =?UTF-8?q?=D0=92=D0=B5=D1=80=D0=BD=D1=83=D0=BB=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D1=87=D0=B8=D1=8F=20opm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/integration.feature | 2 ++ 1 file changed, 2 insertions(+) diff --git a/features/integration.feature b/features/integration.feature index 98540a4..1f93ada 100644 --- a/features/integration.feature +++ b/features/integration.feature @@ -49,6 +49,8 @@ Тогда я вижу в консоли строку подобно "current -> .*" И Я выполняю команду "which oscript" И я вижу в консоли строку подобно ".*oscript$" + И Я выполняю команду "which opm" + И я вижу в консоли строку подобно ".*opm$" Сценарий: Проверка установки x64 и опции --x86 Когда Я выполняю команду "ovm install stable" From 56da8120d2fab2f2c36b172bd9b907f806e438ab Mon Sep 17 00:00:00 2001 From: sfaqer Date: Mon, 26 May 2025 21:07:04 +1000 Subject: [PATCH 14/24] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83?= =?UTF-8?q?=20=D0=BD=D0=B0=D0=BB=D0=B8=D1=87=D0=B8=D1=8F=20oscript=20?= =?UTF-8?q?=D0=B8=20opm=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=B4=D0=BB=D1=8F=20Lin=20=D0=B8=20Win?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/integration.feature | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/features/integration.feature b/features/integration.feature index 1f93ada..d75912b 100644 --- a/features/integration.feature +++ b/features/integration.feature @@ -43,7 +43,8 @@ И я не вижу в консоли вывод "Версия не удалена, т.к. является текущей." И я вижу в консоли вывод "Версия latest удалена" -Сценарий: Проверка использования версии +Сценарий: Проверка использования версии Linux + Допустим Я пропускаю этот сценарий в Windows Когда Я выполняю команду "ovm ls" И Я Показываю вывод команды Тогда я вижу в консоли строку подобно "current -> .*" @@ -52,6 +53,16 @@ И Я выполняю команду "which opm" И я вижу в консоли строку подобно ".*opm$" +Сценарий: Проверка использования версии Windows + Допустим Я пропускаю этот сценарий в Linux + Когда Я выполняю команду "ovm ls" + И Я Показываю вывод команды + Тогда я вижу в консоли строку подобно "current -> .*" + И Я выполняю команду "where oscript" + И я вижу в консоли строку подобно ".*oscript.exe$" + И Я выполняю команду "where opm" + И я вижу в консоли строку подобно ".*opm.bat$" + Сценарий: Проверка установки x64 и опции --x86 Когда Я выполняю команду "ovm install stable" Тогда я вижу в консоли вывод "Скачиваю установщик версии stable-x64..." From 98fa410a41f0a0fc07f9a7804a06d5ca869898d3 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Mon, 26 May 2025 21:10:58 +1000 Subject: [PATCH 15/24] =?UTF-8?q?=D0=92=D0=BE=D1=81=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=20=D1=83=D1=82=D0=B5=D1=80?= =?UTF-8?q?=D1=8F=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=B8=D0=BC=D0=BF=D0=BE=D1=80?= =?UTF-8?q?=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" index 0cff434..83ff71e 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" @@ -1,3 +1,5 @@ +#Использовать cpuinfo + Перем ДетекторОкружения; Перем ИспользоватьFDD; From f3abe36cbd5bd0cc0a1c0144d745c37e7a6ca708 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Tue, 27 May 2025 16:23:53 +0300 Subject: [PATCH 16/24] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D1=83=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B0=D1=80=D1=85=D0=B8=D1=82=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D1=83=D1=80=D1=8B=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=BE=D1=80=D0=B0=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20?= =?UTF-8?q?=D1=82=D0=B0=D0=B1=D0=B0=D0=BA=D0=B5=D1=80=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\266\320\265\320\275\320\270\321\217.os" | 19 ++++++------------- ...21\201\320\276\321\200\320\276\320\274.os" | 11 +++++++++++ tests/distrSelectorTests.os | 7 ++----- 3 files changed, 19 insertions(+), 18 deletions(-) create mode 100644 "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\321\203\320\261\320\241\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\276\320\274.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\202\320\265\320\272\321\202\320\276\321\200\320\236\320\272\321\200\321\203\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\224\320\265\321\202\320\265\320\272\321\202\320\276\321\200\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" index 2694e43..c5e963a 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\202\320\265\320\272\321\202\320\276\321\200\320\236\320\272\321\200\321\203\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\224\320\265\321\202\320\265\320\272\321\202\320\276\321\200\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" @@ -1,27 +1,20 @@ #Использовать cpuinfo Перем СистемнаяИнформация; -Перем ИнформацияОПроцессоре; + +&Табакерка +&Пластилин("Процессор") +Перем ПровайдерИнформацииОПроцессоре; &Желудь Процедура ПриСозданииОбъекта() - // получение cpuinfo тяжелая операция с запуском процессов - // поэтому инициализация ленивая и в конструкторе желудя не выполняется. + СистемнаяИнформация = Новый СистемнаяИнформация(); КонецПроцедуры Функция ТипПлатформы() Экспорт - Инициализировать(); Возврат СистемнаяИнформация.ТипПлатформы; КонецФункции Функция АрхитектураПроцессора() Экспорт - Инициализировать(); - Возврат ИнформацияОПроцессоре.Архитектура; + Возврат ПровайдерИнформацииОПроцессоре.Достать().Архитектура; КонецФункции - -Процедура Инициализировать() - Если СистемнаяИнформация = Неопределено Тогда - СистемнаяИнформация = Новый СистемнаяИнформация; - ИнформацияОПроцессоре = Новый ИнформацияОПроцессоре; - КонецЕсли; -КонецПроцедуры \ No newline at end of file diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\321\203\320\261\320\241\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\276\320\274.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\321\203\320\261\320\241\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\276\320\274.os" new file mode 100644 index 0000000..3e7869a --- /dev/null +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\321\203\320\261\320\241\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\276\320\274.os" @@ -0,0 +1,11 @@ +#Использовать cpuinfo + +&Дуб +Процедура ПриСозданииОбъекта() + // Дуб выращивает процессоры для помещения в табакерку желудя ДетекторОкружения. И нет, я не сошел с ума. +КонецПроцедуры + +&Завязь(Тип = "ИнформацияОПроцессоре") +Функция Процессор() Экспорт + Возврат Новый ИнформацияОПроцессоре(); +КонецФункции \ No newline at end of file diff --git a/tests/distrSelectorTests.os b/tests/distrSelectorTests.os index 9f13a45..00b285f 100644 --- a/tests/distrSelectorTests.os +++ b/tests/distrSelectorTests.os @@ -280,15 +280,12 @@ КонецФункции -Процедура ЗаписьДистрибутива(Знач Таблица, Знач Вид, Знач Архитектура, Знач Ссылка = Неопределено, Знач ИмяФайла = Неопределено) +Процедура ЗаписьДистрибутива(Знач Таблица, Знач Вид, Знач Архитектура) Стр = Таблица.Добавить(); Стр.Вид = Вид; Стр.Архитектура = Архитектура; - Если Стр.Ссылка = Неопределено Тогда - Стр.Ссылка = Вид + "/" + Архитектура; - КонецЕсли; - Стр.ИмяФайла = ИмяФайла; + Стр.Ссылка = Вид + "/" + Архитектура; КонецПроцедуры From 4313d78dc816ce3b8586b85ffff71c0b3213a7de Mon Sep 17 00:00:00 2001 From: sfaqer Date: Fri, 30 May 2025 15:54:08 +1000 Subject: [PATCH 17/24] =?UTF-8?q?=D0=92=20=D1=84=D0=B8=D1=87=D0=B0=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=D1=85=20=D1=82=D0=B5=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D1=8C=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D1=82=D0=B5=D0=BA=D1=83=D1=89=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20=D0=B0=20=D0=BD=D0=B5?= =?UTF-8?q?=20ovm=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=B2=20=D1=81=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D0=BC=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/install-with-alias.feature | 6 +++--- features/install-with-clean.feature | 8 ++++---- features/integration.feature | 24 ++++++++++++------------ features/list.feature | 2 +- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/features/install-with-alias.feature b/features/install-with-alias.feature index 60a8f8a..ecd3c42 100644 --- a/features/install-with-alias.feature +++ b/features/install-with-alias.feature @@ -11,14 +11,14 @@ Сценарий: Установка версии с алиасом Допустим Я удаляю каталог "./temp/ovm" - Когда Я выполняю команду "ovm install --name test_stable stable" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os install --name test_stable stable" И я вижу в консоли вывод "Установка OneScript stable завершена" И я вижу в консоли вывод "ovm use test_stable" - Когда Я выполняю команду "ovm ls" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os ls" Тогда я вижу в консоли строку подобно "^test_stable -> .*" И я не вижу в консоли строку подобно "^stable -> .*" Сценарий: Использование версии - Когда Я выполняю команду "ovm use test_stable" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os use test_stable" Тогда я вижу в консоли вывод "OneScript test_stable активирован" diff --git a/features/install-with-clean.feature b/features/install-with-clean.feature index 09ca0a1..88626c4 100644 --- a/features/install-with-clean.feature +++ b/features/install-with-clean.feature @@ -12,14 +12,14 @@ Сценарий: Установка движка с сохранением библиотек Допустим Я удаляю каталог "./temp/ovm" - И Я выполняю команду "ovm install stable" + И Я выполняю команду "oscript ./src/cmd/ovm.os install stable" И Я создаю каталог "my_lib" в подкаталоге "temp/ovm/stable/lib" рабочего каталога - Когда Я выполняю команду "ovm install stable" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os install stable" Тогда В подкаталоге "temp/ovm/stable/lib" рабочего каталога существует каталог "my_lib" Сценарий: Установка движка с удалением библиотек Допустим Я удаляю каталог "./temp/ovm" - И Я выполняю команду "ovm install stable" + И Я выполняю команду "oscript ./src/cmd/ovm.os install stable" И Я создаю каталог "my_lib" в подкаталоге "temp/ovm/stable/lib" рабочего каталога - Когда Я выполняю команду "ovm install --clean stable" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os install --clean stable" Тогда Каталог "./temp/ovm/stable/lib/my_lib" не существует diff --git a/features/integration.feature b/features/integration.feature index d75912b..8f6c5a4 100644 --- a/features/integration.feature +++ b/features/integration.feature @@ -10,42 +10,42 @@ Допустим Я устанавливаю переменной среды "OVM_INSTALL_PATH" значение "./temp/ovm" Сценарий: Вывод справки - Когда Я выполняю команду "ovm" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os" Тогда я вижу в консоли вывод "OneScript Version Manager" И я вижу в консоли вывод "Строка запуска: ovm [ОПЦИИ] КОМАНДА [аргументы...]" Сценарий: Вывод версии - Когда Я выполняю команду "ovm -v" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os -v" Тогда я вижу в консоли строку подобно "\d+\.\d+\.\d+" Сценарий: Установка версии - Когда Я выполняю команду "ovm install stable" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os install stable" Тогда я вижу в консоли вывод "Установка OneScript stable..." И я вижу в консоли вывод "Установка OneScript stable завершена" И я вижу в консоли вывод "ovm use stable" - Когда Я выполняю команду "ovm ls" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os ls" Тогда я вижу в консоли строку подобно "stable -> .*" Сценарий: Использование версии - Допустим Я выполняю команду "ovm install stable" - И Я выполняю команду "ovm use stable" + Допустим Я выполняю команду "oscript ./src/cmd/ovm.os install stable" + И Я выполняю команду "oscript ./src/cmd/ovm.os use stable" Тогда я вижу в консоли вывод "OneScript stable активирован" Сценарий: Удаление версии тождественной текущей - Когда Я выполняю команду "ovm install --name latest stable" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os install --name latest stable" Тогда я вижу в консоли вывод "Установка OneScript stable..." И я вижу в консоли вывод "Установка OneScript stable завершена" И я вижу в консоли вывод "ovm use latest" - Когда Я выполняю команду "ovm delete latest" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os delete latest" Тогда Я Показываю вывод команды И я не вижу в консоли вывод "Версия не удалена, т.к. является текущей." И я вижу в консоли вывод "Версия latest удалена" Сценарий: Проверка использования версии Linux Допустим Я пропускаю этот сценарий в Windows - Когда Я выполняю команду "ovm ls" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os ls" И Я Показываю вывод команды Тогда я вижу в консоли строку подобно "current -> .*" И Я выполняю команду "which oscript" @@ -55,7 +55,7 @@ Сценарий: Проверка использования версии Windows Допустим Я пропускаю этот сценарий в Linux - Когда Я выполняю команду "ovm ls" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os ls" И Я Показываю вывод команды Тогда я вижу в консоли строку подобно "current -> .*" И Я выполняю команду "where oscript" @@ -64,10 +64,10 @@ И я вижу в консоли строку подобно ".*opm.bat$" Сценарий: Проверка установки x64 и опции --x86 - Когда Я выполняю команду "ovm install stable" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os install stable" Тогда я вижу в консоли вывод "Скачиваю установщик версии stable-x64..." И я вижу в консоли вывод "Установка OneScript stable завершена" - Когда Я выполняю команду "ovm install --x86 stable" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os install --x86 stable" Тогда я вижу в консоли вывод "Скачиваю установщик версии stable..." И я вижу в консоли вывод "Установка OneScript stable завершена" diff --git a/features/list.feature b/features/list.feature index d962c20..735870f 100644 --- a/features/list.feature +++ b/features/list.feature @@ -10,7 +10,7 @@ Допустим Я устанавливаю переменной среды "OVM_INSTALL_PATH" значение "./temp/ovm" Сценарий: Использование версии - Когда Я выполняю команду "ovm ls -r" + Когда Я выполняю команду "oscript ./src/cmd/ovm.os ls -r" Тогда я вижу в консоли строку подобно "^\d+\.\d+\.\d+\s\(http.*\)" И я вижу в консоли строку подобно "^dev\s\(http.*\)" И я вижу в консоли строку подобно "^stable\s\(http.*\)" From a33fa539189c1f2de981ce9fde8ab7d058a9b584 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Mon, 2 Jun 2025 17:30:36 +0300 Subject: [PATCH 18/24] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BB=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...270\320\261\321\203\321\202\320\270\320\262\320\260.os" | 7 ++++++- ...75\320\276\320\262\321\211\320\270\320\272OneScript.os" | 7 ++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" index 83ff71e..f5794e7 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" @@ -6,8 +6,13 @@ Перем ИспользоватьХ64; Перем ЭтоДистрибутивНеткор; -Процедура ПриСозданииОбъекта(Знач Детектор) +&Желудь +&Характер("Компанейский") +Процедура ПриСозданииОбъекта(&Пластилин("ДетекторОкружения") Знач Детектор) ДетекторОкружения = Детектор; + ИспользоватьFDD = Ложь; + ИспользоватьХ64 = Ложь; + ЭтоДистрибутивНеткор = Ложь; КонецПроцедуры Функция ИспользоватьFDD(Знач Использовать) Экспорт 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 80546ee..b1aadf3 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" @@ -17,8 +17,9 @@ &Пластилин Перем ФабрикаИнтернетСоединения; -&Пластилин -Перем ДетекторОкружения; +&Табакерка +&Пластилин("ОпределительДистрибутива") +Перем КоробочкаСОпределителями; &Желудь Процедура ПриСозданииОбъекта() @@ -266,7 +267,7 @@ Функция ПолучитьПутьКСкачиваниюФайла(Знач ВерсияКУстановке, Знач ИспользоватьХ64, Знач ИспользоватьFDD) - ОпределительДистрибутива = Новый ОпределительДистрибутива(ДетекторОкружения) + ОпределительДистрибутива = КоробочкаСОпределителями.Достать() .ИспользоватьХ64(ИспользоватьХ64) .ИспользоватьFDD(ИспользоватьFDD); From aa4ba950474bbf9a4e7482edae3a15fa20b2060a Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Mon, 2 Jun 2025 17:41:28 +0300 Subject: [PATCH 19/24] =?UTF-8?q?=D0=9D=D0=B5=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=B4=D0=B5=D1=84=D0=BE?= =?UTF-8?q?=D0=BB=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" index f5794e7..7d9657e 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" @@ -12,7 +12,7 @@ ДетекторОкружения = Детектор; ИспользоватьFDD = Ложь; ИспользоватьХ64 = Ложь; - ЭтоДистрибутивНеткор = Ложь; + ЭтоДистрибутивНеткор = Неопределено; КонецПроцедуры Функция ИспользоватьFDD(Знач Использовать) Экспорт @@ -68,6 +68,7 @@ КритерийПоиска.Архитектура = ПризнакАрхитектуры(ИспользоватьХ64); + Лог.Отладка("Ищу дистрибутив по критериям Вид=%1") НайденныеСтроки = ПереченьФайлов.НайтиСтроки(КритерийПоиска); Если НайденныеСтроки.Количество() <> 1 Тогда // Это может быть установка по алиасу и тогда есть шанс у дистрибутива zip для версии 1 From a977ffe53c9467304174227940788da64c8286a3 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Mon, 2 Jun 2025 18:16:50 +0300 Subject: [PATCH 20/24] =?UTF-8?q?=D0=A1=D1=82=D1=80=D0=BE=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=81=20=D0=BB=D0=BE=D0=B3=D0=BE=D0=BC=20=D0=BE=D1=88=D0=B8?= =?UTF-8?q?=D0=B1=D0=BE=D1=87=D0=BD=D0=BE=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B2=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" | 1 - 1 file changed, 1 deletion(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" index 7d9657e..1671b68 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" @@ -68,7 +68,6 @@ КритерийПоиска.Архитектура = ПризнакАрхитектуры(ИспользоватьХ64); - Лог.Отладка("Ищу дистрибутив по критериям Вид=%1") НайденныеСтроки = ПереченьФайлов.НайтиСтроки(КритерийПоиска); Если НайденныеСтроки.Количество() <> 1 Тогда // Это может быть установка по алиасу и тогда есть шанс у дистрибутива zip для версии 1 From 7ece32525ac0f093943e80e73c1973e8f10fad23 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Sun, 8 Jun 2025 11:13:31 +1000 Subject: [PATCH 21/24] =?UTF-8?q?1.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=BF=D0=B8=D1=81=D1=8C?= =?UTF-8?q?=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20one?= =?UTF-8?q?script=20=D0=BD=D0=B0=20MacOS=202.=20=D0=A0=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=20=D1=81=20=D0=BE=D0=BA=D1=80=D1=83=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=D0=BC=20=D0=B8=D0=BD=D0=BA=D0=B0=D0=BF=D1=81?= =?UTF-8?q?=D1=83=D0=BB=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=B2?= =?UTF-8?q?=D0=BD=D1=83=D1=82=D1=80=D0=B8=20=D0=94=D0=B5=D1=82=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=9E=D0=BA=D1=80=D1=83=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...320\260\320\275\320\264\320\260Install.os" | 10 ++-- ...274\320\260\320\275\320\264\320\260Run.os" | 12 ++--- ...0\260\321\202\320\276\321\200OneScript.os" | 37 +++++++------- ...1\200\321\201\320\270\320\270OneScript.os" | 15 +++--- ...20\266\320\265\320\275\320\270\321\217.os" | 50 +++++++++++++++++-- ...21\203\321\202\320\270\320\262\320\260.os" | 24 +++------ ...274\320\265\321\202\321\200\321\213OVM.os" | 19 ++----- ...0\262\321\211\320\270\320\272OneScript.os" | 36 ++++++++++--- tests/distrSelectorTests.os | 13 +++-- 9 files changed, 130 insertions(+), 86 deletions(-) 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 6ca9914..5cc1ce5 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" @@ -6,11 +6,11 @@ &Пластилин Перем УстановщикOneScript; -&Пластилин -Перем ПараметрыOVM; +Перем Окружение; &КомандаПриложения(Имя = "install i", Описание = "Установить OneScript указанных версий") -Процедура ПриСозданииОбъекта() +Процедура ПриСозданииОбъекта(&Пластилин ДетекторОкружения) + Окружение = ДетекторОкружения; КонецПроцедуры // Заполняет описание команды для библиотеки cli @@ -27,7 +27,7 @@ КомандаПриложения.Опция("clean c", Ложь, "Полностью очищать каталог установки (включая установленные библиотеки)") .ВОкружении("OVM_INSTALL_CLEAN"); - Если ПараметрыOVM.Это64БитнаяОперационнаяСистема() Тогда + Если Окружение.ЭтоX64() Тогда КомандаПриложения.Опция("x86", Ложь, "Устанавливать 32-разрядный дистрибутив OneScript") .ВОкружении("OVM_INSTALL_X86"); КонецЕсли; @@ -65,7 +65,7 @@ ВызватьИсключение "Опция <--name> может быть задана только при установке одной версии OneScript"; КонецЕсли; - Если ПараметрыOVM.Это64БитнаяОперационнаяСистема() Тогда + Если Окружение.ЭтоX64() Тогда ДополнительныеПараметры.ИспользоватьХ64 = НЕ КомандаПриложения.ЗначениеОпции("x86"); Иначе ДополнительныеПараметры.ИспользоватьХ64 = Ложь; 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 dee13d3..6c1322c 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" @@ -1,7 +1,5 @@ #Использовать "../../core" -Перем ЭтоWindows; - &Пластилин Перем ПараметрыOVM; @@ -25,8 +23,11 @@ &ВОкружении("OVM_RUN_ARGS") Перем Аргументы; +Перем Окружение; + &КомандаПриложения(Имя = "run r", Описание = "Запустить исполняемый файл в окружении указанной версии OneScript") -Процедура ПриСозданииОбъекта() +Процедура ПриСозданииОбъекта(&Пластилин ДетекторОкружения) + Окружение = ДетекторОкружения; КонецПроцедуры &ВыполнениеКоманды @@ -37,7 +38,7 @@ КаталогBin = ОбъединитьПути(КаталогУстановкиВерсии, "bin"); ПеременнаяPATH = ПолучитьПеременнуюСреды("PATH"); - Если ЭтоWindows Тогда + Если Окружение.ЭтоWindows() Тогда ПеременнаяPATH = КаталогBin + ";" + ПеременнаяPATH; Иначе ПеременнаяPATH = КаталогBin + ":" + ПеременнаяPATH; @@ -54,6 +55,3 @@ Команда.Исполнить(); КонецПроцедуры - -СистемнаяИнформация = Новый СистемнаяИнформация; -ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; 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 d663696..7450d94 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" @@ -1,9 +1,6 @@ #Использовать 1commands #Использовать fs -Перем СистемнаяИнформация; -Перем ЭтоWindows; - &ЛогOVM Перем Лог; @@ -16,8 +13,11 @@ &Пластилин Перем УстановщикOneScript; +Перем Окружение; + &Желудь -Процедура ПриСозданииОбъекта() +Процедура ПриСозданииОбъекта(&Пластилин ДетекторОкружения) + Окружение = ДетекторОкружения; КонецПроцедуры // Активирует указанную версию OneScript. @@ -63,7 +63,7 @@ Лог.Отладка("Удаляю старую символическую ссылку"); - Если ЭтоWindows Тогда + Если Окружение.ЭтоWindows() Тогда УдалитьФайлы(ПутьКСсылке); Иначе Команда = Новый Команда; @@ -78,7 +78,7 @@ Лог.Отладка("Выполняю создание символической ссылки"); - Если ЭтоWindows Тогда + Если Окружение.ЭтоWindows() Тогда Команда = Новый Команда; Команда.УстановитьКоманду("mklink"); Команда.ДобавитьПараметр("/J"); @@ -107,7 +107,7 @@ Лог.Отладка("Добавляю каталог %1 в PATH", ПутьККаталогуBin); - Если ЭтоWindows Тогда + Если Окружение.ЭтоWindows() Тогда ПеременнаяPATH = ПолучитьПеременнуюСредыИзРеестра("PATH", РасположениеПеременнойСреды.Пользователь); ИскомоеЗначение = "%OVM_OSCRIPTBIN%"; Иначе @@ -119,7 +119,7 @@ ИскомоеЗначение = ПутьККаталогуBin; КонецЕсли; - Если ЭтоWindows Тогда + Если Окружение.ЭтоWindows() Тогда СоздатьПереопределенияPATHДляКомандногоПроцессора_Windows(); КонецЕсли; @@ -128,7 +128,7 @@ Возврат; КонецЕсли; - Если ЭтоWindows Тогда + Если Окружение.ЭтоWindows() Тогда Лог.Отладка("Установка переменных среды на уровне пользователя"); ЗначениеПеременнойСреды = "%OVM_OSCRIPTBIN%;" + ПеременнаяPATH; УстановитьПеременнуюСредыВРеестре("PATH", "REG_EXPAND_SZ", ЗначениеПеременнойСреды, @@ -143,7 +143,7 @@ Процедура ДобавитьТекстВНовыйИлиИмеющийсяФайл(Знач ДобавляемыйТекст, Знач ПутьКФайлу) - Если ЭтоWindows Тогда + Если Окружение.ЭтоWindows() Тогда РазделительСтрок = Символы.ВК + Символы.ПС; Иначе РазделительСтрок = Символы.ПС; @@ -220,11 +220,11 @@ Лог.Отладка("Добавление ovm в автозапуск powershell"); ПутьКФайлу = ОбъединитьПути( - СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя), - "Documents", - "WindowsPowerShell", - "profile.ps1" - ); + Окружение.ПутьКПрофилюПользователя(), + "Documents", + "WindowsPowerShell", + "profile.ps1" + ); ТекстВычислениеPATH = "set PATH=$OVM_OSCRIPTBIN;$PATH"; ДобавитьТекстВНовыйИлиИмеющийсяФайл(ТекстВычислениеPATH, ПутьКФайлу); @@ -243,7 +243,7 @@ ИменаДляОбработки.Добавить(".zprofile"); ИменаДляОбработки.Добавить(".zshrc"); - КаталогПрофиля = СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя); + КаталогПрофиля = Окружение.ПутьКПрофилюПользователя(); Для Каждого ИмяФайла Из ИменаДляОбработки Цикл ПутьКФайлу = ОбъединитьПути(КаталогПрофиля, ИмяФайла); @@ -261,7 +261,7 @@ Если ВыполнятьУстановкуПриНеобходимости Тогда ДополнительныеПараметры = УстановщикOneScript.ДополнительныеПараметрыУстановки(); - ДополнительныеПараметры.ИспользоватьХ64 = СистемнаяИнформация.Это64БитнаяОперационнаяСистема; + ДополнительныеПараметры.ИспользоватьХ64 = Окружение.ЭтоX64(); УстановщикOneScript.УстановитьOneScript(ИспользуемаяВерсия, , ДополнительныеПараметры); Иначе @@ -427,6 +427,3 @@ Возврат Результат; КонецФункции - -СистемнаяИнформация = Новый СистемнаяИнформация; -ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; diff --git "a/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" "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" index 66eec04..0eb39d7 100644 --- "a/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" +++ "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" @@ -12,11 +12,12 @@ &Пластилин Перем ПровайдерДистрибутивовВерсии; -Перем ЭтоWindows; Перем ДопустимыеАлиасы; // Кеш коллекции допустимых алиасов +Перем Окружение; &Желудь -Процедура ПриСозданииОбъекта() +Процедура ПриСозданииОбъекта(&Пластилин ДетекторОкружения) + Окружение = ДетекторОкружения; КонецПроцедуры Функция ДопустимыеАлиасы() Экспорт @@ -117,9 +118,9 @@ ПутьКИсполняемомуФайлу = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript"); - Если ЭтоWindows И ФС.ФайлСуществует(ПутьКИсполняемомуФайлу + ".exe") Тогда + Если Окружение.ЭтоWindows() И ФС.ФайлСуществует(ПутьКИсполняемомуФайлу + ".exe") Тогда ПутьКИсполняемомуФайлу = ПутьКИсполняемомуФайлу + ".exe"; - ИначеЕсли ЭтоWindows Тогда + ИначеЕсли Окружение.ЭтоWindows() Тогда ПутьКИсполняемомуФайлу = ПутьКИсполняемомуФайлу + ".bat"; ИначеЕсли ФС.ФайлСуществует(ПутьКИсполняемомуФайлу + ".sh") И Не ФС.ФайлСуществует(ПутьКИсполняемомуФайлу) Тогда @@ -174,7 +175,7 @@ Команда = Новый Команда(); - Если ЭтоWindows Тогда + Если Окружение.ЭтоWindows() Тогда Команда.УстановитьКоманду("dir"); Иначе Команда.УстановитьКоманду("ls"); @@ -186,7 +187,7 @@ ВыводКоманды = Команда.ПолучитьВывод(); - Если ЭтоWindows Тогда + Если Окружение.ЭтоWindows() Тогда Выражение = "(|)\s*(.+?)\s*\[(.+)\]"; Иначе Выражение = "l.+?(\d\d:\d\d)\s*(.+?)\s*->\s*(.+)"; @@ -393,5 +394,3 @@ КонецФункции -СистемнаяИнформация = Новый СистемнаяИнформация; -ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\202\320\265\320\272\321\202\320\276\321\200\320\236\320\272\321\200\321\203\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\224\320\265\321\202\320\265\320\272\321\202\320\276\321\200\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" index c5e963a..ade90dc 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\202\320\265\320\272\321\202\320\276\321\200\320\236\320\272\321\200\321\203\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\224\320\265\321\202\320\265\320\272\321\202\320\276\321\200\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" @@ -1,6 +1,7 @@ #Использовать cpuinfo Перем СистемнаяИнформация; +Перем ТекущаяПлатформа; &Табакерка &Пластилин("Процессор") @@ -9,12 +10,53 @@ &Желудь Процедура ПриСозданииОбъекта() СистемнаяИнформация = Новый СистемнаяИнформация(); + ТекущаяПлатформа = СистемнаяИнформация.ТипПлатформы; КонецПроцедуры -Функция ТипПлатформы() Экспорт - Возврат СистемнаяИнформация.ТипПлатформы; +Функция ЭтоWindows() Экспорт + + Возврат ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 + Или ТекущаяПлатформа = ТипПлатформы.Windows_x86; + +КонецФункции + +Функция ЭтоLinux() Экспорт + + Возврат ТекущаяПлатформа = ТипПлатформы.Linux_x86_64 + Или ТекущаяПлатформа = ТипПлатформы.Linux_x86; + +КонецФункции + +Функция ЭтоMacOS() Экспорт + + Возврат ТекущаяПлатформа = ТипПлатформы.MacOS_x86_64 + Или ТекущаяПлатформа = ТипПлатформы.MacOS_x86; + +КонецФункции + +Функция ЭтоMacOSARM() Экспорт + + Если Не ЭтоMacOS() Тогда + Возврат Ложь; + КонецЕсли; + + АрхитектураПроцессора = ПровайдерИнформацииОПроцессоре + .Достать() + .Архитектура; + + Возврат АрхитектураПроцессора = АрхитектурыПроцессоров.ARM + Или АрхитектураПроцессора = АрхитектурыПроцессоров.ARM64; + +КонецФункции + +Функция ПутьКПрофилюПользователя() Экспорт + Возврат СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя); +КонецФункции + +Функция ПутьКЛокальнымДаннымПриложений() Экспорт + Возврат СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений); КонецФункции -Функция АрхитектураПроцессора() Экспорт - Возврат ПровайдерИнформацииОПроцессоре.Достать().Архитектура; +Функция ЭтоX64() Экспорт + Возврат СистемнаяИнформация.Это64БитнаяОперационнаяСистема; КонецФункции diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" index 1671b68..f35ba37 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\320\265\320\273\321\214\320\224\320\270\321\201\321\202\321\200\320\270\320\261\321\203\321\202\320\270\320\262\320\260.os" @@ -92,26 +92,14 @@ Функция ТипДистрибутиваТекущейПлатформы() - ТекущаяПлатформа = ДетекторОкружения.ТипПлатформы(); - - Если ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 - Или ТекущаяПлатформа = ТипПлатформы.Windows_x86 Тогда + Если ДетекторОкружения.ЭтоWindows() Тогда Возврат "scd-win"; - ИначеЕсли ТекущаяПлатформа = ТипПлатформы.Linux_x86_64 - Или ТекущаяПлатформа = ТипПлатформы.Linux_x86 Тогда + ИначеЕсли ДетекторОкружения.ЭтоLinux() Тогда Возврат "scd-lin"; - ИначеЕсли ТекущаяПлатформа = ТипПлатформы.MacOS_x86_64 - Или ТекущаяПлатформа = ТипПлатформы.MacOS_x86 Тогда - - АрхитектураПроцессора = ДетекторОкружения.АрхитектураПроцессора(); - - Если АрхитектураПроцессора = АрхитектурыПроцессоров.ARM - Или АрхитектураПроцессора = АрхитектурыПроцессоров.ARM64 Тогда - Возврат "osx-arm64"; - Иначе - Возврат "osx-x64"; - КонецЕсли; - + ИначеЕсли ДетекторОкружения.ЭтоMacOSARM() Тогда + Возврат "osx-arm64"; + ИначеЕсли ДетекторОкружения.ЭтоMacOS() Тогда + Возврат "osx-x64"; Иначе ВызватьИсключение "Не удалось определить текущую операционную систему"; КонецЕсли; 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" index fa5e47d..d36c596 100644 --- "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" @@ -1,13 +1,13 @@ #Использовать logos -Перем СистемнаяИнформация; - &Деталька(Значение = "oscript.server", ЗначениеПоУмолчанию = "https://oscript.io") Перем АдресСайтаОСкрипт; +Перем Окружение; + &Дуб -Процедура ПриСозданииОбъекта() - СистемнаяИнформация = Новый СистемнаяИнформация; +Процедура ПриСозданииОбъекта(&Пластилин ДетекторОкружения) + Окружение = ДетекторОкружения; КонецПроцедуры // Путь к каталогу установки версий OneScript по умолчанию @@ -21,7 +21,7 @@ КаталогУстановкиПоУмолчанию = ПолучитьПеременнуюСреды("OVM_INSTALL_PATH"); Если НЕ ЗначениеЗаполнено(КаталогУстановкиПоУмолчанию) Тогда КаталогУстановкиПоУмолчанию = ОбъединитьПути( - СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений), + Окружение.ПутьКЛокальнымДаннымПриложений(), "ovm" ); КонецЕсли; @@ -49,12 +49,3 @@ Функция ПолныйАдресККаталогуДистрибутивов() Экспорт Возврат АдресСайтаОСкрипт() + "/downloads"; КонецФункции - -// Разрядность текущей операционной системы -// -// Возвращаемое значение: -// Булево - это 64 битная операционна система -&Завязь(Тип = "Булево") -Функция Это64БитнаяОперационнаяСистема() Экспорт - Возврат СистемнаяИнформация.Это64БитнаяОперационнаяСистема; -КонецФункции 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 b1aadf3..6e76619 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" @@ -3,8 +3,6 @@ #Использовать tempfiles #Использовать strings -Перем ЭтоWindows; - &ЛогOVM Перем Лог; @@ -21,8 +19,11 @@ &Пластилин("ОпределительДистрибутива") Перем КоробочкаСОпределителями; +Перем Окружение; + &Желудь -Процедура ПриСозданииОбъекта() +Процедура ПриСозданииОбъекта(&Пластилин ДетекторОкружения) + Окружение = ДетекторОкружения; КонецПроцедуры // Конструктор дополнительных параметров установки OneScript @@ -97,6 +98,8 @@ УстановитьOneScriptИзZipАрхива(ФайлУстановщика, КаталогУстановкиВерсии); ДобавитьSHСкриптыПриНеобходимости(КаталогУстановкиВерсии); УстановитьРазрешениеДляSHСкриптовПриНеобходимости(КаталогУстановкиВерсии); + ПодписатьOneScriptДляMacOS(КаталогУстановкиВерсии); + Исключение УдалитьФайлы(КаталогУстановкиВерсии); ВызватьИсключение ОписаниеОшибки(); @@ -153,7 +156,7 @@ Процедура ДобавитьSHСкриптыПриНеобходимости(Знач КаталогУстановкиВерсии) - Если ЭтоWindows Тогда + Если Окружение.ЭтоWindows() Тогда Возврат; КонецЕсли; @@ -215,7 +218,7 @@ Процедура УстановитьРазрешениеДляSHСкриптовПриНеобходимости(КаталогУстановкиВерсии) - Если ЭтоWindows Тогда + Если Окружение.ЭтоWindows() Тогда Возврат; КонецЕсли; @@ -299,5 +302,24 @@ КонецФункции -СистемнаяИнформация = Новый СистемнаяИнформация; -ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; +Процедура ПодписатьOneScriptДляMacOS(КаталогУстановкиВерсии) + + Если Не Окружение.ЭтоMacOS() Тогда + Возврат; + КонецЕсли; + + Команда = Новый Команда; + + Команда.УстановитьКоманду("codesign"); + Команда.ДобавитьПараметр("-f"); + Команда.ДобавитьПараметр("-s"); + Команда.ДобавитьПараметр("-"); + Команда.ДобавитьПараметр(ВерсииOneScript.ПутьКИсполняемомуФайлу(КаталогУстановкиВерсии)); + + Команда.УстановитьПравильныйКодВозврата(0); + + Команда.Исполнить(); + + Лог.Отладка(Команда.ПолучитьВывод()); + +КонецПроцедуры diff --git a/tests/distrSelectorTests.os b/tests/distrSelectorTests.os index 00b285f..d2a629f 100644 --- a/tests/distrSelectorTests.os +++ b/tests/distrSelectorTests.os @@ -273,9 +273,16 @@ КонецЕсли; МокСИ = Мок.Получить(Новый ДетекторОкружения); - МокСИ.Когда().ТипПлатформы().ТогдаВозвращает(ВидПлатформы); - МокСИ.Когда().АрхитектураПроцессора().ТогдаВозвращает(Архитектура); - + + МокСИ.Когда().ЭтоWindows().ТогдаВозвращает(СтрНачинаетсяС(ВидПлатформы, "Windows")); + МокСИ.Когда().ЭтоLinux().ТогдаВозвращает(СтрНачинаетсяС(ВидПлатформы, "Linux")); + МокСИ.Когда().ЭтоMacOS().ТогдаВозвращает(СтрНачинаетсяС(ВидПлатформы, "MacOS")); + + МокСИ.Когда().ЭтоMacOSARM().ТогдаВозвращает( + СтрНачинаетсяС(ВидПлатформы, "MacOS") + И Архитектура = АрхитектурыПроцессоров.ARM64 Или Архитектура = АрхитектурыПроцессоров.ARM + ); + Возврат МокСИ; КонецФункции From ab2977c49bc5f979ae91b0f4eb5a34498aefca32 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Sun, 8 Jun 2025 14:02:02 +1000 Subject: [PATCH 22/24] =?UTF-8?q?=D0=92=D0=BD=D0=B5=D0=B4=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=81=D1=82?= =?UTF-8?q?=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80=20=D0=B7=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=BE=20=D0=BD=D0=B0=20=D0=B2=D0=BD=D0=B5?= =?UTF-8?q?=D0=B4=D1=80=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\276\320\274\320\260\320\275\320\264\320\260Install.os" | 4 ++-- ...32\320\276\320\274\320\260\320\275\320\264\320\260Run.os" | 4 ++-- ...\270\320\262\320\260\321\202\320\276\321\200OneScript.os" | 4 ++-- ...\222\320\265\321\200\321\201\320\270\320\270OneScript.os" | 5 +++-- ...00\320\260\320\274\320\265\321\202\321\200\321\213OVM.os" | 4 ++-- ...\275\320\276\320\262\321\211\320\270\320\272OneScript.os" | 4 ++-- 6 files changed, 13 insertions(+), 12 deletions(-) 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 5cc1ce5..e72bf04 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" @@ -6,11 +6,11 @@ &Пластилин Перем УстановщикOneScript; +&Пластилин("ДетекторОкружения") Перем Окружение; &КомандаПриложения(Имя = "install i", Описание = "Установить OneScript указанных версий") -Процедура ПриСозданииОбъекта(&Пластилин ДетекторОкружения) - Окружение = ДетекторОкружения; +Процедура ПриСозданииОбъекта() КонецПроцедуры // Заполняет описание команды для библиотеки cli 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 6c1322c..39fba85 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" @@ -23,11 +23,11 @@ &ВОкружении("OVM_RUN_ARGS") Перем Аргументы; +&Пластилин("ДетекторОкружения") Перем Окружение; &КомандаПриложения(Имя = "run r", Описание = "Запустить исполняемый файл в окружении указанной версии OneScript") -Процедура ПриСозданииОбъекта(&Пластилин ДетекторОкружения) - Окружение = ДетекторОкружения; +Процедура ПриСозданииОбъекта() КонецПроцедуры &ВыполнениеКоманды 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 7450d94..a6bb2aa 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" @@ -13,11 +13,11 @@ &Пластилин Перем УстановщикOneScript; +&Пластилин("ДетекторОкружения") Перем Окружение; &Желудь -Процедура ПриСозданииОбъекта(&Пластилин ДетекторОкружения) - Окружение = ДетекторОкружения; +Процедура ПриСозданииОбъекта() КонецПроцедуры // Активирует указанную версию OneScript. diff --git "a/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" "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" index 0eb39d7..c562ffe 100644 --- "a/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" +++ "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" @@ -13,11 +13,12 @@ Перем ПровайдерДистрибутивовВерсии; Перем ДопустимыеАлиасы; // Кеш коллекции допустимых алиасов + +&Пластилин("ДетекторОкружения") Перем Окружение; &Желудь -Процедура ПриСозданииОбъекта(&Пластилин ДетекторОкружения) - Окружение = ДетекторОкружения; +Процедура ПриСозданииОбъекта() КонецПроцедуры Функция ДопустимыеАлиасы() Экспорт 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" index d36c596..878f2cd 100644 --- "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" @@ -3,11 +3,11 @@ &Деталька(Значение = "oscript.server", ЗначениеПоУмолчанию = "https://oscript.io") Перем АдресСайтаОСкрипт; +&Пластилин("ДетекторОкружения") Перем Окружение; &Дуб -Процедура ПриСозданииОбъекта(&Пластилин ДетекторОкружения) - Окружение = ДетекторОкружения; +Процедура ПриСозданииОбъекта() КонецПроцедуры // Путь к каталогу установки версий OneScript по умолчанию 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 6e76619..73a9999 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" @@ -19,11 +19,11 @@ &Пластилин("ОпределительДистрибутива") Перем КоробочкаСОпределителями; +&Пластилин("ДетекторОкружения") Перем Окружение; &Желудь -Процедура ПриСозданииОбъекта(&Пластилин ДетекторОкружения) - Окружение = ДетекторОкружения; +Процедура ПриСозданииОбъекта() КонецПроцедуры // Конструктор дополнительных параметров установки OneScript From 4e4822bb59348ef530c7af358d637927cc82b8bd Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 8 Jun 2025 08:50:38 +0200 Subject: [PATCH 23/24] 1.6.1 --- packagedef | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packagedef b/packagedef index f400afe..6d71edf 100644 --- a/packagedef +++ b/packagedef @@ -1,5 +1,5 @@ Описание.Имя("ovm") - .Версия("1.6.0") + .Версия("1.6.1") .Автор("Nikita Fedkin") .АдресАвтора("nixel2007@gmail.com") .Описание("OneScript Version Manager") From 30e89d3ddb621c277d26c0e4f68a2464fce1dda4 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 8 Jun 2025 08:51:16 +0200 Subject: [PATCH 24/24] 1.6.1 --- ...\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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" index bd7336e..fe32fa0 100644 --- "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" @@ -12,5 +12,5 @@ КонецФункции Функция ВерсияПриложения() Экспорт - Возврат "1.6.0"; + Возврат "1.6.1"; КонецФункции