From 185c51ff3997c4327f016c25c650cbfb0f4a79a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B0=D0=BF=D1=80=D0=B0=D0=BB=D0=BE=D0=B2=20=D0=90?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80?= Date: Tue, 1 Dec 2020 21:06:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BB=D0=B0=D1=82=D1=84=D0=BE=D1=80?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Библиотеки/dl-1c.sbsl | 402 +++++++++++------------ Библиотеки/ЗапускСкриптов.sbsl | 136 ++++---- Библиотеки/УстановленныеПлатформы83.sbsl | 294 +++++++++++------ Скрипты/ОбновлениеПлатформ.sbsl | 387 ++++++++++++---------- 4 files changed, 653 insertions(+), 566 deletions(-) diff --git a/Библиотеки/dl-1c.sbsl b/Библиотеки/dl-1c.sbsl index 9eed585..7e9911e 100644 --- a/Библиотеки/dl-1c.sbsl +++ b/Библиотеки/dl-1c.sbsl @@ -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 + ; ; \ No newline at end of file diff --git a/Библиотеки/ЗапускСкриптов.sbsl b/Библиотеки/ЗапускСкриптов.sbsl index fe16fa8..537a4d6 100644 --- a/Библиотеки/ЗапускСкриптов.sbsl +++ b/Библиотеки/ЗапускСкриптов.sbsl @@ -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]) + ; - возврат результатСоответствием + возврат результатСоответствием ; \ No newline at end of file diff --git a/Библиотеки/УстановленныеПлатформы83.sbsl b/Библиотеки/УстановленныеПлатформы83.sbsl index a443ca8..0ca72cf 100644 --- a/Библиотеки/УстановленныеПлатформы83.sbsl +++ b/Библиотеки/УстановленныеПлатформы83.sbsl @@ -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") + ; - возврат списокКаталогов + возврат списокКаталогов ; \ No newline at end of file diff --git a/Скрипты/ОбновлениеПлатформ.sbsl b/Скрипты/ОбновлениеПлатформ.sbsl index f33bfbc..2b158ad 100644 --- a/Скрипты/ОбновлениеПлатформ.sbsl +++ b/Скрипты/ОбновлениеПлатформ.sbsl @@ -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]) + ; + + возврат результатСоответствием ; \ No newline at end of file