From 52b1cae96ffe9019b3e5043f27214120bdef564a Mon Sep 17 00:00:00 2001 From: Yuri Goncharuk Date: Sun, 1 Oct 2023 17:31:49 +0200 Subject: [PATCH 1/6] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=84=D0=BB=D0=B0=D0=B3=20--ibcmd=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20init-dev?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\266\320\265\320\275\320\270\321\217.os" | 295 ++++++++++-------- ...5\320\264\320\266\320\265\321\200Ibcmd.os" | 158 ++++++++++ ...20\260\321\202\320\276\321\200\320\260.os" | 57 +++- 3 files changed, 376 insertions(+), 134 deletions(-) create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200Ibcmd.os" diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" index ff39f101..f61032bb 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" @@ -16,6 +16,7 @@ // Параметры команды Перем ПутьКФайлуКонфигурации; +Перем ИспользоватьIbcmd; // Флаг использования утилиты ibcmd /////////////////////////////////////////////////////////////////////////////////////////////////// // Прикладной интерфейс @@ -50,6 +51,8 @@ "Поддержка режима реструктуризации -v1 на сервере"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--v2", "Поддержка режима реструктуризации -v2 на сервере"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -81,6 +84,8 @@ ПутьКФайлуКонфигурации = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--cf"]); + ИспользоватьIbcmd = ПараметрыКоманды["--ibcmd"]; + ИнициализироватьБазуДанных(РежимыРеструктуризации, ПараметрыКоманды["--src"], ПараметрыКоманды["--dt"], ДанныеПодключения, ПараметрыКоманды["--uccode"], ПараметрыКоманды["--v8version"], ПараметрыКоманды["--dev"], @@ -105,198 +110,222 @@ КодЯзыка = ДанныеПодключения.КодЯзыка; КодЯзыкаСеанса = ДанныеПодключения.КодЯзыкаСеанса; - СтрокаПодключенияХранилище = ПараметрыХранилища.СтрокаПодключения; - ПользовательХранилища = ПараметрыХранилища.Пользователь; - ПарольХранилища = ПараметрыХранилища.Пароль; - ВерсияХранилища = ПараметрыХранилища.Версия; - РежимОбновленияХранилища = ПараметрыХранилища.РежимОбновления; - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - Логирование.ПолучитьЛог("oscript.lib.v8runner").УстановитьУровень(Лог.Уровень()); - Если ПустаяСтрока(СтрокаПодключения) Тогда - КаталогБазы = ОбъединитьПути(КорневойПутьПроекта, ?(РежимРазработчика = Истина, "./build/ibservice", "./build/ib")); СтрокаПодключения = "/F""" + КаталогБазы + """"; КонецЕсли; - Лог.Отладка("ИнициализироватьБазуДанных СтрокаПодключения:" + СтрокаПодключения); + ОперацияПоддерживаетсяIbcmd = ЗначениеЗаполнено(ПутьКSRC) + И (НЕ ПараметрыХранилища.РежимОбновления); + МенеджерСборки = НовыйМенеджерСборки(ИспользоватьIbcmd, + СтрокаПодключения, ОперацияПоддерживаетсяIbcmd); + + МенеджерСборки.Инициализация( + ПараметрыКоманды, СтрокаПодключения, Пользователь, Пароль, + ВерсияПлатформы, КлючРазрешенияЗапуска, + КодЯзыка, КодЯзыкаСеанса); + + Лог.Отладка("ИнициализироватьБазуДанных СтрокаПодключения:" + СтрокаПодключения); + Если Лев(СтрокаПодключения, 2) = "/F" Тогда + + МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, "", ""); КаталогБазы = ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаПодключения, 3, СтрДлина(СтрокаПодключения) - 2)); - Лог.Отладка("Нашли каталог базы для удаления <%1> ", КаталогБазы); - - ФайлБазы = Новый Файл(КаталогБазы); - Если ФайлБазы.Существует() Тогда - Лог.Отладка("Удаляем файл " + ФайлБазы.ПолноеИмя); - УдалитьФайлы(ФайлБазы.ПолноеИмя, ПолучитьМаскуВсеФайлы()); - КонецЕсли; - СоздатьКаталог(ФайлБазы.ПолноеИмя); - МенеджерКонфигуратора.Инициализация( - ПараметрыКоманды, СтрокаПодключения, "", "", - ВерсияПлатформы, КлючРазрешенияЗапуска, - КодЯзыка, КодЯзыкаСеанса); - - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); - СоздатьФайловуюБазу(Конфигуратор, ФайлБазы.ПолноеИмя); + ОбеспечитьФайловуюБазу(МенеджерСборки, КаталогБазы); БазуСоздавали = Истина; Лог.Информация("Создали базу данных для " + СтрокаПодключения); - КонецЕсли; - // При первичной инициализации опускаем указание пользователя и пароля, т.к. их еще нет. - МенеджерКонфигуратора.Инициализация( - ПараметрыКоманды, СтрокаПодключения, "", "", - ВерсияПлатформы, КлючРазрешенияЗапуска, - КодЯзыка, КодЯзыкаСеанса); - - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); - Конфигуратор.УстановитьИмяФайлаСообщенийПлатформы(ВременныеФайлы.НовоеИмяФайла("log")); + КонецЕсли; Если Не ПустаяСтрока(ПутьКDT) Тогда - ПутьКDT = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьКDT)).ПолноеИмя; - Лог.Информация("Загружаем dt " + ПутьКDT); - Попытка - Если БазуСоздавали = Истина Тогда - Конфигуратор.ЗагрузитьИнформационнуюБазу(ПутьКDT); - Иначе - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); - Конфигуратор.ЗагрузитьИнформационнуюБазу(ПутьКDT); - КонецЕсли; - Исключение - ИнфоОшибки = ИнформацияОбОшибке(); - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение "Не удалось загрузить: - |" + ПодробноеПредставлениеОшибки(ИнфоОшибки); - КонецПопытки; + ЗагрузкаИзDt(МенеджерКонфигуратора, ПутьКDT, БазуСоздавали, СтрокаПодключения, Пользователь, Пароль); КонецЕсли; // Базу создали, пользователей еще нет. Если БазуСоздавали И ПустаяСтрока(ПутьКDT) Тогда - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, "", ""); + МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, "", ""); Пользователь = ""; Пароль = ""; Иначе - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); + МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); КонецЕсли; - Если Не ПустаяСтрока(ПутьКSRC) Тогда - Лог.Информация("Запускаю загрузку конфигурации из исходников"); + ЗагрузкаИзSrc(МенеджерСборки, ПутьКSRC); - ПутьКSRC = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьКSRC)).ПолноеИмя; - СписокФайлов = ""; - МенеджерКонфигуратора.СобратьИзИсходниковТекущуюКонфигурацию(ПутьКSRC, СписокФайлов, Ложь); + ЗагрузкаИзХранилища(МенеджерСборки, ПараметрыХранилища); - КонецЕсли; + ОбновитьКонфигурациюБД(МенеджерСборки, РежимРазработчика, РежимыРеструктуризации); - Попытка + ЗагрузкаИзФайлаКонфигурации(МенеджерСборки); - Если РежимОбновленияХранилища = Истина Тогда - Лог.Информация("Обновляем из хранилища"); - МенеджерКонфигуратора.ЗапуститьОбновлениеИзХранилища( - СтрокаПодключенияХранилище, ПользовательХранилища, ПарольХранилища, - ВерсияХранилища); - КонецЕсли; + МенеджерСборки.Деструктор(); - Если РежимРазработчика = Ложь Или РежимыРеструктуризации.Первый Или РежимыРеструктуризации.Второй Тогда - ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерКонфигуратора, - РежимыРеструктуризации.Первый, РежимыРеструктуризации.Второй); - КонецЕсли; - Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; + ДобавитьБазуВСписокБаз(НеДобавлятьВСписокБаз, ВерсияПлатформы, СтрокаПодключения); - Если ЗначениеЗаполнено(ПутьКФайлуКонфигурации) Тогда - ЗагрузкаИзФайлаКонфигурации(МенеджерКонфигуратора); - КонецЕсли; + Лог.Информация("Инициализация завершена"); - МенеджерКонфигуратора.Деструктор(); +КонецПроцедуры - Если НЕ НеДобавлятьВСписокБаз Тогда +Процедура ОбеспечитьФайловуюБазу(МенеджерСборки, КаталогБазы) + + Лог.Отладка("Нашли каталог базы для удаления <%1> ", КаталогБазы); + ФайлБазы = Новый Файл(КаталогБазы); + Если ФайлБазы.Существует() Тогда + Лог.Отладка("Удаляем файл " + ФайлБазы.ПолноеИмя); + УдалитьФайлы(ФайлБазы.ПолноеИмя, ПолучитьМаскуВсеФайлы()); + КонецЕсли; + + СоздатьКаталог(ФайлБазы.ПолноеИмя); + Попытка + МенеджерСборки.СоздатьФайловуюБазу(КаталогБазы); + Исключение + ИнфоОшибки = ИнформацияОбОшибке(); + МенеджерСборки.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнфоОшибки); + КонецПопытки; + +КонецПроцедуры - ДопДанныеСпискаБаз = Новый Структура; - ДопДанныеСпискаБаз.Вставить("RootPath", КорневойПутьПроекта); - Попытка - Если ЗначениеЗаполнено(ВерсияПлатформы) Тогда - ДопДанныеСпискаБаз.Вставить("Version", ВерсияПлатформы); - КонецЕсли; - МенеджерСпискаБаз.ДобавитьБазуВСписокБаз(СтрокаПодключения, - Новый Файл(КорневойПутьПроекта).ИмяБезРасширения, - ДопДанныеСпискаБаз); - Исключение - Лог.Предупреждение("Добавление базы в список " + ОписаниеОшибки()); - КонецПопытки; +Процедура ЗагрузкаИзФайлаКонфигурации(МенеджерКонфигуратора) + Если ПустаяСтрока(ПутьКФайлуКонфигурации) Тогда + Возврат; КонецЕсли; - Лог.Информация("Инициализация завершена"); - -КонецПроцедуры + Лог.Информация("Запускаем загрузку конфигурации из cf-файла"); + МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); + ПутьКФайлуСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьКФайлуКонфигурации); -Процедура СоздатьФайловуюБазу(Конфигуратор, Знач КаталогБазы, Знач ПутьКШаблону = "", - Знач ИмяБазыВСписке = "", Знач КодЯзыка = "") - Лог.Отладка("Создаю файловую базу " + КаталогБазы); + Попытка + МенеджерКонфигуратора.ЗагрузитьФайлКонфигурации(ПутьКФайлуСВерсией, Ложь); + МенеджерКонфигуратора.ОбновитьКонфигурациюБазыДанных(Ложь); + Исключение + МенеджерКонфигуратора.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; - ФС.ОбеспечитьКаталог(КаталогБазы); - УдалитьФайлы(КаталогБазы, ПолучитьМаскуВсеФайлы()); +КонецПроцедуры - ПараметрыЗапуска = Новый Массив; - ПараметрыЗапуска.Добавить("CREATEINFOBASE"); - ПараметрыЗапуска.Добавить("File=""" +КаталогБазы + """"); - ПараметрыЗапуска.Добавить("/Out""" +Конфигуратор.ФайлИнформации() + """"); - Если ЗначениеЗаполнено(КодЯзыка) Тогда - ПараметрыЗапуска.Добавить("/L" +СокрЛП(КодЯзыка)); - КонецЕсли; +Процедура ЗагрузкаИзSrc(МенеджерСборки, ПутьКSRC) - Если ИмяБазыВСписке <> "" Тогда - ПараметрыЗапуска.Добавить("/AddInList""" + ИмяБазыВСписке + """"); - КонецЕсли; - Если ПутьКШаблону <> "" Тогда - ПараметрыЗапуска.Добавить("/UseTemplate""" + ПутьКШаблону + """"); + Если ПустаяСтрока(ПутьКSRC) Тогда + Возврат; КонецЕсли; + + Лог.Информация("Запускаю загрузку конфигурации из исходников"); + ПолныйПутьКSRC = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьКSRC)).ПолноеИмя; + СписокФайлов = ""; + МенеджерСборки.СобратьИзИсходниковТекущуюКонфигурацию(ПолныйПутьКSRC, СписокФайлов, Ложь); + +КонецПроцедуры - СтрокаЗапуска = ""; - Для Каждого Параметр Из ПараметрыЗапуска Цикл - СтрокаЗапуска = СтрокаЗапуска + " " + Параметр; - КонецЦикла; - - Приложение = Конфигуратор.ПутьКПлатформе1С(); - Если Найти(Приложение, " ") > 0 Тогда - Приложение = ОбщиеМетоды.ОбернутьПутьВКавычки(Приложение); - КонецЕсли; - Приложение = Приложение + " " + СтрокаЗапуска; +Процедура ЗагрузкаИзDt(МенеджерКонфигуратора, ПутьКDT, БазуСоздавали, СтрокаПодключения, Пользователь, Пароль) + Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); + ПутьКDT = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьКDT)).ПолноеИмя; + Лог.Информация("Загружаем dt " + ПутьКDT); Попытка - ОбщиеМетоды.ЗапуститьПроцесс(Приложение); + Если БазуСоздавали = Истина Тогда + Конфигуратор.ЗагрузитьИнформационнуюБазу(ПутьКDT); + Иначе + Конфигуратор.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); + Конфигуратор.ЗагрузитьИнформационнуюБазу(ПутьКDT); + КонецЕсли; Исключение ИнфоОшибки = ИнформацияОбОшибке(); - ВызватьИсключение "Не удалось создать файловую ИБ: + МенеджерКонфигуратора.Деструктор(); + ВызватьИсключение "Не удалось загрузить: |" + ПодробноеПредставлениеОшибки(ИнфоОшибки); КонецПопытки; - РезультатСообщение = ОбщиеМетоды.ПрочитатьФайлИнформации(Конфигуратор.ФайлИнформации()); - Если НЕ (СтрНайти(РезультатСообщение, "успешно завершено") = 0 - ИЛИ СтрНайти(РезультатСообщение, "completed successfully") = 0) Тогда +КонецПроцедуры - ВызватьИсключение "Результат работы не успешен: " + Символы.ПС + РезультатСообщение; +Процедура ЗагрузкаИзХранилища(МенеджерКонфигуратора, ПараметрыХранилища) + Если Не ПараметрыХранилища.РежимОбновления Тогда + Возврат; КонецЕсли; + Лог.Информация("Обновляем из хранилища"); + Попытка + МенеджерКонфигуратора.ЗапуститьОбновлениеИзХранилища( + ПараметрыХранилища.СтрокаПодключения, ПараметрыХранилища.Пользователь, ПараметрыХранилища.Пароль, + ПараметрыХранилища.Версия); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + МенеджерКонфигуратора.Деструктор(); + ВызватьИсключение "Не удалось загрузить базу из хранилища: + |" + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + КонецПроцедуры -Процедура ЗагрузкаИзФайлаКонфигурации(МенеджерКонфигуратора) +Процедура ОбновитьКонфигурациюБД(МенеджерСборки, РежимРазработчика, РежимыРеструктуризации) + + Попытка + Если РежимРазработчика = Ложь Или РежимыРеструктуризации.Первый Или РежимыРеструктуризации.Второй Тогда + ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерСборки, + РежимыРеструктуризации.Первый, РежимыРеструктуризации.Второй); + КонецЕсли; + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; - Лог.Информация("Запускаем загрузку конфигурации из cf-файла"); - МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); - ПутьКФайлуСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьКФайлуКонфигурации); +КонецПроцедуры + +Процедура ДобавитьБазуВСписокБаз(НеДобавлятьВСписокБаз, ВерсияПлатформы, СтрокаПодключения) + + Если НЕ НеДобавлятьВСписокБаз Тогда + Возврат; + КонецЕсли; + ДопДанныеСпискаБаз = Новый Структура; + ДопДанныеСпискаБаз.Вставить("RootPath", КорневойПутьПроекта); Попытка - МенеджерКонфигуратора.ЗагрузитьФайлКонфигурации(ПутьКФайлуСВерсией, Ложь); - МенеджерКонфигуратора.ОбновитьКонфигурациюБазыДанных(Ложь); + Если ЗначениеЗаполнено(ВерсияПлатформы) Тогда + ДопДанныеСпискаБаз.Вставить("Version", ВерсияПлатформы); + КонецЕсли; + МенеджерСпискаБаз.ДобавитьБазуВСписокБаз(СтрокаПодключения, + Новый Файл(КорневойПутьПроекта).ИмяБезРасширения, + ДопДанныеСпискаБаз); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Лог.Предупреждение("Добавление базы в список " + ОписаниеОшибки()); КонецПопытки; КонецПроцедуры + +Функция НовыйМенеджерСборки(ИспользоватьУтилитуКоманднойСтроки, СтрокаПодключенияИБ, ПоддерживаемаяОперация = Истина) + + Если Не ИспользоватьУтилитуКоманднойСтроки Тогда + Возврат НовыйМенеджерКонфигуратора(); + + ИначеЕсли Не ПоддерживаемаяОперация Тогда + Лог.Отладка("Операция не поддерживается ibcmd. Используем конфигуратор."); + Возврат НовыйМенеджерКонфигуратора(); + + ИначеЕсли Не СтрНачинаетсяС(СтрокаПодключенияИБ, "/F") Тогда + Лог.Информация("Серверные ИБ не поддерживаются ibcmd. Используем конфигуратор."); + Возврат НовыйМенеджерКонфигуратора(); + + Иначе + Возврат Новый МенеджерIbcmd(); + + КонецЕсли; + +КонецФункции + +Функция НовыйМенеджерКонфигуратора() + + МенеджерКонфигуратора = НовыйМенеджерКонфигуратора(); + Логирование.ПолучитьЛог("oscript.lib.v8runner").УстановитьУровень(Лог.Уровень()); + + Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); + Конфигуратор.УстановитьИмяФайлаСообщенийПлатформы(ВременныеФайлы.НовоеИмяФайла("log")); + + Возврат МенеджерКонфигуратора; + +КонецФункции diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200Ibcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200Ibcmd.os" new file mode 100644 index 00000000..80b26da6 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200Ibcmd.os" @@ -0,0 +1,158 @@ + +#Использовать ibcmdrunner +#Использовать v8find + +#Область ОписаниеПеременных + +Перем Лог; // Содердит объект ллога +Перем ВременныйКаталогДанныхСервера; // Временный каталог данных автономного сервера +Перем УправлениеИБ; // :УправлениеИБ +Перем Локаль; // Локаль приложения + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +Процедура УстановитьКонтекст(Знач СтрокаСоединения, Знач Пользователь, Знач Пароль) Экспорт + + КаталогБазы = ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаСоединения, 3, СтрДлина(СтрокаСоединения) - 2)); + УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогБазы); + УправлениеИБ.УстановитьПараметрыАвторизацииИБ(Пользователь, Пароль); + +КонецПроцедуры + +Процедура СоздатьФайловуюБазу(Знач КаталогБазы, Знач ПутьКШаблону = "", Знач ИмяБазыВСписке = "") Экспорт + + УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогБазы); + УправлениеИБ.СоздатьИБИзФайлаКонфигурации(ПутьКШаблону, Локаль); + +КонецПроцедуры + +Процедура СобратьИзИсходниковТекущуюКонфигурацию(Знач ВходнойКаталог, + Знач СписокФайловДляЗагрузки = "", СниматьСПоддержки = Ложь) Экспорт + + ИмяРасширения = ""; + УправлениеИБ.ЗагрузитьКонфигурациюИзФайлов(ВходнойКаталог, ИмяРасширения); + + Если СниматьСПоддержки Тогда + УправлениеИБ.СнятьСПоддержки(); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьКонфигурациюБазыДанных(ДинамическоеОбновление = Ложь) Экспорт + + Если ДинамическоеОбновление Тогда + РежимДинамическогоОбновления = "disable"; + Иначе + РежимДинамическогоОбновления = "auto"; + КонецЕсли; + ЗавершатьСеансы = "force"; + + ИмяРасширения = ""; + УправлениеИБ.ОбновитьКонфигурациюБазыДанных(ИмяРасширения, РежимДинамическогоОбновления, ЗавершатьСеансы); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура Конструктор() Экспорт + +КонецПроцедуры + +Процедура Деструктор() Экспорт + + Попытка + ВременныеФайлы.УдалитьФайл(ВременныйКаталогДанныхСервера); + Исключение + Лог.Отладка(ОписаниеОшибки()); + КонецПопытки; + + ВременныйКаталогДанныхСервера = ""; + +КонецПроцедуры + +Процедура Инициализация(Знач ПараметрыКоманды, Знач СтрокаПодключения, Знач Пользователь = "", Знач Пароль = "", + Знач ВерсияПлатформы = "", Знач КлючРазрешенияЗапуска = "", + Знач КодЯзыка = "", Знач КодЯзыкаСеанса = "") Экспорт + + ТекущаяПроцедура = "Инициализация"; + ИспользоватьВременнуюБазу = Ложь; + Лог.Отладка("Заданы ПараметрыКоманды %1", ЗначениеЗаполнено(ПараметрыКоманды)); + + Если ЗначениеЗаполнено(ПараметрыКоманды) Тогда + ИспользоватьВременнуюБазу = ПараметрыКоманды["ДанныеПодключения"].ИспользоватьВременнуюБазу; + Лог.Отладка("ИспользоватьВременнуюБазу %1", ИспользоватьВременнуюБазу); + КонецЕсли; + + Если Не ИспользоватьВременнуюБазу Тогда + Ожидаем.Что(СтрокаПодключения, ТекущаяПроцедура + ": не задана строка подключения").Заполнено(); + + КаталогБазы = ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаПодключения, 3, СтрДлина(СтрокаПодключения) - 2)); + + УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогБазы); + УправлениеИБ.УстановитьПараметрыАвторизацииИБ(Пользователь, Пароль); + + КонецЕсли; + + // КаталогВременнойИБ = ВременныеФайлы.СоздатьКаталог(); + // УправлениеКонфигуратором.КаталогСборки(КаталогВременнойИБ); + + Если НЕ ПустаяСтрока(ВерсияПлатформы) Тогда + Если ЗначениеЗаполнено(ПараметрыКоманды) Тогда + Разрядность = ПараметрыКоманды["--bitness"]; + Разрядность = ОбщиеМетоды.РазрядностьПлатформы(Разрядность); + Лог.Отладка("Разрядность платформы 1С указана %1", Разрядность); + Иначе + Разрядность = Неопределено; + Лог.Отладка("Разрядность платформы 1С не указана"); + КонецЕсли; + + ПутьКIbcmd = ПутьКIbcmd(ВерсияПлатформы, Разрядность); + УправлениеИБ.ПутьКПриложению(ПутьКIbcmd); + КонецЕсли; + + Если ЗначениеЗаполнено(КодЯзыка) Тогда + Локаль = КодЯзыка; + КонецЕсли; + + // Если ЗначениеЗаполнено(КодЯзыкаСеанса) Тогда + // УправлениеКонфигуратором.УстановитьКодЯзыкаСеанса(КодЯзыка); + // КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ИнициализироватьОбъект() + + Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); + ВременныйКаталогДанныхСервера = ВременныеФайлы.СоздатьКаталог(); + Локаль = ""; + + УправлениеИБ = Новый УправлениеИБ; + УправлениеИБ.УстановитьПараметрыАвтономногоСервера(ВременныйКаталогДанныхСервера); + +КонецПроцедуры + +Функция ПутьКIbcmd(ВерсияПлатформы, Разрядность) + + Если Не СтрНачинаетсяС(ВерсияПлатформы, "8.3") Тогда + ВызватьИсключение "Неверная версия платформы <" + ВерсияПлатформы + ">"; + КонецЕсли; + + Возврат Платформа1С.ПутьКIBCMD(ВерсияПлатформы, Разрядность); + +КонецФункции + +#КонецОбласти + +#Область ИнициализацияОбъекта + +ИнициализироватьОбъект(); + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" index e456306c..b97c76f9 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" @@ -109,7 +109,7 @@ КонецЕсли; Если ЗначениеЗаполнено(КодЯзыкаСеанса) Тогда - УправлениеКонфигуратором.УстановитьКодЯзыкаСеанса(КодЯзыка); + УправлениеКонфигуратором.УстановитьКодЯзыкаСеанса(КодЯзыкаСеанса); КонецЕсли; КонецПроцедуры @@ -126,6 +126,10 @@ КаталогВременнойИБ = Неопределено; КонецПроцедуры +Процедура УстановитьКонтекст(Знач СтрокаСоединения, Знач Пользователь, Знач Пароль) Экспорт + УправлениеКонфигуратором.УстановитьКонтекст(СтрокаСоединения, Пользователь, Пароль); +КонецПроцедуры + // Установить параметры подключения к хранилищу 1С // // Параметры: @@ -185,6 +189,57 @@ КонецПроцедуры +Процедура СоздатьФайловуюБазу(Знач КаталогБазы, Знач ПутьКШаблону = "", + Знач ИмяБазыВСписке = "", Знач КодЯзыка = "") Экспорт + Лог.Отладка("Создаю файловую базу " + КаталогБазы); + + ФС.ОбеспечитьКаталог(КаталогБазы); + УдалитьФайлы(КаталогБазы, ПолучитьМаскуВсеФайлы()); + + ПараметрыЗапуска = Новый Массив; + ПараметрыЗапуска.Добавить("CREATEINFOBASE"); + ПараметрыЗапуска.Добавить("File=""" +КаталогБазы + """"); + ПараметрыЗапуска.Добавить("/Out""" +УправлениеКонфигуратором.ФайлИнформации() + """"); + Если ЗначениеЗаполнено(КодЯзыка) Тогда + ПараметрыЗапуска.Добавить("/L" +СокрЛП(КодЯзыка)); + КонецЕсли; + + Если ИмяБазыВСписке <> "" Тогда + ПараметрыЗапуска.Добавить("/AddInList""" + ИмяБазыВСписке + """"); + КонецЕсли; + Если ПутьКШаблону <> "" Тогда + ПараметрыЗапуска.Добавить("/UseTemplate""" + ПутьКШаблону + """"); + КонецЕсли; + + СтрокаЗапуска = ""; + Для Каждого Параметр Из ПараметрыЗапуска Цикл + СтрокаЗапуска = СтрокаЗапуска + " " + Параметр; + КонецЦикла; + + Приложение = УправлениеКонфигуратором.ПутьКПлатформе1С(); + Если Найти(Приложение, " ") > 0 Тогда + Приложение = ОбщиеМетоды.ОбернутьПутьВКавычки(Приложение); + КонецЕсли; + Приложение = Приложение + " " + СтрокаЗапуска; + + Попытка + ОбщиеМетоды.ЗапуститьПроцесс(Приложение); + Исключение + ИнфоОшибки = ИнформацияОбОшибке(); + ВызватьИсключение "Не удалось создать файловую ИБ: + |" + ПодробноеПредставлениеОшибки(ИнфоОшибки); + КонецПопытки; + + РезультатСообщение = ОбщиеМетоды.ПрочитатьФайлИнформации(УправлениеКонфигуратором.ФайлИнформации()); + Если НЕ (СтрНайти(РезультатСообщение, "успешно завершено") = 0 + ИЛИ СтрНайти(РезультатСообщение, "completed successfully") = 0) Тогда + + ВызватьИсключение "Результат работы не успешен: " + Символы.ПС + РезультатСообщение; + + КонецЕсли; + +КонецПроцедуры + // Обновить конфигурацию БД на сервере // // Параметры: From 4c2fb0767de9378b1edcf50d168f1aece888a45e Mon Sep 17 00:00:00 2001 From: Yuri Goncharuk Date: Sun, 1 Oct 2023 17:45:44 +0200 Subject: [PATCH 2/6] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20=D0=B8?= =?UTF-8?q?=D0=B7=20=D0=B8=D1=81=D1=85=D0=BE=D0=B4=D0=BD=D0=B8=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\266\320\265\320\275\320\270\321\217.os" | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" index f61032bb..0ed40fbe 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" @@ -16,6 +16,7 @@ // Параметры команды Перем ПутьКФайлуКонфигурации; +Перем ПутьКИсходникам; Перем ИспользоватьIbcmd; // Флаг использования утилиты ibcmd /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -82,11 +83,11 @@ РежимыРеструктуризации.Вставить("Первый", ПараметрыКоманды["--v1"]); РежимыРеструктуризации.Вставить("Второй", ПараметрыКоманды["--v2"]); + ПутьКИсходникам = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--src"]); ПутьКФайлуКонфигурации = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--cf"]); - ИспользоватьIbcmd = ПараметрыКоманды["--ibcmd"]; - ИнициализироватьБазуДанных(РежимыРеструктуризации, ПараметрыКоманды["--src"], ПараметрыКоманды["--dt"], + ИнициализироватьБазуДанных(РежимыРеструктуризации, ПараметрыКоманды["--dt"], ДанныеПодключения, ПараметрыКоманды["--uccode"], ПараметрыКоманды["--v8version"], ПараметрыКоманды["--dev"], ПараметрыХранилища, @@ -96,7 +97,7 @@ Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; КонецФункции -Процедура ИнициализироватьБазуДанных(РежимыРеструктуризации, Знач ПутьКSRC, Знач ПутьКDT, Знач ДанныеПодключения, +Процедура ИнициализироватьБазуДанных(РежимыРеструктуризации, Знач ПутьКDT, Знач ДанныеПодключения, Знач КлючРазрешенияЗапуска, Знач ВерсияПлатформы, Знач РежимРазработчика, Знач ПараметрыХранилища, Знач НеДобавлятьВСписокБаз, Знач ПараметрыКоманды) @@ -117,8 +118,7 @@ СтрокаПодключения = "/F""" + КаталогБазы + """"; КонецЕсли; - ОперацияПоддерживаетсяIbcmd = ЗначениеЗаполнено(ПутьКSRC) - И (НЕ ПараметрыХранилища.РежимОбновления); + ОперацияПоддерживаетсяIbcmd = (НЕ ПараметрыХранилища.РежимОбновления); МенеджерСборки = НовыйМенеджерСборки(ИспользоватьIbcmd, СтрокаПодключения, ОперацияПоддерживаетсяIbcmd); @@ -153,7 +153,7 @@ МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); КонецЕсли; - ЗагрузкаИзSrc(МенеджерСборки, ПутьКSRC); + ЗагрузкаИзИсходников(МенеджерСборки); ЗагрузкаИзХранилища(МенеджерСборки, ПараметрыХранилища); @@ -209,16 +209,21 @@ КонецПроцедуры -Процедура ЗагрузкаИзSrc(МенеджерСборки, ПутьКSRC) +Процедура ЗагрузкаИзИсходников(МенеджерСборки) - Если ПустаяСтрока(ПутьКSRC) Тогда + Если ПустаяСтрока(ПутьКИсходникам) Тогда Возврат; КонецЕсли; Лог.Информация("Запускаю загрузку конфигурации из исходников"); - ПолныйПутьКSRC = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьКSRC)).ПолноеИмя; - СписокФайлов = ""; - МенеджерСборки.СобратьИзИсходниковТекущуюКонфигурацию(ПолныйПутьКSRC, СписокФайлов, Ложь); + Попытка + СписокФайлов = ""; + МенеджерСборки.СобратьИзИсходниковТекущуюКонфигурацию(ПутьКИсходникам, СписокФайлов, Ложь); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + МенеджерСборки.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; КонецПроцедуры From 416282e05bf75958564fac0011896ecc3e366b31 Mon Sep 17 00:00:00 2001 From: Yuri Goncharuk Date: Wed, 4 Oct 2023 17:03:28 +0200 Subject: [PATCH 3/6] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.os | 1 + ...20\266\320\265\320\275\320\270\321\217.os" | 161 +++++++++--------- ...5\320\264\320\266\320\265\321\200Ibcmd.os" | 160 ++++++++++------- ...20\260\321\202\320\276\321\200\320\260.os" | 75 ++++---- ...20\265\321\202\320\276\320\264\321\213.os" | 14 ++ 5 files changed, 224 insertions(+), 187 deletions(-) diff --git a/src/main.os b/src/main.os index dc80c424..3949701f 100644 --- a/src/main.os +++ b/src/main.os @@ -259,6 +259,7 @@ СтруктураПодключения.Вставить("Пароль", ЗначенияПараметров["--db-pwd"]); СтруктураПодключения.Вставить("КодЯзыка", ЗначенияПараметров["--language"]); СтруктураПодключения.Вставить("КодЯзыкаСеанса", ЗначенияПараметров["--locale"]); + СтруктураПодключения.Вставить("ВерсияПлатформы", ЗначенияПараметров["--v8version"]); СтруктураПодключения.Вставить("РазрядностьПлатформы", ЗначенияПараметров["--bitness"]); Рез = Новый Структура; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" index 0ed40fbe..50a7d928 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" @@ -11,16 +11,21 @@ #Использовать fs #Использовать v8runner +#Область ОписаниеПеременных + Перем Лог; Перем КорневойПутьПроекта; // Параметры команды +Перем ДанныеПодключения; Перем ПутьКФайлуКонфигурации; Перем ПутьКИсходникам; +Перем ПутьКФайлуВыгрузки; Перем ИспользоватьIbcmd; // Флаг использования утилиты ibcmd -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -65,6 +70,9 @@ // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений // ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) // +// Возвращаемое значение: +// Число - Код возврата команды. +// Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт Лог = ДополнительныеПараметры.Лог; @@ -84,68 +92,58 @@ РежимыРеструктуризации.Вставить("Второй", ПараметрыКоманды["--v2"]); ПутьКИсходникам = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--src"]); + ПутьКФайлуВыгрузки = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--dt"]); ПутьКФайлуКонфигурации = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--cf"]); ИспользоватьIbcmd = ПараметрыКоманды["--ibcmd"]; - ИнициализироватьБазуДанных(РежимыРеструктуризации, ПараметрыКоманды["--dt"], - ДанныеПодключения, ПараметрыКоманды["--uccode"], + ИнициализироватьБазуДанных(РежимыРеструктуризации, ПараметрыКоманды["--v8version"], ПараметрыКоманды["--dev"], ПараметрыХранилища, ПараметрыКоманды["--nocacheuse"], ПараметрыКоманды); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции -Процедура ИнициализироватьБазуДанных(РежимыРеструктуризации, Знач ПутьКDT, Знач ДанныеПодключения, - Знач КлючРазрешенияЗапуска, Знач ВерсияПлатформы, Знач РежимРазработчика, +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ИнициализироватьБазуДанных(РежимыРеструктуризации, + Знач ВерсияПлатформы, Знач РежимРазработчика, Знач ПараметрыХранилища, Знач НеДобавлятьВСписокБаз, Знач ПараметрыКоманды) Перем БазуСоздавали; БазуСоздавали = Ложь; - СтрокаПодключения = ДанныеПодключения.ПутьБазы; Пользователь = ДанныеПодключения.Пользователь; Пароль = ДанныеПодключения.Пароль; - КодЯзыка = ДанныеПодключения.КодЯзыка; - КодЯзыкаСеанса = ДанныеПодключения.КодЯзыкаСеанса; - - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - Если ПустаяСтрока(СтрокаПодключения) Тогда - КаталогБазы = ОбъединитьПути(КорневойПутьПроекта, ?(РежимРазработчика = Истина, "./build/ibservice", "./build/ib")); - СтрокаПодключения = "/F""" + КаталогБазы + """"; + Если ПустаяСтрока(ДанныеПодключения.ПутьБазы) Тогда + ДанныеПодключения = СоздатьДанныеПодключения(ДанныеПодключения, РежимРазработчика); КонецЕсли; + СтрокаПодключения = ДанныеПодключения.ПутьБазы; ОперацияПоддерживаетсяIbcmd = (НЕ ПараметрыХранилища.РежимОбновления); МенеджерСборки = НовыйМенеджерСборки(ИспользоватьIbcmd, - СтрокаПодключения, ОперацияПоддерживаетсяIbcmd); + ДанныеПодключения.ПутьБазы, ОперацияПоддерживаетсяIbcmd); - МенеджерСборки.Инициализация( - ПараметрыКоманды, СтрокаПодключения, Пользователь, Пароль, - ВерсияПлатформы, КлючРазрешенияЗапуска, - КодЯзыка, КодЯзыкаСеанса); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); Лог.Отладка("ИнициализироватьБазуДанных СтрокаПодключения:" + СтрокаПодключения); - Если Лев(СтрокаПодключения, 2) = "/F" Тогда + Если ОбщиеМетоды.ЭтоФайловаяИБ(СтрокаПодключения) Тогда - МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, "", ""); - КаталогБазы = ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаПодключения, 3, СтрДлина(СтрокаПодключения) - 2)); - ОбеспечитьФайловуюБазу(МенеджерСборки, КаталогБазы); + ОбеспечитьФайловуюБазу(МенеджерСборки, СтрокаПодключения); БазуСоздавали = Истина; Лог.Информация("Создали базу данных для " + СтрокаПодключения); - - КонецЕсли; - - Если Не ПустаяСтрока(ПутьКDT) Тогда - ЗагрузкаИзDt(МенеджерКонфигуратора, ПутьКDT, БазуСоздавали, СтрокаПодключения, Пользователь, Пароль); + КонецЕсли; // Базу создали, пользователей еще нет. - Если БазуСоздавали И ПустаяСтрока(ПутьКDT) Тогда + Если БазуСоздавали И ПустаяСтрока(ПутьКФайлуВыгрузки) Тогда МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, "", ""); Пользователь = ""; Пароль = ""; @@ -153,14 +151,24 @@ МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); КонецЕсли; - ЗагрузкаИзИсходников(МенеджерСборки); - - ЗагрузкаИзХранилища(МенеджерСборки, ПараметрыХранилища); - - ОбновитьКонфигурациюБД(МенеджерСборки, РежимРазработчика, РежимыРеструктуризации); + Если ЗначениеЗаполнено(ПутьКИсходникам) Тогда + ЗагрузкаИзИсходников(МенеджерСборки); + + ИначеЕсли ЗначениеЗаполнено(ПутьКФайлуВыгрузки) Тогда + ЗагрузкаИзФайлаВыгрузки(МенеджерСборки); - ЗагрузкаИзФайлаКонфигурации(МенеджерСборки); + ИначеЕсли ЗначениеЗаполнено(ПутьКФайлуКонфигурации) Тогда + ЗагрузкаИзФайлаКонфигурации(МенеджерСборки); + ИначеЕсли ПараметрыХранилища.РежимОбновления Тогда + ЗагрузкаИзХранилища(МенеджерСборки, ПараметрыХранилища); + ОбновитьКонфигурациюБД(МенеджерСборки, РежимРазработчика, РежимыРеструктуризации); + + Иначе + Лог.Информация("Создана пустая база данных."); + + КонецЕсли; + МенеджерСборки.Деструктор(); ДобавитьБазуВСписокБаз(НеДобавлятьВСписокБаз, ВерсияПлатформы, СтрокаПодключения); @@ -169,16 +177,12 @@ КонецПроцедуры -Процедура ОбеспечитьФайловуюБазу(МенеджерСборки, КаталогБазы) +Процедура ОбеспечитьФайловуюБазу(МенеджерСборки, СтрокаПодключения) + МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, "", ""); + КаталогБазы = ОбщиеМетоды.КаталогФайловойИБ(СтрокаПодключения); + Лог.Отладка("Нашли каталог базы для удаления <%1> ", КаталогБазы); - ФайлБазы = Новый Файл(КаталогБазы); - Если ФайлБазы.Существует() Тогда - Лог.Отладка("Удаляем файл " + ФайлБазы.ПолноеИмя); - УдалитьФайлы(ФайлБазы.ПолноеИмя, ПолучитьМаскуВсеФайлы()); - КонецЕсли; - - СоздатьКаталог(ФайлБазы.ПолноеИмя); Попытка МенеджерСборки.СоздатьФайловуюБазу(КаталогБазы); Исключение @@ -189,31 +193,24 @@ КонецПроцедуры -Процедура ЗагрузкаИзФайлаКонфигурации(МенеджерКонфигуратора) - - Если ПустаяСтрока(ПутьКФайлуКонфигурации) Тогда - Возврат; - КонецЕсли; +Процедура ЗагрузкаИзФайлаКонфигурации(МенеджерСборки) Лог.Информация("Запускаем загрузку конфигурации из cf-файла"); МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); ПутьКФайлуСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьКФайлуКонфигурации); Попытка - МенеджерКонфигуратора.ЗагрузитьФайлКонфигурации(ПутьКФайлуСВерсией, Ложь); - МенеджерКонфигуратора.ОбновитьКонфигурациюБазыДанных(Ложь); + МенеджерСборки.ЗагрузитьФайлКонфигурации(ПутьКФайлуСВерсией, Ложь); + МенеджерСборки.ОбновитьКонфигурациюБазыДанных(Ложь); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + МенеджерСборки.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; КонецПроцедуры Процедура ЗагрузкаИзИсходников(МенеджерСборки) - - Если ПустаяСтрока(ПутьКИсходникам) Тогда - Возврат; - КонецЕсли; Лог.Информация("Запускаю загрузку конфигурации из исходников"); Попытка @@ -227,33 +224,21 @@ КонецПроцедуры -Процедура ЗагрузкаИзDt(МенеджерКонфигуратора, ПутьКDT, БазуСоздавали, СтрокаПодключения, Пользователь, Пароль) +Процедура ЗагрузкаИзФайлаВыгрузки(МенеджерСборки) - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); - ПутьКDT = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьКDT)).ПолноеИмя; - Лог.Информация("Загружаем dt " + ПутьКDT); + Лог.Информация("Загружаем dt " + ПутьКФайлуВыгрузки); Попытка - Если БазуСоздавали = Истина Тогда - Конфигуратор.ЗагрузитьИнформационнуюБазу(ПутьКDT); - Иначе - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); - Конфигуратор.ЗагрузитьИнформационнуюБазу(ПутьКDT); - КонецЕсли; + МенеджерСборки.ЗагрузитьИнфобазуИзФайла(ПутьКФайлуВыгрузки); Исключение - ИнфоОшибки = ИнформацияОбОшибке(); - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение "Не удалось загрузить: - |" + ПодробноеПредставлениеОшибки(ИнфоОшибки); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + МенеджерСборки.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; КонецПроцедуры Процедура ЗагрузкаИзХранилища(МенеджерКонфигуратора, ПараметрыХранилища) - Если Не ПараметрыХранилища.РежимОбновления Тогда - Возврат; - КонецЕсли; - Лог.Информация("Обновляем из хранилища"); Попытка МенеджерКонфигуратора.ЗапуститьОбновлениеИзХранилища( @@ -306,17 +291,19 @@ Функция НовыйМенеджерСборки(ИспользоватьУтилитуКоманднойСтроки, СтрокаПодключенияИБ, ПоддерживаемаяОперация = Истина) Если Не ИспользоватьУтилитуКоманднойСтроки Тогда + Лог.Отладка("Используем конфигуратор."); Возврат НовыйМенеджерКонфигуратора(); ИначеЕсли Не ПоддерживаемаяОперация Тогда Лог.Отладка("Операция не поддерживается ibcmd. Используем конфигуратор."); Возврат НовыйМенеджерКонфигуратора(); - ИначеЕсли Не СтрНачинаетсяС(СтрокаПодключенияИБ, "/F") Тогда + ИначеЕсли Не ОбщиеМетоды.ЭтоФайловаяИБ(СтрокаПодключенияИБ) Тогда Лог.Информация("Серверные ИБ не поддерживаются ibcmd. Используем конфигуратор."); Возврат НовыйМенеджерКонфигуратора(); Иначе + Лог.Отладка("Используем ibcmd."); Возврат Новый МенеджерIbcmd(); КонецЕсли; @@ -325,12 +312,28 @@ Функция НовыйМенеджерКонфигуратора() - МенеджерКонфигуратора = НовыйМенеджерКонфигуратора(); + МенеджерКонфигуратора = Новый МенеджерКонфигуратора(); Логирование.ПолучитьЛог("oscript.lib.v8runner").УстановитьУровень(Лог.Уровень()); - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); - Конфигуратор.УстановитьИмяФайлаСообщенийПлатформы(ВременныеФайлы.НовоеИмяФайла("log")); + // Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); + // Конфигуратор.УстановитьИмяФайлаСообщенийПлатформы(ВременныеФайлы.НовоеИмяФайла("log")); Возврат МенеджерКонфигуратора; КонецФункции + +Функция СоздатьДанныеПодключения(ДанныеПодключения, РежимРазработчика) + + _ДанныеПодключения = Новый Структура(ДанныеПодключения); + КаталогБазы = ОбъединитьПути(КорневойПутьПроекта, ?(РежимРазработчика = Истина, "./build/ibservice", "./build/ib")); + Файл = Новый Файл(КаталогБазы); + _ДанныеПодключения.ПутьБазы = "/F""" + Файл.ПолноеИмя + """"; + _ДанныеПодключения.СтрокаПодключения = "/F""" + Файл.ПолноеИмя + """"; + _ДанныеПодключения.Пользователь = ""; + _ДанныеПодключения.Пароль = ""; + + Возврат _ДанныеПодключения; + +КонецФункции + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200Ibcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200Ibcmd.os" index 80b26da6..d6efb145 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200Ibcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200Ibcmd.os" @@ -15,7 +15,8 @@ Процедура УстановитьКонтекст(Знач СтрокаСоединения, Знач Пользователь, Знач Пароль) Экспорт - КаталогБазы = ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаСоединения, 3, СтрДлина(СтрокаСоединения) - 2)); + КаталогБазы = ОбщиеМетоды.КаталогФайловойИБ(СтрокаСоединения); + Лог.Отладка("Использовать каталог ИБ %1", КаталогБазы); УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогБазы); УправлениеИБ.УстановитьПараметрыАвторизацииИБ(Пользователь, Пароль); @@ -23,8 +24,13 @@ Процедура СоздатьФайловуюБазу(Знач КаталогБазы, Знач ПутьКШаблону = "", Знач ИмяБазыВСписке = "") Экспорт + ОбщиеМетоды.ОбеспечитьПустойКаталог(Новый Файл(КаталогБазы)); + УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогБазы); - УправлениеИБ.СоздатьИБИзФайлаКонфигурации(ПутьКШаблону, Локаль); + УправлениеИБ.СоздатьИБИзФайлаВыгрузки(ПутьКШаблону, ЛокальДляЗапуска()); + + СтрокаСоединения = СтрШаблон("File=""%1""", КаталогБазы); + ДобавитьБазуВСписокБаз(ИмяБазыВСписке, СтрокаСоединения); КонецПроцедуры @@ -32,7 +38,12 @@ Знач СписокФайловДляЗагрузки = "", СниматьСПоддержки = Ложь) Экспорт ИмяРасширения = ""; - УправлениеИБ.ЗагрузитьКонфигурациюИзФайлов(ВходнойКаталог, ИмяРасширения); + + Если ЗначениеЗаполнено(СписокФайловДляЗагрузки) Тогда + УправлениеИБ.ЗагрузитьВыбранныеФайлыКонфигурации(ВходнойКаталог, СписокФайловДляЗагрузки, ИмяРасширения); + Иначе + УправлениеИБ.ЗагрузитьКонфигурациюИзФайлов(ВходнойКаталог, ИмяРасширения); + КонецЕсли; Если СниматьСПоддержки Тогда УправлениеИБ.СнятьСПоддержки(); @@ -40,6 +51,21 @@ КонецПроцедуры +Процедура ЗагрузитьИнфобазуИзФайла(Знач ПутьКЗагружаемомуФайлуСДанными, Знач КоличествоЗаданий = 0) Экспорт + УправлениеИБ.ЗагрузитьДанныеИБ(ПутьКЗагружаемомуФайлуСДанными); +КонецПроцедуры + +Процедура ЗагрузитьФайлКонфигурации(Знач ПутьКФайлу, Знач СниматьСПоддержки = Истина) Экспорт + + ИмяРасширения = ""; + УправлениеИБ.ЗагрузитьКонфигурацию(ПутьКФайлу, ИмяРасширения); + + Если СниматьСПоддержки Тогда + УправлениеИБ.СнятьСПоддержки(); + КонецЕсли; + +КонецПроцедуры + Процедура ОбновитьКонфигурациюБазыДанных(ДинамическоеОбновление = Ложь) Экспорт Если ДинамическоеОбновление Тогда @@ -58,69 +84,54 @@ #Область ОбработчикиСобытий -Процедура Конструктор() Экспорт - -КонецПроцедуры - -Процедура Деструктор() Экспорт +Процедура ПриСозданииОбъекта() - Попытка - ВременныеФайлы.УдалитьФайл(ВременныйКаталогДанныхСервера); - Исключение - Лог.Отладка(ОписаниеОшибки()); - КонецПопытки; - - ВременныйКаталогДанныхСервера = ""; + Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); + ВременныйКаталогДанныхСервера = ВременныеФайлы.СоздатьКаталог(); + Локаль = ""; + + УправлениеИБ = Новый УправлениеИБ; + УправлениеИБ.УстановитьПараметрыАвтономногоСервера(ВременныйКаталогДанныхСервера); КонецПроцедуры -Процедура Инициализация(Знач ПараметрыКоманды, Знач СтрокаПодключения, Знач Пользователь = "", Знач Пароль = "", - Знач ВерсияПлатформы = "", Знач КлючРазрешенияЗапуска = "", - Знач КодЯзыка = "", Знач КодЯзыкаСеанса = "") Экспорт - - ТекущаяПроцедура = "Инициализация"; - ИспользоватьВременнуюБазу = Ложь; - Лог.Отладка("Заданы ПараметрыКоманды %1", ЗначениеЗаполнено(ПараметрыКоманды)); - - Если ЗначениеЗаполнено(ПараметрыКоманды) Тогда - ИспользоватьВременнуюБазу = ПараметрыКоманды["ДанныеПодключения"].ИспользоватьВременнуюБазу; - Лог.Отладка("ИспользоватьВременнуюБазу %1", ИспользоватьВременнуюБазу); - КонецЕсли; - - Если Не ИспользоватьВременнуюБазу Тогда - Ожидаем.Что(СтрокаПодключения, ТекущаяПроцедура + ": не задана строка подключения").Заполнено(); - - КаталогБазы = ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаПодключения, 3, СтрДлина(СтрокаПодключения) - 2)); - - УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогБазы); - УправлениеИБ.УстановитьПараметрыАвторизацииИБ(Пользователь, Пароль); - - КонецЕсли; - - // КаталогВременнойИБ = ВременныеФайлы.СоздатьКаталог(); - // УправлениеКонфигуратором.КаталогСборки(КаталогВременнойИБ); +Процедура Конструктор(Знач ДанныеПодключения, Знач ПараметрыКоманды) Экспорт - Если НЕ ПустаяСтрока(ВерсияПлатформы) Тогда - Если ЗначениеЗаполнено(ПараметрыКоманды) Тогда - Разрядность = ПараметрыКоманды["--bitness"]; - Разрядность = ОбщиеМетоды.РазрядностьПлатформы(Разрядность); - Лог.Отладка("Разрядность платформы 1С указана %1", Разрядность); + ВерсияПлатформы = ДанныеПодключения.ВерсияПлатформы; + Если ЗначениеЗаполнено(ВерсияПлатформы) Тогда + Если ЗначениеЗаполнено(ДанныеПодключения.РазрядностьПлатформы) Тогда + Разрядность = ОбщиеМетоды.РазрядностьПлатформы(ДанныеПодключения.РазрядностьПлатформы); + Лог.Отладка("Разрядность платформы 1С указана %1", ДанныеПодключения.РазрядностьПлатформы); Иначе - Разрядность = Неопределено; + Разрядность = ОбщиеМетоды.РазрядностьПлатформы("x64x86"); Лог.Отладка("Разрядность платформы 1С не указана"); КонецЕсли; ПутьКIbcmd = ПутьКIbcmd(ВерсияПлатформы, Разрядность); УправлениеИБ.ПутьКПриложению(ПутьКIbcmd); КонецЕсли; + Лог.Информация("Используется ibcmd платформы %1", ТекущаяВерсияПлатформы()); - Если ЗначениеЗаполнено(КодЯзыка) Тогда - Локаль = КодЯзыка; + ИспользоватьВременнуюБазу = ДанныеПодключения.ИспользоватьВременнуюБазу; + Если ИспользоватьВременнуюБазу Тогда + Лог.Отладка("ИспользоватьВременнуюБазу %1", ИспользоватьВременнуюБазу); + Иначе + УстановитьКонтекст(ДанныеПодключения.ПутьБазы, + ДанныеПодключения.Пользователь, ДанныеПодключения.Пароль); КонецЕсли; - // Если ЗначениеЗаполнено(КодЯзыкаСеанса) Тогда - // УправлениеКонфигуратором.УстановитьКодЯзыкаСеанса(КодЯзыка); - // КонецЕсли; +КонецПроцедуры + +Процедура Деструктор() Экспорт + + Попытка + ВременныеФайлы.УдалитьФайл(ВременныйКаталогДанныхСервера); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Лог.Отладка(КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + + ВременныйКаталогДанныхСервера = ""; КонецПроцедуры @@ -128,17 +139,6 @@ #Область СлужебныеПроцедурыИФункции -Процедура ИнициализироватьОбъект() - - Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - ВременныйКаталогДанныхСервера = ВременныеФайлы.СоздатьКаталог(); - Локаль = ""; - - УправлениеИБ = Новый УправлениеИБ; - УправлениеИБ.УстановитьПараметрыАвтономногоСервера(ВременныйКаталогДанныхСервера); - -КонецПроцедуры - Функция ПутьКIbcmd(ВерсияПлатформы, Разрядность) Если Не СтрНачинаетсяС(ВерсияПлатформы, "8.3") Тогда @@ -149,10 +149,40 @@ КонецФункции -#КонецОбласти +Функция ЛокальДляЗапуска() + + Если ЗначениеЗаполнено(Локаль) Тогда + Возврат Локаль; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +Процедура ДобавитьБазуВСписокБаз(ИмяБазыВСписке, СтрокаСоединения) + + Если ПустаяСтрока(ИмяБазыВСписке) Тогда + Возврат; + КонецЕсли; -#Область ИнициализацияОбъекта + КорневойПутьПроекта = ПараметрыСистемы.КорневойПутьПроекта; -ИнициализироватьОбъект(); + ДопДанныеСпискаБаз = Новый Структура; + ДопДанныеСпискаБаз.Вставить("RootPath", КорневойПутьПроекта); + ДопДанныеСпискаБаз.Вставить("Version", УправлениеИБ.Версия()); + + ПолныйПуть = Новый Файл(КорневойПутьПроекта).ИмяБезРасширения; + + Попытка + МенеджерСпискаБаз.ДобавитьБазуВСписокБаз(СтрокаСоединения, ПолныйПуть, ДопДанныеСпискаБаз); + Исключение + Лог.Предупреждение("Добавление базы в список " + ОписаниеОшибки()); + КонецПопытки; + +КонецПроцедуры + +Функция ТекущаяВерсияПлатформы() + Возврат СокрЛП(УправлениеИБ.Версия()); +КонецФункции #КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" index b97c76f9..66899181 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" @@ -98,8 +98,12 @@ Лог.Отладка("Разрядность платформы 1С не указана"); КонецЕсли; УправлениеКонфигуратором.ИспользоватьВерсиюПлатформы(ВерсияПлатформы, Разрядность); + Иначе + ПутьКПредприятию = Платформа1С.ПутьКПредприятию("8.3"); + УправлениеКонфигуратором.ПутьКПлатформе1С(ПутьКПредприятию); КонецЕсли; - + Лог.Информация("Используется версия платформы %1", ТекущаяВерсияПлатформы()); + Если Не ПустаяСтрока(КлючРазрешенияЗапуска) Тогда УправлениеКонфигуратором.УстановитьКлючРазрешенияЗапуска(КлючРазрешенияЗапуска); КонецЕсли; @@ -189,53 +193,25 @@ КонецПроцедуры -Процедура СоздатьФайловуюБазу(Знач КаталогБазы, Знач ПутьКШаблону = "", - Знач ИмяБазыВСписке = "", Знач КодЯзыка = "") Экспорт - Лог.Отладка("Создаю файловую базу " + КаталогБазы); - - ФС.ОбеспечитьКаталог(КаталогБазы); - УдалитьФайлы(КаталогБазы, ПолучитьМаскуВсеФайлы()); - - ПараметрыЗапуска = Новый Массив; - ПараметрыЗапуска.Добавить("CREATEINFOBASE"); - ПараметрыЗапуска.Добавить("File=""" +КаталогБазы + """"); - ПараметрыЗапуска.Добавить("/Out""" +УправлениеКонфигуратором.ФайлИнформации() + """"); - Если ЗначениеЗаполнено(КодЯзыка) Тогда - ПараметрыЗапуска.Добавить("/L" +СокрЛП(КодЯзыка)); - КонецЕсли; - - Если ИмяБазыВСписке <> "" Тогда - ПараметрыЗапуска.Добавить("/AddInList""" + ИмяБазыВСписке + """"); - КонецЕсли; - Если ПутьКШаблону <> "" Тогда - ПараметрыЗапуска.Добавить("/UseTemplate""" + ПутьКШаблону + """"); - КонецЕсли; - - СтрокаЗапуска = ""; - Для Каждого Параметр Из ПараметрыЗапуска Цикл - СтрокаЗапуска = СтрокаЗапуска + " " + Параметр; - КонецЦикла; - - Приложение = УправлениеКонфигуратором.ПутьКПлатформе1С(); - Если Найти(Приложение, " ") > 0 Тогда - Приложение = ОбщиеМетоды.ОбернутьПутьВКавычки(Приложение); - КонецЕсли; - Приложение = Приложение + " " + СтрокаЗапуска; - +Процедура СоздатьФайловуюБазу(Знач КаталогБазы, Знач ПутьКШаблону = "", Знач ИмяБазыВСписке = "") Экспорт + Попытка - ОбщиеМетоды.ЗапуститьПроцесс(Приложение); + УправлениеКонфигуратором.СоздатьФайловуюБазу(КаталогБазы, ПутьКШаблону, ИмяБазыВСписке); + Текст = УправлениеКонфигуратором.ВыводКоманды(); + Если ЗначениеЗаполнено(Текст) Тогда + Лог.Информация(Текст); + КонецЕсли; Исключение - ИнфоОшибки = ИнформацияОбОшибке(); - ВызватьИсключение "Не удалось создать файловую ИБ: - |" + ПодробноеПредставлениеОшибки(ИнфоОшибки); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Лог.Ошибка(УправлениеКонфигуратором.ВыводКоманды()); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; - РезультатСообщение = ОбщиеМетоды.ПрочитатьФайлИнформации(УправлениеКонфигуратором.ФайлИнформации()); - Если НЕ (СтрНайти(РезультатСообщение, "успешно завершено") = 0 - ИЛИ СтрНайти(РезультатСообщение, "completed successfully") = 0) Тогда - - ВызватьИсключение "Результат работы не успешен: " + Символы.ПС + РезультатСообщение; + Если НЕ (СтрНайти(Текст, "успешно завершено") = 0 + ИЛИ СтрНайти(Текст, "completed successfully") = 0) Тогда + ВызватьИсключение "Результат работы не успешен"; + КонецЕсли; КонецПроцедуры @@ -1705,6 +1681,19 @@ КонецПроцедуры +Функция ТекущаяВерсияПлатформы() + + ПутьПредприятия = УправлениеКонфигуратором.ПутьКПлатформе1С(); + ШаблонВерсии = Новый РегулярноеВыражение("8(\.\d+){3}"); + ВсеСовпадения = ШаблонВерсии.НайтиСовпадения(ПутьПредприятия); + Если ВсеСовпадения.Количество() = 0 Тогда + ВызватьИсключение "Неопределена версия платформы!"; + КонецЕсли; + + Возврат ВсеСовпадения[0].Значение; + +КонецФункции + #КонецОбласти ПолучитьЛог(); diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\270\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\270\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" index d524a5cb..24396b97 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\270\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\270\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" @@ -632,5 +632,19 @@ КонецПроцедуры +Функция ЭтоФайловаяИБ(СтрокаСоединения) Экспорт + Возврат СтрНачинаетсяС(СтрокаСоединения, "/F"); +КонецФункции + +Функция КаталогФайловойИБ(СтрокаСоединения) Экспорт + + Если ЭтоФайловаяИБ(СтрокаСоединения) Тогда + Возврат УбратьКавычкиВокругПути(Сред(СтрокаСоединения, 3)); + Иначе + Возврат ""; + КонецЕсли; + +КонецФункции + // из-за особенностей загрузки модуль ОбщиеМетоды грузится раньше ПараметрыСистемы, // поэтому сразу в конце кода модуля использовать ПараметрыСистемы нельзя From 54864441d8de1d90e2bc07d388967373f046cf1d Mon Sep 17 00:00:00 2001 From: Yuri Goncharuk Date: Thu, 5 Oct 2023 20:40:25 +0200 Subject: [PATCH 4/6] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D0=B3=D0=BB=D0=B0=D0=B2=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.os | 210 ----------------- ...20\266\320\265\320\275\320\270\321\217.os" | 215 ++++++++++++++++++ 2 files changed, 215 insertions(+), 210 deletions(-) diff --git a/src/main.os b/src/main.os index 3949701f..ee7a19f4 100644 --- a/src/main.os +++ b/src/main.os @@ -26,62 +26,6 @@ КонецПроцедуры -Функция СоответствиеПеременныхОкруженияПараметрамКоманд() - СоответствиеПеременных = Новый Соответствие(); - - СоответствиеПеременных.Вставить("RUNNER_IBCONNECTION", "--ibconnection"); - СоответствиеПеременных.Вставить("RUNNER_IBNAME", "--ibname"); - СоответствиеПеременных.Вставить("RUNNER_DBUSER", "--db-user"); - СоответствиеПеременных.Вставить("RUNNER_DBPWD", "--db-pwd"); - СоответствиеПеременных.Вставить("RUNNER_v8version", "--v8version"); - СоответствиеПеременных.Вставить("RUNNER_uccode", "--uccode"); - СоответствиеПеременных.Вставить("RUNNER_command", "--command"); - СоответствиеПеременных.Вставить("RUNNER_execute", "--execute"); - СоответствиеПеременных.Вставить("RUNNER_storage-user", "--storage-user"); - СоответствиеПеременных.Вставить("RUNNER_storage-pwd", "--storage-pwd"); - СоответствиеПеременных.Вставить("RUNNER_storage-ver", "--storage-ver"); - СоответствиеПеременных.Вставить("RUNNER_storage-name", "--storage-name"); - СоответствиеПеременных.Вставить("RUNNER_ROOT", "--root"); - СоответствиеПеременных.Вставить("RUNNER_WORKSPACE", "--workspace"); - СоответствиеПеременных.Вставить("RUNNER_PATHVANESSA", "--pathvanessa"); - СоответствиеПеременных.Вставить("RUNNER_PATHXUNIT", "--pathxunit"); - СоответствиеПеременных.Вставить("RUNNER_VANESSASETTINGS", "--vanessasettings"); - СоответствиеПеременных.Вставить("RUNNER_NOCACHEUSE", "--nocacheuse"); - СоответствиеПеременных.Вставить("RUNNER_LOCALE", "--locale"); - СоответствиеПеременных.Вставить("RUNNER_LANGUAGE", "--language"); - - СоответствиеПеременных.Вставить("RUNNER_V8VERSION", "--v8version"); - СоответствиеПеременных.Вставить("RUNNER_ADDITIONAL", "--additional"); - СоответствиеПеременных.Вставить("RUNNER_UCCODE", "--uccode"); - СоответствиеПеременных.Вставить("RUNNER_COMMAND", "--command"); - СоответствиеПеременных.Вставить("RUNNER_EXECUTE", "--execute"); - СоответствиеПеременных.Вставить("RUNNER_STORAGE_NAME", "--storage-name"); - СоответствиеПеременных.Вставить("RUNNER_STORAGE_USER", "--storage-user"); - СоответствиеПеременных.Вставить("RUNNER_STORAGE_PWD", "--storage-pwd"); - СоответствиеПеременных.Вставить("RUNNER_STORAGE_VER", "--storage-ver"); - СоответствиеПеременных.Вставить("RUNNER_TESTSPATH", "testsPath"); - - Возврат Новый ФиксированноеСоответствие(СоответствиеПеременных); -КонецФункции - -Функция НайтиКаталогТекущегоПроекта(Знач Путь) - Рез = ""; - Если ПустаяСтрока(Путь) Тогда - Попытка - Команда = Новый Команда; - Команда.УстановитьСтрокуЗапуска("git rev-parse --show-toplevel"); - Команда.УстановитьПравильныйКодВозврата(0); - Команда.Исполнить(); - Рез = СокрЛП(Команда.ПолучитьВывод()); - Исключение // BSLLS:MissingCodeTryCatchEx-off - // некуда выдавать ошибку, логи еще не доступны - КонецПопытки; - Иначе - Рез = Путь; - КонецЕсли; - Возврат Рез; -КонецФункции // НайтиКаталогТекущегоПроекта() - Функция ПолучитьПарсерКоманднойСтроки() Парсер = Новый ПарсерАргументовКоманднойСтроки(); @@ -136,8 +80,6 @@ ВывестиВерсию(); КонецЕсли; - ДополнитьЗначенияПараметров(Команда, ЗначенияПараметров); - ВключитьВыводОтладочногоЛогаВОтдельныйФайл(ЗначенияПараметров); Возврат МенеджерКомандПриложения.ВыполнитьКоманду(Команда, ЗначенияПараметров); @@ -150,158 +92,6 @@ ОбщиеМетоды.ЗагрузитьВанессаАДД(ДопТекстОшибки); КонецПроцедуры -Процедура ДополнитьЗначенияПараметров(Знач Команда, ЗначенияПараметров) - Перем ЗначениеПараметраФайлНастроек, ПутьКФайлуНастроекПоУмолчанию, ФайлОбщихНастроек; - Перем ЗначенияПараметровНизкийПриоритет, СоответствиеПеременных, НастройкиИзФайла; - - ТекущийКаталогПроекта = НайтиКаталогТекущегоПроекта( ЗначениеПараметра_КаталогПроекта(ЗначенияПараметров) ); - - ПараметрыСистемы.КорневойПутьПроекта = ТекущийКаталогПроекта; - - ПутьКФайлуНастроекПоУмолчанию = ОбъединитьПути(ТекущийКаталогПроекта, ОбщиеМетоды.ИмяФайлаНастроек()); - - ЗначениеПараметраФайлНастроек = ЗначенияПараметров["--settings"]; - Если ЗначениеЗаполнено(ЗначениеПараметраФайлНастроек) Тогда - ФайлОбщихНастроек = Новый Файл(ОбщиеМетоды.ПолныйПуть(ЗначениеПараметраФайлНастроек)); - Ожидаем.Что(ФайлОбщихНастроек.Существует(), - СтрШаблон("Ожидаем, что указанный в --settings <%1> файл по пути <%2> существует, а его нет!", - ЗначениеПараметраФайлНастроек, - ФайлОбщихНастроек.ПолноеИмя) - ).ЭтоИстина(); - КонецЕсли; - - НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ТекущийКаталогПроекта, - ЗначениеПараметраФайлНастроек, ПутьКФайлуНастроекПоУмолчанию); - - ЗначенияПараметровНизкийПриоритет = Новый Соответствие; - - Если ЗначениеЗаполнено(НастройкиИзФайла) Тогда - ОбщиеМетоды.ДополнитьАргументыИзФайлаНастроек(Команда, ЗначенияПараметровНизкийПриоритет, НастройкиИзФайла); - КонецЕсли; - - СоответствиеПеременных = СоответствиеПеременныхОкруженияПараметрамКоманд(); - - ОбщиеМетоды.ЗаполнитьЗначенияИзПеременныхОкружения(ЗначенияПараметровНизкийПриоритет, СоответствиеПеременных); - - ОбщиеМетоды.ДополнитьСоответствиеСУчетомПриоритета(ЗначенияПараметров, ЗначенияПараметровНизкийПриоритет); - - // на случай переопределения этой настройки повторная установка - ТекущийКаталогПроекта = НайтиКаталогТекущегоПроекта(ЗначениеПараметра_КаталогПроекта(ЗначенияПараметров)); - - ПараметрыСистемы.КорневойПутьПроекта = ТекущийКаталогПроекта; - - ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров); - ДобавитьДанныеПодключения(ЗначенияПараметров); - - НастройкиДля1С.ДобавитьШаблоннуюПеременную("workspaceRoot", ТекущийКаталогПроекта); - НастройкиДля1С.ДобавитьШаблоннуюПеременную("runnerRoot", ОбщиеМетоды.КаталогПроекта()); - - НастройкиДля1С.ЗаменитьШаблонныеПеременныеВКоллекции(ЗначенияПараметров); - - ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров); - -КонецПроцедуры // ДополнитьЗначенияПараметров - -Процедура ДобавитьДанныеПодключения(ЗначенияПараметров) - ИмяСтрокаСоединения = "--ibconnection"; - ИмяСтрокаСоединенияСтарое = "--ibname"; - СтрокаПодключения = ЗначенияПараметров[ИмяСтрокаСоединения]; - ИмяБазы = ЗначенияПараметров[ИмяСтрокаСоединенияСтарое]; - - Если ЗначениеЗаполнено(СтрокаПодключения) И ЗначениеЗаполнено(ИмяБазы) Тогда - ВызватьИсключение СтрШаблон("Запрещено одновременно задавать ключи %1 и %2", ИмяСтрокаСоединения, "--ibname"); - КонецЕсли; - - Если ЗначениеЗаполнено(СтрокаПодключения) Тогда - ЗначенияПараметров.Вставить(ИмяСтрокаСоединенияСтарое, СтрокаПодключения); - Иначе - ЗначенияПараметров.Вставить(ИмяСтрокаСоединения, ИмяБазы); - - Если ЗначениеЗаполнено(ИмяБазы) Тогда - Лог.Предупреждение("------------------------------------------------------------------"); - Лог.Предупреждение("Параметр --ibname устарел. Используйте --ibconnection вместо него!"); - Лог.Предупреждение("------------------------------------------------------------------"); - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(ЗначенияПараметров[ИмяСтрокаСоединенияСтарое]) Тогда - ЗначенияПараметров.Вставить(ИмяСтрокаСоединенияСтарое, - ОбщиеМетоды.ПереопределитьПолныйПутьВСтрокеПодключения(ЗначенияПараметров[ИмяСтрокаСоединенияСтарое])); - - ИсходнаяСтрокаПодключения = ЗначенияПараметров[ИмяСтрокаСоединенияСтарое]; - - НоваяСтрокаПодключения = МенеджерСпискаБаз.ПолучитьСтрокуПодключенияСКэшем( - ИсходнаяСтрокаПодключения, - ЗначенияПараметров["--nocacheuse"]); - - ЗначенияПараметров.Вставить(ИмяСтрокаСоединенияСтарое, НоваяСтрокаПодключения); - ЗначенияПараметров.Вставить(ИмяСтрокаСоединения, ИсходнаяСтрокаПодключения); - - КонецЕсли; - - ЗначенияПараметров.Вставить("ДанныеПодключения", ДанныеПодключения(ЗначенияПараметров)); -КонецПроцедуры - -Функция ДанныеПодключения(ЗначенияПараметров) - СтруктураПодключения = Новый Структура; - - // здесь может находиться и имя базы и строка подключения - СтруктураПодключения.Вставить("СтрокаПодключения", ЗначенияПараметров["--ibname"]); - - // если ИспользоватьВременнуюБазу, тогда используется временная база, - // что важно для некоторых команд, например, при работе с хранилищем - СтруктураПодключения.Вставить("ИспользоватьВременнуюБазу", Ложь); - - // здесь может находиться только строка подключения в виде пути к базе - СтруктураПодключения.Вставить("ПутьБазы", ЗначенияПараметров["--ibconnection"]); - - СтруктураПодключения.Вставить("Пользователь", ЗначенияПараметров["--db-user"]); - СтруктураПодключения.Вставить("Пароль", ЗначенияПараметров["--db-pwd"]); - СтруктураПодключения.Вставить("КодЯзыка", ЗначенияПараметров["--language"]); - СтруктураПодключения.Вставить("КодЯзыкаСеанса", ЗначенияПараметров["--locale"]); - СтруктураПодключения.Вставить("ВерсияПлатформы", ЗначенияПараметров["--v8version"]); - СтруктураПодключения.Вставить("РазрядностьПлатформы", ЗначенияПараметров["--bitness"]); - - Рез = Новый Структура; - Для каждого КлючЗначение Из СтруктураПодключения Цикл - Значение = КлючЗначение.Значение; - Если Значение = Неопределено Тогда - Значение = ""; - КонецЕсли; - Рез.Вставить(КлючЗначение.Ключ, Значение); - КонецЦикла; - - Возврат Новый ФиксированнаяСтруктура(Рез); -КонецФункции - -Функция ЗначениеПараметра_КаталогПроекта(Знач ЗначенияПараметров) - Рез = ЗначенияПараметров["--root"]; - Если Не ЗначениеЗаполнено(Рез) Тогда - Рез = ЗначенияПараметров["--workspace"]; - Если Не ЗначениеЗаполнено(Рез) Тогда - Рез = ""; - КонецЕсли; - КонецЕсли; - Возврат Рез; -КонецФункции - -Процедура ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров) - Если Не ПараметрыСистемы.ЭтоWindows Тогда - Возврат; - КонецЕсли; - РегулярноеВыражение = Новый РегулярноеВыражение("[\\\/]\s*$"); - РегулярноеВыражение.Многострочный = Истина; - Для каждого КлючЗначение Из ЗначенияПараметров Цикл - Значение = КлючЗначение.Значение; - Если ЗначениеЗаполнено(Значение) И РегулярноеВыражение.Совпадает(Значение) Тогда - ВызватьИсключение СтрШаблон( - "Запрещено использование слешей как последних символов в параметрах.%1" + - " Это может привести к проблемам при запуске в командной строке.%1%1 Ключ %2 = %3", - Символы.ПС, КлючЗначение.Ключ, Значение); - КонецЕсли; - КонецЦикла; -КонецПроцедуры - Процедура ВключитьВыводОтладочногоЛогаВОтдельныйФайл(Знач ЗначенияПараметров) ПутьФайлаВывода = ""; diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" index 19d5de96..12ead86b 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" @@ -59,6 +59,7 @@ Функция ВыполнитьКоманду(Знач ИмяКоманды, Знач ПараметрыКоманды) Экспорт Команда = ПолучитьКоманду(ИмяКоманды); + ДополнитьЗначенияПараметров(ИмяКоманды, ПараметрыКоманды); КодВозврата = Команда.ВыполнитьКоманду(ПараметрыКоманды, ДополнительныеПараметры); Возврат КодВозврата; @@ -109,3 +110,217 @@ Возврат Число(Команда); КонецФункции // КодВозвратаКоманды + +#Область СлужебныеПроцедурыИФункции +Функция СоответствиеПеременныхОкруженияПараметрамКоманд() + СоответствиеПеременных = Новый Соответствие(); + + СоответствиеПеременных.Вставить("RUNNER_IBCONNECTION", "--ibconnection"); + СоответствиеПеременных.Вставить("RUNNER_IBNAME", "--ibname"); + СоответствиеПеременных.Вставить("RUNNER_DBUSER", "--db-user"); + СоответствиеПеременных.Вставить("RUNNER_DBPWD", "--db-pwd"); + СоответствиеПеременных.Вставить("RUNNER_v8version", "--v8version"); + СоответствиеПеременных.Вставить("RUNNER_uccode", "--uccode"); + СоответствиеПеременных.Вставить("RUNNER_command", "--command"); + СоответствиеПеременных.Вставить("RUNNER_execute", "--execute"); + СоответствиеПеременных.Вставить("RUNNER_storage-user", "--storage-user"); + СоответствиеПеременных.Вставить("RUNNER_storage-pwd", "--storage-pwd"); + СоответствиеПеременных.Вставить("RUNNER_storage-ver", "--storage-ver"); + СоответствиеПеременных.Вставить("RUNNER_storage-name", "--storage-name"); + СоответствиеПеременных.Вставить("RUNNER_ROOT", "--root"); + СоответствиеПеременных.Вставить("RUNNER_WORKSPACE", "--workspace"); + СоответствиеПеременных.Вставить("RUNNER_PATHVANESSA", "--pathvanessa"); + СоответствиеПеременных.Вставить("RUNNER_PATHXUNIT", "--pathxunit"); + СоответствиеПеременных.Вставить("RUNNER_VANESSASETTINGS", "--vanessasettings"); + СоответствиеПеременных.Вставить("RUNNER_NOCACHEUSE", "--nocacheuse"); + СоответствиеПеременных.Вставить("RUNNER_LOCALE", "--locale"); + СоответствиеПеременных.Вставить("RUNNER_LANGUAGE", "--language"); + + СоответствиеПеременных.Вставить("RUNNER_V8VERSION", "--v8version"); + СоответствиеПеременных.Вставить("RUNNER_ADDITIONAL", "--additional"); + СоответствиеПеременных.Вставить("RUNNER_UCCODE", "--uccode"); + СоответствиеПеременных.Вставить("RUNNER_COMMAND", "--command"); + СоответствиеПеременных.Вставить("RUNNER_EXECUTE", "--execute"); + СоответствиеПеременных.Вставить("RUNNER_STORAGE_NAME", "--storage-name"); + СоответствиеПеременных.Вставить("RUNNER_STORAGE_USER", "--storage-user"); + СоответствиеПеременных.Вставить("RUNNER_STORAGE_PWD", "--storage-pwd"); + СоответствиеПеременных.Вставить("RUNNER_STORAGE_VER", "--storage-ver"); + СоответствиеПеременных.Вставить("RUNNER_TESTSPATH", "testsPath"); + + Возврат Новый ФиксированноеСоответствие(СоответствиеПеременных); +КонецФункции + +Функция НайтиКаталогТекущегоПроекта(Знач Путь) + Рез = ""; + Если ПустаяСтрока(Путь) Тогда + Попытка + Команда = Новый Команда; + Команда.УстановитьСтрокуЗапуска("git rev-parse --show-toplevel"); + Команда.УстановитьПравильныйКодВозврата(0); + Команда.Исполнить(); + Рез = СокрЛП(Команда.ПолучитьВывод()); + Исключение // BSLLS:MissingCodeTryCatchEx-off + // некуда выдавать ошибку, логи еще не доступны + КонецПопытки; + Иначе + Рез = Путь; + КонецЕсли; + Возврат Рез; +КонецФункции // НайтиКаталогТекущегоПроекта() + +Процедура ДополнитьЗначенияПараметров(Знач Команда, ЗначенияПараметров) + Перем ЗначениеПараметраФайлНастроек, ПутьКФайлуНастроекПоУмолчанию, ФайлОбщихНастроек; + Перем ЗначенияПараметровНизкийПриоритет, СоответствиеПеременных, НастройкиИзФайла; + + ТекущийКаталогПроекта = НайтиКаталогТекущегоПроекта( ЗначениеПараметра_КаталогПроекта(ЗначенияПараметров) ); + + ПараметрыСистемы.КорневойПутьПроекта = ТекущийКаталогПроекта; + + ПутьКФайлуНастроекПоУмолчанию = ОбъединитьПути(ТекущийКаталогПроекта, ОбщиеМетоды.ИмяФайлаНастроек()); + + ЗначениеПараметраФайлНастроек = ЗначенияПараметров["--settings"]; + Если ЗначениеЗаполнено(ЗначениеПараметраФайлНастроек) Тогда + ФайлОбщихНастроек = Новый Файл(ОбщиеМетоды.ПолныйПуть(ЗначениеПараметраФайлНастроек)); + Ожидаем.Что(ФайлОбщихНастроек.Существует(), + СтрШаблон("Ожидаем, что указанный в --settings <%1> файл по пути <%2> существует, а его нет!", + ЗначениеПараметраФайлНастроек, + ФайлОбщихНастроек.ПолноеИмя) + ).ЭтоИстина(); + КонецЕсли; + + НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ТекущийКаталогПроекта, + ЗначениеПараметраФайлНастроек, ПутьКФайлуНастроекПоУмолчанию); + + ЗначенияПараметровНизкийПриоритет = Новый Соответствие; + + Если ЗначениеЗаполнено(НастройкиИзФайла) Тогда + ОбщиеМетоды.ДополнитьАргументыИзФайлаНастроек(Команда, ЗначенияПараметровНизкийПриоритет, НастройкиИзФайла); + КонецЕсли; + + СоответствиеПеременных = СоответствиеПеременныхОкруженияПараметрамКоманд(); + + ОбщиеМетоды.ЗаполнитьЗначенияИзПеременныхОкружения(ЗначенияПараметровНизкийПриоритет, СоответствиеПеременных); + + ОбщиеМетоды.ДополнитьСоответствиеСУчетомПриоритета(ЗначенияПараметров, ЗначенияПараметровНизкийПриоритет); + + // на случай переопределения этой настройки повторная установка + ТекущийКаталогПроекта = НайтиКаталогТекущегоПроекта(ЗначениеПараметра_КаталогПроекта(ЗначенияПараметров)); + + ПараметрыСистемы.КорневойПутьПроекта = ТекущийКаталогПроекта; + + ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров); + ДобавитьДанныеПодключения(ЗначенияПараметров); + + НастройкиДля1С.ДобавитьШаблоннуюПеременную("workspaceRoot", ТекущийКаталогПроекта); + НастройкиДля1С.ДобавитьШаблоннуюПеременную("runnerRoot", ОбщиеМетоды.КаталогПроекта()); + + НастройкиДля1С.ЗаменитьШаблонныеПеременныеВКоллекции(ЗначенияПараметров); + + ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров); + +КонецПроцедуры // ДополнитьЗначенияПараметров + +Процедура ДобавитьДанныеПодключения(ЗначенияПараметров) + + Лог = ДополнительныеПараметры.Лог; + + ИмяСтрокаСоединения = "--ibconnection"; + ИмяСтрокаСоединенияСтарое = "--ibname"; + СтрокаПодключения = ЗначенияПараметров[ИмяСтрокаСоединения]; + ИмяБазы = ЗначенияПараметров[ИмяСтрокаСоединенияСтарое]; + + Если ЗначениеЗаполнено(СтрокаПодключения) И ЗначениеЗаполнено(ИмяБазы) Тогда + ВызватьИсключение СтрШаблон("Запрещено одновременно задавать ключи %1 и %2", ИмяСтрокаСоединения, "--ibname"); + КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаПодключения) Тогда + ЗначенияПараметров.Вставить(ИмяСтрокаСоединенияСтарое, СтрокаПодключения); + Иначе + ЗначенияПараметров.Вставить(ИмяСтрокаСоединения, ИмяБазы); + + Если ЗначениеЗаполнено(ИмяБазы) Тогда + Лог.Предупреждение("------------------------------------------------------------------"); + Лог.Предупреждение("Параметр --ibname устарел. Используйте --ibconnection вместо него!"); + Лог.Предупреждение("------------------------------------------------------------------"); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ЗначенияПараметров[ИмяСтрокаСоединенияСтарое]) Тогда + ЗначенияПараметров.Вставить(ИмяСтрокаСоединенияСтарое, + ОбщиеМетоды.ПереопределитьПолныйПутьВСтрокеПодключения(ЗначенияПараметров[ИмяСтрокаСоединенияСтарое])); + + ИсходнаяСтрокаПодключения = ЗначенияПараметров[ИмяСтрокаСоединенияСтарое]; + + НоваяСтрокаПодключения = МенеджерСпискаБаз.ПолучитьСтрокуПодключенияСКэшем( + ИсходнаяСтрокаПодключения, + ЗначенияПараметров["--nocacheuse"]); + + ЗначенияПараметров.Вставить(ИмяСтрокаСоединенияСтарое, НоваяСтрокаПодключения); + ЗначенияПараметров.Вставить(ИмяСтрокаСоединения, ИсходнаяСтрокаПодключения); + + КонецЕсли; + + ЗначенияПараметров.Вставить("ДанныеПодключения", ДанныеПодключения(ЗначенияПараметров)); +КонецПроцедуры + +Функция ДанныеПодключения(ЗначенияПараметров) + СтруктураПодключения = Новый Структура; + + // здесь может находиться и имя базы и строка подключения + СтруктураПодключения.Вставить("СтрокаПодключения", ЗначенияПараметров["--ibname"]); + + // если ИспользоватьВременнуюБазу, тогда используется временная база, + // что важно для некоторых команд, например, при работе с хранилищем + СтруктураПодключения.Вставить("ИспользоватьВременнуюБазу", Ложь); + + // здесь может находиться только строка подключения в виде пути к базе + СтруктураПодключения.Вставить("ПутьБазы", ЗначенияПараметров["--ibconnection"]); + + СтруктураПодключения.Вставить("Пользователь", ЗначенияПараметров["--db-user"]); + СтруктураПодключения.Вставить("Пароль", ЗначенияПараметров["--db-pwd"]); + СтруктураПодключения.Вставить("КодЯзыка", ЗначенияПараметров["--language"]); + СтруктураПодключения.Вставить("КодЯзыкаСеанса", ЗначенияПараметров["--locale"]); + СтруктураПодключения.Вставить("ВерсияПлатформы", ЗначенияПараметров["--v8version"]); + СтруктураПодключения.Вставить("РазрядностьПлатформы", ЗначенияПараметров["--bitness"]); + + Рез = Новый Структура; + Для каждого КлючЗначение Из СтруктураПодключения Цикл + Значение = КлючЗначение.Значение; + Если Значение = Неопределено Тогда + Значение = ""; + КонецЕсли; + Рез.Вставить(КлючЗначение.Ключ, Значение); + КонецЦикла; + + Возврат Новый ФиксированнаяСтруктура(Рез); +КонецФункции + +Функция ЗначениеПараметра_КаталогПроекта(Знач ЗначенияПараметров) + Рез = ЗначенияПараметров["--root"]; + Если Не ЗначениеЗаполнено(Рез) Тогда + Рез = ЗначенияПараметров["--workspace"]; + Если Не ЗначениеЗаполнено(Рез) Тогда + Рез = ""; + КонецЕсли; + КонецЕсли; + Возврат Рез; +КонецФункции + +Процедура ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров) + Если Не ПараметрыСистемы.ЭтоWindows Тогда + Возврат; + КонецЕсли; + РегулярноеВыражение = Новый РегулярноеВыражение("[\\\/]\s*$"); + РегулярноеВыражение.Многострочный = Истина; + Для каждого КлючЗначение Из ЗначенияПараметров Цикл + Значение = КлючЗначение.Значение; + Если ЗначениеЗаполнено(Значение) И РегулярноеВыражение.Совпадает(Значение) Тогда + ВызватьИсключение СтрШаблон( + "Запрещено использование слешей как последних символов в параметрах.%1" + + " Это может привести к проблемам при запуске в командной строке.%1%1 Ключ %2 = %3", + Символы.ПС, КлючЗначение.Ключ, Значение); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +#КонецОбласти From beb74c0b2bf67c54ea538b4d51bbe66ffdc9f764 Mon Sep 17 00:00:00 2001 From: Yuri Goncharuk Date: Sat, 7 Oct 2023 09:07:08 +0200 Subject: [PATCH 5/6] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D1=8B=20=D0=B4=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B5=20=D1=81=D0=BE?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=20=D1=85?= =?UTF-8?q?=D0=BE=D0=B4=D0=B5=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...203\320\266\320\265\320\275\320\270\321\217.os" | 14 +++++++++----- ...276\320\266\320\265\320\275\320\270\321\217.os" | 5 +++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" index 50a7d928..b4e2b109 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" @@ -162,12 +162,13 @@ ИначеЕсли ПараметрыХранилища.РежимОбновления Тогда ЗагрузкаИзХранилища(МенеджерСборки, ПараметрыХранилища); - ОбновитьКонфигурациюБД(МенеджерСборки, РежимРазработчика, РежимыРеструктуризации); Иначе Лог.Информация("Создана пустая база данных."); КонецЕсли; + + ОбновитьКонфигурациюБД(МенеджерСборки, РежимРазработчика, РежимыРеструктуризации); МенеджерСборки.Деструктор(); @@ -195,7 +196,7 @@ Процедура ЗагрузкаИзФайлаКонфигурации(МенеджерСборки) - Лог.Информация("Запускаем загрузку конфигурации из cf-файла"); + Лог.Информация("Запускаем загрузку конфигурации из cf-файла..."); МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); ПутьКФайлуСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьКФайлуКонфигурации); @@ -207,12 +208,13 @@ МенеджерСборки.Деструктор(); ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; + Лог.Информация("Создана информационная база из файла конфигурации."); КонецПроцедуры Процедура ЗагрузкаИзИсходников(МенеджерСборки) - Лог.Информация("Запускаю загрузку конфигурации из исходников"); + Лог.Информация("Запускаем загрузку конфигурации из исходников..."); Попытка СписокФайлов = ""; МенеджерСборки.СобратьИзИсходниковТекущуюКонфигурацию(ПутьКИсходникам, СписокФайлов, Ложь); @@ -221,12 +223,13 @@ МенеджерСборки.Деструктор(); ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; + Лог.Информация("Создана информационная база из исходников."); КонецПроцедуры Процедура ЗагрузкаИзФайлаВыгрузки(МенеджерСборки) - Лог.Информация("Загружаем dt " + ПутьКФайлуВыгрузки); + Лог.Информация("Запускаем загрузку конфигурации из dt-файла..."); Попытка МенеджерСборки.ЗагрузитьИнфобазуИзФайла(ПутьКФайлуВыгрузки); Исключение @@ -234,6 +237,7 @@ МенеджерСборки.Деструктор(); ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; + Лог.Информация("Создана информационная база из файла выгрузки."); КонецПроцедуры @@ -269,7 +273,7 @@ Процедура ДобавитьБазуВСписокБаз(НеДобавлятьВСписокБаз, ВерсияПлатформы, СтрокаПодключения) - Если НЕ НеДобавлятьВСписокБаз Тогда + Если НеДобавлятьВСписокБаз Тогда Возврат; КонецЕсли; diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" index 12ead86b..fcbc1ed4 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" @@ -92,6 +92,10 @@ КонецПроцедуры +Функция Лог() Экспорт + Возврат ДополнительныеПараметры.Лог; +КонецФункции + /////////////////////////////////////////////////////////////////// Функция РезультатыКоманд() Экспорт @@ -112,6 +116,7 @@ КонецФункции // КодВозвратаКоманды #Область СлужебныеПроцедурыИФункции + Функция СоответствиеПеременныхОкруженияПараметрамКоманд() СоответствиеПеременных = Новый Соответствие(); From c23530b1649401dd7b997a4d0984f4022d638d4c Mon Sep 17 00:00:00 2001 From: Yuri Goncharuk Date: Sat, 7 Oct 2023 09:21:20 +0200 Subject: [PATCH 6/6] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20=D0=B8?= =?UTF-8?q?=D0=BD=D0=B8=D1=86=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=BE=D0=BA=D1=80=D1=83=D0=B6=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/fixtures/1Cv8.dt | Bin 0 -> 3728 bytes tests/fixtures/1cv8.cf | Bin 0 -> 15538 bytes tests/xunits/init-dev.os | 100 ++++++++++++++++++ ...20\264\320\233\320\276\320\263\320\260.os" | 38 +++++++ ...20\276\320\274\320\260\320\275\320\264.os" | 87 +++++++++++++++ 5 files changed, 225 insertions(+) create mode 100644 tests/fixtures/1Cv8.dt create mode 100644 tests/fixtures/1cv8.cf create mode 100644 tests/xunits/init-dev.os create mode 100644 "tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\222\321\213\320\262\320\276\320\264\320\233\320\276\320\263\320\260.os" create mode 100644 "tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\232\320\276\320\274\320\260\320\275\320\264.os" diff --git a/tests/fixtures/1Cv8.dt b/tests/fixtures/1Cv8.dt new file mode 100644 index 0000000000000000000000000000000000000000..e0c3d43e133bf0e6562315f7e666d330c467aff0 GIT binary patch literal 3728 zcmV;B4sY=>LrFqJZE!|2?OJ(wQ&ko(*frg;ECM>AC<1LDY0}NTO*e*(^2W@sDSH;2spB|0t$%BD1HG(T0n#p0humx_Qfv zWoN=`?#~FH*n9s~-{n;gDgDd3qhIMZn(g7U$B(tlUViU>ig;|q?5@4}WXe?oPVfEG zvCosQ+56OpwVOj@j{ns7^M(Tj_HSn8n3m04{^GK>>2tz2KJfG;>y#nyp15pl(;Cn6 zwC^W9Fss*kbXVNyQ!Agmv+K=$oA!FT%2!+oMpac=S>m-b^IyBmo7R1sF89Da)89+q z|5V}0mDx`$C|Y){W&D$`teCdyy5y5a+gs)#jTQOVAIY0FHghzau;4>Byk^Jxn{0Pn zf8<2x!_#Z=BkLxfobvR$?OVqj80Q@G(BO6BR<1s7vAv&~x8#Ra2mhUsb;Nn!ZNFSS z+~j?I{AZ`vWm}&8rVxpSwG%1?wtLWbu)W^=s7$jm3m^v&*jZ`96!?j#<4H#G`vQf)O|8S1!3{)Tn0zjc-0n%y%y=dI=$Yd^WY z`_@t691ENJ^1aV@RX_Lo8wY$Yny^x%%izSExWQ72V+JRVHyN-}%xEbA=3=a%kR$e2#F<~PNUxVy#e_=2 z4bY-E)>v#REHGmhL!qgt$zW;10fc378jLQJ33C=>rjkoBH;%aYv2+(r2@`!@K!gts|n zXKM?b0XPFFf@TQ(BCJPIi0YyY$Nipq&|KEsOo3*MfwMoBaYa`)tn7RVhHHHc;lbP& zvL8j`0t7*2((h$rqmR+`BF$E~2*&1aMwZzP7hzlMf9d9V<8vrLU!ntz3jBqy(c9cb z={ocSXX{wpXmS>pG!+?O{udhHvTQPx;<(9BR0_;4tgysYfZ=@NM=clH4#T`Zy#KDB z4}8mbzF+gn;Te;9Pp_}+>76nEpWp55S)H`&$CR>c{eSMuOBg?N`og@GX)o)|&*{>7 zzdN_(WYL0YjtR@B9{OR}cT47!4cXN2)@LsnM&myn^d7&x!=G{O!UL~=@HzPF_{qI& z{NHoHmtTCdf9KgJX66nXmNWf*dUKfl(Y4v9)6oadSUZNniA!^PG>q(sw3S5PH?7@Z5V@< zV>H-WwmUDBUW?v30K>p^pxbJKf$gC|)qufVu({TG7r>duM!PMreRp|VRv-}2uMX(D zyF1z(+qzc=0%4ua=>W|h05hwtW^te^lp?&fyOb*7RG}Fa22kK=j~fv8fFO%US*U5$ zcOMBUb%NVj<=c*6AS`==Lir6urI+Ak%JA$A@IZ_Y20jcWqSqWi6^JeDk72R`Rr)H9)t>)qX0}G?0Vz~ejS4CCo z6Bik>DZ96cY^!-Buv-@z$c0}Y2(TLYVic3y#%&RpF&gbnHElX^jZh%e3iaJRp@i~Qg#ANSVStqbX0`gP7*>aB zHd{%L2adGF=HvZr_MOetdf=0(g!cQn?0aTHE~jFYg3i=_I{Qv%dL`wtF$y-*`q}I| zo0+y&Zx!6e6nv)l^VxSkhgMJ&N!3v#4rm(oR`8n9&+Gq?r;YVhsAi+Qm>YqHd}j9Z z*>^s(;9-p;Q<0!q{eBz z@t35O2Z>}@LAb>eGzUG1niFl#$i`%JfkVyX4pu4`uy-`iuo;D|ZPwYG;!T)Vlx(E{ zq~7L?an_N~_&uQvo&+)MU?(fk!b((h1eIwivZzSQLFfW13Yn>>%}T;N=I$LdDFS5< zyajk7t}J38l{|;>Olrb9PQn>b&$}qF5yngbqeP^PQ+A@ldbxnYm zpBs^&$&~~}qlHbotR^8(QQCE!oyd?;ctbVei7wG4ZbX=@gh&-|ww%WN!j48}*d>pQ zW-@Yv5^rr$>qi@sKvb+k7DY{B1QhNM5atzu&QOGtZ~`ZenBF~nS2UN=f0gZF)ufYf z1FM^Ws~Ot#Di+`z8PLh_zz*SBO?IJN#l%akcyTw78lvrAA2G;JUJ~m;Q>_oprIB#yiLbV4pd`ThQqz=DXM-lI`5VBRpkg37 z?M{~a&+?io?y?c}li|UNq*`zD13xfAzgNPf)`^dbG&z%KliPAclIuvCVAOk6I4Sy; zhfocZZS&SdeK;Kzep$g6E7@12;^hkHLYAQ{xGJzaEtD>_+ad!<7y80k<5XYk4i;U< z?4iv`vBVP-Iw+DPRi}zf6!S;BAfzEdrQhw2CQL%tg*=O}Jzg$n8z{_6V>qKNTjRNV z;LhC@2;zx)_~)SujK**kSE|_IE}&+TRkNoWk1G`8QH3@xMlmYCgKNX3q*R{<@O(iE z&ud7E)+QgE9#N7mW~zx@VNm+Ou9!jT>{4y0Dv|AU8P51Ix3clVi5DZXaGIT#pI#_U zW|VQMQR_vex{pyU3r9jDWj5?C4k!mp81x+~J`{nl5_&c|WLAX-Jp{c%wxrPrs%ejI zaCNLvP}JR{;NBK%6wZ?oIngo#?s*DRsvH=u@Ltvg52e#6f&tu`2|?t-r8*XfzT`4O zI3XIs^GsIt;(75CH_6&U;rxy>`nTV45@AO2&aVFLouyc(5MCF}`@811_m{(ZpXliSX-7PN~MR~c3ES6mG)*LV#7&-og!`yQeiEF=KDPKfnjA)aWoWP-fFi6 z#hMA$$gRjTXBAfXJPMZcg2d^(SoF~)^$^|iUDc0Z91RVM*?29SjR_6pT;SE#Rq>Na zn$Z+bs!yCiLz7@7<-sUuXDqanB)rvHN~~+4Fj`xPDeg$Nv!beMbOy;DtStbaOZz?0 z)420^N*4P?zl;gSaFhZaq4aShM#ifjH_Nice6@*QYf@nl*Qoj+I0Epnh^h=H{peGC zTDUqb0j8+L8%FT5V<@WNr+ u?u3sKS;FW&!}Jfd;~5tN;K5+izHo0|1By+Rt__ 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 literal 0 HcmV?d00001 diff --git a/tests/xunits/init-dev.os b/tests/xunits/init-dev.os new file mode 100644 index 00000000..cb74a307 --- /dev/null +++ b/tests/xunits/init-dev.os @@ -0,0 +1,100 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_СоздатьПустуюФайловуюБазуIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("init-dev"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Создана пустая база данных."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СоздатьФайловуюБазуИзИсходниковIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("init-dev"); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + Исполнитель.ДобавитьПараметр("--src", КаталогSrc); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Создана информационная база из исходников."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СоздатьФайловуюБазуИзФайлаВыгрузкиIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("init-dev"); + КаталогDt = Исполнитель.ПутьТестовыхДанных("1cv8.dt"); + Исполнитель.ДобавитьПараметр("--dt", КаталогDt); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Создана информационная база из файла выгрузки."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СоздатьФайловуюБазуИзФайлаКонфигурацииIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("init-dev"); + КаталогDt = Исполнитель.ПутьТестовыхДанных("1cv8.cf"); + Исполнитель.ДобавитьПараметр("--cf", КаталогDt); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Создана информационная база из файла конфигурации."); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git "a/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\222\321\213\320\262\320\276\320\264\320\233\320\276\320\263\320\260.os" "b/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\222\321\213\320\262\320\276\320\264\320\233\320\276\320\263\320\260.os" new file mode 100644 index 00000000..4a3ed034 --- /dev/null +++ "b/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\222\321\213\320\262\320\276\320\264\320\233\320\276\320\263\320\260.os" @@ -0,0 +1,38 @@ +#Использовать tempfiles + +Перем ТекстовыйДокумент; + +#Область ПрограммныйИнтерфейс + +Функция ВыводЛога() Экспорт + Возврат ТекстовыйДокумент.ПолучитьТекст(); +КонецФункции + +#КонецОбласти + +#Область InterfaceImplementaion + +Процедура ВывестиСобытие(Знач СобытиеЛога) Экспорт + + Сообщение = СобытиеЛога.ПолучитьФорматированноеСообщение(); + ТекстовыйДокумент.ДобавитьСтроку(Сообщение); + +КонецПроцедуры + +Процедура Закрыть() Экспорт +КонецПроцедуры + +// Устанавливает свойство аппендера, заданное в конфигурационном файле +// +Процедура УстановитьСвойство(Знач ИмяСвойства, Знач Значение) Экспорт +КонецПроцедуры // УстановитьСвойство() + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПриСозданииОбъекта() + ТекстовыйДокумент = Новый ТекстовыйДокумент(); +КонецПроцедуры + +#КонецОбласти diff --git "a/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\232\320\276\320\274\320\260\320\275\320\264.os" "b/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\232\320\276\320\274\320\260\320\275\320\264.os" new file mode 100644 index 00000000..5995fbb5 --- /dev/null +++ "b/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\232\320\276\320\274\320\260\320\275\320\264.os" @@ -0,0 +1,87 @@ +#Использовать "..\..\..\.." +#Использовать cmdline + +#Область ОписаниеПеременных + +Перем Команда; +Перем Аргументы; +Перем СпособВывода; +Перем КаталогКоманды; + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ДобавитьПараметр(ИмяПараметра, ЗначениеПараметра) Экспорт + Аргументы.Добавить(ИмяПараметра); + Аргументы.Добавить(ЗначениеПараметра); +КонецПроцедуры + +Процедура ДобавитьФлаг(ИмяФлага) Экспорт + Аргументы.Добавить(ИмяФлага); +КонецПроцедуры + +Процедура ВыполнитьКоманду() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + ПараметрыСистемы.ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; + + ДобавитьПараметр("--root", КаталогКоманды); + ДобавитьФлаг("--nocacheuse"); + + МенеджерКомандПриложения.РегистраторКоманд(ПараметрыСистемы); + + ДобавитьСпособВывода(МенеджерКомандПриложения); + + Парсер = Новый ПарсерАргументовКоманднойСтроки(); + МенеджерКомандПриложения.ЗарегистрироватьКоманды(Парсер); + ПараметрыКоманды = Парсер.Разобрать(Аргументы); + МенеджерКомандПриложения.ВыполнитьКоманду(Команда, ПараметрыКоманды.ЗначенияПараметров); + +КонецПроцедуры + +Функция ЛогКоманды() Экспорт + Возврат СпособВывода; +КонецФункции + +Функция КаталогКоманды() Экспорт + Возврат КаталогКоманды; +КонецФункции + +Функция ПутьТестовыхДанных(Путь1, Путь2 = Неопределено, Путь3 = Неопределено) Экспорт + + КаталогШаблонов = ОбъединитьПути(ТекущийКаталог(), "tests", "fixtures"); + Возврат ОбъединитьПути(КаталогШаблонов, Путь1, Путь2, Путь3); + +КонецФункции + +Процедура ОжидаемЧтоВыводСодержит(Строка) Экспорт + Ожидаем.Что(СпособВывода.ВыводЛога()).Содержит(Строка); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПриСозданииОбъекта(КомандаПриложения) + + Команда = КомандаПриложения; + Аргументы = Новый Массив; + Аргументы.Добавить(Команда); + + КаталогКоманды = ВременныеФайлы.СоздатьКаталог(); + + СпособВывода = Новый Тест_ВыводЛога(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ДобавитьСпособВывода(МенеджерКомандПриложения) + Лог = МенеджерКомандПриложения.Лог(); + Лог.ДобавитьСпособВывода(СпособВывода); +КонецПроцедуры + +#КонецОбласти