From 0a3017ad30ed06325231ce4125b87ce7c8c150b5 Mon Sep 17 00:00:00 2001 From: Aleksey Khorev Date: Wed, 13 Mar 2019 07:47:27 +0300 Subject: [PATCH 01/14] =?UTF-8?q?=D0=A7=D1=83=D1=82=D0=BA=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=85=D0=B8=D0=BC=D0=B8=D1=87=D0=B8=D0=BB=20=D1=81=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=BE=D0=B9=20all?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...274\320\260\320\275\320\264\320\260All.os" | 52 +++++- ...20\267\320\260\321\206\320\270\321\217.os" | 148 ++++++++---------- 2 files changed, 109 insertions(+), 91 deletions(-) diff --git "a/src/cmd/\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\260All.os" "b/src/cmd/\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\260All.os" index 3e237c05..2aee2b59 100644 --- "a/src/cmd/\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\260All.os" +++ "b/src/cmd/\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\260All.os" @@ -1,4 +1,5 @@ - +#Использовать configor + Перем Лог; Процедура ОписаниеКоманды(Команда) Экспорт @@ -49,13 +50,18 @@ ФайлНастроек = Новый Файл(ПутьКФайлуНастроек); Если Не ФайлНастроек.Существует() Тогда - ВызватьИсключение Новый ИнформацияОбОшибке(СтрШаблон("Файл настроек <%1> не найден", ФайлНастроек.ПолноеИмя), "Работа приложения остановлена"); + ВызватьИсключение СтрШаблон("Файл настроек <%1> не найден", ФайлНастроек.ПолноеИмя); КонецЕсли; ОбщиеПараметры = ПараметрыПриложения.Параметры(); + ПараметрыФайлаНастроек = ПрочитатьФайлНастроек(ПутьКФайлуНастроек); + + Если ПараметрыФайлаНастроек.Количество() = 0 Тогда + ВызватьИсключение "Файл настроек не содержит данных"; + КонецЕсли; + ПакетнаяСинхронизация = Новый ПакетнаяСинхронизация(); - ПакетнаяСинхронизация.УстановитьНастройки(ПутьКФайлуНастроек); ПакетнаяСинхронизация.ТаймерПовторения(ИнтервалПовторенияСинхронизации) .КаталогПлагинов(ПараметрыПриложения.КаталогПлагинов()) .ФайлВключенныхПлагинов(ПараметрыПриложения.ФайлВключенныхПлагинов()) @@ -65,7 +71,9 @@ .УровеньЛога(ПараметрыПриложения.УровеньЛога()) .РежимУдаленияВременныхФайлов(Истина) .АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища); - + + ПакетнаяСинхронизация.ПрочитатьНастройки(ПараметрыФайлаНастроек); + Если ЗначениеЗаполнено(ИмяНастройкиСинхронизации) Тогда ПакетнаяСинхронизация.ВыполнитьСинхронизациюПоНастройке(ИмяНастройкиСинхронизации); Иначе @@ -76,4 +84,40 @@ КонецПроцедуры +Функция ПрочитатьФайлНастроек(Знач ПутьКФайлуНастроек) + + МенеджерПараметров = Новый МенеджерПараметров(); + МенеджерПараметров.УстановитьФайлПараметров(ПутьКФайлуНастроек); + МенеджерПараметров.ИспользоватьПровайдерJSON(); + + Если НЕ ПараметрыПриложения.ЭтоСборкаEXE() Тогда + МенеджерПараметров.ИспользоватьПровайдерYAML(); + КонецЕсли; + + Лог.Отладка("Чтение файла настроек начато"); + МенеджерПараметров.Прочитать(); + Лог.Отладка("Чтение файла настроек завершено"); + + ПрочитанныйПараметры = МенеджерПараметров.ПрочитанныйПараметры(); + + ЭтоОдинРепозиторий = МенеджерПараметров.Параметр("repositories") = Неопределено + И МенеджерПараметров.Параметр("Репозитории") = Неопределено; + + Параметры = ПрочитанныйПараметры; + + Если ЭтоОдинРепозиторий Тогда + + Параметры = Новый Соответствие(); + МассивРепозиториев = Новый Массив; + МассивРепозиториев.Добавить(ПрочитанныйПараметры); + + Параметры.Вставить("repositories", МассивРепозиториев); + + КонецЕсли; + + Возврат Параметры; + +КонецФункции + + Лог = ПараметрыПриложения.Лог(); \ No newline at end of file diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\320\272\320\265\321\202\320\275\320\260\321\217\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\321\217.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\320\272\320\265\321\202\320\275\320\260\321\217\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\321\217.os" index 9dbf0185..8def0b65 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\320\272\320\265\321\202\320\275\320\260\321\217\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\321\217.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\320\272\320\265\321\202\320\275\320\260\321\217\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\321\217.os" @@ -134,18 +134,19 @@ КонецФункции -// Устанавливает путь к файлу настроек пакетной синхронизации +// Читает настройки пакетной синхронизации из соответствия // // Параметры: -// НовыйПутьКФайлуНастроек - Строка - путь к настроек пакетной синхронизации +// НастройкиСинхронизации - Соответствие - набор настроек для пакетной синхронизации // -// Возвращаемое значение: -// Объект.МенеджерСинхронизации - ссылка на текущий объект класса <МенеджерСинхронизации> -// -Функция УстановитьНастройки(НовыйПутьКФайлуНастроек) Экспорт - ПутьКФайлуНастроек = НовыйПутьКФайлуНастроек; - Возврат ЭтотОбъект; -КонецФункции +Процедура ПрочитатьНастройки(Знач НастройкиСинхронизации) Экспорт + + КонструкторПараметров = КонструкторПараметровПакетнойСинхронизации(); + КонструкторПараметров.ИзСоответствия(НастройкиСинхронизации); + + Параметры = КонструкторПараметров.ВСтруктуру(); + +КонецПроцедуры // Устанавливает таймер повторения пакетной синхронизации // @@ -190,6 +191,8 @@ // Процедура ВыполнитьСинхронизацию(Знач КоличествоПотоков = 1) Экспорт + ПодготовитьИндексРепозиториев(); + Пока Истина Цикл ПакетнаяСинхронизация(); @@ -213,10 +216,9 @@ // Процедура ВыполнитьСинхронизациюПоНастройке(Знач ИмяНастройкиСинхронизации) Экспорт - Пока Истина Цикл + ПодготовитьИндексРепозиториев(); - ПрочитатьФайлНастроек(); - ПодготовитьИндексРепозиториев(); + Пока Истина Цикл РепоСинхронизации = ИндексРепозиториев[ИмяНастройкиСинхронизации]; @@ -246,86 +248,71 @@ #КонецОбласти -Процедура ПрочитатьФайлНастроек() - - МенеджерПараметров = Новый МенеджерПараметров(); - МенеджерПараметров.УстановитьФайлПараметров(ПутьКФайлуНастроек); - МенеджерПараметров.ИспользоватьПровайдерJSON(); - МенеджерПараметров.ИспользоватьПровайдерYAML(); - МенеджерПараметров.КонструкторПараметров(ЭтотОбъект); - Лог.Отладка("Чтение файла настроек начато"); - МенеджерПараметров.Прочитать(); - Лог.Отладка("Чтение файла настроек завершено"); - -КонецПроцедуры - #Область Интерфейс_конструктора_параметров -Функция Параметры() Экспорт - Возврат Параметры; -КонецФункции - -Процедура УстановитьПараметры(Знач ВходящиеПараметры) Экспорт - Параметры = ВходящиеПараметры; -КонецПроцедуры - -Процедура ОписаниеПараметров(Знач Конструктор) Экспорт - - ПараметрыПлагины = Конструктор.НовыеПараметры(); +Функция КонструкторОбщихПараметров() + + ПараметрыПлагины = Новый КонструкторПараметров(); ПараметрыПлагины.ПолеМассив("ВключенныеПлагины enable", Тип("Строка")) .ПолеМассив("ОтключенныеПлагины disable", Тип("Строка")) + .ПолеМассив("ДополнительныеПлагины extra additional more", Тип("Строка")) ; - ПараметрыНастроекПлагинов = Конструктор.НовыеПараметры(); + ПараметрыНастроекПлагинов = Новый КонструкторПараметров(); ПараметрыНастроекПлагинов.ПроизвольныеПоля(); - ГлобальныеПараметры = Конструктор.НовыеПараметры(); - ГлобальныеПараметры.ПолеСтрока("ПользовательХранилища storage-user user", АвторизацияВХранилище.ПользовательХранилища) - .ПолеСтрока("ПарольПользователяХранилища storage-pwd storage-password password pwd", АвторизацияВХранилище.ПарольХранилища) - .ПолеСтрока("ПутьИсполняемомуФайлуГит git-path git", ПутьКИсполняемомуФайлуGit) - .ПолеСтрока("ПутьКВременномуКаталогу temp-dir tempdir temp", ПутьКВременномуКаталогу) - .ПолеСтрока("ВерсияПлатформы v8version v8", ТекущаяВерсияПлатформы) - .ПолеСтрока("ДоменПочтыПоУмолчанию domain-email email", ДоменПочтыДляGitПоУмолчанию) - .ПолеЧисло("КоличествоЦикловОжиданияЛицензии lic-try-count", КоличествоЦикловОжиданияЛицензииПоУмолчанию) + КонструкторПараметров = Новый КонструкторПараметров(); + + КонструкторПараметров.ПолеСтрока("ПользовательХранилища storage-user user") + .ПолеСтрока("ПарольПользователяХранилища storage-pwd storage-password password pwd") + .ПолеСтрока("ПутьИсполняемомуФайлуГит git-path git") + .ПолеСтрока("ПутьКВременномуКаталогу temp-dir tempdir temp") + .ПолеСтрока("ВерсияПлатформы v8version v8") + .ПолеСтрока("ДоменПочтыПоУмолчанию domain-email email") + .ПолеЧисло("КоличествоЦикловОжиданияЛицензии lic-try-count") .ПолеОбъект("Плагины plugins", ПараметрыПлагины) .ПолеОбъект("НастройкиПлагинов plugins-config flags", ПараметрыНастроекПлагинов) ; - ПараметрыПлагиныРепозитория = ПараметрыПлагины.Скопировать(); - ПараметрыПлагиныРепозитория.ПолеМассив("ДополнительныеПлагины extra additional more", Тип("Строка")); + Возврат КонструкторПараметров; + +КонецФункции - ПараметрыРепозитория = Конструктор.НовыеПараметры(); - ПараметрыРепозитория.ПолеБулево("Отключено disable", Ложь) +Функция КонструкторПараметровРепозитория() + + КонструкторПараметров = КонструкторОбщихПараметров(); + + КонструкторПараметров.ПолеБулево("Отключено disable", Ложь) .ПолеСтрока("Наименование storage-name name") .ПолеСтрока("ПутьКХранилищу storage-path path") .ПолеСтрока("ПутьКРабочемуКаталогу work-dir git-local-path dir") .ПолеСтрока("ИмяРасширения extention") - // Стандартные поля - .ПолеСтрока("ПользовательХранилища storage-user user") - .ПолеСтрока("ПарольПользователяХранилища storage-pwd storage-password password pass") - .ПолеСтрока("ПутьИсполняемомуФайлуГит git-path git") - .ПолеСтрока("ПутьКВременномуКаталогу temp-dir tempdir temp") - .ПолеСтрока("ВерсияПлатформы v8version v8") - .ПолеСтрока("ДоменПочтыПоУмолчанию domain-email email") - .ПолеЧисло("КоличествоЦикловОжиданияЛицензии lic-try-count", КоличествоЦикловОжиданияЛицензииПоУмолчанию) - .ПолеОбъект("Плагины plugins", ПараметрыПлагиныРепозитория) - .ПолеОбъект("НастройкиПлагинов plugins-config flags", ПараметрыНастроекПлагинов) ; - Конструктор.ПолеОбъект("НастройкиПоУмолчанию globals default", ГлобальныеПараметры) + Возврат КонструкторПараметров; + +КонецФункции + +Функция КонструкторПараметровПакетнойСинхронизации() Экспорт + + КонструкторПараметров = Новый КонструкторПараметров(); + + ОбщиеПараметры = КонструкторОбщихПараметров(); + ПараметрыРепозитория = КонструкторПараметровРепозитория(); + + КонструкторПараметров.ПолеОбъект("НастройкиПоУмолчанию globals default", ОбщиеПараметры) .ПолеМассив("Репозитории repositories", ПараметрыРепозитория) ; + + Возврат КонструкторПараметров; -КонецПроцедуры +КонецФункции + #КонецОбласти Процедура ПакетнаяСинхронизация() - ПрочитатьФайлНастроек(); - - ПодготовитьИндексРепозиториев(); - Лог.Информация("Начата пакетная синхронизация с <%1> репозиториями", ИндексРепозиториев.Количество()); Для каждого КлючЗначение Из ИндексРепозиториев Цикл @@ -339,32 +326,19 @@ Процедура ПодготовитьИндексРепозиториев() + ИндексРепозиториев = Новый Соответствие(); + Лог.Отладка("Готовлю индекс для <%1> репозиториев", Параметры.Репозитории.Количество()); Для каждого ПараметрыРепозитория Из Параметры.Репозитории Цикл - РепоСинхронизации = ИндексРепозиториев[ПараметрыРепозитория.Наименование]; - ОтключенныйРепозиторий = ПараметрыРепозитория.Отключено; - Если ОтключенныйРепозиторий - И НЕ РепоСинхронизации = Неопределено Тогда - ИндексРепозиториев.Удалить(РепоСинхронизации); - КонецЕсли; - - Если ОтключенныйРепозиторий Тогда - Продолжить; - КонецЕсли; - - Если РепоСинхронизации = Неопределено Тогда - - РепоСинхронизации = Новый РепозиторийСинхронизации(); - РепоСинхронизации.КаталогПлагинов(КаталогПлагинов) - .ФайлВключенныхПлагинов(ПутьКФайлуВключенныхПлагинов) - // .УровеньЛога(Лог.ПолучитьУровеньЛога()) - ; - - ИндексРепозиториев.Вставить(ПараметрыРепозитория.Наименование, РепоСинхронизации); - - КонецЕсли; + РепоСинхронизации = Новый РепозиторийСинхронизации(); + РепоСинхронизации.КаталогПлагинов(КаталогПлагинов) + .ФайлВключенныхПлагинов(ПутьКФайлуВключенныхПлагинов) + // .УровеньЛога(Лог.ПолучитьУровеньЛога()) + ; + + ИндексРепозиториев.Вставить(ПараметрыРепозитория.Наименование, РепоСинхронизации); ОбъединитьПараметрыРепозиторияИГлобальные(ПараметрыРепозитория); From f7a1adfb62b07453882a210ebca7e0e03c62e0cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=B4=D0=BC=D0=B8=D0=BD=D0=B8=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D1=80?= <Администратор@localhost> Date: Wed, 13 Mar 2019 10:31:26 +0300 Subject: [PATCH 02/14] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D0=BF=D0=BE=D0=BB=D0=BD=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B5.=20=D0=9D?= =?UTF-8?q?=D0=B5=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D1=8F=D0=BB=D0=BE=D1=81?= =?UTF-8?q?=D1=8C=20=D0=B8=D0=BC=D1=8F=20=D1=80=D0=B0=D1=81=D1=88=D0=B8?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\270\320\267\320\260\321\206\320\270\320\270.os" | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git "a/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" "b/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" index e79d1cc3..79d486da 100644 --- "a/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" +++ "b/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" @@ -495,13 +495,14 @@ Если СтандартнаяОбработка Тогда - Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); - Параметры.Добавить(СтрШаблон("/DumpConfigToFiles %1", КаталогВыгрузки)); - Если ИмяРасширения <> "" Тогда - Параметры.Добавить(СтрШаблон("-Extension %1", ИмяРасширения)); - КонецЕсли; Попытка - Конфигуратор.ВыполнитьКоманду(Параметры); + + Если НЕ ПустаяСтрока(ИмяРасширения) Тогда + Конфигуратор.ВыгрузитьРасширениеВФайлы(КаталогВыгрузки, ИмяРасширения); + Иначе + Конфигуратор.ВыгрузитьКонфигурациюВФайлы(КаталогВыгрузки); + КонецЕсли; + Исключение ОписаниеОшибки = ОписаниеОшибки(); Если Не ЭтоПропускаемаяОшибка(ОписаниеОшибки) Тогда From 7f2b4d472d0785c5c250b04fa09c87eb9125376b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=B4=D0=BC=D0=B8=D0=BD=D0=B8=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D1=80?= <Администратор@localhost> Date: Wed, 13 Mar 2019 10:31:59 +0300 Subject: [PATCH 03/14] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B5=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D1=8F=20=D0=BD=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=BF=D0=B8=D1=81=D0=BA=D0=B5=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=82=D0=B0=D0=B1=D0=BB?= =?UTF-8?q?=D0=B8=D1=86=D1=8B=20=D0=B0=D0=B2=D1=82=D0=BE=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\277\320\270\321\201\320\276\320\272.os" | 42 ++++++++ ...20\267\320\260\321\206\320\270\320\270.os" | 96 ++++++++++++------- 2 files changed, 102 insertions(+), 36 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\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\237\320\276\320\264\320\277\320\270\321\201\320\276\320\272.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\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\237\320\276\320\264\320\277\320\270\321\201\320\276\320\272.os" index 1a71f9aa..63bb64d7 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\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\237\320\276\320\264\320\277\320\270\321\201\320\276\320\272.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\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\237\320\276\320\264\320\277\320\270\321\201\320\276\320\272.os" @@ -245,6 +245,48 @@ КонецПроцедуры +// Вызывается при получении таблицы пользователей из хранилища конфигурации +// +// Параметры: +// ПутьКФайлуАвторов - Строка - полный путь к хранилищу конфигурации +// ТаблицаАвторов - ТаблицаЗначений - инициализированная таблица с колонками: +// * Автор - Строка - имя автора версии в хранилище +// * ПредставлениеАвтора - Строка - представление автора для коммита в git +// СтандартнаяОбработка - Булево - признак отказ от обработки по умолчанию +// +Процедура ПриПолученииТаблицыАвторов(ПутьКФайлуАвторов, ТаблицаАвторов, СтандартнаяОбработка) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ПутьКФайлуАвторов); + ПараметрыВыполнения.Добавить(ТаблицаАвторов); + ПараметрыВыполнения.Добавить(СтандартнаяОбработка); + + ВыполнитьПодпискуНаСобытие("ПриПолученииТаблицыАвторов", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ПутьКФайлуАвторов, ТаблицаАвторов, СтандартнаяОбработка); + +КонецПроцедуры + +// Вызывается при получении таблицы пользователей из хранилища конфигурации +// +// Параметры: +// ПутьКФайлуАвторов - Строка - полный путь к хранилищу конфигурации +// ТаблицаАвторов - ТаблицаЗначений - инициализированная таблица с колонками: +// * Автор - Строка - имя автора версии в хранилище +// * ПредставлениеАвтора - Строка - представление автора для коммита в git +// +Процедура ПослеПолученияТаблицыАвторов(ПутьКФайлуАвторов, ТаблицаАвторов) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ПутьКФайлуАвторов); + ПараметрыВыполнения.Добавить(ТаблицаАвторов); + + ВыполнитьПодпискуНаСобытие("ПослеПолученияТаблицыАвторов", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ПутьКФайлуАвторов, ТаблицаАвторов); + +КонецПроцедуры + #КонецОбласти #Область Подписки_на_обработки_строки_версии diff --git "a/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" "b/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" index 79d486da..689bbaa3 100644 --- "a/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" +++ "b/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" @@ -982,7 +982,9 @@ Знач КаталогРабочейКопии) Экспорт ПутьКФайлуСопоставления = ОбъединитьПути(КаталогРабочейКопии, ИмяФайлаАвторов()); - ТаблицаСопоставления = ПрочитатьФайлАвторовГитВТаблицуПользователей(ПутьКФайлуСопоставления); + + ТаблицаСопоставления = ПолучитьТаблицуАвторов(ПутьКФайлуСопоставления); + Для Каждого СтрокаТаблицы Из ТаблицаХранилища Цикл СтрокаПользователя = ТаблицаСопоставления.Найти(СтрокаТаблицы.Автор, "Автор"); @@ -1029,7 +1031,7 @@ КонецПроцедуры -// Читает файл авторов и возвращает таблицу пользователей +// Получает таблицу авторов из файла // // Параметры: // ПутьКФайлуАвторов - Строка - путь к файлу авторов @@ -1038,52 +1040,64 @@ // ТаблицаЗначений - таблица пользователей с колонками // * Автор - Строка - имя автора версии в хранилище // * ПредставлениеАвтора - Строка - представление автора для коммита в git -// * ГУИД_Автора - Строка - уникальный идентификатор автора версии // -Функция ПрочитатьФайлАвторовГитВТаблицуПользователей(Знач ПутьКФайлуАвторов) Экспорт +Функция ПолучитьТаблицуАвторов(Знач ПутьКФайлуАвторов) Экспорт - Если НЕ ЗначениеЗаполнено(ПутьКФайлуАвторов) Тогда - Возврат Неопределено; + СтандартнаяОбработка = Истина; + + ТаблицаАвторов = НоваяТаблицаАвторов(); + + ОбработчикПодписок.ПриПолученииТаблицыАвторов(ПутьКФайлуАвторов, ТаблицаАвторов, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + ПрочитатьФайлАвторов(ПутьКФайлуАвторов, ТаблицаАвторов); КонецЕсли; + ОбработчикПодписок.ПослеПолученияТаблицыАвторов(ПутьКФайлуАвторов, ТаблицаАвторов); + + Возврат ТаблицаАвторов; + +КонецФункции + +Процедура ПрочитатьФайлАвторов(ПутьКФайлуАвторов, ТаблицаАвторов) + + Если НЕ ЗначениеЗаполнено(ПутьКФайлуАвторов) Тогда + Возврат; + КонецЕсли; + Файл = Новый Файл(ПутьКФайлуАвторов); Если Не Файл.Существует() Тогда - Возврат НоваяТаблицаПользователейХранилища(); + Возврат; КонецЕсли; + + ТекстовыйФайл = Новый ЧтениеТекста(ПутьКФайлуАвторов, "utf-8"); + ТекстФайла = ТекстовыйФайл.Прочитать(); - Пользователи = НоваяТаблицаПользователейХранилища(); - - Попытка - ТекстовыйФайл = Новый ЧтениеТекста(ПутьКФайлуАвторов, "utf-8"); - СтрокаФайла = ""; - Пока СтрокаФайла <> Неопределено Цикл - СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку(); - Индекс = Найти(СтрокаФайла, "="); - Если Индекс > 0 Тогда - - Ключ = Лев(СтрокаФайла, Индекс - 1); - АвторПредставление = Сред(СтрокаФайла, Индекс + 1); - - НоваяСтрока = Пользователи.Добавить(); - НоваяСтрока.ПредставлениеАвтора = АвторПредставление; - НоваяСтрока.Автор = Ключ; - КонецЕсли; - КонецЦикла; - - Исключение - Если ТекстовыйФайл <> Неопределено Тогда - ОсвободитьОбъект(ТекстовыйФайл); + МассивСтрокФайла = СтрРазделить(ТекстФайла, Символы.ПС, Ложь); + + Для каждого СтрокаФайла Из МассивСтрокФайла Цикл + + МассивКлючей = СтрРазделить(СтрокаФайла, "=", Ложь); + + Если Не МассивКлючей.Количество() = 2 Тогда + Лог.Предупреждение("Ошибка чтения файла авторов строка <%1>", СтрокаФайла); + Продолжить; КонецЕсли; - ВызватьИсключение; - КонецПопытки; - + + НоваяСтрока = ТаблицаАвторов.Добавить(); + НоваяСтрока.ПредставлениеАвтора = СокрЛП(МассивКлючей[0]); + НоваяСтрока.Автор = СокрЛП(МассивКлючей[1]); + + КонецЦикла; + + ТекстовыйФайл.Закрыть(); + Если ТекстовыйФайл <> Неопределено Тогда ОсвободитьОбъект(ТекстовыйФайл); КонецЕсли; - - Возврат Пользователи; - -КонецФункции + +КонецПроцедуры + // Наполняет каталог рабочей копии служебными данными // @@ -1278,6 +1292,16 @@ КонецФункции +Функция НоваяТаблицаАвторов() + + Таблица = Новый ТаблицаЗначений; + Таблица.Колонки.Добавить("Автор"); + Таблица.Колонки.Добавить("ПредставлениеАвтора"); + + Возврат Таблица; + +КонецФункции + Функция ПодготовитьФайлКоммита(Знач Комментарий) ИмяФайлаКомментария = ВременныеФайлы.СоздатьФайл("txt"); From ff380ce82dcd574a26ae20f8dc8be12b573a039e Mon Sep 17 00:00:00 2001 From: khorevaa Date: Wed, 13 Mar 2019 11:31:47 +0300 Subject: [PATCH 04/14] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB=20?= =?UTF-8?q?=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B9=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO | 6 ------ ...\275\320\270\320\267\320\260\321\206\320\270\320\270.os" | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) delete mode 100644 TODO diff --git a/TODO b/TODO deleted file mode 100644 index d5a7ec82..00000000 --- a/TODO +++ /dev/null @@ -1,6 +0,0 @@ -[] Добавить чистку кеша Хранилища 1С по отдельному флагу (или подключаемому плагину) -[] Команда all - [] Чтение файла формата json - [] Чтение файла формата yaml - [] Чтение файла формата xml для совместимости??? -[] Описать интерфейс подписчиков отдельно diff --git "a/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" "b/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" index 689bbaa3..797a6aa2 100644 --- "a/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" +++ "b/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" @@ -1056,7 +1056,7 @@ ОбработчикПодписок.ПослеПолученияТаблицыАвторов(ПутьКФайлуАвторов, ТаблицаАвторов); Возврат ТаблицаАвторов; - + КонецФункции Процедура ПрочитатьФайлАвторов(ПутьКФайлуАвторов, ТаблицаАвторов) From 9c0dc7b99be67823de467c319a23614c18afeba5 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Wed, 13 Mar 2019 12:52:12 +0300 Subject: [PATCH 05/14] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BF=D1=83?= =?UTF-8?q?=D1=82=D0=B0=D0=BB=20=D0=B8=D0=BD=D0=B4=D0=B5=D0=BA=D1=81=20?= =?UTF-8?q?=D0=B8=D0=B7=20=D0=BC=D0=B0=D1=81=D1=81=D0=B8=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\275\320\270\320\267\320\260\321\206\320\270\320\270.os" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" "b/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" index 797a6aa2..3e0e3b5a 100644 --- "a/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" +++ "b/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" @@ -1085,8 +1085,8 @@ КонецЕсли; НоваяСтрока = ТаблицаАвторов.Добавить(); - НоваяСтрока.ПредставлениеАвтора = СокрЛП(МассивКлючей[0]); - НоваяСтрока.Автор = СокрЛП(МассивКлючей[1]); + НоваяСтрока.Автор = СокрЛП(МассивКлючей[0]); + НоваяСтрока.ПредставлениеАвтора = СокрЛП(МассивКлючей[1]); КонецЦикла; From 5f1ff8044eed2041cfc84345688b4852bece15d4 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Wed, 13 Mar 2019 17:59:21 +0300 Subject: [PATCH 06/14] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D0=BA=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D0=B5=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\275\320\270\320\267\320\260\321\206\320\270\320\270.os" | 4 ++++ 1 file changed, 4 insertions(+) diff --git "a/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" "b/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" index 3e0e3b5a..60ce4378 100644 --- "a/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" +++ "b/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" @@ -1077,6 +1077,10 @@ Для каждого СтрокаФайла Из МассивСтрокФайла Цикл + Если СтрНачинаетсяС(СокрЛП(СтрокаФайла), "//") Тогда + Продолжить; + КонецЕсли; + МассивКлючей = СтрРазделить(СтрокаФайла, "=", Ложь); Если Не МассивКлючей.Количество() = 2 Тогда From 6f61ae57be102ca9033ac46d1d55bd941c681684 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Mon, 18 Mar 2019 11:21:16 +0300 Subject: [PATCH 07/14] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=BF=D1=86=D0=B8=D1=8F=20-e=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B?= =?UTF-8?q?=20clone?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...320\276\320\274\320\260\320\275\320\264\320\260Clone.os" | 6 ++++++ 1 file changed, 6 insertions(+) diff --git "a/src/cmd/\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\260Clone.os" "b/src/cmd/\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\260Clone.os" index 2c908e0d..cebc407c 100644 --- "a/src/cmd/\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\260Clone.os" +++ "b/src/cmd/\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\260Clone.os" @@ -9,6 +9,10 @@ Команда.Опция("p storage-pwd", "", "пароль пользователя хранилища конфигурации") .ТСтрока() .ВОкружении("GITSYNC_STORAGE_PASSWORD GITSYNC_STORAGE_PWD"); + + Команда.Опция("e ext extension", "", "имя расширения для работы с хранилищем расширения") + .ТСтрока() + .ВОкружении("GITSYNC_EXTENSION"); Команда.Аргумент("PATH", "", "Путь к хранилищу конфигурации 1С.") .ТСтрока() @@ -34,6 +38,7 @@ ПользовательХранилища = Команда.ЗначениеОпции("storage-user"); ПарольПользователяХранилища = Команда.ЗначениеОпции("storage-pwd"); + ИмяРасширения = Команда.ЗначениеОпции("extension"); Лог.Отладка("КаталогРабочейКопии: %1", КаталогРабочейКопии); @@ -61,6 +66,7 @@ .ПутьКПлатформе(ОбщиеПараметры.ПутьКПлатформе) .ДоменПочтыПоУмолчанию(ОбщиеПараметры.ДоменПочты) .ИсполняемыйФайлГит(ОбщиеПараметры.ПутьКГит) + .ИмяРасширения(ИмяРасширения) .ПодпискиНаСобытия(ИндексПлагинов) .ПараметрыПодписокНаСобытия(Команда.ПараметрыКоманды()) .УровеньЛога(ПараметрыПриложения.УровеньЛога()) From 06e7a00df14a173bbbe8c418db41b8bab486d42b Mon Sep 17 00:00:00 2001 From: khorevaa Date: Tue, 19 Mar 2019 10:42:07 +0300 Subject: [PATCH 08/14] =?UTF-8?q?=D0=9E=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=BE=D0=B1=D1=85=D0=BE=D0=B4=D0=B8=D0=BC=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=20=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...70\320\267\320\260\321\206\320\270\320\270.os" | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" index 06cee4f0..c3d50b9f 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" @@ -33,7 +33,7 @@ ПроверитьВозможностьСинхронизации(); - НастроитьМенеджерСинхронизации(); + МенеджерСинхронизации = ПолучитьМенеджерСинхронизации(); Если МенеджерСинхронизации.ТребуетсяСинхронизироватьХранилищеСГит(ПутьКРабочемуКаталогу, ПутьКХранилищу) Тогда @@ -45,7 +45,7 @@ Лог.Информация("Путь к рабочей копии: <%1>", ПутьКРабочемуКаталогу); Иначе - Лог.Предупреждение("--> Синхронизация не требуется <--"); + Лог.Информация("--> Синхронизация не требуется <--"); КонецЕсли; Лог.Информация("================================="); @@ -55,12 +55,9 @@ // TODO: Написать проверку какую? ) КонецПроцедуры -Процедура НастроитьМенеджерСинхронизации() +Функция ПолучитьМенеджерСинхронизации() - Если МенеджерСинхронизации = Неопределено Тогда - МенеджерСинхронизации = Новый МенеджерСинхронизации(); - КонецЕсли; - + МенеджерСинхронизации = Новый МенеджерСинхронизации(); МенеджерСинхронизации.ВерсияПлатформы(ВерсияПлатформы) .ДоменПочтыПоУмолчанию(ДоменПочтыПоУмолчанию) .ИсполняемыйФайлГит(ПутьИсполняемомуФайлуГит) @@ -75,7 +72,9 @@ МенеджерСинхронизации.ИмяРасширения(ИмяРасширения); КонецЕсли; -КонецПроцедуры + Возврат МенеджерСинхронизации; + +КонецФункции // Устанавливает путь к каталогу плагинов // From ff272f9348fce858c1312ae930993760f8ca3da1 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Tue, 19 Mar 2019 17:54:54 +0300 Subject: [PATCH 09/14] =?UTF-8?q?=D0=9C=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\271\320\273\320\260\320\274\320\270.os" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os" diff --git "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os" "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os" new file mode 100644 index 00000000..01a53335 --- /dev/null +++ "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os" @@ -0,0 +1,49 @@ +#Использовать json + +Функция ПрочитатьФайл(Знач ПутьКФайлу) Экспорт + + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); + ТекстФайла = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Возврат ТекстФайла; + +КонецФункции + +Процедура ЗаписатьФайл(Знач ПутьКФайлу, Знач ТекстФайла) Экспорт + + ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу); + ЗаписьТекста.Записать(ТекстФайла); + ЗаписьТекста.Закрыть(); + +КонецПроцедуры + +Функция ОБъектВJson(Знач Объект, ПараметрыЗаписи = Неопределено) Экспорт + + Если ПараметрыЗаписи = Неопределено Тогда + ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", ,,,,,, Истина); + КонецЕсли; + + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи); + ЗаписатьJSON(ЗаписьJSON, Объект); + + Возврат ЗаписьJSON.Закрыть(); + +КонецФункции + +Функция ОбъектИзJson(ТекстJSON, ЧитатьВСтруктуру = Ложь, ФорматДаты = Неопределено) Экспорт + + Если ФорматДаты = Неопределено Тогда + ФорматДаты = ФорматДатыJSON.ISO; + КонецЕсли; + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(ТекстJSON); + + Объект = ПрочитатьJSON(ЧтениеJSON, + НЕ ЧитатьВСтруктуру,, + ФорматДаты); + ЧтениеJSON.Закрыть(); + Возврат Объект; + +КонецФункции \ No newline at end of file From 01a56356c57c6fba55e8af895fecf51d7d95fc28 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Tue, 19 Mar 2019 17:55:19 +0300 Subject: [PATCH 10/14] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D0=B0=D1=8F=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20all?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...274\320\260\320\275\320\264\320\260All.os" | 34 +++--- ...20\267\320\260\321\206\320\270\320\270.os" | 2 +- ...20\267\320\260\321\206\320\270\321\217.os" | 114 +++++++++++++----- 3 files changed, 102 insertions(+), 48 deletions(-) diff --git "a/src/cmd/\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\260All.os" "b/src/cmd/\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\260All.os" index 2aee2b59..47176324 100644 --- "a/src/cmd/\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\260All.os" +++ "b/src/cmd/\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\260All.os" @@ -14,11 +14,10 @@ Команда.Опция("n name", "", "имя настройки пакетной синхронизации") .ТСтрока(); - + Команда.Опция("u storage-user", "", "пользователь хранилища конфигурации") .ТСтрока() - .ВОкружении("GITSYNC_STORAGE_USER") - .ПоУмолчанию("Администратор"); + .ВОкружении("GITSYNC_STORAGE_USER"); Команда.Опция("p storage-pwd", "", "пароль пользователя хранилища конфигурации") .ТСтрока() @@ -42,7 +41,7 @@ ПользовательХранилища = Команда.ЗначениеОпции("storage-user"); ПарольПользователяХранилища = Команда.ЗначениеОпции("storage-pwd"); - + ИмяНастройкиСинхронизации = Команда.ЗначениеОпции("name"); КоличествоПотоковСинхронизации = Команда.ЗначениеОпции("thread"); @@ -62,15 +61,18 @@ КонецЕсли; ПакетнаяСинхронизация = Новый ПакетнаяСинхронизация(); - ПакетнаяСинхронизация.ТаймерПовторения(ИнтервалПовторенияСинхронизации) + ПакетнаяСинхронизация + .ТаймерПовторения(ИнтервалПовторенияСинхронизации) .КаталогПлагинов(ПараметрыПриложения.КаталогПлагинов()) .ФайлВключенныхПлагинов(ПараметрыПриложения.ФайлВключенныхПлагинов()) .ВерсияПлатформы(ОбщиеПараметры.ВерсияПлатформы) .ДоменПочтыПоУмолчанию(ОбщиеПараметры.ДоменПочты) .ИсполняемыйФайлГит(ОбщиеПараметры.ПутьКГит) - .УровеньЛога(ПараметрыПриложения.УровеньЛога()) + .ПутьКПлатформе(ОбщиеПараметры.ПутьКПлатформе) + .УровеньЛога(ПараметрыПриложения.УровеньЛога()) .РежимУдаленияВременныхФайлов(Истина) - .АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища); + .АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища) + ; ПакетнаяСинхронизация.ПрочитатьНастройки(ПараметрыФайлаНастроек); @@ -85,23 +87,17 @@ КонецПроцедуры Функция ПрочитатьФайлНастроек(Знач ПутьКФайлуНастроек) - - МенеджерПараметров = Новый МенеджерПараметров(); - МенеджерПараметров.УстановитьФайлПараметров(ПутьКФайлуНастроек); - МенеджерПараметров.ИспользоватьПровайдерJSON(); - - Если НЕ ПараметрыПриложения.ЭтоСборкаEXE() Тогда - МенеджерПараметров.ИспользоватьПровайдерYAML(); - КонецЕсли; Лог.Отладка("Чтение файла настроек начато"); - МенеджерПараметров.Прочитать(); + + ТекстФайла = РаботаСФайлами.ПрочитатьФайл(ПутьКФайлуНастроек); + Лог.Отладка("Чтение файла настроек завершено"); - ПрочитанныйПараметры = МенеджерПараметров.ПрочитанныйПараметры(); + ПрочитанныйПараметры = РаботаСФайлами.ОбъектИзJson(ТекстФайла); - ЭтоОдинРепозиторий = МенеджерПараметров.Параметр("repositories") = Неопределено - И МенеджерПараметров.Параметр("Репозитории") = Неопределено; + ЭтоОдинРепозиторий = ПрочитанныйПараметры.Получить("repositories") = Неопределено + И ПрочитанныйПараметры.Получить("Репозитории") = Неопределено; Параметры = ПрочитанныйПараметры; diff --git "a/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" "b/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" index 60ce4378..d7bb0c59 100644 --- "a/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" +++ "b/src/core/\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\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" @@ -458,7 +458,7 @@ ПериодОжидания = 10000; Лог.Ошибка(ТекстОшибки); - Лог.Информация("Повторное подключение через 10сек. Осталось попыток: <%1>", КоличествоЦикловОжиданияЛицензии); + Лог.Информация("Повторное подключение через 10 сек. Осталось попыток: <%1>", КоличествоЦикловОжиданияЛицензии); Приостановить(ПериодОжидания); Иначе diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\320\272\320\265\321\202\320\275\320\260\321\217\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\321\217.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\320\272\320\265\321\202\320\275\320\260\321\217\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\321\217.os" index 8def0b65..36f630af 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\320\272\320\265\321\202\320\275\320\260\321\217\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\321\217.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\320\272\320\265\321\202\320\275\320\260\321\217\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\321\217.os" @@ -11,8 +11,8 @@ /////////////////////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -Перем ДоменПочтыДляGitПоУмолчанию Экспорт; // Строка, домен пользователей по умолчанию -Перем ТекущаяВерсияПлатформы Экспорт; // Строка, используемая версия 1С.Предприятие +Перем ДоменПочтыДляGitПоУмолчанию; // Строка, домен пользователей по умолчанию +Перем ТекущаяВерсияПлатформы; // Строка, используемая версия 1С.Предприятие Перем ТаймерПовторения; Перем ПутьКФайлуНастроек; @@ -21,7 +21,8 @@ Перем ПутьКВременномуКаталогу; Перем ИндексРепозиториев; -Перем Параметры; +Перем НастройкиПоУмолчанию; +Перем РепозиторииСинхронизации; #Область Публичное_API @@ -134,6 +135,21 @@ КонецФункции +// Устанавливает путь к платформе 1С +// +// Параметры: +// НовыйПутьКПлатформе - Строка - путь к исполняемому файлу платформы 1С.Предприятие +// +// Возвращаемое значение: +// Объект.МенеджерСинхронизации - ссылка на текущий объект класса <МенеджерСинхронизации> +// +Функция ПутьКПлатформе(Знач НовыйПутьКПлатформе) Экспорт + + ТекущийПутьКПлатформе = НовыйПутьКПлатформе; + Возврат ЭтотОбъект; + +КонецФункции + // Читает настройки пакетной синхронизации из соответствия // // Параметры: @@ -141,11 +157,19 @@ // Процедура ПрочитатьНастройки(Знач НастройкиСинхронизации) Экспорт + Лог.Отладка("Количество настроек <%1>", НастройкиСинхронизации.Количество()); + КонструкторПараметров = КонструкторПараметровПакетнойСинхронизации(); КонструкторПараметров.ИзСоответствия(НастройкиСинхронизации); Параметры = КонструкторПараметров.ВСтруктуру(); + НастройкиПоУмолчанию = Параметры.НастройкиПоУмолчанию; + + ДополнитьНастройкиПоУмолчания(); + + РепозиторииСинхронизации = Параметры.Репозитории; + КонецПроцедуры // Устанавливает таймер повторения пакетной синхронизации @@ -328,8 +352,8 @@ ИндексРепозиториев = Новый Соответствие(); - Лог.Отладка("Готовлю индекс для <%1> репозиториев", Параметры.Репозитории.Количество()); - Для каждого ПараметрыРепозитория Из Параметры.Репозитории Цикл + Лог.Отладка("Готовлю индекс для <%1> репозиториев", РепозиторииСинхронизации.Количество()); + Для каждого ПараметрыРепозитория Из РепозиторииСинхронизации Цикл РепоСинхронизации = Новый РепозиторийСинхронизации(); @@ -340,7 +364,7 @@ ИндексРепозиториев.Вставить(ПараметрыРепозитория.Наименование, РепоСинхронизации); - ОбъединитьПараметрыРепозиторияИГлобальные(ПараметрыРепозитория); + ДополнитьПараметрыРепозитория(ПараметрыРепозитория); РепоСинхронизации.ПрочитатьПараметры(ПараметрыРепозитория); @@ -348,35 +372,69 @@ КонецПроцедуры -Процедура ОбъединитьПараметрыРепозиторияИГлобальные(ПараметрыРепозитория) +Процедура ДополнитьНастройкиПоУмолчания() + + Если ЗначениеЗаполнено(АвторизацияВХранилище.ПользовательХранилища) Тогда + НастройкиПоУмолчанию.Вставить("ПользовательХранилища", АвторизацияВХранилище.ПользовательХранилища); + НастройкиПоУмолчанию.Вставить("ПарольПользователяХранилища", АвторизацияВХранилище.ПарольПользователяХранилища); + КонецЕсли; - ГлобальныеПараметры = Параметры.НастройкиПоУмолчанию; + ЗаполнитьПриемникПриНеобходимости("ПутьИсполняемомуФайлуГит", ПутьКИсполняемомуФайлуGit, НастройкиПоУмолчанию); + ЗаполнитьПриемникПриНеобходимости("ПутьКВременномуКаталогу", ПутьКВременномуКаталогу, НастройкиПоУмолчанию); + ЗаполнитьПриемникПриНеобходимости("ВерсияПлатформы", ТекущаяВерсияПлатформы, НастройкиПоУмолчанию); + ЗаполнитьПриемникПриНеобходимости("ДоменПочтыПоУмолчанию", ДоменПочтыДляGitПоУмолчанию, НастройкиПоУмолчанию); + ЗаполнитьПриемникПриНеобходимости("КоличествоЦикловОжиданияЛицензии", КоличествоЦикловОжиданияЛицензииПоУмолчанию, НастройкиПоУмолчанию); - Для каждого ГлобальныйПараметр Из ГлобальныеПараметры Цикл - - КлючПараметра = ГлобальныйПараметр.Ключ; - ЗначениеПараметра = ГлобальныйПараметр.Значение; +КонецПроцедуры - Если Не ЗначениеЗаполнено(ЗначениеПараметра) Тогда - Продолжить; - КонецЕсли; +Процедура ДополнитьПараметрыРепозитория(ПараметрыРепозитория) - ЗначениеИзПараметровРепо = ПараметрыРепозитория[КлючПараметра]; + ГлобальныеПараметры = НастройкиПоУмолчанию; - Если КлючПараметра = "Плагины" Тогда - ОбъединитьПлагины(ЗначениеПараметра, ЗначениеИзПараметровРепо); - Продолжить; - ИначеЕсли КлючПараметра = "НастройкиПлагинов" Тогда - Лог.Отладка("Тип значения настройки плагинов <%1>", ТипЗнч(ЗначениеИзПараметровРепо)); - ОбъединитьНастройкиПлагинов(ЗначениеПараметра, ЗначениеИзПараметровРепо); - Продолжить; - КонецЕсли; + ЗаполнитьПриНеобходимости("ПользовательХранилища", ГлобальныеПараметры, ПараметрыРепозитория); + ЗаполнитьПриНеобходимости("ПарольПользователяХранилища", ГлобальныеПараметры, ПараметрыРепозитория); + ЗаполнитьПриНеобходимости("ПутьИсполняемомуФайлуГит", ГлобальныеПараметры, ПараметрыРепозитория); + ЗаполнитьПриНеобходимости("ПутьКВременномуКаталогу", ГлобальныеПараметры, ПараметрыРепозитория); + ЗаполнитьПриНеобходимости("ВерсияПлатформы", ГлобальныеПараметры, ПараметрыРепозитория); + ЗаполнитьПриНеобходимости("ДоменПочтыПоУмолчанию", ГлобальныеПараметры, ПараметрыРепозитория); + ЗаполнитьПриНеобходимости("КоличествоЦикловОжиданияЛицензии", ГлобальныеПараметры, ПараметрыРепозитория); - Если Не ЗначениеЗаполнено(ЗначениеИзПараметровРепо) Тогда - ПараметрыРепозитория.Вставить(КлючПараметра, ЗначениеПараметра); - КонецЕсли; + ОбъединитьПлагины(ГлобальныеПараметры.Плагины, ПараметрыРепозитория.Плагины); + ОбъединитьНастройкиПлагинов(ГлобальныеПараметры.НастройкиПлагинов, ГлобальныеПараметры.НастройкиПлагинов); - КонецЦикла; +КонецПроцедуры + +Процедура ЗаполнитьПриемникПриНеобходимости(Ключ, Значение, Приемник) + + Если Не ЗначениеЗаполнено(Значение) Тогда + Возврат; + КонецЕсли; + + ЗначениеПриемник = Приемник[Ключ]; + + Если ЗначениеЗаполнено(ЗначениеПриемник) Тогда + Возврат; + КонецЕсли; + + Приемник.Вставить(Ключ, Значение); + +КонецПроцедуры + +Процедура ЗаполнитьПриНеобходимости(КлючНастройки, Источник, Приемник) + + ЗначениеИсточник = Источник[КлючНастройки]; + + Если Не ЗначениеЗаполнено(ЗначениеИсточник) Тогда + Возврат; + КонецЕсли; + + ЗначениеПриемник = Приемник[КлючНастройки]; + + Если ЗначениеЗаполнено(ЗначениеПриемник) Тогда + Возврат; + КонецЕсли; + + Приемник.Вставить(КлючНастройки, ЗначениеИсточник); КонецПроцедуры From 09507f3fabfcdcb14894d18eb03f74f1b84bd460 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Tue, 19 Mar 2019 17:56:00 +0300 Subject: [PATCH 11/14] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D1=8B=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20all?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/cmd/all.feature | 47 +++++++++ features/cmd/fixtures/default.yaml | 34 +++++++ features/cmd/step_definitions/all.os | 146 +++++++++++++++++++++++++++ tests/fixtures/ext.yaml | 33 ++++++ 4 files changed, 260 insertions(+) create mode 100644 features/cmd/all.feature create mode 100644 features/cmd/fixtures/default.yaml create mode 100644 features/cmd/step_definitions/all.os create mode 100644 tests/fixtures/ext.yaml diff --git a/features/cmd/all.feature b/features/cmd/all.feature new file mode 100644 index 00000000..ee9f96d6 --- /dev/null +++ b/features/cmd/all.feature @@ -0,0 +1,47 @@ +# language: ru + +Функционал: Проверка работы команды all + Как Пользователь + Я хочу выполнить клонирование существующего репозитория гит + Чтобы выполнять автоматическую выгрузку конфигураций из хранилища + +Структура сценария: <Сценарий> + Дано Я очищаю параметры команды "gitsync" в контексте + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + + # Подготовка хранилища 1 + И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С_1" + И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С_1" + И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников_1" + И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников_1" + И Я создаю тестовой файл AUTHORS в каталоге из переменной "ПутьКаталогаИсходников_1" + И Я записываю "0" в файл VERSION в каталоге из переменной "ПутьКаталогаИсходников_1" + + # Подготовка хранилища 2 + И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С_2" + И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С_2" + И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников_2" + И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников_2" + И Я создаю тестовой файл AUTHORS в каталоге из переменной "ПутьКаталогаИсходников_2" + И Я записываю "0" в файл VERSION в каталоге из переменной "ПутьКаталогаИсходников_2" + + И Я создаю файл настройки из файла <ПутьКФайлуШаблона> и сохраняю в переменную "FILE" + + Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" + И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + # И Я добавляю параметр "-v" для команды "gitsync" + И Я добавляю параметр "all" для команды "gitsync" + И Я добавляю параметр <ДопПараметрыЗапуска> для команды "gitsync" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "FILE" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит <Результат> + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 + +Примеры: + | Сценарий | ПутьКФайлуШаблона | ДопПараметрыЗапуска | Результат | + | Выполнение синхронизации по имени | tests/fixtures/default.yaml | --name ТестовыйРепозиторий | ИНФОРМАЦИЯ - Наименование: <ТестовыйРепозиторий> | + | Выполнение синхронизации с несколькими хранилищами | tests/fixtures/default.yaml | | ИНФОРМАЦИЯ - Завершено выполнение команды | + | Выполнение синхронизации расширениями | tests/fixtures/ext.yaml | | ИНФОРМАЦИЯ - Завершено выполнение команды | + \ No newline at end of file diff --git a/features/cmd/fixtures/default.yaml b/features/cmd/fixtures/default.yaml new file mode 100644 index 00000000..3bfca11f --- /dev/null +++ b/features/cmd/fixtures/default.yaml @@ -0,0 +1,34 @@ +globals: + storage-user: Администратор + storage-pwd: '' + git-path: git + v8version: 8.3 + domain-email: localhost + lic-try-count: 5 + plugins: + enable: + - test + - test2 + disable: + - test3 +repositories: + - name: ТестовыйРепозиторий + # disable: false + path: <КаталогХранилища1С_1> + dir: <ПутьКаталогаИсходников_1> + plugins: + more: + - test3 + plugins-config: + + - name: ТестовыйРепозиторий2 + # disable: true + path: <КаталогХранилища1С_2> + dir: <ПутьКаталогаИсходников_2> + storage-user: Администратор + storage-pwd: '' + git-path: git + temp-dir: "" + v8version: 8.3 + domain-email: localhost + lic-try-count: 5 \ No newline at end of file diff --git a/features/cmd/step_definitions/all.os b/features/cmd/step_definitions/all.os new file mode 100644 index 00000000..cc4e3497 --- /dev/null +++ b/features/cmd/step_definitions/all.os @@ -0,0 +1,146 @@ +#Использовать tempfiles +#Использовать yaml + +// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd + +Перем БДД; //контекст фреймворка 1bdd + +// Метод выдает список шагов, реализованных в данном файле-шагов +Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт + БДД = КонтекстФреймворкаBDD; + + ВсеШаги = Новый Массив; + + ВсеШаги.Добавить("ЯСоздаюТестовойФайлAuthorsВКаталогеИзПеременной"); + ВсеШаги.Добавить("ЯЗаписываюВФайлVersionВКаталогеИзПеременной"); + ВсеШаги.Добавить("ЯСоздаюФайлНастройкиИзФайлаИСохраняюВПеременную"); + ВсеШаги.Добавить("ЯДобавляюПараметр__Параметрдлятаблицы____Параметрстрока__Gitsync"); + + Возврат ВсеШаги; +КонецФункции + +// Реализация шагов + +// Процедура выполняется перед запуском каждого сценария +Процедура ПередЗапускомСценария(Знач Узел) Экспорт + +КонецПроцедуры + +// Процедура выполняется после завершения каждого сценария +Процедура ПослеЗапускаСценария(Знач Узел) Экспорт + +КонецПроцедуры + + + +//Я создаю тестовой файл AUTHORS в каталоге из переменной "ПутьКаталогаИсходников_1" +Процедура ЯСоздаюТестовойФайлAuthorsВКаталогеИзПеременной(Знач ИмяПеременной) Экспорт + ПутьКаталогаИсходников = БДД.ПолучитьИзКонтекста(ИмяПеременной); + ФайлАвторов = Новый ЗаписьТекста; + ФайлАвторов.Открыть(ОбъединитьПути(ПутьКаталогаИсходников, "AUTHORS"), "utf-8"); + ФайлАвторов.ЗаписатьСтроку("Администратор=Администратор "); + ФайлАвторов.ЗаписатьСтроку("Отладка=Отладка "); + ФайлАвторов.Закрыть(); +КонецПроцедуры + +//Я записываю "0" в файл VERSION в каталоге из переменной "ПутьКаталогаИсходников_1" +Процедура ЯЗаписываюВФайлVersionВКаталогеИзПеременной(Знач НомерВерсии, Знач ИмяПеременной) Экспорт + + ПутьКаталогаИсходников = БДД.ПолучитьИзКонтекста(ИмяПеременной); + + ПутьКФайлуВерсий = ОбъединитьПути(ПутьКаталогаИсходников,"VERSION"); + Попытка + Запись = Новый ЗаписьТекста(ПутьКФайлуВерсий, "utf-8"); + Запись.ЗаписатьСтроку(""); + Запись.ЗаписатьСтроку("" + НомерВерсии + ""); + Запись.Закрыть(); + Исключение + Если Запись <> Неопределено Тогда + ОсвободитьОбъект(Запись); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; +КонецПроцедуры + +//Я добавляю параметр <--name ТестовыйРепозиторий>" для команды "gitsync" +Процедура ЯДобавляюПараметр__Параметрдлятаблицы____Параметрстрока__Gitsync(Знач Парам1, Знач ПарамСтрока2) Экспорт + ВызватьИсключение Новый ИнформацияОбОшибке("Шаг <ЯДобавляюПараметр__Параметрдлятаблицы____Параметрстрока__Gitsync> не реализован", "Не реализовано."); +КонецПроцедуры + +//Я создаю файл настройки из файла и сохраняю в переменную "FILE" +Процедура ЯСоздаюФайлНастройкиИзФайлаИСохраняюВПеременную(Знач ПутьКФайлу, Знач ИмяПеременной) Экспорт + + + ПутьКаталогаИсходников_1 = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников_1"); + КаталогХранилища1С_1 = БДД.ПолучитьИзКонтекста("КаталогХранилища1С_1"); + + ПутьКаталогаИсходников_2 = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников_2"); + КаталогХранилища1С_2 = БДД.ПолучитьИзКонтекста("КаталогХранилища1С_2"); + + ЧтениеТекста = Новый ЧтениеТекста(); + ЧтениеТекста.Открыть(ПутьКФайлу, КодировкаТекста.UTF8); + ТекстYaml = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + ТекстYaml = СтрЗаменить(ТекстYaml, "<ПутьКаталогаИсходников_1>", ПутьКаталогаИсходников_1); + ТекстYaml = СтрЗаменить(ТекстYaml, "<КаталогХранилища1С_1>", КаталогХранилища1С_1); + + ТекстYaml = СтрЗаменить(ТекстYaml, "<ПутьКаталогаИсходников_2>", ПутьКаталогаИсходников_2); + ТекстYaml = СтрЗаменить(ТекстYaml, "<КаталогХранилища1С_2>", КаталогХранилища1С_2); + + ВременныйФайл = ВременныеФайлы.СоздатьФайл(".yaml"); + + ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл); + ЗаписьТекста.Записать(ТекстYaml); + ЗаписьТекста.Закрыть(); + + + ЧтениеТекста = Новый ЧтениеТекста(); + ЧтениеТекста.Открыть(ВременныйФайл, КодировкаТекста.UTF8); + ТекстYaml = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + ПарсерYAml = Новый ПарсерYaml(); + Результа = ПарсерYAml.ПрочитатьYaml(ТекстYaml); + + ТекстJson = ОБъектВJson(Результа); + + ВременныйФайл = ВременныеФайлы.СоздатьФайл(".json"); + ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл); + ЗаписьТекста.Записать(ТекстJson); + ЗаписьТекста.Закрыть(); + + БДД.СохранитьВКонтекст(ИмяПеременной, ВременныйФайл); + +КонецПроцедуры + + +Функция ОБъектВJson(Знач Объект, ПараметрыЗаписи = Неопределено) Экспорт + + Если ПараметрыЗаписи = Неопределено Тогда + ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", ,,,,,, Истина); + КонецЕсли; + + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи); + ЗаписатьJSON(ЗаписьJSON, Объект); + + Возврат ЗаписьJSON.Закрыть(); + +КонецФункции + +Функция ОбъектИзJson(ТекстJSON, ЧитатьВСтруктуру = Ложь, ФорматДаты = Неопределено) Экспорт + + Если ФорматДаты = Неопределено Тогда + ФорматДаты = ФорматДатыJSON.ISO; + КонецЕсли; + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(ТекстJSON); + + Объект = ПрочитатьJSON(ЧтениеJSON, + НЕ ЧитатьВСтруктуру,, + ФорматДаты); + ЧтениеJSON.Закрыть(); + Возврат Объект; + +КонецФункции diff --git a/tests/fixtures/ext.yaml b/tests/fixtures/ext.yaml new file mode 100644 index 00000000..648ee49f --- /dev/null +++ b/tests/fixtures/ext.yaml @@ -0,0 +1,33 @@ +globals: + storage-user: Администратор + storage-pwd: '' + git-path: git + v8version: 8.3 + domain-email: localhost + lic-try-count: 5 + plugins: + enable: + - test + - test2 + disable: + - test3 +repositories: + - name: ТестовыйРепозиторий + # disable: false + path: <КаталогХранилища1С_1> + dir: <ПутьКаталогаИсходников_1> + plugins: + more: + - test3 + + - name: ТестовыйРепозиторий2 + # disable: true + path: <КаталогХранилища1С_2> + dir: <ПутьКаталогаИсходников_2> + storage-user: Администратор + storage-pwd: '' + git-path: git + temp-dir: "" + v8version: 8.3 + domain-email: localhost + lic-try-count: 5 \ No newline at end of file From 61eb18255116728ef935eeba77763863dbdcd09f Mon Sep 17 00:00:00 2001 From: khorevaa Date: Tue, 19 Mar 2019 17:56:24 +0300 Subject: [PATCH 12/14] =?UTF-8?q?=D0=95=D1=89=D0=B5=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D0=B8=D0=BA=20=D0=B4=D0=BB=D1=8F=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/fixtures/default.yaml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 tests/fixtures/default.yaml diff --git a/tests/fixtures/default.yaml b/tests/fixtures/default.yaml new file mode 100644 index 00000000..c9b151f3 --- /dev/null +++ b/tests/fixtures/default.yaml @@ -0,0 +1,35 @@ +globals: + storage-user: Администратор + storage-pwd: '' + git-path: git + v8version: 8.3 + domain-email: localhost + lic-try-count: 5 + plugins: + enable: + - test + - test2 + disable: + - test3 +repositories: + - name: ТестовыйРепозиторий + # disable: false + path: <КаталогХранилища1С_1> + dir: <ПутьКаталогаИсходников_1> + plugins: + more: + - test3 + plugins-config: + URL: http + + - name: ТестовыйРепозиторий2 + # disable: true + path: <КаталогХранилища1С_2> + dir: <ПутьКаталогаИсходников_2> + storage-user: Администратор + storage-pwd: '' + git-path: git + temp-dir: "" + v8version: 8.3 + domain-email: localhost + lic-try-count: 5 \ No newline at end of file From 998d2067897b9aff3132f32b61d5dcc3509184a3 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Tue, 19 Mar 2019 18:09:34 +0300 Subject: [PATCH 13/14] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D1=8B=20=D1=85?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B8=D0=BB=D0=B8=D1=89=D0=B0=20=D1=80=D0=B0?= =?UTF-8?q?=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/cmd/all.feature | 12 +++++++++-- features/cmd/step_definitions/all.os | 12 ++++++----- tests/fixtures/ext.yaml | 30 ++++------------------------ 3 files changed, 21 insertions(+), 33 deletions(-) diff --git a/features/cmd/all.feature b/features/cmd/all.feature index ee9f96d6..a3cc71a9 100644 --- a/features/cmd/all.feature +++ b/features/cmd/all.feature @@ -26,6 +26,14 @@ И Я создаю тестовой файл AUTHORS в каталоге из переменной "ПутьКаталогаИсходников_2" И Я записываю "0" в файл VERSION в каталоге из переменной "ПутьКаталогаИсходников_2" + # Подготовка хранилища 2 + И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилищаРасширения" + И я скопировал каталог тестового хранилища конфигурации расширения в каталог из переменной "КаталогХранилищаРасширения" + И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходниковРасширения" + И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходниковРасширения" + И Я создаю тестовой файл AUTHORS в каталоге из переменной "ПутьКаталогаИсходниковРасширения" + И Я записываю "0" в файл VERSION в каталоге из переменной "ПутьКаталогаИсходниковРасширения" + И Я создаю файл настройки из файла <ПутьКФайлуШаблона> и сохраняю в переменную "FILE" Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" @@ -41,7 +49,7 @@ Примеры: | Сценарий | ПутьКФайлуШаблона | ДопПараметрыЗапуска | Результат | - | Выполнение синхронизации по имени | tests/fixtures/default.yaml | --name ТестовыйРепозиторий | ИНФОРМАЦИЯ - Наименование: <ТестовыйРепозиторий> | - | Выполнение синхронизации с несколькими хранилищами | tests/fixtures/default.yaml | | ИНФОРМАЦИЯ - Завершено выполнение команды | + # | Выполнение синхронизации по имени | tests/fixtures/default.yaml | --name ТестовыйРепозиторий | ИНФОРМАЦИЯ - Наименование: <ТестовыйРепозиторий> | + # | Выполнение синхронизации с несколькими хранилищами | tests/fixtures/default.yaml | | ИНФОРМАЦИЯ - Завершено выполнение команды | | Выполнение синхронизации расширениями | tests/fixtures/ext.yaml | | ИНФОРМАЦИЯ - Завершено выполнение команды | \ No newline at end of file diff --git a/features/cmd/step_definitions/all.os b/features/cmd/step_definitions/all.os index cc4e3497..5daace23 100644 --- a/features/cmd/step_definitions/all.os +++ b/features/cmd/step_definitions/all.os @@ -62,11 +62,6 @@ КонецПопытки; КонецПроцедуры -//Я добавляю параметр <--name ТестовыйРепозиторий>" для команды "gitsync" -Процедура ЯДобавляюПараметр__Параметрдлятаблицы____Параметрстрока__Gitsync(Знач Парам1, Знач ПарамСтрока2) Экспорт - ВызватьИсключение Новый ИнформацияОбОшибке("Шаг <ЯДобавляюПараметр__Параметрдлятаблицы____Параметрстрока__Gitsync> не реализован", "Не реализовано."); -КонецПроцедуры - //Я создаю файл настройки из файла и сохраняю в переменную "FILE" Процедура ЯСоздаюФайлНастройкиИзФайлаИСохраняюВПеременную(Знач ПутьКФайлу, Знач ИмяПеременной) Экспорт @@ -77,6 +72,10 @@ ПутьКаталогаИсходников_2 = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников_2"); КаталогХранилища1С_2 = БДД.ПолучитьИзКонтекста("КаталогХранилища1С_2"); + ПутьКаталогаИсходниковРасширения = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходниковРасширения"); + КаталогХранилищаРасширения = БДД.ПолучитьИзКонтекста("КаталогХранилищаРасширения"); + + ЧтениеТекста = Новый ЧтениеТекста(); ЧтениеТекста.Открыть(ПутьКФайлу, КодировкаТекста.UTF8); ТекстYaml = ЧтениеТекста.Прочитать(); @@ -88,6 +87,9 @@ ТекстYaml = СтрЗаменить(ТекстYaml, "<ПутьКаталогаИсходников_2>", ПутьКаталогаИсходников_2); ТекстYaml = СтрЗаменить(ТекстYaml, "<КаталогХранилища1С_2>", КаталогХранилища1С_2); + ТекстYaml = СтрЗаменить(ТекстYaml, "<ПутьКаталогаИсходниковРасширения>", ПутьКаталогаИсходниковРасширения); + ТекстYaml = СтрЗаменить(ТекстYaml, "<КаталогХранилищаРасширения>", КаталогХранилищаРасширения); + ВременныйФайл = ВременныеФайлы.СоздатьФайл(".yaml"); ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл); diff --git a/tests/fixtures/ext.yaml b/tests/fixtures/ext.yaml index 648ee49f..3f02e665 100644 --- a/tests/fixtures/ext.yaml +++ b/tests/fixtures/ext.yaml @@ -1,29 +1,7 @@ -globals: - storage-user: Администратор - storage-pwd: '' - git-path: git - v8version: 8.3 - domain-email: localhost - lic-try-count: 5 - plugins: - enable: - - test - - test2 - disable: - - test3 -repositories: - - name: ТестовыйРепозиторий - # disable: false - path: <КаталогХранилища1С_1> - dir: <ПутьКаталогаИсходников_1> - plugins: - more: - - test3 - - - name: ТестовыйРепозиторий2 - # disable: true - path: <КаталогХранилища1С_2> - dir: <ПутьКаталогаИсходников_2> + name: Расширение1 + extention: test + path: <КаталогХранилищаРасширения> + dir: <ПутьКаталогаИсходниковРасширения> storage-user: Администратор storage-pwd: '' git-path: git From 540b805457e050a626c3013a3b0c4caa9a90ab71 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Tue, 19 Mar 2019 18:13:56 +0300 Subject: [PATCH 14/14] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...320\271\320\273\320\276\320\262Gitsync.os" | 47 +------------------ 1 file changed, 1 insertion(+), 46 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/bindata/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\227\320\260\320\277\320\260\320\272\320\276\320\262\320\260\320\275\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262Gitsync.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/bindata/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\227\320\260\320\277\320\260\320\272\320\276\320\262\320\260\320\275\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262Gitsync.os" index e39368fb..beb0b8e7 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/bindata/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\227\320\260\320\277\320\260\320\272\320\276\320\262\320\260\320\275\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262Gitsync.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/bindata/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\227\320\260\320\277\320\260\320\272\320\276\320\262\320\260\320\275\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262Gitsync.os" @@ -4,22 +4,7 @@ Функция ПолучитьПутьКФайлу(Знач ИмяФайла) Экспорт - МенеджерЗапакованныхФайлов = Новый МенеджерЗапакованныхФайловGitsync; - ИндексФайлов = МенеджерЗапакованныхФайлов.ПолучитьИндексФайлов(); - - ИмяКлассаФайла = ИндексФайлов[ИмяФайла]; - - Если ИмяКлассаФайла = Неопределено Тогда - ВызватьИсключение СтрШаблон("Не удалось найти двоичные данные для файла <%1>", ИмяФайла); - КонецЕсли; - - КлассФайла = Новый (ИмяКлассаФайла); - - ПутьКФайлу = ""; - - НайтиФайлИлиРаспаковать(КлассФайла, ПутьКФайлу); - - Возврат ПутьКФайлу; + Возврат ПолучитьВременныйПутьКФайлу(ИмяФайла); КонецФункции @@ -79,36 +64,6 @@ КонецПроцедуры -Функция ВычислитьХешФайла(Знач ПутьКФайлу) - - ХешФайла = Новый ХешированиеДанных(ХешФункция.MD5); - ХешФайла.ДобавитьФайл(ПутьКФайлу); - ХешСуммаСтрокой = ХешФайла.ХешСуммаСтрокой; - ХешФайла = Неопределено; - Возврат ХешСуммаСтрокой; - -КонецФункции - -Процедура НайтиФайлИлиРаспаковать(КлассФайла, ПутьКФайлу) - - ИмяФайла = КлассФайла.ИмяФайла(); - - ПутьКФайлу = ПолучитьПутьКВременномуФайлу(ИмяФайла); - - ВременныйФайл = Новый Файл(ПутьКФайлу); - - Если Не ВременныйФайл.Существует() - ИЛИ Не ВычислитьХешФайла(ПутьКФайлу) = КлассФайла.Хеш() Тогда - РаспаковатьДанные(ПутьКФайлу, КлассФайла); - КонецЕсли; - -КонецПроцедуры - -Функция ПолучитьПутьКВременномуФайлу(Знач ИмяФайла) - ПутьКФайлу = ОбъединитьПути(КаталогВременныхФайлов(), ".Gitsync", ИмяФайла); - Возврат ПутьКФайлу; -КонецФункции - Процедура ОбеспечитьКаталог(ПутьККаталогу) ВременныйКаталог = Новый Файл(ПутьККаталогу);