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 ede1288..bb74215 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" @@ -222,19 +222,19 @@ ТекстФайлаПрофиля = "export PATH=""" + ПутьККаталогуBin + ":$PATH"" |export OSCRIPTBIN=""" + ПутьККаталогуBin + """"; - ПутьКФайлу = ОбъединитьПути( - СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя), - ".profile" - ); - - ДобавитьТекстВНовыйИлиИмеющийсяФайл(ТекстФайлаПрофиля, ПутьКФайлу); - - ПутьКФайлу = ОбъединитьПути( - СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя), - ".bashrc" - ); - - ДобавитьТекстВНовыйИлиИмеющийсяФайл(ТекстФайлаПрофиля, ПутьКФайлу); + ИменаДляОбработки = Новый Массив; + ИменаДляОбработки.Добавить(".profile"); + ИменаДляОбработки.Добавить(".bashrc"); + ИменаДляОбработки.Добавить(".zprofile"); + ИменаДляОбработки.Добавить(".zshrc"); + + КаталогПрофиля = СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя); + Для Каждого ИмяФайла Из ИменаДляОбработки Цикл + + ПутьКФайлу = ОбъединитьПути(КаталогПрофиля, ИмяФайла); + ДобавитьТекстВНовыйИлиИмеющийсяФайл(ТекстФайлаПрофиля, ПутьКФайлу); + + КонецЦикла; КонецПроцедуры 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 fdbb289..f2c911d 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" @@ -147,17 +147,37 @@ Процедура ДобавитьSHСкриптыПриНеобходимости(Знач КаталогУстановкиВерсии) + ЭтоКаталогВерсии2 = ВерсииOneScript.ЭтоКаталогВерсии2(КаталогУстановкиВерсии); Если ЭтоWindows Тогда + Если ЭтоКаталогВерсии2 Тогда + + ПутьКСкрипту = ВерсииOneScript.ПутьКИсполняемомуФайлуВерсии2(КаталогУстановкиВерсии); + ТекстСкрипта = + "@dotnet %~dp0\oscript.dll %* + |@exit /b %ERRORLEVEL% + |"; + + ДобавитьBatСкрипт(ПутьКСкрипту, ТекстСкрипта); + + КонецЕсли; Возврат; КонецЕсли; - - ПутьКСкрипту = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript"); - ТекстСкрипта = - "#!/bin/sh - |dirpath=`dirname $0` - |mono $dirpath/oscript.exe ""$@"" - |"; - + + ПутьКСкрипту = ВерсииOneScript.ПутьКИсполняемомуФайлуВерсии2(КаталогУстановкиВерсии); + + Если ЭтоКаталогВерсии2 Тогда + ТекстСкрипта = + "#!/bin/sh + |dirpath=`dirname $0` + |dotnet $dirpath/oscript.dll ""$@"" + |"; + Иначе + ТекстСкрипта = + "#!/bin/sh + |dirpath=`dirname $0` + |mono $dirpath/oscript.exe ""$@"" + |"; + КонецЕсли; ДобавитьShСкрипт(ПутьКСкрипту, ТекстСкрипта); ПутьКСкрипту = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "opm"); @@ -210,6 +230,30 @@ КонецПроцедуры +Процедура ДобавитьBatСкрипт(Знач ПутьКСкрипту, Знач ТекстСкрипта) + + Лог.Информация("Создание bat-скрипта %1...", Новый Файл(ПутьКСкрипту).ИмяБезРасширения); + + Лог.Отладка("Путь с bat-скрипту: %1", ПутьКСкрипту); + + Лог.Отладка( + "Текст скрипта: + |%1", + ТекстСкрипта + ); + + Если ФС.ФайлСуществует(ПутьКСкрипту) Тогда + Лог.Отладка("bat-скрипт уже существует"); + Возврат; + КонецЕсли; + + ЗаписьТекста = Новый ЗаписьТекста(ПутьКСкрипту, КодировкаТекста.ANSI, , , Символы.ПС); + + ЗаписьТекста.Записать(ТекстСкрипта); + ЗаписьТекста.Закрыть(); + +КонецПроцедуры + Процедура ПроверитьКорректностьПереданнойВерсии(Знач ВерсияКУстановке) Если СтрРазделить(ВерсияКУстановке, ".").Количество() <> ПараметрыOVM.КоличествоРазрядовВНомереВерсии() И НРег(ВерсияКУстановке) <> "stable" diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\222\320\265\321\200\321\201\320\270\320\270OneScript.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\222\320\265\321\200\321\201\320\270\320\270OneScript.os" index e918286..0df74cb 100644 --- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\222\320\265\321\200\321\201\320\270\320\270OneScript.os" +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\222\320\265\321\200\321\201\320\270\320\270OneScript.os" @@ -19,8 +19,10 @@ КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию(); КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ПроверяемаяВерсия); - Результат = ФС.КаталогСуществует(КаталогУстановкиВерсии); - Результат = Результат И ФС.ФайлСуществует(ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript.exe")); + СуществуетКаталогУстановкиВерсии = ФС.КаталогСуществует(КаталогУстановкиВерсии); + СуществуетOscriptExe = ФС.ФайлСуществует(ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript.exe")); + ЭтоКаталогВерсии2 = ЭтоКаталогВерсии2(КаталогУстановкиВерсии); + Результат = СуществуетКаталогУстановкиВерсии И (СуществуетOscriptExe ИЛИ ЭтоКаталогВерсии2); Лог.Отладка("Версия %1 установлена: %2", ПроверяемаяВерсия, Результат); Возврат Результат; @@ -57,6 +59,56 @@ КонецФункции +// Проверяет, что переданный каталог является каталогом OneScript 2.0+ +// +// Параметры: +// КаталогУстановкиВерсии - Строка - Путь к конкретной версии. +// +// Возвращаемое значение: +// Булево +// +Функция ЭтоКаталогВерсии2(КаталогУстановкиВерсии) Экспорт + Возврат ФС.ФайлСуществует(ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript.dll")); +КонецФункции + +// Получает путь к исполняемому файлу OneScript по шаблону версии 1.x. +// +// Параметры: +// КаталогУстановкиВерсии - Строка - Путь к конкретной версии. +// +// Возвращаемое значение: +// Строка - Путь к исполняемому файлу. +// +Функция ПутьКИсполняемомуФайлуВерсии1(КаталогУстановкиВерсии) Экспорт + + ПутьКИсполняемомуФайлу = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript"); + Если ЭтоWindows Тогда + ПутьКИсполняемомуФайлу = ПутьКИсполняемомуФайлу + ".exe"; + КонецЕсли; + + Возврат ПутьКИсполняемомуФайлу; + +КонецФункции + +// Получает путь к исполняемому файлу OneScript по шаблону версии 1.x. +// +// Параметры: +// КаталогУстановкиВерсии - Строка - Путь к конкретной версии. +// +// Возвращаемое значение: +// Строка - Путь к исполняемому файлу. +// +Функция ПутьКИсполняемомуФайлуВерсии2(КаталогУстановкиВерсии) Экспорт + + ПутьКИсполняемомуФайлу = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript"); + Если ЭтоWindows Тогда + ПутьКИсполняемомуФайлу = ПутьКИсполняемомуФайлу + ".bat"; + КонецЕсли; + + Возврат ПутьКИсполняемомуФайлу; + +КонецФункции + // Получить информацию об установленных версиях // // Возвращаемое значение: @@ -253,13 +305,13 @@ КонецФункции -// Получить полный путь к установленному движку OneScript (файлу oscript.exe) +// Получить полный путь к исполняемому файлу OneScript (файлу oscript.exe|oscript.bat|oscript) // // Параметры: // УстановленнаяВерсия - Строка - Алиас проверяемой версии // // Возвращаемое значение: -// Строка - Полный путь к файлу oscript.exe +// Строка - Полный путь к исполняемому файлу oscript // Функция ПолучитьПутьКУстановленномуДвижкуOneScript(Знач УстановленнаяВерсия) Экспорт @@ -270,7 +322,13 @@ "Результат = Элемент.Алиас = ДополнительныеПараметры.УстановленнаяВерсия", Новый Структура("УстановленнаяВерсия", УстановленнаяВерсия)) .Первые(1) - .Обработать("Результат = ОбъединитьПути(Элемент.Путь, ""bin"", ""oscript.exe"")") + .Обработать(" + |Если ВерсииOneScript.ЭтоКаталогВерсии2(Элемент.Путь) Тогда + | Результат = ВерсииOneScript.ПутьКИсполняемомуФайлуВерсии2(Элемент.Путь); + |Иначе + | Результат = ВерсииOneScript.ПутьКИсполняемомуФайлуВерсии1(Элемент.Путь); + |КонецЕсли; + |") .ПолучитьПервый(); Возврат ПутьКУстановленнойВерсии; @@ -294,11 +352,16 @@ КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию(); КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ПроверяемаяВерсия); - ПутьКИсполняемомуФайлу = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript.exe"); + ЭтоКаталогВерсии2 = ЭтоКаталогВерсии2(КаталогУстановкиВерсии); + Если ЭтоКаталогВерсии2 Тогда + ПутьКИсполняемомуФайлу = ПутьКИсполняемомуФайлуВерсии2(КаталогУстановкиВерсии); + Иначе + ПутьКИсполняемомуФайлу = ПутьКИсполняемомуФайлуВерсии1(КаталогУстановкиВерсии); + КонецЕсли; Команда = Новый Команда(); - Если ЭтоWindows Тогда + Если ЭтоWindows ИЛИ ЭтоКаталогВерсии2 Тогда Команда.УстановитьКоманду(ПутьКИсполняемомуФайлу); Иначе Команда.УстановитьКоманду("mono");