1
0
mirror of https://github.com/DoublesunRUS/devscripts.git synced 2026-06-11 22:46:51 +02:00

Обновление платформ

This commit is contained in:
Капралов Александр
2020-12-01 21:06:32 +03:00
parent d328512789
commit 185c51ff39
4 changed files with 653 additions and 566 deletions
+190 -212
View File
@@ -22,298 +22,276 @@
// SOFTWARE.
///////////////////////////////////////////////////////////////////////////////////////////////////////
const URL_RELEASE ="https://releases.1c.ru"
const URL_LOGIN ="https://login.1c.ru"
const URL_DOWNLOAD ="%URL_RELEASE/version_file"
const URL_RELEASE = "https://releases.1c.ru"
const URL_LOGIN = "https://login.1c.ru"
const URL_DOWNLOAD = "%URL_RELEASE/version_file"
exception ExceptionDL1C
;
exception ExceptionDL1C;
method updateCookies(cookies: Map, host: String, setCookie: String|Undefined)
if setCookie is Undefined
return
;
if setCookie is Undefined
return;
val thisCookies = new Map()
val thisCookies = new Map()
for cookie in setCookie.Split(";")
val pair = cookie.Split("=")
val key = pair[0].Trim()
if key == "Path" or key == "Expires" or pair.Size() == 1 // don't worry
continue
;
val value = pair.Size() == 1 ? "" : pair[1].Trim()
thisCookies.Insert(key, value)
;
for cookie in setCookie.Split(";")
val pair = cookie.Split("=")
val key = pair[0].Trim()
if key == "Path" or key == "Expires" or pair.Size() == 1 // don't worry
continue;
val value = pair.Size() == 1 ? "" : pair[1].Trim()
thisCookies.Insert(key, value)
;
var realHost = thisCookies.ContainsKey("Domain") ? thisCookies.Get("Domain") : host
if not realHost.StartsWith(".")
realHost = "." + realHost
;
var realHost = thisCookies.ContainsKey("Domain") ? thisCookies.Get("Domain") : host
if not realHost.StartsWith(".")
realHost = "." + realHost
;
val hostCookies = cookies.ContainsKey(realHost) ? cookies.Get(realHost) : new Map()
if not cookies.ContainsKey(realHost)
cookies.Insert(realHost, hostCookies)
;
for item in thisCookies
if item.Key == "Domain"
continue;
hostCookies.Insert(item.Key, item.Value)
;
val hostCookies = cookies.ContainsKey(realHost) ? cookies.Get(realHost) : new Map()
if not cookies.ContainsKey(realHost)
cookies.Insert(realHost, hostCookies)
;
for item in thisCookies
if item.Key == "Domain"
continue
;
hostCookies.Insert(item.Key, item.Value)
;
;
method getCookie(cookies: Map, host: String): String
var result = ""
var result = ""
val realHost = "." + host
val realHost = "." + host
for hostItem in cookies
if not realHost.EndsWith(hostItem.Key)
continue;
for cookie in hostItem.Value
result = result + "; " + cookie.Key + (cookie.Value.IsEmpty() ? "" : "=" + cookie.Value)
;
;
for hostItem in cookies
if not realHost.EndsWith(hostItem.Key)
continue
;
return result.IsEmpty() ? result : result.Substring(2)
for cookie in hostItem.Value
result = result + "; " + cookie.Key + (cookie.Value.IsEmpty() ? "" : "=" + cookie.Value)
;
;
return result.IsEmpty() ? result : result.Substring(2)
;
method getHost(url: String): String
var result = ""
var result = ""
if url.StartsWith("http://")
result = url.Substring("http://".Length())
else if url.StartsWith("https://")
result = url.Substring("https://".Length())
else
throw new ExceptionDL1C("Bad URL: %url")
;
if url.StartsWith("http://")
result = url.Substring("http://".Length())
else if url.StartsWith("https://")
result = url.Substring("https://".Length())
else
throw new ExceptionDL1C("Bad URL: %url")
;
if result.Contains("/")
result = result.SubstringFromBegin(result.Find("/"))
;
if result.Contains("/")
result = result.SubstringFromBegin(result.Find("/"))
;
return result
return result
;
method baseUrl(url: String): String
var result = ""
var result = ""
if url.StartsWith("http://")
result = "http://"
else if url.StartsWith("https://")
result = "https://"
else
throw new ExceptionDL1C("Bad URL: %url")
;
if url.StartsWith("http://")
result = "http://"
else if url.StartsWith("https://")
result = "https://"
else
throw new ExceptionDL1C("Bad URL: %url")
;
return result + getHost(url)
return result + getHost(url)
;
method extract(text: String, startPattern: String, endPattern: String): String
val start = text.Find(startPattern)
val end = text.Find(endPattern, start + startPattern.Length())
return text.Substring(start + startPattern.Length(), end)
val start = text.Find(startPattern)
val end = text.Find(endPattern, start + startPattern.Length())
return text.Substring(start + startPattern.Length(), end)
;
method exploreWeb(request: HttpRequest, cookies: Map): HttpResponse
val requests = [request]
val responses = [request.Execute()]
updateCookies(cookies, getHost(request.AbsoluteUrl), responses.Last().Headers.GetFirst("Set-Cookie"))
val requests = [request]
val responses = [request.Execute()]
updateCookies(cookies, getHost(request.AbsoluteUrl), responses.Last().Headers.GetFirst("Set-Cookie"))
while responses.Last().StatusCode == 302
var location = responses.Last().Headers.GetFirst("Location") as String
if location.StartsWith("/")
location = baseUrl(requests.Last().AbsoluteUrl) + location
;
requests.Add(
HttpClient.GetRequest(location)
.SetCookies(getCookie(cookies, getHost(location)))
.SetMaxRedirect(0) // https://github.com/klimenko-1c/dl-1c/issues/1
)
responses.Add(
requests.Last()
.Execute()
)
updateCookies(cookies, getHost(location), responses.Last().Headers.GetFirst("Set-Cookie"))
;
while responses.Last().StatusCode == 301 or responses.Last().StatusCode == 302
var location = responses.Last().Headers.GetFirst("Location") as String
if location.StartsWith("/")
location = baseUrl(requests.Last().AbsoluteUrl) + location
;
// https://github.com/klimenko-1c/dl-1c/issues/1
requests.Add(HttpClient.GetRequest(location).SetCookies(getCookie(cookies, getHost(location))).SetMaxRedirect(0))
for i = 0 to responses.Bound() - 1
responses[i].Close()
;
responses.Add(requests.Last().Execute())
updateCookies(cookies, getHost(location), responses.Last().Headers.GetFirst("Set-Cookie"))
;
return responses.Last()
for i = 0 to responses.Bound() - 1
responses[i].Close()
;
return responses.Last()
;
method auth(username: String, password: String): Map
val cookies = new Map()
use response1 = HttpClient.GetRequest(URL_RELEASE).Execute()
updateCookies(cookies, getHost(URL_RELEASE), response1.Headers.GetFirst("Set-Cookie"))
val src = response1.Body.ReadAsText()
response1.Close()
val cookies = new Map()
use response1 = HttpClient.GetRequest(URL_RELEASE).Execute()
updateCookies(cookies, getHost(URL_RELEASE), response1.Headers.GetFirst("Set-Cookie"))
val src = response1.Body.ReadAsText()
response1.Close()
val action = extract(src, "form method=\"post\" id=\"loginForm\" action=\"", "\"")
val execution = extract(src, "input type=\"hidden\" name=\"execution\" value=\"", "\"")
val action = extract(src, "form method=\"post\" id=\"loginForm\" action=\"", "\"")
val execution = extract(src, "input type=\"hidden\" name=\"execution\" value=\"", "\"")
val body = "inviteCode=" + "&" + "inviteType=" + "&" + "username=%username" + "&" + "password=%password" + "&" + "rememberMe=on"
+ "&" + "execution=" + execution.Replace("=", "\%3D") + "&" + "_eventId=submit" + "&" + "geolocation=" + "&"
+ "submit=\%D0\%92\%D0\%BE\%D0\%B9\%D1\%82\%D0\%B8"
val body = "inviteCode="
+ "&" + "inviteType="
+ "&" + "username=%username"
+ "&" + "password=%password"
+ "&" + "rememberMe=on"
+ "&" + "execution=" + execution.Replace("=", "\%3D")
+ "&" + "_eventId=submit"
+ "&" + "geolocation="
+ "&" + "submit=\%D0\%92\%D0\%BE\%D0\%B9\%D1\%82\%D0\%B8"
// https://github.com/klimenko-1c/dl-1c/issues/1
val request = HttpClient.PostRequest(URL_LOGIN + action).SetContentType("application/x-www-form-urlencoded")
.SetCookies(getCookie(cookies, getHost(URL_LOGIN))).SetBody(body).SetMaxRedirect(0)
val request = HttpClient.PostRequest(URL_LOGIN + action)
.SetContentType("application/x-www-form-urlencoded")
.SetCookies(getCookie(cookies, getHost(URL_LOGIN)))
.SetBody(body)
.SetMaxRedirect(0) // https://github.com/klimenko-1c/dl-1c/issues/1
exploreWeb(request, cookies).Close()
exploreWeb(request, cookies).Close()
if not cookies.Get("." + getHost(URL_LOGIN)).ContainsKey("TGC")
throw new ExceptionDL1C("Auth failed")
;
if not cookies.Get("." + getHost(URL_LOGIN)).ContainsKey("TGC")
throw new ExceptionDL1C("Auth failed")
;
return cookies
return cookies
;
method webBodyAsText(url: String, cookies: Map): String
val request = HttpClient.GetRequest(url)
.SetCookies(getCookie(cookies, getHost(url)))
.SetMaxRedirect(0)
use response = exploreWeb(request, cookies)
return response.Body.ReadAsText()
// https://github.com/klimenko-1c/dl-1c/issues/1
val request = HttpClient.GetRequest(url).SetCookies(getCookie(cookies, getHost(url))).SetMaxRedirect(0)
use response = exploreWeb(request, cookies)
return response.Body.ReadAsText()
;
method webBodyToFile(url: String, cookies: Map, filename: String)
val request = HttpClient.GetRequest(url)
.SetCookies(getCookie(cookies, getHost(url)))
.SetMaxRedirect(0)
use response = exploreWeb(request, cookies)
use write = new File(filename).OpenWritableStream()
response.Body.CopyTo(write)
// https://github.com/klimenko-1c/dl-1c/issues/1
val request = HttpClient.GetRequest(url).SetCookies(getCookie(cookies, getHost(url))).SetMaxRedirect(0)
use response = exploreWeb(request, cookies)
use write = new File(filename).OpenWritableStream()
response.Body.CopyTo(write)
;
method download(cookies: Map, nick: String, ver: String, path_folder: String, path_version: String, path_filename: String)
method download(cookies: Map, nick: String, ver: String, path_folder: String, path_version: String, path_filename: String): String
// https://github.com/klimenko-1c/dl-1c/issues/2
val url1 = "%URL_DOWNLOAD?nick=%nick&ver=%ver&path=%path_folder\%5C%path_version\%5C%path_filename"
val url1 = URL_DOWNLOAD
+ "?" + "nick=" + nick
+ "&" + "ver=" + ver
+ "&" + "path=" + path_folder + "\%5C" + path_version + "\%5C" + path_filename // https://github.com/klimenko-1c/dl-1c/issues/2
val src = webBodyAsText(url1, cookies)
val src = webBodyAsText(url1, cookies)
val end = src.Find(">Скачать дистрибутив<")
val start = src.FindFromEnd("\"", , end - 1)
val url2 = src.Substring(start + 1, end - 1)
val end = src.Find(">Скачать дистрибутив<")
val start = src.FindFromEnd("\"",, end - 1)
val url2 = src.Substring(start + 1, end - 1)
val tmpDir = Files.СоздатьВременныйКаталог(, Ложь)
webBodyToFile(url2, cookies, "%tmpDir/%path_filename")
webBodyToFile(url2, cookies, path_filename)
return "%tmpDir/%path_filename"
;
method downloadPlatform(cookies: Map, version: String, prefix: String, extension: String): String
val path_folder = "Platform"
val path_version = version.Replace(".", "_")
val path_filename = prefix + "_" + path_version + "." + extension
val path_folder = "Platform"
val path_version = version.Replace(".", "_")
val path_filename = "%{prefix}_%path_version.%extension"
val nick = path_folder + version.Split(".")[0] + version.Split(".")[1]
val nick = path_folder + version.Split(".")[0] + version.Split(".")[1]
download(cookies, nick, version, path_folder, path_version, path_filename)
return path_filename
return download(cookies, nick, version, path_folder, path_version, path_filename)
;
method downloadPostgres(cookies: Map, version: String, postfix: String, extension: String): String
val prefix = "postgresql"
val prefix = "postgresql"
val path_folder = "AddCompPostgre"
val path_version = version.Replace(".", "_").Replace("-", "_")
val path_filename = prefix + "_" + version.Replace("-", "_") + "_" + postfix + "." + extension
val path_folder = "AddCompPostgre"
val path_version = version.Replace(".", "_").Replace("-", "_")
val path_filename = prefix + "_" + version.Replace("-", "_") + "_" + postfix + "." + extension
val nick = path_folder
val nick = path_folder
download(cookies, nick, version, path_folder, path_version, path_filename)
download(cookies, nick, version, path_folder, path_version, path_filename)
return path_filename
return path_filename
;
method downloadConfiguration(cookies: Map, version: String, target: String, isUpdate: Boolean): String
val postfix = isUpdate ? "updsetup" : "setup1c"
val postfix = isUpdate ? "updsetup" : "setup1c"
val path_folder = target
val path_version = version.Replace(".", "_")
val path_filename = path_folder + "_" + path_version + "_" + postfix + ".exe"
val path_folder = target
val path_version = version.Replace(".", "_")
val path_filename = path_folder + "_" + path_version + "_" + postfix + ".exe"
val nick = path_folder
val nick = path_folder
download(cookies, nick, version, path_folder, path_version, path_filename)
return path_filename
download(cookies, nick, version, path_folder, path_version, path_filename)
return path_filename
;
method main(username: String, password: String, target: String, version: String): String
val cookies = auth(username, password)
val cookies = auth(username, password)
var path_filename: String
if target.StartsWith("config-") or target.StartsWith("update-")
path_filename = downloadConfiguration(cookies, version, target.Substring(7), target.StartsWith("update-"))
else
var path_filename: String
if target.StartsWith("config-") or target.StartsWith("update-")
path_filename = downloadConfiguration(cookies, version, target.Substring(7), target.StartsWith("update-"))
else
case target
when "platform-win64"
path_filename = downloadPlatform(cookies, version, "windows64full", "rar")
when "platform-win32"
path_filename = downloadPlatform(cookies, version, "windows", "rar")
when "platform-osx"
path_filename = downloadPlatform(cookies, version, "clientosx", "dmg")
when "platform-deb64"
path_filename = downloadPlatform(cookies, version, "client", "tar.gz")
when "server-win64"
path_filename = downloadPlatform(cookies, version, "windows64", "rar")
when "server-deb64"
path_filename = downloadPlatform(cookies, version, "deb64", "tar.gz")
when "thinclient-win64"
path_filename = downloadPlatform(cookies, version, "setuptc64", "tar.gz")
when "thinclient-win32"
path_filename = downloadPlatform(cookies, version, "setuptc", "tar.gz")
when "thinclient-osx"
path_filename = downloadPlatform(cookies, version, "thin.osx", "dmg")
when "postgres-win"
path_filename = downloadPostgres(cookies, version, "x64", "zip")
when "postgres-deb"
path_filename = downloadPostgres(cookies, version, "amd64_deb", "tar.bz2")
else
throw new ExceptionDL1C("Bad target")
;
;
return path_filename
when "platform-win64"
path_filename = downloadPlatform(cookies, version, "windows64full", "rar")
when "platform-win32"
path_filename = downloadPlatform(cookies, version, "windows", "rar")
when "platform-osx"
path_filename = downloadPlatform(cookies, version, "clientosx", "dmg")
when "platform-deb64"
path_filename = downloadPlatform(cookies, version, "client", "tar.gz")
when "server-win64"
path_filename = downloadPlatform(cookies, version, "windows64", "rar")
when "server-deb64"
path_filename = downloadPlatform(cookies, version, "deb64", "tar.gz")
when "thinclient-win64"
path_filename = downloadPlatform(cookies, version, "setuptc64", "tar.gz")
when "thinclient-win32"
path_filename = downloadPlatform(cookies, version, "setuptc", "tar.gz")
when "thinclient-osx"
path_filename = downloadPlatform(cookies, version, "thin.osx", "dmg")
when "postgres-win"
path_filename = downloadPostgres(cookies, version, "x64", "zip")
when "postgres-deb"
path_filename = downloadPostgres(cookies, version, "amd64_deb", "tar.bz2")
else
throw new ExceptionDL1C("Bad target")
;
;
return path_filename
;
method Script(username: String, password: String, target: String, version: String): Number
try
main(username, password, target, version)
return 0
catch exception: any
Console.WriteError(exception.Info())
return 1
;
try
main(username, password, target, version)
return 0
catch exception: any
Console.WriteError(exception.Info())
return 1
;
;
@@ -16,102 +16,102 @@
*/
метод ВыполнитьСкрипт(имяФайлаСкрипта: Строка, имяКомандыСкрипта: Строка, параметрыСкрипта: Массив): ПотокЧтения
пер расширениеИсполнителя: Строка
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
выбор когда имяОС.НачинаетсяС("windows", Истина)
расширениеИсполнителя = "cmd"
иначе
расширениеИсполнителя = "sh"
;
знч путьКИсполнителю = СредаИсполнения.ПолучитьСвойство("logback.configurationFile").Удалить("config" + Файлы
.СимволРазделителя + "logback.xml") + "bin/executor_j11." + расширениеИсполнителя
пер расширениеИсполнителя: Строка
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
выбор когда имяОС.НачинаетсяС("windows", Истина)
расширениеИсполнителя = "cmd"
иначе
расширениеИсполнителя = "sh"
;
знч путьКИсполнителю = СредаИсполнения.ПолучитьСвойство("logback.configurationFile").Удалить("config" + Файлы.СимволРазделителя
+ "logback.xml") + "bin/executor_j11." + расширениеИсполнителя
знч командаТекущегоСкрипта = СредаИсполнения.ПолучитьСвойство("sun.java.command")
пер имяФайлаТекущегоСкрипта = командаТекущегоСкрипта.Подстрока(0, командаТекущегоСкрипта.Найти(".sbsl") + 5)
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
знч файлТекущегоСкрипта = новый Файл(имяФайлаТекущегоСкрипта)
пер путьТекущегоСкрипта = ""
если файлТекущегоСкрипта.Каталог != Неопределено
путьТекущегоСкрипта = файлТекущегоСкрипта.Каталог.Путь + Файлы.СимволРазделителя
;
знч командаТекущегоСкрипта = СредаИсполнения.ПолучитьСвойство("sun.java.command")
пер имяФайлаТекущегоСкрипта = командаТекущегоСкрипта.Подстрока(0, командаТекущегоСкрипта.Найти(".sbsl") + 5)
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
знч файлТекущегоСкрипта = новый Файл(имяФайлаТекущегоСкрипта)
пер путьТекущегоСкрипта = ""
если файлТекущегоСкрипта.Каталог != Неопределено
путьТекущегоСкрипта = файлТекущегоСкрипта.Каталог.Путь + Файлы.СимволРазделителя
;
пер аргументыПроцессаОс = ["-s", путьТекущегоСкрипта + имяФайлаСкрипта, "-m", имяКомандыСкрипта]
если не параметрыСкрипта.Пусто()
аргументыПроцессаОс.ДобавитьВсе(параметрыСкрипта)
;
пер аргументыПроцессаОс = ["-s", путьТекущегоСкрипта + имяФайлаСкрипта, "-m", имяКомандыСкрипта]
если не параметрыСкрипта.Пусто()
аргументыПроцессаОс.ДобавитьВсе(параметрыСкрипта)
;
знч библиотека = новый ПроцессОс(путьКИсполнителю, аргументыПроцессаОс, Ложь)
знч библиотека = новый ПроцессОс(путьКИсполнителю, аргументыПроцессаОс, Ложь)
библиотека.Запустить()
библиотека.ОжидатьЗавершения()
библиотека.Запустить()
библиотека.ОжидатьЗавершения()
знч ошибкиВыполненияСкрипта = библиотека.ПолучитьПотокОшибок()
знч текстОшибок = ошибкиВыполненияСкрипта.ПрочитатьКакТекст(КодировкаПотокаВыводаСкриптов())
если не текстОшибок.Пусто()
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибок)
;
знч ошибкиВыполненияСкрипта = библиотека.ПолучитьПотокОшибок()
знч текстОшибок = ошибкиВыполненияСкрипта.ПрочитатьКакТекст(КодировкаПотокаВыводаСкриптов())
если не текстОшибок.Пусто()
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибок)
;
возврат библиотека.ПотокВывода
возврат библиотека.ПотокВывода
;
метод КодировкаПотокаВыводаСкриптов(): Строка
возврат СредаИсполнения.ПолучитьСвойство("file.encoding")
возврат СредаИсполнения.ПолучитьСвойство("file.encoding")
;
метод НастройкиПотокаВыводаСкриптов(): НастройкиЧтенияДанных
пер настройкиПотокаВывода = новый НастройкиЧтенияДанных()
настройкиПотокаВывода.Кодировка = КодировкаПотокаВыводаСкриптов()
пер настройкиПотокаВывода = новый НастройкиЧтенияДанных()
настройкиПотокаВывода.Кодировка = КодировкаПотокаВыводаСкриптов()
возврат настройкиПотокаВывода
возврат настройкиПотокаВывода
;
метод ОбъектИзПотокаВывода(потокВывода: ПотокЧтения): Строка|Массив|Соответствие
пер массивСтрок: Массив
пер массивСтрок: Массив
знч результатВыполненияСкрипта = новый ЧтениеДанных(потокВывода, НастройкиПотокаВыводаСкриптов())
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
знч результатВыполненияСкрипта = новый ЧтениеДанных(потокВывода, НастройкиПотокаВыводаСкриптов())
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
если прочитаннаяСтрока.Пусто()
продолжить
;
если прочитаннаяСтрока.Пусто()
продолжить
;
выбор прочитаннаяСтрока[0]
когда "["
знч результатМассивом = МассивИзСтроки(прочитаннаяСтрока)
если результатМассивом.Размер() == 1
массивСтрок.Добавить(результатМассивом[0])
иначе
возврат результатМассивом
;
когда "{"
возврат СоответствиеИзСтроки(прочитаннаяСтрока)
выбор прочитаннаяСтрока[0]
когда "["
знч результатМассивом = МассивИзСтроки(прочитаннаяСтрока)
если результатМассивом.Размер() == 1
массивСтрок.Добавить(результатМассивом[0])
иначе
возврат результатМассивом
;
когда "{"
возврат СоответствиеИзСтроки(прочитаннаяСтрока)
иначе
массивСтрок.Добавить(прочитаннаяСтрока)
;
;
возврат массивСтрок
иначе
массивСтрок.Добавить(прочитаннаяСтрока)
;
;
возврат массивСтрок
;
метод МассивИзСтроки(строкаПотокаВывода: Строка): Массив
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
знч результатМассивом = результатСтрокой.Разделить(", ", Ложь)
возврат результатМассивом
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
знч результатМассивом = результатСтрокой.Разделить(", ", Ложь)
возврат результатМассивом
;
метод СоответствиеИзСтроки(строкаПотокаВывода: Строка): Соответствие
пер результатСоответствием: Соответствие
пер результатСоответствием: Соответствие
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
знч результатМассивом = результатСтрокой.Разделить(", ")
для строкаРезультата из результатМассивом
знч ключИЗначение = строкаРезультата.Разделить("=")
знч результатМассивом = результатСтрокой.Разделить(", ")
для строкаРезультата из результатМассивом
знч ключИЗначение = строкаРезультата.Разделить("=")
результатСоответствием.Вставить(ключИЗначение[0], ключИЗначение[1])
;
результатСоответствием.Вставить(ключИЗначение[0], ключИЗначение[1])
;
возврат результатСоответствием
возврат результатСоответствием
;
@@ -12,163 +12,245 @@
******************************************************************************/
метод УстановленныеПлатформы(): Соответствие
пер установленныеПлатформы: Соответствие
пер установленныеПлатформы: Соответствие
знч каталогиПлатформы = КаталогиПлатформы()
знч каталогиПлатформы = КаталогиПлатформы()
знч настройкиПоискаФайлов = новый НастройкиПоискаФайлов()
настройкиПоискаФайлов.ИсключитьФайлы(Истина)
настройкиПоискаФайлов.МаксимальнаяГлубина(1)
знч настройкиПоискаФайлов = новый НастройкиПоискаФайлов()
настройкиПоискаФайлов.ИсключитьФайлы(Истина)
настройкиПоискаФайлов.МаксимальнаяГлубина(1)
для каталогПлатформы из каталогиПлатформы
знч найденныеФайлы = Файлы.Найти(каталогПлатформы, настройкиПоискаФайлов)
для найденныйФайл из найденныеФайлы
если не найденныйФайл.Имя.НачинаетсяС("8.3")
продолжить
;
установленныеПлатформы.Вставить(найденныйФайл.Имя, найденныйФайл.Путь)
;
;
для каталогПлатформы из каталогиПлатформы
знч найденныеФайлы = Файлы.Найти(каталогПлатформы, настройкиПоискаФайлов)
для найденныйФайл из найденныеФайлы
если не найденныйФайл.Имя.НачинаетсяС("8.3")
продолжить
;
установленныеПлатформы.Вставить(найденныйФайл.Имя, найденныйФайл.Путь)
;
;
возврат установленныеПлатформы
возврат установленныеПлатформы
;
метод МаксимальныеПлатформы(): Соответствие
знч установленныеПлатформы = УстановленныеПлатформы()
знч установленныеПлатформы = УстановленныеПлатформы()
пер максимальныеПлатформы: Соответствие
пер максимальныеПлатформы: Соответствие
для платформа из установленныеПлатформы
знч разложенныйТекущийРелиз = платформа.Ключ.Разделить(".")
для платформа из установленныеПлатформы
знч разложенныйТекущийРелиз = платформа.Ключ.Разделить(".")
пер релизБезВерсииМассивом = новый Массив(разложенныйТекущийРелиз)
релизБезВерсииМассивом.УдалитьПоИндексу(3)
пер релизБезВерсииМассивом = новый Массив(разложенныйТекущийРелиз)
релизБезВерсииМассивом.УдалитьПоИндексу(3)
знч релизБезВерсии = Строки.Соединить(релизБезВерсииМассивом, ".")
знч релизБезВерсии = Строки.Соединить(релизБезВерсииМассивом, ".")
если не максимальныеПлатформы.СодержитКлюч(релизБезВерсии)
максимальныеПлатформы.Вставить(релизБезВерсии, платформа.Значение)
продолжить
;
если не максимальныеПлатформы.СодержитКлюч(релизБезВерсии)
максимальныеПлатформы.Вставить(релизБезВерсии, платформа.Значение)
продолжить
;
знч последнийРелиз = максимальныеПлатформы.Получить(релизБезВерсии)
знч разложенныйПоследнийРелиз = последнийРелиз.Разделить(".")
знч последнийРелиз = максимальныеПлатформы.Получить(релизБезВерсии)
знч разложенныйПоследнийРелиз = последнийРелиз.Разделить(".")
если разложенныйТекущийРелиз[3] > разложенныйПоследнийРелиз[3]
максимальныеПлатформы.Вставить(релизБезВерсии, платформа.Значение)
;
;
если разложенныйТекущийРелиз[3] > разложенныйПоследнийРелиз[3]
максимальныеПлатформы.Вставить(релизБезВерсии, платформа.Значение)
;
;
возврат максимальныеПлатформы
возврат максимальныеПлатформы
;
метод УстановитьПлатформу(имяДистрибутива: Строка, версияПлатформы: Строка): Булево
знч используемаяОС = ИспользуемаяОС()
знч используемаяОС = ИспользуемаяОС()
выбор используемаяОС
когда ОперационныеСистемы.Windows
выбросить новый ИсключениеНедопустимоеСостояние("Установка под Windows не поддерживается")
когда ОперационныеСистемы.MacOS
ВыполнитьКомандуСистемы("hdiutil", ["attach", имяДистрибутива])
выбор используемаяОС
когда ОперационныеСистемы.Windows
знч имяВременногоКаталога = Файлы.СоздатьВременныйКаталог(, Ложь)
знч смонтированныйДиск = "/Volumes/1C Enterprise %версияПлатформы client for macOS/"
ВыполнитьКомандуСистемы("C:/Program Files/7-Zip/7z", ["x", "-o%имяВременногоКаталога", имяДистрибутива])
ВыполнитьКомандуСистемы("installer", ["-pkg", "\"" + смонтированныйДиск + "1cv8-client-%версияПлатформы.pkg"
+ "\"", "-target", "/opt"])
ВыполнитьMsiExec(["/package", "\"%имяВременногоКаталога\\1CEnterprise 8 (x86-64).msi\""])
Файлы.Удалить(имяВременногоКаталога)
ВыполнитьКомандуСистемы("hdiutil", ["unmount", "\"" + смонтированныйДиск + "\""])
когда ОперационныеСистемы.MacOS
ВыполнитьКомандуСистемы("hdiutil", ["attach", имяДистрибутива])
когда ОперационныеСистемы.Linux
выбросить новый ИсключениеНедопустимоеСостояние("Установка под Linux не поддерживается")
;
знч смонтированныйДиск = "/Volumes/1C Enterprise %версияПлатформы client for macOS/"
возврат Истина
ВыполнитьКомандуСистемы("installer", ["-pkg", "\"%{смонтированныйДиск}1cv8-client-%версияПлатформы.pkg" + "\"",
"-target", "/opt"])
ВыполнитьКомандуСистемы("hdiutil", ["unmount", "\"%смонтированныйДиск\""])
когда ОперационныеСистемы.Linux
выбросить новый ИсключениеНедопустимоеСостояние("Установка под Linux не поддерживается")
;
возврат Истина
;
метод УдалитьПлатформу(версияПлатформы: Строка): Булево
знч используемаяОС = ИспользуемаяОС()
выбор используемаяОС
когда ОперационныеСистемы.Windows
знч результат = ВыполнитьPowershell(["get-wmiobject", "Win32_Product", "-Filter", "'Name", "LIKE", "''\%(%версияПлатформы)'''"])
пер гуидУстановки = результат[0].Разделить(": ")[1]
ВыполнитьMsiExec(["/uninstall", "%гуидУстановки"])
когда ОперационныеСистемы.MacOS
выбросить новый ИсключениеНедопустимоеСостояние("Удаление под MacOS не поддерживается")
когда ОперационныеСистемы.Linux
выбросить новый ИсключениеНедопустимоеСостояние("Удаление под Linux не поддерживается")
;
возврат Истина
;
метод ВыполнитьКомандуСистемы(имяКоманды: Строка, параметры: Массив)
знч команда = новый ПроцессОс(имяКоманды, параметры, Ложь)
команда.Запустить()
команда.ОжидатьЗавершения()
знч команда = новый ПроцессОс(имяКоманды, параметры, Ложь)
команда.Запустить()
команда.ОжидатьЗавершения()
знч результатВыполненияСкрипта = новый ЧтениеДанных(команда.ПотокВывода, НастройкиПотокаВывода())
пер списокРезультатов: Массив
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
если прочитаннаяСтрока == ""
продолжить
;
знч результатВыполненияСкрипта = новый ЧтениеДанных(команда.ПотокВывода, НастройкиПотокаВывода())
пер списокРезультатов: Массив
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
если прочитаннаяСтрока == ""
продолжить
;
списокРезультатов.Добавить(прочитаннаяСтрока)
;
если не списокРезультатов.Пусто()
знч текстРезультатов = Строки.Соединить(списокРезультатов, "\в\н")
Консоль.Записать(текстРезультатов)
;
списокРезультатов.Добавить(прочитаннаяСтрока)
;
если не списокРезультатов.Пусто()
знч текстРезультатов = Строки.Соединить(списокРезультатов, "\в\н")
Консоль.Записать(текстРезультатов)
;
знч ошибкиВыполненияСкрипта = новый ЧтениеДанных(команда.ПотокОшибок, НастройкиПотокаВывода())
пер списокОшибок: Массив
пока не ошибкиВыполненияСкрипта.ЧтениеЗавершено()
знч прочитаннаяСтрока = ошибкиВыполненияСкрипта.ПрочитатьСтроку()
если прочитаннаяСтрока == ""
продолжить
;
знч ошибкиВыполненияСкрипта = новый ЧтениеДанных(команда.ПотокОшибок, НастройкиПотокаВывода())
пер списокОшибок: Массив
пока не ошибкиВыполненияСкрипта.ЧтениеЗавершено()
знч прочитаннаяСтрока = ошибкиВыполненияСкрипта.ПрочитатьСтроку()
если прочитаннаяСтрока == ""
продолжить
;
списокОшибок.Добавить(прочитаннаяСтрока)
;
если не списокОшибок.Пусто()
знч текстОшибки = Строки.Соединить(списокОшибок, "\в\н")
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
;
списокОшибок.Добавить(прочитаннаяСтрока)
;
если не списокОшибок.Пусто()
знч текстОшибки = Строки.Соединить(списокОшибок, "\в\н")
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
;
;
метод ВыполнитьPowershell(параметры: Массив): Массив
знч команда = новый ПроцессОс("powershell", параметры, Ложь)
команда.Запустить()
команда.ОжидатьЗавершения()
знч результатВыполненияСкрипта = новый ЧтениеДанных(команда.ПотокВывода, НастройкиПотокаВывода())
пер списокРезультатов: Массив
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
если прочитаннаяСтрока == ""
продолжить
;
списокРезультатов.Добавить(прочитаннаяСтрока)
;
знч ошибкиВыполненияСкрипта = новый ЧтениеДанных(команда.ПотокОшибок, НастройкиПотокаВывода())
пер списокОшибок: Массив
пока не ошибкиВыполненияСкрипта.ЧтениеЗавершено()
знч прочитаннаяСтрока = ошибкиВыполненияСкрипта.ПрочитатьСтроку()
если прочитаннаяСтрока == ""
продолжить
;
списокОшибок.Добавить(прочитаннаяСтрока)
;
если не списокОшибок.Пусто()
знч текстОшибки = Строки.Соединить(списокОшибок, "\в\н")
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
;
возврат списокРезультатов
;
метод ВыполнитьMsiExec(параметры: Массив)
знч временныйФайлЛога = Файлы.СоздатьВременныйФайл(, ".log")
параметры.Добавить("/quiet")
параметры.Добавить("/norestart")
параметры.Добавить("/Leo+")
параметры.Добавить("\"%временныйФайлЛога\"")
знч команда = новый ПроцессОс("msiexec", параметры, Ложь)
команда.Запустить()
команда.ОжидатьЗавершения()
пер списокОшибок = временныйФайлЛога.ОткрытьПотокЧтения().ПрочитатьКакТекст("UTF-16").Разделить("\в\н")
списокОшибок.Удалить(списокОшибок.Последний())
списокОшибок.Удалить(списокОшибок.Первый())
если не списокОшибок.Пусто()
знч текстОшибки = Строки.Соединить(списокОшибок, "\в\н")
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
;
;
метод НастройкиПотокаВывода(): НастройкиЧтенияДанных
пер настройкиПотокаВывода = новый НастройкиЧтенияДанных()
настройкиПотокаВывода.Кодировка = СредаИсполнения.ПолучитьСвойство("file.encoding")
пер настройкиПотокаВывода = новый НастройкиЧтенияДанных()
настройкиПотокаВывода.Кодировка = СредаИсполнения.ПолучитьСвойство("file.encoding")
возврат настройкиПотокаВывода
возврат настройкиПотокаВывода
;
перечисление ОперационныеСистемы
Windows,
MacOS,
Linux
Windows,
MacOS,
Linux
;
метод ИспользуемаяОС(): ОперационныеСистемы
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
выбор когда имяОС.НачинаетсяС("windows", Истина)
возврат ОперационныеСистемы.Windows
выбор когда имяОС.НачинаетсяС("windows", Истина)
возврат ОперационныеСистемы.Windows
когда имяОС.Содержит("mac", Истина)
возврат ОперационныеСистемы.MacOS
когда имяОС.Содержит("mac", Истина)
возврат ОперационныеСистемы.MacOS
когда имяОС.Содержит("nux", Истина)
возврат ОперационныеСистемы.Linux
когда имяОС.Содержит("nux", Истина)
возврат ОперационныеСистемы.Linux
иначе
выбросить новый ИсключениеНедопустимоеСостояние("Неизвестная ОС")
;
иначе
выбросить новый ИсключениеНедопустимоеСостояние("Неизвестная ОС")
;
;
метод КаталогиПлатформы(): Массив
пер списокКаталогов: Массив
пер списокКаталогов: Массив
знч используемаяОС = ИспользуемаяОС()
знч используемаяОС = ИспользуемаяОС()
выбор используемаяОС
когда ОперационныеСистемы.Windows
знч каталог32 = СредаИсполнения.ПолучитьПеременную("ProgramFiles(x86)")
списокКаталогов.Добавить(каталог32 + "\\1Cv8")
знч каталог64 = СредаИсполнения.ПолучитьПеременную("ProgramFiles")
списокКаталогов.Добавить(каталог64 + "\\1Cv8")
когда ОперационныеСистемы.MacOS
списокКаталогов.Добавить("/opt/1Cv8")
когда ОперационныеСистемы.Linux
списокКаталогов.Добавить("/opt/1C/v8.3/x86_64")
;
выбор используемаяОС
когда ОперационныеСистемы.Windows
знч каталог32 = СредаИсполнения.ПолучитьПеременную("ProgramFiles(x86)")
списокКаталогов.Добавить(каталог32 + "\\1Cv8")
знч каталог64 = СредаИсполнения.ПолучитьПеременную("ProgramFiles")
списокКаталогов.Добавить(каталог64 + "\\1Cv8")
когда ОперационныеСистемы.MacOS
списокКаталогов.Добавить("/opt/1Cv8")
когда ОперационныеСистемы.Linux
списокКаталогов.Добавить("/opt/1C/v8.3/x86_64")
;
возврат списокКаталогов
возврат списокКаталогов
;
@@ -13,251 +13,278 @@
*
******************************************************************************/
конст ИСПОЛЬЗУЕМЫЕ_ВЕРСИИ_ПЛАТФОРМЫ = ["10", "12", "14", "15", "16", "17"]
конст ИСПОЛЬЗУЕМЫЕ_ВЕРСИИ_ПЛАТФОРМЫ = ["10", "12", "14", "15", "16", "17", "18"]
метод Скрипт()
знч имяПользователя = Консоль.СчитатьСтроку("Имя пользователя: ")
знч парольПользователя = Консоль.СчитатьСтроку("Пароль пользователя: ")
знч имяПользователя = Консоль.СчитатьСтроку("Имя пользователя: ")
знч парольПользователя = Консоль.СчитатьСтроку("Пароль пользователя: ")
ОбновитьПлатформы(имяПользователя, парольПользователя)
ОбновитьПлатформы(имяПользователя, парольПользователя, Истина)
;
метод ОбновитьПлатформы(имяПользователя: Строка, парольПользователя: Строка)
знч используемыеВерсииПлатформы = ИспользуемыеВерсииПлатформы()
метод ОбновитьПлатформы(имяПользователя: Строка, парольПользователя: Строка, подтвердитьУстановку: Булево)
знч используемыеВерсииПлатформы = ИспользуемыеВерсииПлатформы()
знч установленныеВерсииПлатформы = УстановленныеВерсииПлатформы()
знч установленныеВерсииПлатформы = УстановленныеВерсииПлатформы()
знч последниеВерсииПлатформы = ПоследниеВерсииПлатформы(имяПользователя, парольПользователя)
знч последниеВерсииПлатформы = ПоследниеВерсииПлатформы(имяПользователя, парольПользователя)
пер лишниеВерсииПлатформы: Множество
лишниеВерсииПлатформы.ДобавитьВсе(установленныеВерсииПлатформы)
лишниеВерсииПлатформы.УдалитьВсе(используемыеВерсииПлатформы)
лишниеВерсииПлатформы.УдалитьВсе(последниеВерсииПлатформы)
пер лишниеВерсииПлатформы: Множество
лишниеВерсииПлатформы.ДобавитьВсе(установленныеВерсииПлатформы)
лишниеВерсииПлатформы.УдалитьВсе(используемыеВерсииПлатформы)
лишниеВерсииПлатформы.УдалитьВсе(последниеВерсииПлатформы)
пер новыеВерсииПлатформы: Множество
новыеВерсииПлатформы.ДобавитьВсе(используемыеВерсииПлатформы)
новыеВерсииПлатформы.ДобавитьВсе(последниеВерсииПлатформы)
новыеВерсииПлатформы.УдалитьВсе(установленныеВерсииПлатформы)
пер новыеВерсииПлатформы: Множество
новыеВерсииПлатформы.ДобавитьВсе(используемыеВерсииПлатформы)
новыеВерсииПлатформы.ДобавитьВсе(последниеВерсииПлатформы)
новыеВерсииПлатформы.УдалитьВсе(установленныеВерсииПлатформы)
знч новыеВерсииПлатформыМассивом = новый Массив(новыеВерсииПлатформы)
Массив.Сортировать(новыеВерсииПлатформыМассивом)
для версияПлатформы из новыеВерсииПлатформыМассивом
Консоль.Записать("Необходимо установить платформу %версияПлатформы")
;
знч новыеВерсииПлатформыМассивом = новый Массив(новыеВерсииПлатформы)
Массив.Сортировать(новыеВерсииПлатформыМассивом)
для версияПлатформы из новыеВерсииПлатформыМассивом
Консоль.Записать("Необходимо установить платформу %версияПлатформы")
;
знч лишниеВерсииПлатформыМассивом = новый Массив(лишниеВерсииПлатформы)
Массив.Сортировать(лишниеВерсииПлатформыМассивом)
для версияПлатформы из лишниеВерсииПлатформыМассивом
Консоль.Записать("Необходимо удалить платформу %версияПлатформы")
;
знч установить = Консоль.СчитатьБулево("Выполнить обновление платформ?")
если не установить
возврат
;
для версияПлатформы из новыеВерсииПлатформыМассивом
Консоль.Записать("Скачиваю платформу %версияПлатформы")
знч имяДистрибутива = СкачатьПлатформу(версияПлатформы, имяПользователя, парольПользователя)
если имяДистрибутива == ""
прервать
;
Консоль.Записать("Устанавливаю платформу %версияПлатформы")
УстановитьПлатформу(имяДистрибутива, версияПлатформы)
Файлы.Удалить(имяДистрибутива)
;
знч лишниеВерсииПлатформыМассивом = новый Массив(лишниеВерсииПлатформы)
Массив.Сортировать(лишниеВерсииПлатформыМассивом)
для версияПлатформы из лишниеВерсииПлатформыМассивом
Консоль.Записать("Необходимо удалить платформу %версияПлатформы")
;
пер установить = Истина
если подтвердитьУстановку
установить = Консоль.СчитатьБулево("Выполнить обновление платформ?")
;
если не установить
возврат
;
для версияПлатформы из новыеВерсииПлатформыМассивом
Консоль.Записать("Скачиваю платформу %версияПлатформы")
знч имяДистрибутива = СкачатьПлатформу(версияПлатформы, имяПользователя, парольПользователя)
если имяДистрибутива == ""
прервать
;
Консоль.Записать("Устанавливаю платформу %версияПлатформы")
УстановитьПлатформу(имяДистрибутива, версияПлатформы)
Файлы.Удалить(имяДистрибутива)
;
для версияПлатформы из лишниеВерсииПлатформыМассивом
Консоль.Записать("Удаляю платформу %версияПлатформы")
УдалитьПлатформу(версияПлатформы)
;
;
метод ИспользуемыеВерсииПлатформы(): Множество
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/СписокИнформационныхБаз.sbsl", "ИспользуемыеВерсии", [])
знч версииПлатформы = ОбъектИзПотокаВывода(потокВывода) как Массив
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/СписокИнформационныхБаз.sbsl", "ИспользуемыеВерсии", [])
знч версииПлатформы = ОбъектИзПотокаВывода(потокВывода) как Массив
пер используемыеВерсииПлатформы: Множество
для версияПлатформы из версииПлатформы
знч версияМассивом = версияПлатформы.Разделить("|")
Консоль.Записать("База " + версияМассивом[0] + " использует версию " + версияМассивом[1])
используемыеВерсииПлатформы.Добавить(версияМассивом[1])
;
пер используемыеВерсииПлатформы: Множество
для версияПлатформы из версииПлатформы
знч версияМассивом = версияПлатформы.Разделить("|")
возврат используемыеВерсииПлатформы
Консоль.Записать("База " + версияМассивом[0] + " использует версию " + версияМассивом[1])
используемыеВерсииПлатформы.Добавить(версияМассивом[1])
;
возврат используемыеВерсииПлатформы
;
метод УстановленныеВерсииПлатформы(): Множество
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/УстановленныеПлатформы83.sbsl", "УстановленныеПлатформы", [])
знч версииПлатформы = ОбъектИзПотокаВывода(потокВывода) как Массив
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/УстановленныеПлатформы83.sbsl", "УстановленныеПлатформы", [])
знч версииПлатформы = ОбъектИзПотокаВывода(потокВывода) как Соответствие
пер установленныеВерсииПлатформы: Множество
для версияПлатформы из версииПлатформы
установленныеВерсииПлатформы.Добавить(версияПлатформы.Подстрока(0, версияПлатформы.Найти("|")))
;
пер установленныеВерсииПлатформы: Множество
для версияПлатформы из версииПлатформы
установленныеВерсииПлатформы.Добавить(версияПлатформы.Ключ)
;
возврат установленныеВерсииПлатформы
возврат установленныеВерсииПлатформы
;
метод ПоследниеВерсииПлатформы(имяПользователя: Строка, парольПользователя: Строка): Множество
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/ОпубликованныеПлатформы83.sbsl", "ПоследниеРелизы", [имяПользователя,
парольПользователя])
знч версииПлатформы = ОбъектИзПотокаВывода(потокВывода) как Массив
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/ОпубликованныеПлатформы83.sbsl", "ПоследниеРелизы", [имяПользователя,
парольПользователя])
знч версииПлатформы = ОбъектИзПотокаВывода(потокВывода) как Массив
пер последниеВерсииПлатформы: Множество
знч результатВыполненияСкрипта = новый ЧтениеДанных(потокВывода)
для версияПлатформы из версииПлатформы
знч разложеннаяВерсияПлатформы = версияПлатформы.Разделить(".")
пер последниеВерсииПлатформы: Множество
знч результатВыполненияСкрипта = новый ЧтениеДанных(потокВывода)
для версияПлатформы из версииПлатформы
знч разложеннаяВерсияПлатформы = версияПлатформы.Разделить(".")
если не ИСПОЛЬЗУЕМЫЕ_ВЕРСИИ_ПЛАТФОРМЫ.Содержит(разложеннаяВерсияПлатформы[2])
продолжить
;
если не ИСПОЛЬЗУЕМЫЕ_ВЕРСИИ_ПЛАТФОРМЫ.Содержит(разложеннаяВерсияПлатформы[2])
продолжить
;
последниеВерсииПлатформы.Добавить(версияПлатформы)
;
последниеВерсииПлатформы.Добавить(версияПлатформы)
;
возврат последниеВерсииПлатформы
возврат последниеВерсииПлатформы
;
метод СкачатьПлатформу(версияПлатформы: Строка, имяПользователя: Строка, парольПользователя: Строка): Строка
знч используемаяОС = ИспользуемаяОС()
пер целеваяПлатформа: Строка
выбор используемаяОС
когда ОперационныеСистемы.Windows
целеваяПлатформа = "platform-win64"
когда ОперационныеСистемы.MacOS
целеваяПлатформа = "platform-osx"
когда ОперационныеСистемы.Linux
целеваяПлатформа = "platform-deb64"
;
знч используемаяОС = ИспользуемаяОС()
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/dl-1c.sbsl", "main", [имяПользователя,
парольПользователя, целеваяПлатформа, версияПлатформы])
знч имяДистрибутива = ОбъектИзПотокаВывода(потокВывода) как Строка
пер целеваяПлатформа: Строка
выбор используемаяОС
когда ОперационныеСистемы.Windows
целеваяПлатформа = "platform-win64"
когда ОперационныеСистемы.MacOS
целеваяПлатформа = "platform-osx"
когда ОперационныеСистемы.Linux
целеваяПлатформа = "platform-deb64"
;
возврат имяДистрибутива
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/dl-1c.sbsl", "main", [имяПользователя, парольПользователя, целеваяПлатформа,
версияПлатформы])
знч имяДистрибутива = ОбъектИзПотокаВывода(потокВывода) как Строка
возврат имяДистрибутива
;
метод УстановитьПлатформу(имяДистрибутива: Строка, версияПлатформы: Строка): Булево
знч используемаяОС = ИспользуемаяОС()
ВыполнитьСкрипт("../Библиотеки/УстановленныеПлатформы83.sbsl", "УстановитьПлатформу", [имяДистрибутива, версияПлатформы])
возврат Истина
знч используемаяОС = ИспользуемаяОС()
ВыполнитьСкрипт("../Библиотеки/УстановленныеПлатформы83.sbsl", "УстановитьПлатформу", [имяДистрибутива, версияПлатформы])
возврат Истина
;
метод УдалитьПлатформу(версияПлатформы: Строка): Булево
знч используемаяОС = ИспользуемаяОС()
ВыполнитьСкрипт("../Библиотеки/УстановленныеПлатформы83.sbsl", "УдалитьПлатформу", [версияПлатформы])
возврат Истина
;
перечисление ОперационныеСистемы
Windows,
MacOS,
Linux
Windows,
MacOS,
Linux
;
метод ИспользуемаяОС(): ОперационныеСистемы
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
выбор
когда имяОС.НачинаетсяС("windows", Истина)
возврат ОперационныеСистемы.Windows
выбор когда имяОС.НачинаетсяС("windows", Истина)
возврат ОперационныеСистемы.Windows
когда имяОС.Содержит("mac", Истина)
возврат ОперационныеСистемы.MacOS
когда имяОС.Содержит("mac", Истина)
возврат ОперационныеСистемы.MacOS
когда имяОС.Содержит("nux", Истина)
возврат ОперационныеСистемы.Linux
когда имяОС.Содержит("nux", Истина)
возврат ОперационныеСистемы.Linux
иначе
выбросить новый ИсключениеНедопустимоеСостояние("Неизвестная ОС")
;
иначе
выбросить новый ИсключениеНедопустимоеСостояние("Неизвестная ОС")
;
;
/*
* Методы для вызова других скриптов. Необходимо копировать в свой скрипт
*/
метод ВыполнитьСкрипт(имяФайлаСкрипта: Строка, имяКомандыСкрипта: Строка, параметрыСкрипта: Массив): ПотокЧтения
пер расширениеИсполнителя: Строка
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
выбор
когда имяОС.НачинаетсяС("windows", Истина)
расширениеИсполнителя = "cmd"
иначе
расширениеИсполнителя = "sh"
;
знч путьКИсполнителю = СредаИсполнения.ПолучитьСвойство("logback.configurationFile").Удалить("config" + Файлы.СимволРазделителя
+ "logback.xml") + "bin/executor_j11." + расширениеИсполнителя
пер расширениеИсполнителя: Строка
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
выбор когда имяОС.НачинаетсяС("windows", Истина)
расширениеИсполнителя = "cmd"
иначе
расширениеИсполнителя = "sh"
;
знч путьКИсполнителю = СредаИсполнения.ПолучитьСвойство("logback.configurationFile").Удалить("config" + Файлы.СимволРазделителя
+ "logback.xml") + "bin/executor_j11." + расширениеИсполнителя
знч командаТекущегоСкрипта = СредаИсполнения.ПолучитьСвойство("sun.java.command")
пер имяФайлаТекущегоСкрипта = командаТекущегоСкрипта.Подстрока(0, командаТекущегоСкрипта.Найти(".sbsl") + 5)
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
знч файлТекущегоСкрипта = новый Файл(имяФайлаТекущегоСкрипта)
пер путьТекущегоСкрипта = ""
если файлТекущегоСкрипта.Каталог != Неопределено
путьТекущегоСкрипта = файлТекущегоСкрипта.Каталог.Путь + Файлы.СимволРазделителя
;
знч командаТекущегоСкрипта = СредаИсполнения.ПолучитьСвойство("sun.java.command")
пер имяФайлаТекущегоСкрипта = командаТекущегоСкрипта.Подстрока(0, командаТекущегоСкрипта.Найти(".sbsl") + 5)
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
знч файлТекущегоСкрипта = новый Файл(имяФайлаТекущегоСкрипта)
пер путьТекущегоСкрипта = ""
если файлТекущегоСкрипта.Каталог != Неопределено
путьТекущегоСкрипта = файлТекущегоСкрипта.Каталог.Путь + Файлы.СимволРазделителя
;
пер аргументыПроцессаОс = ["-s", путьТекущегоСкрипта + имяФайлаСкрипта, "-m", имяКомандыСкрипта]
если не параметрыСкрипта.Пусто()
аргументыПроцессаОс.ДобавитьВсе(параметрыСкрипта)
;
пер аргументыПроцессаОс = ["-s", путьТекущегоСкрипта + имяФайлаСкрипта, "-m", имяКомандыСкрипта]
если не параметрыСкрипта.Пусто()
аргументыПроцессаОс.ДобавитьВсе(параметрыСкрипта)
;
знч библиотека = новый ПроцессОс(путьКИсполнителю, аргументыПроцессаОс, Ложь)
знч библиотека = новый ПроцессОс(путьКИсполнителю, аргументыПроцессаОс, Ложь)
библиотека.Запустить()
библиотека.Запустить()
библиотека.ОжидатьЗавершения()
знч ошибкиВыполненияСкрипта = новый ЧтениеДанных(библиотека.ПотокОшибок, НастройкиПотокаВывода())
пер списокОшибок: Массив
пока не ошибкиВыполненияСкрипта.ЧтениеЗавершено()
знч прочитаннаяСтрока = ошибкиВыполненияСкрипта.ПрочитатьСтроку()
если прочитаннаяСтрока == ""
продолжить
;
знч ошибкиВыполненияСкрипта = библиотека.ПолучитьПотокОшибок()
знч текстОшибок = ошибкиВыполненияСкрипта.ПрочитатьКакТекст(КодировкаПотокаВыводаСкриптов())
если не текстОшибок.Пусто()
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибок)
;
списокОшибок.Добавить(прочитаннаяСтрока)
;
если не списокОшибок.Пусто()
знч текстОшибки = Строки.Соединить(списокОшибок, "\в\н")
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
;
возврат библиотека.ПотокВывода
возврат библиотека.ПотокВывода
;
метод НастройкиПотокаВывода(): НастройкиЧтенияДанных
пер настройкиПотокаВывода = новый НастройкиЧтенияДанных()
настройкиПотокаВывода.Кодировка = СредаИсполнения.ПолучитьСвойство("file.encoding")
возврат настройкиПотокаВывода
метод КодировкаПотокаВыводаСкриптов(): Строка
возврат СредаИсполнения.ПолучитьСвойство("file.encoding")
;
метод ОбъектИзПотокаВывода(потокВывода: ПотокЧтения): Строка|Массив
пер результаты: Массив
знч результатВыполненияСкрипта = новый ЧтениеДанных(потокВывода, НастройкиПотокаВывода())
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
метод НастройкиПотокаВыводаСкриптов(): НастройкиЧтенияДанных
пер настройкиПотокаВывода = новый НастройкиЧтенияДанных()
настройкиПотокаВывода.Кодировка = КодировкаПотокаВыводаСкриптов()
если прочитаннаяСтрока == ""
продолжить
;
знч объект = ОбъектИзСтроки(прочитаннаяСтрока)
результаты.Добавить(объект)
;
если результаты.Размер() == 1
возврат результаты[0]
;
возврат результаты
возврат настройкиПотокаВывода
;
метод ОбъектИзСтроки(строкаПотокаВывода: Строка): Строка|Массив
выбор строкаПотокаВывода[0]
когда "["
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
знч результатМассивом = результатСтрокой.Разделить(", ", Ложь)
возврат результатМассивом
метод ОбъектИзПотокаВывода(потокВывода: ПотокЧтения): Строка|Массив|Соответствие
пер массивСтрок: Массив
иначе
возврат строкаПотокаВывода
;
знч результатВыполненияСкрипта = новый ЧтениеДанных(потокВывода, НастройкиПотокаВыводаСкриптов())
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
если прочитаннаяСтрока.Пусто()
продолжить
;
выбор прочитаннаяСтрока[0]
когда "["
знч результатМассивом = МассивИзСтроки(прочитаннаяСтрока)
если результатМассивом.Размер() == 1
массивСтрок.Добавить(результатМассивом[0])
иначе
возврат результатМассивом
;
когда "{"
возврат СоответствиеИзСтроки(прочитаннаяСтрока)
иначе
возврат прочитаннаяСтрока
;
;
возврат массивСтрок
;
метод МассивИзСтроки(строкаПотокаВывода: Строка): Массив
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
знч результатМассивом = результатСтрокой.Разделить(", ", Ложь)
возврат результатМассивом
;
метод СоответствиеИзСтроки(строкаПотокаВывода: Строка): Соответствие
пер результатСоответствием: Соответствие
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
знч результатМассивом = результатСтрокой.Разделить(", ")
для строкаРезультата из результатМассивом
знч ключИЗначение = строкаРезультата.Разделить("=")
результатСоответствием.Вставить(ключИЗначение[0], ключИЗначение[1])
;
возврат результатСоответствием
;