From fde362455fea5926d35adfe28e3817a4f74c4b10 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Thu, 14 Dec 2023 20:11:24 +0300 Subject: [PATCH 1/8] =?UTF-8?q?feat:=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8?= =?UTF-8?q?=D0=BD=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=83=D1=82=D0=B8=D0=BB=D0=B8=D1=82?= =?UTF-8?q?=D1=8B=20ibcmd=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D1=8B=D0=B3=D1=80?= =?UTF-8?q?=D1=83=D0=B7=D0=BA=D0=B8=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3?= =?UTF-8?q?=D1=83=D1=80=D0=B0=D1=86=D0=B8=D0=B8/=D1=80=D0=B0=D1=81=D1=88?= =?UTF-8?q?=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../useIbcmd.os" | 232 ++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" new file mode 100644 index 0000000..1a905b1 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -0,0 +1,232 @@ +#Использовать logos +#Использовать v8find +#Использовать tempfiles + +Перем Лог; +Перем Обработчик; +Перем КомандыПлагина; + +Перем РабочийКаталогIBCMD; // Строка, путь к рабочему каталогу утилиты ibcmd +Перем ТипСУБД; // ТипСУБД - Строка - тип сервера базы данных +Перем СерверБД; // СерверБД - Строка - адрес сервера базы данных +Перем ИмяБД; // ИмяБД - Строка - имя базы данных +Перем ПользовательБД; // ПользовательБД - Строка - имя пользователя базы данных +Перем ПарольБД; // ПарольБД - Строка - пароль пользователя базы данных + + +#Область Интерфейс_плагина + +// Возвращает версию плагина +// +// Возвращаемое значение: +// Строка - текущая версия плагина +// +Функция Версия() Экспорт + Возврат "1.0.0"; +КонецФункции + +// Возвращает приоритет выполнения плагина +// +// Возвращаемое значение: +// Число - приоритет выполнения плагина +// +Функция Приоритет() Экспорт + Возврат 0; +КонецФункции + +// Возвращает описание плагина +// +// Возвращаемое значение: +// Строка - описание функциональности плагина +// +Функция Описание() Экспорт + Возврат "Плагин включает использование утилиты ibcmd для выгрузки конфигурации в файлы"; +КонецФункции + +// Возвращает подробную справку к плагину +// +// Возвращаемое значение: +// Строка - подробная справка для плагина +// +Функция Справка() Экспорт + Возврат "Плагин включает использование утилиты ibcmd для выгрузки конфигурации в файлы"; +КонецФункции + +// Возвращает имя плагина +// +// Возвращаемое значение: +// Строка - имя плагина при подключении +// +Функция Имя() Экспорт + Возврат "use-ibcmd"; +КонецФункции + +// Возвращает имя лога плагина +// +// Возвращаемое значение: +// Строка - имя лога плагина +// +Функция ИмяЛога() Экспорт + Возврат "oscript.lib.gitsync.plugins.useIbcmd"; +КонецФункции + +#КонецОбласти + +#Область Подписки_на_события + +Процедура ПриАктивизации(СтандартныйОбработчик) Экспорт + + Обработчик = СтандартныйОбработчик; + + РабочийКаталогIBCMD = ""; + ТипСУБД = "MSSQLServer"; + СерверБД = "localhost"; + ИмяБД = ""; + ПользовательБД = "sa"; + ПарольБД = ""; + +КонецПроцедуры + +Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации) Экспорт + + Лог.Отладка("Ищу команду <%1> в списке поддерживаемых", ИмяКоманды); + Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда + Возврат; + КонецЕсли; + + Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); + + КлассРеализации.Опция("d ibcmd-data", "", "рабочий каталог утилиты ibcmd") + .Флаговый() + .ВОкружении("GITSYNC_IBCMD_DATA"); + + КлассРеализации.Опция("t ibcmd-dbms", "MSSQLServer", "тип СУБД (при использовании ibcmd)") + .ТСтрока() + .ВОкружении("GITSYNC_IBCMD_DBMS"); + + КлассРеализации.Опция("s ibcmd-db-server", "", "адрес сервера базы данных (при использовании ibcmd)") + .ТСтрока() + .ВОкружении("GITSYNC_IBCMD_DB_SERVER"); + + КлассРеализации.Опция("n ibcmd-db-name", "", "имя базы данных (при использовании ibcmd)") + .ТСтрока() + .ВОкружении("GITSYNC_IBCMD_DB_NAME"); + + КлассРеализации.Опция("U ibcmd-db-user", "", "имя пользователя базы данных (при использовании ibcmd)") + .ТСтрока() + .ВОкружении("GITSYNC_IBCMD_DB_USER"); + + КлассРеализации.Опция("P ibcmd-db-pwd", "", "пароль пользователя базы данных (при использовании ibcmd)") + .ТСтрока() + .ВОкружении("GITSYNC_IBCMD_DB_PWD"); + +КонецПроцедуры + +Процедура ПриПолученииПараметров(ПараметрыКоманды) Экспорт + + РабочийКаталогIBCMD = ПараметрыКоманды.Параметр("ibcmd-data", ""); + ТипСУБД = ПараметрыКоманды.Параметр("ibcmd-dbms", "MSSQLServer"); + СерверБД = ПараметрыКоманды.Параметр("ibcmd-db-server", "localhost"); + ИмяБД = ПараметрыКоманды.Параметр("ibcmd-db-name", ""); + ПользовательБД = ПараметрыКоманды.Параметр("ibcmd-db-user", "sa"); + ПарольБД = ПараметрыКоманды.Параметр("ibcmd-db-pwd", ""); + +КонецПроцедуры + +Процедура ПриВыгрузкеКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + + Попытка + ВыгрузитьКонфигурациюВФайлыIBCMD(КаталогВыгрузки); + Исключение + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Лог.Ошибка("Невозможно выгрузить конфигурацию в файлы. Ошибка:%1%2", Символы.ПС, ТекстОшибки); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +Процедура Инициализация() + + Лог = Логирование.ПолучитьЛог(ИмяЛога()); + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("sync"); + +КонецПроцедуры + +#Область Вспомогательные_процедуры_и_функции + +Процедура ВыгрузитьКонфигурациюВФайлыIBCMD(Знач КаталогВыгрузки) + + РабочийКонфигуратор = Обработчик.ПолучитьРабочийКонфигуратор(); + КонтекстКонфигуратора = РабочийКонфигуратор.ПолучитьКонтекст(); + ИмяРасширения = Обработчик.ПолучитьИмяРасширения(); + + ПутьКIBCMD = Платформа1С.ПутьКIBCMD(Обработчик.ТекущаяВерсияПлатформы); + + СервернаяБаза = Ложь; + ПутьКБД = ""; + + Если Лев(КонтекстКонфигуратора.СтрокаСоединения, 2) = "/F" Тогда + ПутьКБД = СокрЛП(Сред(КонтекстКонфигуратора.СтрокаСоединения, 3)); + ИначеЕсли Лев(КонтекстКонфигуратора.СтрокаСоединения, 2) = "/S" Тогда + СервернаяБаза = Истина; + ЧастиПути = СтрРазделить(Сред(КонтекстКонфигуратора.СтрокаСоединения, 3), "\", Ложь); + Если НЕ ЗначениеЗаполнено(СерверБД) Тогда + СерверБД = СокрЛП(ЧастиПути[0]); + КонецЕсли; + Если НЕ ЗначениеЗаполнено(ИмяБД) И ЧастиПути.Количество() > 1 Тогда + ИмяБД = СокрЛП(ЧастиПути[1]); + КонецЕсли; + Иначе + ПутьКБД = РабочийКонфигуратор.ПутьКВременнойБазе(); + КонецЕсли; + + КомандаIBCMD = Новый Команда; + КомандаIBCMD.УстановитьКоманду(ПутьКIBCMD); + КомандаIBCMD.ДобавитьПараметр("infobase config export"); + + Если ЗначениеЗаполнено(РабочийКаталогIBCMD) Тогда + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--data=%1", РабочийКаталогIBCMD)); + КонецЕсли; + Если СервернаяБаза Тогда + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--dbms=%1", ТипСУБД)); + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-server=%1", СерверБД)); + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-name=%1", ИмяБД)); + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-user=%1", ПользовательБД)); + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-pwd=%1", ПарольБД)); + Иначе + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-path=%1", ПутьКБД)); + КонецЕсли; + Если ЗначениеЗаполнено(КонтекстКонфигуратора.Пользователь) Тогда + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--user=%1", КонтекстКонфигуратора.Пользователь)); + Если ЗначениеЗаполнено(КонтекстКонфигуратора.Пароль) Тогда + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--pwd=%1", КонтекстКонфигуратора.Пароль)); + КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(ИмяРасширения) Тогда + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--extension=%1", ИмяРасширения)); + КонецЕсли; + КомандаIBCMD.ДобавитьПараметр("--force"); + + ФайлКонфигурации = Новый Файл(ОбъединитьПути(КаталогВыгрузки, "Configuration.xml")); + Если ФайлКонфигурации.Существует() Тогда + КомандаIBCMD.ДобавитьПараметр("--sync"); + КонецЕсли; + + КомандаIBCMD.ДобавитьПараметр(КаталогВыгрузки); + + КодВозврата = КомандаIBCMD.Исполнить(); + + Если КодВозврата <> 0 Тогда + Лог.КритичнаяОшибка("Не удалось выгрузить конфигурацию в файлы с использованием IBCMD"); + КонецЕсли; + +КонецПроцедуры // ВыгрузитьКонфигурациюВФайлыIBCMD() + +#КонецОбласти + +Инициализация(); From 52a20a25842440fe4ecf2e4ec8fa6869386b6969 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Fri, 15 Dec 2023 13:59:05 +0300 Subject: [PATCH 2/8] =?UTF-8?q?fix:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=20use-ibcmd.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 1 + 1 file changed, 1 insertion(+) diff --git a/packagedef b/packagedef index d015d41..6e844b0 100644 --- a/packagedef +++ b/packagedef @@ -55,4 +55,5 @@ .ОпределяетКласс("Плагин_СинхронизацииСУдаленнымРепозиторием", "src/Классы/syncRemote.os") .ОпределяетКласс("Плагин_ВыгрузкаВФорматеEDT", "src/Классы/edtExport.os") .ОпределяетКласс("Плагин_ЗаменаАвторов", "src/Классы/replaceAuthors.os") + .ОпределяетКласс("Плагин_Ibcmd", "src/Классы/useIbcmd.os") ; From ae847709250e5886ddb8ed055788e3afb9de46ba Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Fri, 15 Dec 2023 16:40:40 +0300 Subject: [PATCH 3/8] =?UTF-8?q?refactor:=20=D0=A0=D0=B5=D1=84=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=B2=D1=8B=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=20ibcmd;=20=D0=94=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=80=D0=B8=D0=B8=20=D0=B8=20=D0=B2=D1=8B=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=B2=20=D0=BB=D0=BE=D0=B3.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../useIbcmd.os" | 63 ++++++++++++------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" index 1a905b1..1300813 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -96,27 +96,27 @@ Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); - КлассРеализации.Опция("d ibcmd-data", "", "рабочий каталог утилиты ibcmd") + КлассРеализации.Опция("d ibcmd-data", "", "[*use-ibcmd] рабочий каталог утилиты ibcmd") .Флаговый() .ВОкружении("GITSYNC_IBCMD_DATA"); - КлассРеализации.Опция("t ibcmd-dbms", "MSSQLServer", "тип СУБД (при использовании ibcmd)") + КлассРеализации.Опция("t ibcmd-dbms", "MSSQLServer", "[*use-ibcmd] тип СУБД (при использовании ibcmd)") .ТСтрока() .ВОкружении("GITSYNC_IBCMD_DBMS"); - КлассРеализации.Опция("s ibcmd-db-server", "", "адрес сервера базы данных (при использовании ibcmd)") + КлассРеализации.Опция("s ibcmd-db-server", "", "[*use-ibcmd] адрес сервера базы данных (при использовании ibcmd)") .ТСтрока() .ВОкружении("GITSYNC_IBCMD_DB_SERVER"); - КлассРеализации.Опция("n ibcmd-db-name", "", "имя базы данных (при использовании ibcmd)") + КлассРеализации.Опция("n ibcmd-db-name", "", "[*use-ibcmd] имя базы данных (при использовании ibcmd)") .ТСтрока() .ВОкружении("GITSYNC_IBCMD_DB_NAME"); - КлассРеализации.Опция("U ibcmd-db-user", "", "имя пользователя базы данных (при использовании ibcmd)") + КлассРеализации.Опция("U ibcmd-db-user", "", "[*use-ibcmd] имя пользователя базы данных (при использовании ibcmd)") .ТСтрока() .ВОкружении("GITSYNC_IBCMD_DB_USER"); - КлассРеализации.Опция("P ibcmd-db-pwd", "", "пароль пользователя базы данных (при использовании ibcmd)") + КлассРеализации.Опция("P ibcmd-db-pwd", "", "[*use-ibcmd] пароль пользователя базы данных (при использовании ibcmd)") .ТСтрока() .ВОкружении("GITSYNC_IBCMD_DB_PWD"); @@ -137,8 +137,10 @@ СтандартнаяОбработка = Ложь; + Лог.Информация("Используем утилиту ibcmd для выгрузки конфигурации в файлы"); + Попытка - ВыгрузитьКонфигурациюВФайлыIBCMD(КаталогВыгрузки); + ВыгрузитьКонфигурациюВФайлыIBCMD(Конфигуратор, КаталогВыгрузки); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Лог.Ошибка("Невозможно выгрузить конфигурацию в файлы. Ошибка:%1%2", Символы.ПС, ТекстОшибки); @@ -159,22 +161,32 @@ #Область Вспомогательные_процедуры_и_функции -Процедура ВыгрузитьКонфигурациюВФайлыIBCMD(Знач КаталогВыгрузки) +// Процедура - выполняет выгрузку конфигурации в файлы с использованием утилиты ibcmd +// +// Параметры: +// Конфигуратор - УправлениеКонфигуратором - объект управления конфигуратором (v8runner) +// КаталогВыгрузки - Строка - каталог для выгрузки файлов конфигурации +// +Процедура ВыгрузитьКонфигурациюВФайлыIBCMD(Знач Конфигуратор, Знач КаталогВыгрузки) - РабочийКонфигуратор = Обработчик.ПолучитьРабочийКонфигуратор(); - КонтекстКонфигуратора = РабочийКонфигуратор.ПолучитьКонтекст(); + КонтекстКонфигуратора = Конфигуратор.ПолучитьКонтекст(); + + СтрокаСоединения = КонтекстКонфигуратора.КлючСоединенияСБазой; + Пользователь = КонтекстКонфигуратора.ИмяПользователя; + Пароль = КонтекстКонфигуратора.Пароль; + ИмяРасширения = Обработчик.ПолучитьИмяРасширения(); ПутьКIBCMD = Платформа1С.ПутьКIBCMD(Обработчик.ТекущаяВерсияПлатформы); - + СервернаяБаза = Ложь; ПутьКБД = ""; - Если Лев(КонтекстКонфигуратора.СтрокаСоединения, 2) = "/F" Тогда - ПутьКБД = СокрЛП(Сред(КонтекстКонфигуратора.СтрокаСоединения, 3)); - ИначеЕсли Лев(КонтекстКонфигуратора.СтрокаСоединения, 2) = "/S" Тогда + Если Лев(СтрокаСоединения, 2) = "/F" Тогда + ПутьКБД = СокрЛП(Сред(СтрокаСоединения, 3)); + ИначеЕсли Лев(СтрокаСоединения, 2) = "/S" Тогда СервернаяБаза = Истина; - ЧастиПути = СтрРазделить(Сред(КонтекстКонфигуратора.СтрокаСоединения, 3), "\", Ложь); + ЧастиПути = СтрРазделить(Сред(СтрокаСоединения, 3), "\", Ложь); Если НЕ ЗначениеЗаполнено(СерверБД) Тогда СерверБД = СокрЛП(ЧастиПути[0]); КонецЕсли; @@ -182,13 +194,15 @@ ИмяБД = СокрЛП(ЧастиПути[1]); КонецЕсли; Иначе - ПутьКБД = РабочийКонфигуратор.ПутьКВременнойБазе(); + ПутьКБД = Конфигуратор.ПутьКВременнойБазе(); КонецЕсли; КомандаIBCMD = Новый Команда; КомандаIBCMD.УстановитьКоманду(ПутьКIBCMD); + КомандаIBCMD.ПоказыватьВыводНемедленно(Истина); + КомандаIBCMD.УстановитьКодировкуВывода("UTF-8"); КомандаIBCMD.ДобавитьПараметр("infobase config export"); - + Если ЗначениеЗаполнено(РабочийКаталогIBCMD) Тогда КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--data=%1", РабочийКаталогIBCMD)); КонецЕсли; @@ -201,10 +215,10 @@ Иначе КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-path=%1", ПутьКБД)); КонецЕсли; - Если ЗначениеЗаполнено(КонтекстКонфигуратора.Пользователь) Тогда - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--user=%1", КонтекстКонфигуратора.Пользователь)); - Если ЗначениеЗаполнено(КонтекстКонфигуратора.Пароль) Тогда - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--pwd=%1", КонтекстКонфигуратора.Пароль)); + Если ЗначениеЗаполнено(Пользователь) Тогда + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--user=%1", Пользователь)); + Если ЗначениеЗаполнено(Пароль) Тогда + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--pwd=%1", Пароль)); КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(ИмяРасширения) Тогда @@ -222,9 +236,12 @@ КодВозврата = КомандаIBCMD.Исполнить(); Если КодВозврата <> 0 Тогда - Лог.КритичнаяОшибка("Не удалось выгрузить конфигурацию в файлы с использованием IBCMD"); + ТекстОшибки = КомандаIBCMD.ПолучитьВывод(); + Лог.КритичнаяОшибка("Не удалось выгрузить конфигурацию в файлы с использованием IBCMD:%1%2", + Символы.ПС, + ТекстОшибки); КонецЕсли; - + КонецПроцедуры // ВыгрузитьКонфигурациюВФайлыIBCMD() #КонецОбласти From c266591c8fbdcfe662385f7861b6c107c4eb847f Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Mon, 18 Dec 2023 13:19:46 +0300 Subject: [PATCH 4/8] =?UTF-8?q?feat:=20=D0=92=20=D0=BF=D0=BB=D0=B0=D0=B3?= =?UTF-8?q?=D0=B8=D0=BD=D0=B5=20use-ibcmd=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC?= =?UTF-8?q?=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=B8=D0=BD=D0=BA?= =?UTF-8?q?=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=B2=D1=8B=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../useIbcmd.os" | 323 ++++++++++++++---- 1 file changed, 259 insertions(+), 64 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" index 1300813..7eeed47 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -1,18 +1,23 @@ #Использовать logos #Использовать v8find -#Использовать tempfiles +#Использовать 1commands +#Использовать gitsync -Перем Лог; -Перем Обработчик; -Перем КомандыПлагина; +Перем Лог; // Лог - объект протоколирования (logger) +Перем Обработчик; // Команда - обработчик текущей команды gitsync +Перем КомандыПлагина; // Массив из Строка - список команд к которым подключается текущий плагин +Перем ТекущаяКоманда; // Строка - имя выполняемой команды gitsync -Перем РабочийКаталогIBCMD; // Строка, путь к рабочему каталогу утилиты ibcmd -Перем ТипСУБД; // ТипСУБД - Строка - тип сервера базы данных -Перем СерверБД; // СерверБД - Строка - адрес сервера базы данных -Перем ИмяБД; // ИмяБД - Строка - имя базы данных -Перем ПользовательБД; // ПользовательБД - Строка - имя пользователя базы данных -Перем ПарольБД; // ПарольБД - Строка - пароль пользователя базы данных +Перем РабочийКаталогIBCMD; // Строка - путь к рабочему каталогу утилиты ibcmd +Перем ТипСУБД; // Строка - тип сервера базы данных +Перем СерверБД; // Строка - адрес сервера базы данных +Перем ИмяБД; // Строка - имя базы данных +Перем ПользовательБД; // Строка - имя пользователя базы данных +Перем ПарольБД; // Строка - пароль пользователя базы данных +Перем Инкрементально; // Булево - Истина - будет выполнена инкрементальная выгрузка если возможно +Перем ИнкрементальнаяВыгрузкаВозможна; // Булево - Истина - инкрементальная выгрузка возможна +Перем ПутьКФайлуДампаИзменений; // Строка - путь к файлу ConfigDumpInfo.xml #Область Интерфейс_плагина @@ -49,7 +54,9 @@ // Строка - подробная справка для плагина // Функция Справка() Экспорт - Возврат "Плагин включает использование утилиты ibcmd для выгрузки конфигурации в файлы"; + Возврат "Плагин включает использование утилиты ibcmd для выгрузки конфигурации в файлы + |Рекомендуется отключить плагин ""increment"", если он используется + |и использовать флаг --increment для инкрементальной выгрузки."; КонецФункции // Возвращает имя плагина @@ -67,7 +74,7 @@ // Строка - имя лога плагина // Функция ИмяЛога() Экспорт - Возврат "oscript.lib.gitsync.plugins.useIbcmd"; + Возврат СтрШаблон("oscript.lib.gitsync.plugins.%1", Имя()); КонецФункции #КонецОбласти @@ -84,11 +91,42 @@ ИмяБД = ""; ПользовательБД = "sa"; ПарольБД = ""; + Инкрементально = Ложь; + + Если НЕ (ВРег(ТекущаяКоманда) = "ALL" + ИЛИ ВРег(ТекущаяКоманда) = "SYNC") Тогда + Возврат; + КонецЕсли; + + МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов(); + ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов(); + ОтключаемыеПлагины = ОтключаемыеПлагины(); + + Для Каждого ТекЭлемент Из ИндексПлагинов Цикл + Если ОтключаемыеПлагины.Найти(ВРег(ТекЭлемент.Ключ)) = Неопределено Тогда + Продолжить; + КонецЕсли; + Если НЕ ТекЭлемент.Значение.Включен() Тогда + Продолжить; + КонецЕсли; + + Лог.Информация("Плагин ""%1"" не совместим с плагином ""%2"" и будет отключен на время выполнения синхронизации!", + ТекЭлемент.Ключ, + Имя()); + ТекЭлемент.Значение.Отключить(); + Если ВРег(ТекЭлемент.Ключ) = ИмяПлагинаИнкрементальнойВыгрузки() Тогда + Лог.Информация("Плагин ""%1"" отключен, будет использован параметр ""--increment""!", ТекЭлемент.Ключ); + Инкрементально = Истина; + КонецЕсли; + + КонецЦикла; КонецПроцедуры Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации) Экспорт + ТекущаяКоманда = ИмяКоманды; + Лог.Отладка("Ищу команду <%1> в списке поддерживаемых", ИмяКоманды); Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда Возврат; @@ -97,7 +135,7 @@ Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); КлассРеализации.Опция("d ibcmd-data", "", "[*use-ibcmd] рабочий каталог утилиты ibcmd") - .Флаговый() + .ТСтрока() .ВОкружении("GITSYNC_IBCMD_DATA"); КлассРеализации.Опция("t ibcmd-dbms", "MSSQLServer", "[*use-ibcmd] тип СУБД (при использовании ibcmd)") @@ -119,17 +157,39 @@ КлассРеализации.Опция("P ibcmd-db-pwd", "", "[*use-ibcmd] пароль пользователя базы данных (при использовании ibcmd)") .ТСтрока() .ВОкружении("GITSYNC_IBCMD_DB_PWD"); + КлассРеализации.Опция("i increment", + Ложь, + "[*use-ibcmd] флаг использования инкрементальной выгрузки конфигурации, если возможно") + .Флаговый() + .ВОкружении("GITSYNC_IBCMD_INCREMENT"); КонецПроцедуры Процедура ПриПолученииПараметров(ПараметрыКоманды) Экспорт - РабочийКаталогIBCMD = ПараметрыКоманды.Параметр("ibcmd-data", ""); - ТипСУБД = ПараметрыКоманды.Параметр("ibcmd-dbms", "MSSQLServer"); + РабочийКаталогIBCMD = ПараметрыКоманды.Параметр("ibcmd-data" , ""); + ТипСУБД = ПараметрыКоманды.Параметр("ibcmd-dbms" , "MSSQLServer"); СерверБД = ПараметрыКоманды.Параметр("ibcmd-db-server", "localhost"); - ИмяБД = ПараметрыКоманды.Параметр("ibcmd-db-name", ""); - ПользовательБД = ПараметрыКоманды.Параметр("ibcmd-db-user", "sa"); - ПарольБД = ПараметрыКоманды.Параметр("ibcmd-db-pwd", ""); + ИмяБД = ПараметрыКоманды.Параметр("ibcmd-db-name" , ""); + ПользовательБД = ПараметрыКоманды.Параметр("ibcmd-db-user" , "sa"); + ПарольБД = ПараметрыКоманды.Параметр("ibcmd-db-pwd" , ""); + Если НЕ Инкрементально Тогда + Инкрементально = ПараметрыКоманды.Параметр("increment", Ложь); + КонецЕсли; + +КонецПроцедуры + +Процедура ПередВыгрузкойКонфигурациюВИсходники(Конфигуратор, + КаталогРабочейКопии, + КаталогВыгрузки, + ПутьКХранилищу, + НомерВерсии) Экспорт + + ФайлДампаИзменений = Новый Файл(ОбъединитьПути(КаталогРабочейКопии, ИмяФайлаДампаИзменений())); + ПутьКФайлуДампаИзменений = ФайлДампаИзменений.ПолноеИмя; + + ИнкрементальнаяВыгрузкаВозможна = (Инкрементально + И ИнкрементальнаяВыгрузкаВозможна(Конфигуратор, ПутьКФайлуДампаИзменений)); КонецПроцедуры @@ -149,16 +209,18 @@ КонецПроцедуры -#КонецОбласти +Процедура ПриОчисткеКаталогаРабочейКопии(КаталогРабочейКопии, + СоответствиеИменФайловДляПропуска, + СтандартнаяОбработка) Экспорт -Процедура Инициализация() - - Лог = Логирование.ПолучитьЛог(ИмяЛога()); - КомандыПлагина = Новый Массив; - КомандыПлагина.Добавить("sync"); + Если Инкрементально И ИнкрементальнаяВыгрузкаВозможна Тогда + СтандартнаяОбработка = Ложь; + КонецЕсли; КонецПроцедуры +#КонецОбласти + #Область Вспомогательные_процедуры_и_функции // Процедура - выполняет выгрузку конфигурации в файлы с использованием утилиты ibcmd @@ -169,15 +231,137 @@ // Процедура ВыгрузитьКонфигурациюВФайлыIBCMD(Знач Конфигуратор, Знач КаталогВыгрузки) + ИмяРасширения = Обработчик.ПолучитьИмяРасширения(); + + ПутьКIBCMD = Платформа1С.ПутьКIBCMD(Обработчик.ТекущаяВерсияПлатформы); + + КомандаIBCMD = Новый Команда; + КомандаIBCMD.УстановитьКоманду(ПутьКIBCMD); + КомандаIBCMD.ПоказыватьВыводНемедленно(Истина); + КомандаIBCMD.УстановитьКодировкуВывода("UTF-8"); + КомандаIBCMD.ДобавитьПараметр("infobase config export"); + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--data=%1", РабочийКаталогIBCMD)); + + ДобавитьПараметрыПодключенияКИБ(КомандаIBCMD, Конфигуратор); + + Если ИнкрементальнаяВыгрузкаВозможна Тогда + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--base=%1", ПутьКФайлуДампаИзменений)); + КонецЕсли; + Если ЗначениеЗаполнено(ИмяРасширения) Тогда + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--extension=%1", ИмяРасширения)); + КонецЕсли; + КомандаIBCMD.ДобавитьПараметр("--force"); + + ФайлКонфигурации = Новый Файл(ОбъединитьПути(КаталогВыгрузки, "Configuration.xml")); + Если ФайлКонфигурации.Существует() Тогда + КомандаIBCMD.ДобавитьПараметр("--sync"); + КонецЕсли; + + КомандаIBCMD.ДобавитьПараметр(КаталогВыгрузки); + + КодВозврата = КомандаIBCMD.Исполнить(); + + Если КодВозврата <> 0 Тогда + ТекстОшибки = КомандаIBCMD.ПолучитьВывод(); + Лог.КритичнаяОшибка("Не удалось выгрузить конфигурацию в файлы с использованием IBCMD:%1%2", + Символы.ПС, + ТекстОшибки); + КонецЕсли; + +КонецПроцедуры // ВыгрузитьКонфигурациюВФайлыIBCMD() + +// Функция проверяет возможность инкрементальной выгрузки конфигурации в файлы +// +// Параметры: +// Конфигуратор - УправлениеКонфигуратором - объект управление конфигуратором (v8runner) +// ПутьКФайлуДампаИзменений - Строка - путь к файлу ConfigDumpInfo.xml +// +// Возвращаемое значение: +// Булево - Истина - возможна инкрементальная выгрузка +// +Функция ИнкрементальнаяВыгрузкаВозможна(Знач Конфигуратор, Знач ПутьКФайлуДампаИзменений) + + Лог.Информация("Определяю тип возможной выгрузки конфигурации в файлы"); + + ИмяРасширения = Обработчик.ПолучитьИмяРасширения(); + + ФайлДампаИзменений = Новый Файл(ПутьКФайлуДампаИзменений); + + ПутьКФайлуПроверки = ПолучитьИмяВременногоФайла("dmp"); + + Лог.Отладка("Проверяю существование файла <%1> в каталоге <%2>, файл <%3>", + ФайлДампаИзменений.Имя, + ФайлДампаИзменений.Путь, + ?(ФайлДампаИзменений.Существует(), "существует", "отсутствует")); + + Лог.Отладка("Проверяю возможность обновления выгрузки для файла <%1>", ПутьКФайлуДампаИзменений); + + ПутьКIBCMD = Платформа1С.ПутьКIBCMD(Обработчик.ТекущаяВерсияПлатформы); + + КомандаIBCMD = Новый Команда; + КомандаIBCMD.УстановитьКоманду(ПутьКIBCMD); + КомандаIBCMD.ПоказыватьВыводНемедленно(Ложь); + КомандаIBCMD.УстановитьКодировкуВывода("UTF-8"); + КомандаIBCMD.ДобавитьПараметр("infobase config export status"); + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--data=%1", РабочийКаталогIBCMD)); + + ДобавитьПараметрыПодключенияКИБ(КомандаIBCMD, Конфигуратор); + + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--base=%1", ПутьКФайлуДампаИзменений)); + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--out=%1", ПутьКФайлуПроверки)); + Если ЗначениеЗаполнено(ИмяРасширения) Тогда + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--extension=%1", ИмяРасширения)); + КонецЕсли; + + КодВозврата = КомандаIBCMD.Исполнить(); + + Если КодВозврата <> 0 Тогда + ТекстОшибки = КомандаIBCMD.ПолучитьВывод(); + Лог.КритичнаяОшибка("Не удалось получить информацию об изменениях конфигурации:%1%2", + Символы.ПС, + ТекстОшибки); + КонецЕсли; + + ФайлПроверки = Новый Файл(ПутьКФайлуПроверки); + + Если ФайлПроверки.Существует() Тогда + СтрокаПолныйДамп = "modified: all"; + ЧтениеФайла = Новый ЧтениеТекста(ПутьКФайлуПроверки); + СтрокаПроверки = Лев(ЧтениеФайла.ПрочитатьСтроку(), СтрДлина(СтрокаПолныйДамп)); + + Если Не ПустаяСтрока(СокрЛП(СтрокаПроверки)) Тогда + + Лог.Отладка("Строка проверки на возможность выгрузки конфигурации: <%1> = <%2> ", СтрокаПолныйДамп, СтрокаПроверки); + Результат = НЕ (ВРег(СтрокаПроверки) = ВРег(СтрокаПолныйДамп)); + + КонецЕсли; + ЧтениеФайла.Закрыть(); + УдалитьФайлы(ПутьКФайлуПроверки); + КонецЕсли; + + Лог.Отладка("Инкрементальная выгрузка конфигурации - %1", ?(Результат, "ВОЗМОЖНА", "НЕВОЗМОЖНА")); + + СпособВыгрузки = ?(Результат, "ИНКРЕМЕНТАЛЬНАЯ ВЫГРУЗКА", "ПОЛНАЯ ВЫГРУЗКА"); + + Лог.Информация("ИНФОРМАЦИЯ - Тип выгрузки конфигурации в файлы: %1%2", СпособВыгрузки, Символы.ПС); + + Возврат Результат; + +КонецФункции // ИнкрементальнаяВыгрузкаВозможна() + +// Процедура - добавляет параметры подключения к информационной базе для команды запуска утилиты ibcmd +// +// Параметры: +// Команда - Команда - объект - описание команды запуска (1commands) утилиты ibcmd +// Конфигуратор - УправлениеКонфигуратором - объект управления конфигуратором (v8runner) +// +Процедура ДобавитьПараметрыПодключенияКИБ(Команда, Конфигуратор) + КонтекстКонфигуратора = Конфигуратор.ПолучитьКонтекст(); СтрокаСоединения = КонтекстКонфигуратора.КлючСоединенияСБазой; Пользователь = КонтекстКонфигуратора.ИмяПользователя; Пароль = КонтекстКонфигуратора.Пароль; - - ИмяРасширения = Обработчик.ПолучитьИмяРасширения(); - - ПутьКIBCMD = Платформа1С.ПутьКIBCMD(Обработчик.ТекущаяВерсияПлатформы); СервернаяБаза = Ложь; ПутьКБД = ""; @@ -197,53 +381,64 @@ ПутьКБД = Конфигуратор.ПутьКВременнойБазе(); КонецЕсли; - КомандаIBCMD = Новый Команда; - КомандаIBCMD.УстановитьКоманду(ПутьКIBCMD); - КомандаIBCMD.ПоказыватьВыводНемедленно(Истина); - КомандаIBCMD.УстановитьКодировкуВывода("UTF-8"); - КомандаIBCMD.ДобавитьПараметр("infobase config export"); - - Если ЗначениеЗаполнено(РабочийКаталогIBCMD) Тогда - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--data=%1", РабочийКаталогIBCMD)); - КонецЕсли; Если СервернаяБаза Тогда - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--dbms=%1", ТипСУБД)); - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-server=%1", СерверБД)); - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-name=%1", ИмяБД)); - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-user=%1", ПользовательБД)); - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-pwd=%1", ПарольБД)); + Команда.ДобавитьПараметр(СтрШаблон("--dbms=%1", ТипСУБД)); + Команда.ДобавитьПараметр(СтрШаблон("--db-server=%1", СерверБД)); + Команда.ДобавитьПараметр(СтрШаблон("--db-name=%1", ИмяБД)); + Команда.ДобавитьПараметр(СтрШаблон("--db-user=%1", ПользовательБД)); + Команда.ДобавитьПараметр(СтрШаблон("--db-pwd=%1", ПарольБД)); Иначе - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-path=%1", ПутьКБД)); + Команда.ДобавитьПараметр(СтрШаблон("--db-path=%1", ПутьКБД)); КонецЕсли; Если ЗначениеЗаполнено(Пользователь) Тогда - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--user=%1", Пользователь)); + Команда.ДобавитьПараметр(СтрШаблон("--user=%1", Пользователь)); Если ЗначениеЗаполнено(Пароль) Тогда - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--pwd=%1", Пароль)); + Команда.ДобавитьПараметр(СтрШаблон("--pwd=%1", Пароль)); КонецЕсли; КонецЕсли; - Если ЗначениеЗаполнено(ИмяРасширения) Тогда - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--extension=%1", ИмяРасширения)); - КонецЕсли; - КомандаIBCMD.ДобавитьПараметр("--force"); - ФайлКонфигурации = Новый Файл(ОбъединитьПути(КаталогВыгрузки, "Configuration.xml")); - Если ФайлКонфигурации.Существует() Тогда - КомандаIBCMD.ДобавитьПараметр("--sync"); - КонецЕсли; +КонецПроцедуры // ДобавитьПараметрыПодключенияКИБ() - КомандаIBCMD.ДобавитьПараметр(КаталогВыгрузки); - - КодВозврата = КомандаIBCMD.Исполнить(); - - Если КодВозврата <> 0 Тогда - ТекстОшибки = КомандаIBCMD.ПолучитьВывод(); - Лог.КритичнаяОшибка("Не удалось выгрузить конфигурацию в файлы с использованием IBCMD:%1%2", - Символы.ПС, - ТекстОшибки); - КонецЕсли; +// Функция возвращает имя файла дампа изменений +// +// Возвращаемое значение: +// Строка - "ConfigDumpInfo.xml" имя файла дампа изменений +// +Функция ИмяФайлаДампаИзменений() + Возврат "ConfigDumpInfo.xml"; +КонецФункции // ИмяФайлаДампаИзменений() -КонецПроцедуры // ВыгрузитьКонфигурациюВФайлыIBCMD() +// Функция возвращает имя плагина инкрементальной выгрузки +// +// Возвращаемое значение: +// Строка - "INCREMENT" имя плагина инкрементальной выгрузки +// +Функция ИмяПлагинаИнкрементальнойВыгрузки() + Возврат "INCREMENT"; +КонецФункции // ИмяПлагинаИнкрементальнойВыгрузки() + +// Функция возвращает имя плагина инкрементальной выгрузки +// +// Возвращаемое значение: +// ФиксированныйМассив из Строка - список отключаемых плагинов +// +Функция ОтключаемыеПлагины() + + ОтключаемыеПлагины = Новый Массив(); + ОтключаемыеПлагины.Добавить(ИмяПлагинаИнкрементальнойВыгрузки()); + + Возврат Новый ФиксированныйМассив(ОтключаемыеПлагины); + +КонецФункции // ОтключаемыеПлагины() #КонецОбласти +Процедура Инициализация() + + Лог = Логирование.ПолучитьЛог(ИмяЛога()); + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("sync"); + +КонецПроцедуры + Инициализация(); From 73fc23e71ccbac62e76ff458ac34371e3e965b5c Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Mon, 18 Dec 2023 13:21:01 +0300 Subject: [PATCH 5/8] =?UTF-8?q?feat:=20=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8?= =?UTF-8?q?=D0=BD=20drop-config-dump=20=D0=B4=D0=BB=D1=8F=20=D0=B0=D0=B2?= =?UTF-8?q?=D1=82=D0=BE=D0=BC=D0=B0=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=20ConfigDumpInfo.xml.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 1 + .../dropConfigDump.os" | 289 ++++++++++++++++++ 2 files changed, 290 insertions(+) create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" diff --git a/packagedef b/packagedef index 6e844b0..41fcc9a 100644 --- a/packagedef +++ b/packagedef @@ -56,4 +56,5 @@ .ОпределяетКласс("Плагин_ВыгрузкаВФорматеEDT", "src/Классы/edtExport.os") .ОпределяетКласс("Плагин_ЗаменаАвторов", "src/Классы/replaceAuthors.os") .ОпределяетКласс("Плагин_Ibcmd", "src/Классы/useIbcmd.os") + .ОпределяетКласс("Плагин_DropConfigDump", "src/Классы/dropConfigDump.os") ; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" new file mode 100644 index 0000000..b58110e --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" @@ -0,0 +1,289 @@ +#Использовать logos +#Использовать gitsync + +Перем Лог; // Лог - объект протоколирования (logger) +Перем Обработчик; // Команда - обработчик текущей команды gitsync +Перем КомандыПлагина; // Массив из Строка - список команд к которым подключается текущий плагин +Перем ТекущаяКоманда; // Строка - имя выполняемой команды gitsync + +Перем ЗакоммититьФайлИгнорируемыхИзменений; // Булево - Истина - закоммитить файл .gitignore. + +#Область Интерфейс_плагина + +// Возвращает версию плагина +// +// Возвращаемое значение: +// Строка - текущая версия плагина +// +Функция Версия() Экспорт + Возврат "1.0.0"; +КонецФункции + +// Возвращает приоритет выполнения плагина +// +// Возвращаемое значение: +// Число - приоритет выполнения плагина +// +Функция Приоритет() Экспорт + Возврат 0; +КонецФункции + +// Возвращает описание плагина +// +// Возвращаемое значение: +// Строка - описание функциональности плагина +// +Функция Описание() Экспорт + Возврат "Плагин отключает версионирование файла дампа версий объектов конфигурации (ConfigDumpInfo.xml) + |и удаляет его после выгрузки конфигурации в файлы."; +КонецФункции + +// Возвращает подробную справку к плагину +// +// Возвращаемое значение: +// Строка - подробная справка для плагина +// +Функция Справка() Экспорт + Возврат "Плагин отключает версионирование файла дампа версий объектов конфигурации (ConfigDumpInfo.xml) + |и удаляет его после выгрузки конфигурации в файлы."; +КонецФункции + +// Возвращает имя плагина +// +// Возвращаемое значение: +// Строка - имя плагина при подключении +// +Функция Имя() Экспорт + Возврат "drop-config-dump"; +КонецФункции + +// Возвращает имя лога плагина +// +// Возвращаемое значение: +// Строка - имя лога плагина +// +Функция ИмяЛога() Экспорт + Возврат СтрШаблон("oscript.lib.gitsync.plugins.%1", Имя()); +КонецФункции + +#КонецОбласти + +#Область Подписки_на_события + +Процедура ПриАктивизации(СтандартныйОбработчик) Экспорт + + Обработчик = СтандартныйОбработчик; + + Если НЕ (ВРег(ТекущаяКоманда) = "ALL" + ИЛИ ВРег(ТекущаяКоманда) = "SYNC") Тогда + Возврат; + КонецЕсли; + + МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов(); + ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов(); + ОтключаемыеПлагины = ОтключаемыеПлагины(); + + Для Каждого ТекЭлемент Из ИндексПлагинов Цикл + Если ОтключаемыеПлагины.Найти(ВРег(ТекЭлемент.Ключ)) = Неопределено Тогда + Продолжить; + КонецЕсли; + Если НЕ ТекЭлемент.Значение.Включен() Тогда + Продолжить; + КонецЕсли; + + Лог.Информация("Плагин ""%1"" не совместим с плагином ""%2"" и будет отключен на время выполнения синхронизации!", + ТекЭлемент.Ключ, + Имя()); + ТекЭлемент.Значение.Отключить(); + + КонецЦикла; + +КонецПроцедуры + +Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации) Экспорт + + ТекущаяКоманда = ИмяКоманды; + + Лог.Отладка("Ищу команду <%1> в списке поддерживаемых", ИмяКоманды); + Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда + Возврат; + КонецЕсли; + +КонецПроцедуры + +Процедура ПриПолученииПараметров(ПараметрыКоманды) Экспорт + +КонецПроцедуры + +Процедура ПередВыгрузкойКонфигурациюВИсходники(Конфигуратор, + КаталогРабочейКопии, + КаталогВыгрузки, + ПутьКХранилищу, + НомерВерсии) Экспорт + + ФайлДампаИзменений = Новый Файл(ОбъединитьПути(КаталогРабочейКопии, ИмяФайлаДампаИзменений())); + + Если ФайлДампаИзменений.Существует() Тогда + УдалитьФайлы(ФайлДампаИзменений.ПолноеИмя); + КонецЕсли; + +КонецПроцедуры + +Процедура ПослеВыгрузкиКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки) Экспорт + + ФайлДампаИзменений = Новый Файл(ОбъединитьПути(КаталогВыгрузки, ИмяФайлаДампаИзменений())); + + Если ФайлДампаИзменений.Существует() Тогда + УдалитьФайлы(ФайлДампаИзменений.ПолноеИмя); + КонецЕсли; + +КонецПроцедуры + +Процедура ПередКоммитом(КаталогРабочейКопии, Комментарий, Автор, Дата) Экспорт + + КорневойКаталогГит = КорневойКаталогГит(КаталогРабочейКопии); + + Если НЕ ЗначениеЗаполнено(КорневойКаталогГит) Тогда + Лог.Предупреждение("Каталог ""%1"" не является репозитарием git!", КаталогРабочейКопии); + Возврат; + КонецЕсли; + + ПутьКФайлуДампаИзменений = ОбъединитьПути(КаталогРабочейКопии, ИмяФайлаДампаИзменений()); + + ФайлИгнорируемыхИзменений = Новый Файл(ОбъединитьПути(КорневойКаталогГит, ".gitignore")); + + ТекстИгнорируемыхИзменений = Новый ТекстовыйДокумент(); + + Если ФайлИгнорируемыхИзменений.Существует() И ФайлИгнорируемыхИзменений.ЭтоФайл() Тогда + ТекстИгнорируемыхИзменений.Прочитать(ФайлИгнорируемыхИзменений.ПолноеИмя); + КонецЕсли; + + ОтносительныйПуть = СтрЗаменить(ПутьКФайлуДампаИзменений, КорневойКаталогГит, ""); + + Для НомерСтроки = 1 По ТекстИгнорируемыхИзменений.КоличествоСтрок() Цикл + ТекСтрока = ТекстИгнорируемыхИзменений.ПолучитьСтроку(НомерСтроки); + Если СтрНайти(ТекСтрока, ОтносительныйПуть) > 0 Тогда + Возврат; + КонецЕсли; + КонецЦикла; + + ТекстИгнорируемыхИзменений.ДобавитьСтроку(ОтносительныйПуть); + ТекстИгнорируемыхИзменений.Записать(ФайлИгнорируемыхИзменений.ПолноеИмя); + + ЗакоммититьФайлИгнорируемыхИзменений = Истина; + +КонецПроцедуры + +Процедура ПриКоммите(ГитРепозиторий, + Комментарий, + ПроиндексироватьОтслеживаемыеФайлы, + ИмяФайлаКомментария, + АвторДляГит, + ДатаДляГит, + Коммитер, + ДатаКоммитера) Экспорт + + Если НЕ ЗакоммититьФайлИгнорируемыхИзменений Тогда + Возврат; + КонецЕсли; + + РабочийКаталог = ГитРепозиторий.ПолучитьРабочийКаталог(); + + КорневойКаталогГит = КорневойКаталогГит(РабочийКаталог); + + Если НЕ ЗначениеЗаполнено(КорневойКаталогГит) Тогда + Лог.Предупреждение("Каталог ""%1"" не является репозитарием git!", РабочийКаталог); + Возврат; + КонецЕсли; + + ФайлИгнорируемыхИзменений = Новый Файл(ОбъединитьПути(КорневойКаталогГит, ".gitignore")); + + ПараметрыКомандыГит = Новый Массив(); + ПараметрыКомандыГит.Добавить("add"); + ПараметрыКомандыГит.Добавить("-A"); + ПараметрыКомандыГит.Добавить(ФайлИгнорируемыхИзменений.ПолноеИмя); + + ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыГит); + +КонецПроцедуры + +#КонецОбласти + +#Область Вспомогательные_процедуры_и_функции + +// Функция возвращает путь к корневому каталогу репозитария git +// +// Параметры: +// КаталогРабочейКопии - Строка - проверяемый каталог +// +// Возвращаемое значение: +// Строка - путь к корневому каталогу репозитария git +// если пустая строка, то каталог не является репозитарием git +// +Функция КорневойКаталогГит(Знач КаталогРабочейКопии) + + ТекущийКаталог = Новый Файл(КаталогРабочейКопии); + + ЭтоКорневойКаталог = (ТекущийКаталог.ПолноеИмя = "/" + ИЛИ Прав(ТекущийКаталог.ПолноеИмя, 1) = ":" + ИЛИ Прав(ТекущийКаталог.ПолноеИмя, 2) = ":/" + ИЛИ Прав(ТекущийКаталог.ПолноеИмя, 2) = ":\"); + + Если ЭтоКорневойКаталог Тогда + Возврат ""; + КонецЕсли; + + СлужебныйКаталогГит = Новый Файл(ОбъединитьПути(ТекущийКаталог.ПолноеИмя, ".git")); + + Если СлужебныйКаталогГит.Существует() И СлужебныйКаталогГит.ЭтоКаталог() Тогда + Возврат ТекущийКаталог.ПолноеИмя; + Иначе + Возврат КорневойКаталогГит(ТекущийКаталог.Путь); + КонецЕсли; + +КонецФункции // КорневойКаталогГит() + +// Функция возвращает имя файла дампа изменений +// +// Возвращаемое значение: +// Строка - "ConfigDumpInfo.xml" имя файла дампа изменений +// +Функция ИмяФайлаДампаИзменений() + Возврат "ConfigDumpInfo.xml"; +КонецФункции // ИмяФайлаДампаИзменений() + +// Функция возвращает имя плагина инкрементальной выгрузки +// +// Возвращаемое значение: +// Строка - "INCREMENT" имя плагина инкрементальной выгрузки +// +Функция ИмяПлагинаИнкрементальнойВыгрузки() + Возврат "INCREMENT"; +КонецФункции // ИмяПлагинаИнкрементальнойВыгрузки() + +// Функция возвращает имя плагина инкрементальной выгрузки +// +// Возвращаемое значение: +// ФиксированныйМассив из Строка - список отключаемых плагинов +// +Функция ОтключаемыеПлагины() + + ОтключаемыеПлагины = Новый Массив(); + ОтключаемыеПлагины.Добавить(ИмяПлагинаИнкрементальнойВыгрузки()); + + Возврат Новый ФиксированныйМассив(ОтключаемыеПлагины); + +КонецФункции // ОтключаемыеПлагины() + +#КонецОбласти + +Процедура Инициализация() + + Лог = Логирование.ПолучитьЛог(ИмяЛога()); + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("init"); + КомандыПлагина.Добавить("sync"); + +КонецПроцедуры + +Инициализация(); From 1d8603da49f17d77aff52e26db2bb259a9094e47 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Mon, 18 Dec 2023 13:30:51 +0300 Subject: [PATCH 6/8] =?UTF-8?q?fix:=20=D0=92=20=D0=BF=D0=BB=D0=B0=D0=B3?= =?UTF-8?q?=D0=B8=D0=BD=20drop-config-dump=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BE=D1=82=D0=BB=D0=B0=D0=B4?= =?UTF-8?q?=D0=BE=D1=87=D0=BD=D1=8B=D0=B5=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dropConfigDump.os" | 6 ++++++ 1 file changed, 6 insertions(+) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" index b58110e..70d86b9 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" @@ -124,6 +124,7 @@ ФайлДампаИзменений = Новый Файл(ОбъединитьПути(КаталогРабочейКопии, ИмяФайлаДампаИзменений())); Если ФайлДампаИзменений.Существует() Тогда + Лог.Отладка("Удаляем файл дампа изменений ""%1"".", ФайлДампаИзменений.ПолноеИмя); УдалитьФайлы(ФайлДампаИзменений.ПолноеИмя); КонецЕсли; @@ -134,6 +135,7 @@ ФайлДампаИзменений = Новый Файл(ОбъединитьПути(КаталогВыгрузки, ИмяФайлаДампаИзменений())); Если ФайлДампаИзменений.Существует() Тогда + Лог.Отладка("Удаляем файл дампа изменений ""%1"".", ФайлДампаИзменений.ПолноеИмя); УдалитьФайлы(ФайлДампаИзменений.ПолноеИмя); КонецЕсли; @@ -155,6 +157,7 @@ ТекстИгнорируемыхИзменений = Новый ТекстовыйДокумент(); Если ФайлИгнорируемыхИзменений.Существует() И ФайлИгнорируемыхИзменений.ЭтоФайл() Тогда + Лог.Отладка("Найден файл игнорируемых изменений ""%1"".", ФайлИгнорируемыхИзменений.ПолноеИмя); ТекстИгнорируемыхИзменений.Прочитать(ФайлИгнорируемыхИзменений.ПолноеИмя); КонецЕсли; @@ -169,6 +172,9 @@ ТекстИгнорируемыхИзменений.ДобавитьСтроку(ОтносительныйПуть); ТекстИгнорируемыхИзменений.Записать(ФайлИгнорируемыхИзменений.ПолноеИмя); + Лог.Отладка("Файл дампа изменений ""%1"" добавлен в файл игнорируемых изменений ""%2"".", + ОтносительныйПуть, + ФайлИгнорируемыхИзменений.ПолноеИмя); ЗакоммититьФайлИгнорируемыхИзменений = Истина; From 095a6bf443ff5a7130b7ac98683bef08642dc4bd Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Mon, 18 Dec 2023 14:50:06 +0300 Subject: [PATCH 7/8] =?UTF-8?q?refactor:=20=D0=92=20=D0=BF=D0=BB=D0=B0?= =?UTF-8?q?=D0=B3=D0=B8=D0=BD=D0=B5=20drop-config-dump=20=D1=83=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB?= =?UTF-8?q?=D0=B0=20=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=B2=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=83=D1=8E?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5=D0=B4=D1=83=D1=80=D1=83.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dropConfigDump.os" | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" index 70d86b9..6334574 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" @@ -121,23 +121,13 @@ ПутьКХранилищу, НомерВерсии) Экспорт - ФайлДампаИзменений = Новый Файл(ОбъединитьПути(КаталогРабочейКопии, ИмяФайлаДампаИзменений())); - - Если ФайлДампаИзменений.Существует() Тогда - Лог.Отладка("Удаляем файл дампа изменений ""%1"".", ФайлДампаИзменений.ПолноеИмя); - УдалитьФайлы(ФайлДампаИзменений.ПолноеИмя); - КонецЕсли; + УдалитьФайлДампаИзменений(КаталогРабочейКопии); КонецПроцедуры Процедура ПослеВыгрузкиКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки) Экспорт - ФайлДампаИзменений = Новый Файл(ОбъединитьПути(КаталогВыгрузки, ИмяФайлаДампаИзменений())); - - Если ФайлДампаИзменений.Существует() Тогда - Лог.Отладка("Удаляем файл дампа изменений ""%1"".", ФайлДампаИзменений.ПолноеИмя); - УдалитьФайлы(ФайлДампаИзменений.ПолноеИмя); - КонецЕсли; + УдалитьФайлДампаИзменений(КаталогВыгрузки); КонецПроцедуры @@ -150,10 +140,8 @@ Возврат; КонецЕсли; - ПутьКФайлуДампаИзменений = ОбъединитьПути(КаталогРабочейКопии, ИмяФайлаДампаИзменений()); - - ФайлИгнорируемыхИзменений = Новый Файл(ОбъединитьПути(КорневойКаталогГит, ".gitignore")); - + ПутьКФайлуДампаИзменений = ОбъединитьПути(КаталогРабочейКопии, ИмяФайлаДампаИзменений()); + ФайлИгнорируемыхИзменений = Новый Файл(ОбъединитьПути(КорневойКаталогГит, ".gitignore")); ТекстИгнорируемыхИзменений = Новый ТекстовыйДокумент(); Если ФайлИгнорируемыхИзменений.Существует() И ФайлИгнорируемыхИзменений.ЭтоФайл() Тогда @@ -193,8 +181,7 @@ Возврат; КонецЕсли; - РабочийКаталог = ГитРепозиторий.ПолучитьРабочийКаталог(); - + РабочийКаталог = ГитРепозиторий.ПолучитьРабочийКаталог(); КорневойКаталогГит = КорневойКаталогГит(РабочийКаталог); Если НЕ ЗначениеЗаполнено(КорневойКаталогГит) Тогда @@ -249,6 +236,22 @@ КонецФункции // КорневойКаталогГит() +// Процедура удаляет файл дампа изменений (ConfigDumpInfo.xml) в указаном каталоге +// +// Параметры: +// КаталогРабочейКопии - Строка - проверяемый каталог +// +Процедура УдалитьФайлДампаИзменений(КаталогРабочейКопии) + + ФайлДампаИзменений = Новый Файл(ОбъединитьПути(КаталогРабочейКопии, ИмяФайлаДампаИзменений())); + + Если ФайлДампаИзменений.Существует() Тогда + Лог.Отладка("Удаляем файл дампа изменений ""%1"".", ФайлДампаИзменений.ПолноеИмя); + УдалитьФайлы(ФайлДампаИзменений.ПолноеИмя); + КонецЕсли; + +КонецПроцедуры // УдалитьФайлДампаИзменений() + // Функция возвращает имя файла дампа изменений // // Возвращаемое значение: From 865cd523edd82203a4db1299c14a44a99fe15410 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Mon, 18 Dec 2023 16:20:49 +0300 Subject: [PATCH 8/8] =?UTF-8?q?feat:=20=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8?= =?UTF-8?q?=D0=BD=20drop-support=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BD=D1=8F?= =?UTF-8?q?=D1=82=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83?= =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20=D1=81=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B8=20=D0=B1=D0=B5=D0=B7=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83?= =?UTF-8?q?=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 1 + .../dropConfigDump.os" | 3 + .../dropSupport.os" | 273 ++++++++++++++++++ 3 files changed, 277 insertions(+) create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/dropSupport.os" diff --git a/packagedef b/packagedef index 41fcc9a..cffb43a 100644 --- a/packagedef +++ b/packagedef @@ -57,4 +57,5 @@ .ОпределяетКласс("Плагин_ЗаменаАвторов", "src/Классы/replaceAuthors.os") .ОпределяетКласс("Плагин_Ibcmd", "src/Классы/useIbcmd.os") .ОпределяетКласс("Плагин_DropConfigDump", "src/Классы/dropConfigDump.os") + .ОпределяетКласс("Плагин_DropSupport", "src/Классы/dropSupport.os") ; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" index 6334574..0cbcdbe 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" @@ -289,10 +289,13 @@ Процедура Инициализация() Лог = Логирование.ПолучитьЛог(ИмяЛога()); + КомандыПлагина = Новый Массив; КомандыПлагина.Добавить("init"); КомандыПлагина.Добавить("sync"); + ЗакоммититьФайлИгнорируемыхИзменений = Ложь; + КонецПроцедуры Инициализация(); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropSupport.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropSupport.os" new file mode 100644 index 0000000..7e98965 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropSupport.os" @@ -0,0 +1,273 @@ +#Использовать logos +#Использовать gitsync + +Перем Лог; // Лог - объект протоколирования (logger) +Перем Обработчик; // Команда - обработчик текущей команды gitsync +Перем КомандыПлагина; // Массив из Строка - список команд к которым подключается текущий плагин +Перем ТекущаяКоманда; // Строка - имя выполняемой команды gitsync + +Перем ЗакоммититьФайлИгнорируемыхИзменений; // Булево - Истина - закоммитить файл .gitignore. + +#Область Интерфейс_плагина + +// Возвращает версию плагина +// +// Возвращаемое значение: +// Строка - текущая версия плагина +// +Функция Версия() Экспорт + Возврат "1.0.0"; +КонецФункции + +// Возвращает приоритет выполнения плагина +// +// Возвращаемое значение: +// Число - приоритет выполнения плагина +// +Функция Приоритет() Экспорт + Возврат 0; +КонецФункции + +// Возвращает описание плагина +// +// Возвращаемое значение: +// Строка - описание функциональности плагина +// +Функция Описание() Экспорт + Возврат "Плагин удаляет информацию о поддержке. + |Удаляет файлы конфигураций поставщика поддержки (*.cf) и очищает файл настроек поддержки (ParentConfiguration.bin)."; +КонецФункции + +// Возвращает подробную справку к плагину +// +// Возвращаемое значение: +// Строка - подробная справка для плагина +// +Функция Справка() Экспорт + Возврат "Плагин удаляет информацию о поддержке. + |Удаляет файлы конфигураций поставщика поддержки (*.cf) и очищает файл настроек поддержки (ParentConfiguration.bin)."; +КонецФункции + +// Возвращает имя плагина +// +// Возвращаемое значение: +// Строка - имя плагина при подключении +// +Функция Имя() Экспорт + Возврат "drop-support"; +КонецФункции + +// Возвращает имя лога плагина +// +// Возвращаемое значение: +// Строка - имя лога плагина +// +Функция ИмяЛога() Экспорт + Возврат СтрШаблон("oscript.lib.gitsync.plugins.%1", Имя()); +КонецФункции + +#КонецОбласти + +#Область Подписки_на_события + +Процедура ПриАктивизации(СтандартныйОбработчик) Экспорт + + Обработчик = СтандартныйОбработчик; + +КонецПроцедуры + +Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации) Экспорт + + ТекущаяКоманда = ИмяКоманды; + + Лог.Отладка("Ищу команду <%1> в списке поддерживаемых", ИмяКоманды); + Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда + Возврат; + КонецЕсли; + +КонецПроцедуры + +Процедура ПриПолученииПараметров(ПараметрыКоманды) Экспорт + +КонецПроцедуры + +Процедура ПередВыгрузкойКонфигурациюВИсходники(Конфигуратор, + КаталогРабочейКопии, + КаталогВыгрузки, + ПутьКХранилищу, + НомерВерсии) Экспорт + + УдалитьИнформациюОПоддержке(КаталогРабочейКопии); + +КонецПроцедуры + +Процедура ПослеВыгрузкиКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки) Экспорт + + УдалитьИнформациюОПоддержке(КаталогВыгрузки); + +КонецПроцедуры + +Процедура ПередКоммитом(КаталогРабочейКопии, Комментарий, Автор, Дата) Экспорт + + КорневойКаталогГит = КорневойКаталогГит(КаталогРабочейКопии); + + Если НЕ ЗначениеЗаполнено(КорневойКаталогГит) Тогда + Лог.Предупреждение("Каталог ""%1"" не является репозитарием git!", КаталогРабочейКопии); + Возврат; + КонецЕсли; + + КаталогПоддержки = ОбъединитьПути(КаталогРабочейКопии, "Ext", "ParentConfigurations"); + ФайлИгнорируемыхИзменений = Новый Файл(ОбъединитьПути(КорневойКаталогГит, ".gitignore")); + ТекстИгнорируемыхИзменений = Новый ТекстовыйДокумент(); + + Если ФайлИгнорируемыхИзменений.Существует() И ФайлИгнорируемыхИзменений.ЭтоФайл() Тогда + ТекстИгнорируемыхИзменений.Прочитать(ФайлИгнорируемыхИзменений.ПолноеИмя); + КонецЕсли; + + ОтносительныйПуть = СтрШаблон("%1%2*.cf", + СтрЗаменить(КаталогПоддержки, КорневойКаталогГит, ""), + ПолучитьРазделительПути()); + + Для НомерСтроки = 1 По ТекстИгнорируемыхИзменений.КоличествоСтрок() Цикл + ТекСтрока = ТекстИгнорируемыхИзменений.ПолучитьСтроку(НомерСтроки); + Если СтрНайти(ТекСтрока, ОтносительныйПуть) > 0 Тогда + Возврат; + КонецЕсли; + КонецЦикла; + + ТекстИгнорируемыхИзменений.ДобавитьСтроку(ОтносительныйПуть); + ТекстИгнорируемыхИзменений.Записать(ФайлИгнорируемыхИзменений.ПолноеИмя); + + ЗакоммититьФайлИгнорируемыхИзменений = Истина; + +КонецПроцедуры + +Процедура ПриКоммите(ГитРепозиторий, + Комментарий, + ПроиндексироватьОтслеживаемыеФайлы, + ИмяФайлаКомментария, + АвторДляГит, + ДатаДляГит, + Коммитер, + ДатаКоммитера) Экспорт + + Если НЕ ЗакоммититьФайлИгнорируемыхИзменений Тогда + Возврат; + КонецЕсли; + + РабочийКаталог = ГитРепозиторий.ПолучитьРабочийКаталог(); + КорневойКаталогГит = КорневойКаталогГит(РабочийКаталог); + + Если НЕ ЗначениеЗаполнено(КорневойКаталогГит) Тогда + Лог.Предупреждение("Каталог ""%1"" не является репозитарием git!", РабочийКаталог); + Возврат; + КонецЕсли; + + ФайлИгнорируемыхИзменений = Новый Файл(ОбъединитьПути(КорневойКаталогГит, ".gitignore")); + + ПараметрыКомандыГит = Новый Массив(); + ПараметрыКомандыГит.Добавить("add"); + ПараметрыКомандыГит.Добавить("-A"); + ПараметрыКомандыГит.Добавить(ФайлИгнорируемыхИзменений.ПолноеИмя); + + ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыГит); + +КонецПроцедуры + +#КонецОбласти + +#Область Вспомогательные_процедуры_и_функции + +// Функция возвращает путь к корневому каталогу репозитария git +// +// Параметры: +// КаталогРабочейКопии - Строка - проверяемый каталог +// +// Возвращаемое значение: +// Строка - путь к корневому каталогу репозитария git +// если пустая строка, то каталог не является репозитарием git +// +Функция КорневойКаталогГит(Знач КаталогРабочейКопии) + + ТекущийКаталог = Новый Файл(КаталогРабочейКопии); + + ЭтоКорневойКаталог = (ТекущийКаталог.ПолноеИмя = "/" + ИЛИ Прав(ТекущийКаталог.ПолноеИмя, 1) = ":" + ИЛИ Прав(ТекущийКаталог.ПолноеИмя, 2) = ":/" + ИЛИ Прав(ТекущийКаталог.ПолноеИмя, 2) = ":\"); + + Если ЭтоКорневойКаталог Тогда + Возврат ""; + КонецЕсли; + + СлужебныйКаталогГит = Новый Файл(ОбъединитьПути(ТекущийКаталог.ПолноеИмя, ".git")); + + Если СлужебныйКаталогГит.Существует() И СлужебныйКаталогГит.ЭтоКаталог() Тогда + Возврат ТекущийКаталог.ПолноеИмя; + Иначе + Возврат КорневойКаталогГит(ТекущийКаталог.Путь); + КонецЕсли; + +КонецФункции // КорневойКаталогГит() + +// Процедура удаляет файлы конфигураций поставщика (*.cf) +// и очищает информацию о поддержке в файле ParentConfigurations.bin +// +// Параметры: +// КаталогРабочейКопии - Строка - обрабатываемый каталог +// +Процедура УдалитьИнформациюОПоддержке(КаталогРабочейКопии) + + КаталогОбщихДанныхКонфигурации = ОбъединитьПути(КаталогРабочейКопии, "Ext"); + КаталогПоддержки = ОбъединитьПути(КаталогОбщихДанныхКонфигурации, "ParentConfigurations"); + ФайлыПоставщика = НайтиФайлы(КаталогПоддержки, "*.cf"); + + Для Каждого ТекФайлПоставщика Из ФайлыПоставщика Цикл + Лог.Отладка("Удаляем файл поставщика ""%1"".", ТекФайлПоставщика.ПолноеИмя); + УдалитьФайлы(ТекФайлПоставщика.ПолноеИмя); + КонецЦикла; + + ФайлПоддержки = Новый Файл(ОбъединитьПути(КаталогОбщихДанныхКонфигурации, "ParentConfigurations.bin")); + ТекстПоддержки = Новый ТекстовыйДокумент(); + Если ФайлПоддержки.Существует() И ФайлПоддержки.ЭтоФайл() Тогда + ТекстПоддержки.Прочитать(ФайлПоддержки.ПолноеИмя); + КонецЕсли; + + Если ТекстПоддержки.КоличествоСтрок() = 1 Тогда + ТекСтрока = ТекстПоддержки.ПолучитьСтроку(1); + Если СтрНайти(ТекСтрока, ТекстОтключеннойПоддержки()) > 0 Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + ТекстПоддержки.УстановитьТекст(ТекстОтключеннойПоддержки()); + ТекстПоддержки.Записать(ФайлПоддержки.ПолноеИмя); + Лог.Отладка("Отключена поддержка в файле ""%1"".", ФайлПоддержки.ПолноеИмя); + +КонецПроцедуры // УдалитьИнформациюОПоддержке() + +// Функция возвращает текст файла ParentConfigurations.bin для отключения поддержки +// +// Возвращаемое значение: +// Строка - текст файла ParentConfigurations.bin для отключения поддержки +// +Функция ТекстОтключеннойПоддержки() + + Возврат "{6,0,0,0,1,0}"; + +КонецФункции // ТекстОтключеннойПоддержки() + +#КонецОбласти + +Процедура Инициализация() + + Лог = Логирование.ПолучитьЛог(ИмяЛога()); + + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("sync"); + + ЗакоммититьФайлИгнорируемыхИзменений = Ложь; + +КонецПроцедуры + +Инициализация();