This repository has been archived by the owner on May 25, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Исправление установки нового opm на базе cli
- Loading branch information
Showing
1 changed file
with
194 additions
and
190 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,190 +1,194 @@ | ||
#Использовать 1commands | ||
#Использовать fs | ||
#Использовать tempfiles | ||
|
||
Перем ЭтоWindows; | ||
Перем Лог; | ||
|
||
// Установка указанной версии OneScript. | ||
// Допустимо использовать трех-разрядные номера версий и шорткаты dev и stable | ||
// | ||
// Параметры: | ||
// ВерсияКУстановке - Строка - Имя версии, которую необходимо установить | ||
// АлиасВерсии - Строка - Имя каталога, в который необходимо установить OneScript. По умолчанию совпадает и | ||
// ВерсияКУстановке | ||
// ОчищатьКаталогУстановки - Булево - Необходимость очистки каталога, в который устанавливается версия. | ||
// | ||
Процедура УстановитьOneScript(Знач ВерсияКУстановке, Знач АлиасВерсии = "", Знач ОчищатьКаталогУстановки = Истина) Экспорт | ||
|
||
Лог.Информация("Установка OneScript %1...", ВерсияКУстановке); | ||
|
||
Если НЕ ЗначениеЗаполнено(АлиасВерсии) Тогда | ||
АлиасВерсии = ВерсияКУстановке; | ||
КонецЕсли; | ||
|
||
ПроверитьКорректностьПереданнойВерсии(ВерсияКУстановке); | ||
|
||
КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию(); | ||
КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, АлиасВерсии); | ||
|
||
ФС.ОбеспечитьКаталог(КаталогУстановки); | ||
Если ОчищатьКаталогУстановки Тогда | ||
ФС.ОбеспечитьПустойКаталог(КаталогУстановкиВерсии); | ||
Иначе | ||
ФС.ОбеспечитьКаталог(КаталогУстановкиВерсии); | ||
КонецЕсли; | ||
|
||
Лог.Отладка("Каталог установки версии: %1", КаталогУстановкиВерсии); | ||
|
||
Попытка | ||
ФайлУстановщика = СкачатьФайлУстановщика(ВерсияКУстановке); | ||
|
||
УстановитьOneScriptИзZipАрхива(ФайлУстановщика, КаталогУстановкиВерсии); | ||
ДобавитьSHСкриптыПриНеобходимости(КаталогУстановкиВерсии); | ||
Исключение | ||
УдалитьФайлы(КаталогУстановкиВерсии); | ||
ВызватьИсключение ОписаниеОшибки(); | ||
КонецПопытки; | ||
|
||
Лог.Информация("Установка OneScript %1 завершена", ВерсияКУстановке); | ||
Лог.Информация(""); | ||
|
||
КонецПроцедуры | ||
|
||
Функция СкачатьФайлУстановщика(Знач ВерсияКУстановке) | ||
|
||
Лог.Информация("Скачиваю установщик версии %1...", ВерсияКУстановке); | ||
|
||
ПутьКСохраняемомуФайлу = ВременныеФайлы.НовоеИмяФайла("zip"); | ||
|
||
Ресурс = ПолучитьПутьКСкачиваниюФайла(ВерсияКУстановке); | ||
Соединение = Новый HTTPСоединение(ПараметрыOVM.АдресСайтаОСкрипт()); | ||
Запрос = Новый HTTPЗапрос(Ресурс); | ||
|
||
Лог.Отладка("Сервер: %1. Ресурс: %2", Соединение.Сервер, Ресурс); | ||
|
||
Ответ = Соединение.Получить(Запрос, ПутьКСохраняемомуФайлу); | ||
Лог.Отладка("Код состояния: %1", Ответ.КодСостояния); | ||
|
||
Лог.Информация("Скачивание завершено"); | ||
|
||
HTTP_OK = 200; | ||
Если Ответ.КодСостояния <> HTTP_OK Тогда | ||
Лог.Ошибка( | ||
"Ошибка скачивания установщика. Текст ответа: | ||
|%1", | ||
Ответ.ПолучитьТелоКакСтроку() | ||
); | ||
ВызватьИсключение Ответ.КодСостояния; | ||
КонецЕсли; | ||
|
||
Лог.Отладка("Файл установщика скачан: %1", ПутьКСохраняемомуФайлу); | ||
|
||
Возврат ПутьКСохраняемомуФайлу; | ||
|
||
КонецФункции | ||
|
||
Процедура УстановитьOneScriptИзZipАрхива(Знач ПутьКФайлуУстановщика, Знач КаталогУстановкиВерсии) | ||
|
||
Лог.Информация("Распаковка OneScript..."); | ||
|
||
ЧтениеZIPФайла = Новый ЧтениеZipФайла(ПутьКФайлуУстановщика); | ||
ЧтениеZIPФайла.ИзвлечьВсе(КаталогУстановкиВерсии); | ||
ЧтениеZIPФайла.Закрыть(); | ||
|
||
КонецПроцедуры | ||
|
||
Процедура ДобавитьSHСкриптыПриНеобходимости(Знач КаталогУстановкиВерсии) | ||
|
||
Если ЭтоWindows Тогда | ||
Возврат; | ||
КонецЕсли; | ||
|
||
ПутьКСкрипту = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript"); | ||
ТекстСкрипта = | ||
"#!/bin/sh | ||
|dirpath=`dirname $0` | ||
|mono $dirpath/oscript.exe ""$@"" | ||
|"; | ||
|
||
ДобавитьShСкрипт(ПутьКСкрипту, ТекстСкрипта); | ||
|
||
ПутьКСкрипту = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "opm"); | ||
ТекстСкрипта = | ||
"#!/bin/sh | ||
|dirpath=`dirname $0` | ||
|oscript ""$dirpath/../lib/opm/src/opm.os"" ""$@"" | ||
|"; | ||
|
||
ДобавитьShСкрипт(ПутьКСкрипту, ТекстСкрипта); | ||
|
||
КонецПроцедуры | ||
|
||
Процедура ДобавитьShСкрипт(Знач ПутьКСкрипту, Знач ТекстСкрипта) | ||
|
||
Лог.Информация("Создание sh-скрипта %1...", Новый Файл(ПутьКСкрипту).ИмяБезРасширения); | ||
|
||
Лог.Отладка("Путь с sh-скрипту: %1", ПутьКСкрипту); | ||
|
||
Лог.Отладка( | ||
"Текст скрипта: | ||
|%1", | ||
ТекстСкрипта | ||
); | ||
|
||
Если ФС.ФайлСуществует(ПутьКСкрипту) Тогда | ||
Лог.Отладка("sh-скрипт уже существует"); | ||
Возврат; | ||
КонецЕсли; | ||
|
||
ЗаписьТекста = Новый ЗаписьТекста(ПутьКСкрипту, КодировкаТекста.UTF8NoBOM, , , Символы.ПС); | ||
|
||
ЗаписьТекста.Записать(ТекстСкрипта); | ||
ЗаписьТекста.Закрыть(); | ||
|
||
Лог.Отладка("Установка флага выполнения..."); | ||
|
||
Команда = Новый Команда; | ||
Команда.УстановитьКоманду("chmod"); | ||
Команда.ДобавитьПараметр("+x"); | ||
Команда.ДобавитьПараметр(ПутьКСкрипту); | ||
Команда.УстановитьПравильныйКодВозврата(0); | ||
|
||
Команда.Исполнить(); | ||
Лог.Отладка(Команда.ПолучитьВывод()); | ||
|
||
КонецПроцедуры | ||
|
||
Процедура ПроверитьКорректностьПереданнойВерсии(Знач ВерсияКУстановке) | ||
Если СтрРазделить(ВерсияКУстановке, ".").Количество() <> ПараметрыOVM.КоличествоРазрядовВНомереВерсии() | ||
И НРег(ВерсияКУстановке) <> "stable" | ||
И НРег(ВерсияКУстановке) <> "dev" Тогда | ||
|
||
Лог.Ошибка("Версия имеет некорректный формат"); | ||
|
||
ВызватьИсключение ВерсияКУстановке; | ||
КонецЕсли; | ||
КонецПроцедуры | ||
|
||
Функция ПолучитьПутьКСкачиваниюФайла(Знач ВерсияКУстановке) | ||
|
||
Если СтрРазделить(ВерсияКУстановке, ".").Количество() = ПараметрыOVM.КоличествоРазрядовВНомереВерсии() Тогда | ||
КаталогВерсии = СтрЗаменить(ВерсияКУстановке, ".", "_"); | ||
ИначеЕсли НРег(ВерсияКУстановке) = "stable" Тогда | ||
КаталогВерсии = "latest"; | ||
ИначеЕсли НРег(ВерсияКУстановке) = "dev" Тогда | ||
КаталогВерсии = "night-build"; | ||
Иначе | ||
ВызватьИсключение "Ошибка получения пути к файлу по версии"; | ||
КонецЕсли; | ||
ИмяФайла = "zip"; | ||
|
||
Ресурс = СтрШаблон("downloads/%1/%2", КаталогВерсии, ИмяФайла); | ||
Возврат Ресурс; | ||
|
||
КонецФункции | ||
|
||
СистемнаяИнформация = Новый СистемнаяИнформация; | ||
ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; | ||
|
||
Лог = ПараметрыOVM.ПолучитьЛог(); | ||
#Использовать 1commands | ||
#Использовать fs | ||
#Использовать tempfiles | ||
|
||
Перем ЭтоWindows; | ||
Перем Лог; | ||
|
||
// Установка указанной версии OneScript. | ||
// Допустимо использовать трех-разрядные номера версий и шорткаты dev и stable | ||
// | ||
// Параметры: | ||
// ВерсияКУстановке - Строка - Имя версии, которую необходимо установить | ||
// АлиасВерсии - Строка - Имя каталога, в который необходимо установить OneScript. По умолчанию совпадает и | ||
// ВерсияКУстановке | ||
// ОчищатьКаталогУстановки - Булево - Необходимость очистки каталога, в который устанавливается версия. | ||
// | ||
Процедура УстановитьOneScript(Знач ВерсияКУстановке, Знач АлиасВерсии = "", Знач ОчищатьКаталогУстановки = Истина) Экспорт | ||
|
||
Лог.Информация("Установка OneScript %1...", ВерсияКУстановке); | ||
|
||
Если НЕ ЗначениеЗаполнено(АлиасВерсии) Тогда | ||
АлиасВерсии = ВерсияКУстановке; | ||
КонецЕсли; | ||
|
||
ПроверитьКорректностьПереданнойВерсии(ВерсияКУстановке); | ||
|
||
КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию(); | ||
КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, АлиасВерсии); | ||
|
||
ФС.ОбеспечитьКаталог(КаталогУстановки); | ||
Если ОчищатьКаталогУстановки Тогда | ||
ФС.ОбеспечитьПустойКаталог(КаталогУстановкиВерсии); | ||
Иначе | ||
ФС.ОбеспечитьКаталог(КаталогУстановкиВерсии); | ||
КонецЕсли; | ||
|
||
Лог.Отладка("Каталог установки версии: %1", КаталогУстановкиВерсии); | ||
|
||
Попытка | ||
ФайлУстановщика = СкачатьФайлУстановщика(ВерсияКУстановке); | ||
|
||
УстановитьOneScriptИзZipАрхива(ФайлУстановщика, КаталогУстановкиВерсии); | ||
ДобавитьSHСкриптыПриНеобходимости(КаталогУстановкиВерсии); | ||
Исключение | ||
УдалитьФайлы(КаталогУстановкиВерсии); | ||
ВызватьИсключение ОписаниеОшибки(); | ||
КонецПопытки; | ||
|
||
Лог.Информация("Установка OneScript %1 завершена", ВерсияКУстановке); | ||
Лог.Информация(""); | ||
|
||
КонецПроцедуры | ||
|
||
Функция СкачатьФайлУстановщика(Знач ВерсияКУстановке) | ||
|
||
Лог.Информация("Скачиваю установщик версии %1...", ВерсияКУстановке); | ||
|
||
ПутьКСохраняемомуФайлу = ВременныеФайлы.НовоеИмяФайла("zip"); | ||
|
||
Ресурс = ПолучитьПутьКСкачиваниюФайла(ВерсияКУстановке); | ||
Соединение = Новый HTTPСоединение(ПараметрыOVM.АдресСайтаОСкрипт()); | ||
Запрос = Новый HTTPЗапрос(Ресурс); | ||
|
||
Лог.Отладка("Сервер: %1. Ресурс: %2", Соединение.Сервер, Ресурс); | ||
|
||
Ответ = Соединение.Получить(Запрос, ПутьКСохраняемомуФайлу); | ||
Лог.Отладка("Код состояния: %1", Ответ.КодСостояния); | ||
|
||
Лог.Информация("Скачивание завершено"); | ||
|
||
HTTP_OK = 200; | ||
Если Ответ.КодСостояния <> HTTP_OK Тогда | ||
Лог.Ошибка( | ||
"Ошибка скачивания установщика. Текст ответа: | ||
|%1", | ||
Ответ.ПолучитьТелоКакСтроку() | ||
); | ||
ВызватьИсключение Ответ.КодСостояния; | ||
КонецЕсли; | ||
|
||
Лог.Отладка("Файл установщика скачан: %1", ПутьКСохраняемомуФайлу); | ||
|
||
Возврат ПутьКСохраняемомуФайлу; | ||
|
||
КонецФункции | ||
|
||
Процедура УстановитьOneScriptИзZipАрхива(Знач ПутьКФайлуУстановщика, Знач КаталогУстановкиВерсии) | ||
|
||
Лог.Информация("Распаковка OneScript..."); | ||
|
||
ЧтениеZIPФайла = Новый ЧтениеZipФайла(ПутьКФайлуУстановщика); | ||
ЧтениеZIPФайла.ИзвлечьВсе(КаталогУстановкиВерсии); | ||
ЧтениеZIPФайла.Закрыть(); | ||
|
||
КонецПроцедуры | ||
|
||
Процедура ДобавитьSHСкриптыПриНеобходимости(Знач КаталогУстановкиВерсии) | ||
|
||
Если ЭтоWindows Тогда | ||
Возврат; | ||
КонецЕсли; | ||
|
||
ПутьКСкрипту = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript"); | ||
ТекстСкрипта = | ||
"#!/bin/sh | ||
|dirpath=`dirname $0` | ||
|mono $dirpath/oscript.exe ""$@"" | ||
|"; | ||
|
||
ДобавитьShСкрипт(ПутьКСкрипту, ТекстСкрипта); | ||
|
||
ПутьКСкрипту = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "opm"); | ||
ТекстСкрипта = | ||
"#!/bin/sh | ||
|dirpath=`dirname $0` | ||
|opmpath=$dirpath/../lib/opm/src/opm.os | ||
|if [ ! -f ""$opmpath"" ]; then | ||
| opmpath=$dirpath/../lib/opm/src/cmd/opm.os | ||
|fi | ||
|oscript ""$opmpath"" ""$@"" | ||
|"; | ||
|
||
ДобавитьShСкрипт(ПутьКСкрипту, ТекстСкрипта); | ||
|
||
КонецПроцедуры | ||
|
||
Процедура ДобавитьShСкрипт(Знач ПутьКСкрипту, Знач ТекстСкрипта) | ||
|
||
Лог.Информация("Создание sh-скрипта %1...", Новый Файл(ПутьКСкрипту).ИмяБезРасширения); | ||
|
||
Лог.Отладка("Путь с sh-скрипту: %1", ПутьКСкрипту); | ||
|
||
Лог.Отладка( | ||
"Текст скрипта: | ||
|%1", | ||
ТекстСкрипта | ||
); | ||
|
||
Если ФС.ФайлСуществует(ПутьКСкрипту) Тогда | ||
Лог.Отладка("sh-скрипт уже существует"); | ||
Возврат; | ||
КонецЕсли; | ||
|
||
ЗаписьТекста = Новый ЗаписьТекста(ПутьКСкрипту, КодировкаТекста.UTF8NoBOM, , , Символы.ПС); | ||
|
||
ЗаписьТекста.Записать(ТекстСкрипта); | ||
ЗаписьТекста.Закрыть(); | ||
|
||
Лог.Отладка("Установка флага выполнения..."); | ||
|
||
Команда = Новый Команда; | ||
Команда.УстановитьКоманду("chmod"); | ||
Команда.ДобавитьПараметр("+x"); | ||
Команда.ДобавитьПараметр(ПутьКСкрипту); | ||
Команда.УстановитьПравильныйКодВозврата(0); | ||
|
||
Команда.Исполнить(); | ||
Лог.Отладка(Команда.ПолучитьВывод()); | ||
|
||
КонецПроцедуры | ||
|
||
Процедура ПроверитьКорректностьПереданнойВерсии(Знач ВерсияКУстановке) | ||
Если СтрРазделить(ВерсияКУстановке, ".").Количество() <> ПараметрыOVM.КоличествоРазрядовВНомереВерсии() | ||
И НРег(ВерсияКУстановке) <> "stable" | ||
И НРег(ВерсияКУстановке) <> "dev" Тогда | ||
|
||
Лог.Ошибка("Версия имеет некорректный формат"); | ||
|
||
ВызватьИсключение ВерсияКУстановке; | ||
КонецЕсли; | ||
КонецПроцедуры | ||
|
||
Функция ПолучитьПутьКСкачиваниюФайла(Знач ВерсияКУстановке) | ||
|
||
Если СтрРазделить(ВерсияКУстановке, ".").Количество() = ПараметрыOVM.КоличествоРазрядовВНомереВерсии() Тогда | ||
КаталогВерсии = СтрЗаменить(ВерсияКУстановке, ".", "_"); | ||
ИначеЕсли НРег(ВерсияКУстановке) = "stable" Тогда | ||
КаталогВерсии = "latest"; | ||
ИначеЕсли НРег(ВерсияКУстановке) = "dev" Тогда | ||
КаталогВерсии = "night-build"; | ||
Иначе | ||
ВызватьИсключение "Ошибка получения пути к файлу по версии"; | ||
КонецЕсли; | ||
ИмяФайла = "zip"; | ||
|
||
Ресурс = СтрШаблон("downloads/%1/%2", КаталогВерсии, ИмяФайла); | ||
Возврат Ресурс; | ||
|
||
КонецФункции | ||
|
||
СистемнаяИнформация = Новый СистемнаяИнформация; | ||
ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; | ||
|
||
Лог = ПараметрыOVM.ПолучитьЛог(); |