diff --git a/.gitignore b/.gitignore
index 25e5d678..ef87b79e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,10 +7,10 @@ bdd-*.xml
.enabled-plugins
coverage/*
-bin/*
*.ospx
oscript_modules/
+tests/fixtures/gitsync-plugins/*
embedded_plugins/*.ospx
src/cmd/oscript.cfg
@@ -18,6 +18,6 @@ src/cmd/oscript.cfg
*.cfl
*.1CL
1cv8dtmp.1CD
-tests/fixtures/extension_storage/data/
-tests/fixtures/extension_storage/cache/
-tests/fixtures/extension_storage/ver
+# tests/fixtures/extension_storage/data/
+# tests/fixtures/extension_storage/cache/
+# tests/fixtures/extension_storage/ver
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/bin/tempExtension.cfe b/bin/tempExtension.cfe
new file mode 100644
index 00000000..3f28e7aa
Binary files /dev/null and b/bin/tempExtension.cfe differ
diff --git a/build_packagedef b/build_packagedef
index 1e92459a..25b322bf 100644
--- a/build_packagedef
+++ b/build_packagedef
@@ -1,12 +1,8 @@
-#Использовать logos
#Использовать fs
-Перем Лог;
Процедура ПередСборкой(Знач РабочийКаталог) Экспорт
- ФС.ОбеспечитьПустойКаталог(ОбъединитьПути(РабочийКаталог, "oscript_modules"));
-
- Лог.Информация("Установка локальных зависимостей библиотек");
+ Сообщить("Установка локальных зависимостей библиотек");
КомандаOpm = Новый Команда;
КомандаOpm.УстановитьКоманду("opm");
@@ -19,27 +15,12 @@
ВызватьИсключение КомандаOpm.ПолучитьВывод();
КонецЕсли;
- Лог.Информация("Настройка локальных библиотек");
-
- ПутьКФайлуЗагрузчику = ОбъединитьПути(РабочийКаталог, "oscript_modules", "package-loader.os");
- ШаблонныйФайлЗагрузчик = ОбъединитьПути(РабочийКаталог, "templates", "package-loader.os");
- ФайлЗагрузчик = Новый Файл(ПутьКФайлуЗагрузчику);
- Если Не ФайлЗагрузчик.Существует() Тогда
- КопироватьФайл(ШаблонныйФайлЗагрузчик, ПутьКФайлуЗагрузчику);
- Лог.Информация("Добавлен файл загрузки локальных библиотек");
- КонецЕсли;
+ Сообщить("Получение последней версии плагинов");
- ПутьКФайлуНастройкиСкрипта = ОбъединитьПути(РабочийКаталог, "src", "cmd", "oscript.cfg");
- ШаблонныйФайлНастройкиСкрипта = ОбъединитьПути(РабочийКаталог, "templates", "oscript.cfg");
- ФайлНастройкиСкрипта= Новый Файл(ПутьКФайлуНастройкиСкрипта);
- Если Не ФайлНастройкиСкрипта.Существует() Тогда
- КопироватьФайл(ШаблонныйФайлНастройкиСкрипта, ПутьКФайлуНастройкиСкрипта);
- Лог.Информация("Добавлен файл настройки запуска");
- КонецЕсли;
-
КомандаOpm = Новый Команда;
КомандаOpm.УстановитьКоманду("opm");
КомандаOpm.ДобавитьПараметр("run get-plugins");
+ КомандаOpm.ДобавитьПараметр("develop");
КомандаOpm.ДобавитьЛогВыводаКоманды("task.build");
@@ -51,10 +32,6 @@
КонецПроцедуры
-Процедура ПриСборке(Знач РабочийКаталог, Знач АрхивПакета) Экспорт
-
-КонецПроцедуры
-
Процедура ПослеСборки(Знач РабочийКаталог, Знач ПутьКФайлуПакета) Экспорт
ПутьКФайлуНастройкиСкрипта = ОбъединитьПути(РабочийКаталог, "src", "cmd", "oscript.cfg");
@@ -67,23 +44,15 @@
КонецПроцедуры
-Лог = Логирование.ПолучитьЛог("task.build");
-
-//Лог = Логирование.ПолучитьЛог(ПараметрыСистемыOpm.ИмяЛогаСистемы());
-
-ПутьКСценариюПараметров = ОбъединитьПути(ТекущийСценарий().Каталог, "src/cmd", "Модули", "ПараметрыПриложения.os");
-ПараметрыСистемы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюПараметров);
-ИмяПродукта = НРег(ПараметрыСистемы_ЛокальнаяВерсия.ИмяПриложения());
-ВерсияПродукта = ПараметрыСистемы_ЛокальнаяВерсия.Версия();
-
-Описание.Имя(ИмяПродукта)
- .Версия(ВерсияПродукта)
- .ВерсияСреды("1.0.20")
+Описание.Имя("gitsync")
+ .Версия("3.0.0-rc.2")
+ .ВерсияСреды("1.0.21")
.ВключитьФайл("src")
.ВключитьФайл("embedded_plugins")
.ВключитьФайл("oscript_modules")
.ВключитьФайл("docs")
.ВключитьФайл("readme.md")
+ .ОпределяетКласс("МенеджерПлагинов", "src/core/Классы/МенеджерПлагинов.os")
.ОпределяетКласс("МенеджерСинхронизации", "src/core/Классы/МенеджерСинхронизации.os")
- .ОпределяетКласс("УправлениеПлагинами", "src/core/Классы/УправлениеПлагинами.os")
- .ИсполняемыйФайл("src/cmd/gitsync.os", ИмяПродукта);
\ No newline at end of file
+ .ОпределяетКласс("ПакетнаяСинхронизация", "src/core/Классы/ПакетнаяСинхронизация.os")
+ .ИсполняемыйФайл("src/cmd/gitsync.os");
\ No newline at end of file
diff --git a/config-example.json b/config-example.json
deleted file mode 100644
index 87c36e4a..00000000
--- a/config-example.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "gitsync-options":
- {
- "global":
- {
- "-email": "server.com",
- "-v8version": "1cv8.exe",
- "-plugins":
- [
- "pull",
- "push",
- "vendorUpload",
- "smart-tags",
- "increment"
- ],
- "flags":
- {
- "-limit": 5,
- "--storage-user": "Администратор"
- }
- },
- "repositories" : [
- {
- "name" : "test",
- "git-local-path": "путь1",
- "git-remote": "адрес1",
- "v8-storage-dir": "каталог1",
- "-plugins":
- [
- "pull",
- "push",
- "vendorUpload",
- "smart-tags",
- "increment"
- ]
- ,
- "flags": {
- "-limit": 5,
- "--storage-user": "Администратор"
- }
- },
- {
- "name" : "test2",
- "git-local-path": "путь2",
- "git-remote": "адрес2",
- "v8-storage-dir": "каталог2",
- "-plugins":
- [
- "pull",
- "push",
- "vendorUpload",
- "smart-tags",
- "increment"
- ]
- ,
- "flags": {
- "-limit": 5,
- "--storage-user": "Администратор"
- }
- }
- ]
- }
-}
diff --git a/config-example.xml b/config-example.xml
deleted file mode 100644
index fc64d1f1..00000000
--- a/config-example.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
- server.com
- 8.3.6
- git
-
-
-
- путь1
- адрес1
- каталог1
-
-
-
-
-
- путь2
- адрес2
- каталог2
- gmail.com
-
-
-
-
-
\ No newline at end of file
diff --git a/config-example.yaml b/config-example.yaml
deleted file mode 100644
index 18098b84..00000000
--- a/config-example.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-globals:
- storage-user: Администратор
- storage-pwd: ''
- git-path: git
- temp-dir: ""
- v8version: 8.3
- domain-email: localhost
- lic-try-count: 5
- plugins:
- enable:
- - test
- - test2
- disable:
- - test3
- plugins-config:
- git-url: git-url
- push: true
- pull: true
-repositories:
- - name: <ТестовыйРепозиторий>
- disable: true
- storage-path: <КаталогХранилища1С_1>
- git-local-path: <ПутьКаталогаИсходников_1>
- - name: <ТестовыйРепозиторий2>
- disable: true
- storage-path: <КаталогХранилища1С_2>
- git-local-path: <ПутьКаталогаИсходников_2>
- storage-user: Администратор
- storage-pwd: ''
- git-path: git
- temp-dir: ""
- v8version: 8.3
- domain-email: localhost
- lic-try-count: 5
- plugins:
- enable:
- - test
- - test2
- disable:
- - test3
- plugins-config:
- git-url: git-url
- push: true
- pull: true
-
-
-
\ No newline at end of file
diff --git a/docs/usage.md b/docs/usage.md
new file mode 100644
index 00000000..e69de29b
diff --git a/features/cmd/all.feature b/features/cmd/all.feature
new file mode 100644
index 00000000..f459136a
--- /dev/null
+++ b/features/cmd/all.feature
@@ -0,0 +1,55 @@
+# 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"
+
+ # Подготовка хранилища 2
+ И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилищаРасширения"
+ И я скопировал каталог тестового хранилища конфигурации расширения в каталог из переменной "КаталогХранилищаРасширения"
+ И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходниковРасширения"
+ И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходниковРасширения"
+ И Я создаю тестовой файл AUTHORS в каталоге из переменной "ПутьКаталогаИсходниковРасширения"
+ И Я записываю "0" в файл VERSION в каталоге из переменной "ПутьКаталогаИсходниковРасширения"
+
+ И Я создаю файл настройки из файла <ПутьКФайлуШаблона> и сохраняю в переменную "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/extention.feature b/features/cmd/extention.feature
new file mode 100644
index 00000000..a4258692
--- /dev/null
+++ b/features/cmd/extention.feature
@@ -0,0 +1,30 @@
+# language: ru
+
+Функционал: Проверка работы с хранилищем расширения
+ Как Пользователь
+ Я хочу выполнить клонирование существующего репозитория гит
+ Чтобы выполнять автоматическую выгрузку конфигураций из хранилища
+
+Контекст: Тестовый контекст
+ Когда Я очищаю параметры команды "gitsync" в контексте
+ И Я создаю новый объект ГитРепозиторий
+ И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке
+ И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С"
+ И я скопировал каталог тестового хранилища конфигурации расширения в каталог из переменной "КаталогХранилища1С"
+ И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников"
+ И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников"
+ И Я создаю тестовой файл AUTHORS
+ И Я записываю "0" в файл VERSION
+
+ Сценарий: Простая синхронизация хранилища с git-репозиторием
+ Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория"
+ И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория"
+ И Я добавляю параметр "-v" для команды "gitsync"
+ И Я добавляю параметр "sync" для команды "gitsync"
+ И Я добавляю параметр "-e test" для команды "gitsync"
+ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С"
+ И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников"
+ Когда Я выполняю команду "gitsync"
+ Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git"
+ И Вывод команды "gitsync" не содержит "Внешнее исключение"
+ И Код возврата команды "gitsync" равен 0
\ 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/ibconnection.feature b/features/cmd/ibconnection.feature
new file mode 100644
index 00000000..ff9c1d7a
--- /dev/null
+++ b/features/cmd/ibconnection.feature
@@ -0,0 +1,64 @@
+# language: ru
+
+Функционал: Синхронизация в конкретной информационной базе
+ Как Пользователь
+ Я хочу иметь возможность указать не стандартный путь к платформе 1С
+ Чтобы иметь возможность запускать синхронизацию с указание конкретной информационной базы
+
+Контекст: Тестовый контекст
+ Когда Я очищаю параметры команды "gitsync" в контексте
+ И Я создаю новый объект ГитРепозиторий
+ И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке
+ И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С"
+ И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С"
+ И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников"
+ И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников"
+ И Я создаю временную базу и сохраняю в переменную "ВременнаяБаза"
+ И Я создаю тестовой файл AUTHORS
+ И Я записываю "0" в файл VERSION
+
+Сценарий: Простая синхронизация хранилища с git-репозиторием
+ Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория"
+ И Я добавляю параметр "-v" для команды "gitsync"
+ И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория"
+ И Я добавляю параметр "--ib-connection" для команды "gitsync" из переменной "ВременнаяБаза"
+ И Я добавляю параметр "sync" для команды "gitsync"
+ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С"
+ И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников"
+ Когда Я выполняю команду "gitsync"
+ Тогда Вывод команды "gitsync" содержит "Для синхронизации используется база"
+ И Вывод команды "gitsync" содержит "Завершена синхронизации с git"
+ И Вывод команды "gitsync" не содержит "Внешнее исключение"
+ И Код возврата команды "gitsync" равен 0
+
+Сценарий: Клонирование репозитория гит и наполнение его служебными данными
+ Допустим Я создаю временный каталог и сохраняю его в переменной "URLРепозитория"
+ И Я инициализирую bare репозиторий в каталоге из переменной "URLРепозитория"
+ И Я наполняю bare репозиторий из переменной "URLРепозитория" тестовыми данными
+ И Я добавляю параметр "-v" для команды "gitsync"
+ И Я добавляю параметр "--ib-connection" для команды "gitsync" из переменной "ВременнаяБаза"
+ И Я добавляю параметр "clone" для команды "gitsync"
+ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С"
+ И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория"
+ И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников"
+ Когда Я выполняю команду "gitsync"
+ Тогда Вывод команды "gitsync" содержит "Клонирование завершено"
+ И Вывод команды "gitsync" не содержит "Внешнее исключение"
+ И Код возврата команды "gitsync" равен 0
+ И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "AUTHORS"
+ И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "VERSION"
+
+Сценарий: Инициализация каталога исходников в пустом каталоге внутри git-репозитория
+ Допустим Я инициализирую пустой репозиторий в каталог из переменной "ПутьКаталогаИсходников"
+ И Я создаю каталог src временный в каталоге из переменной "ПутьКаталогаИсходников" и сохраняю его в контекст в переменной "КаталогSRC"
+ И Я добавляю параметр "--ib-connection" для команды "gitsync" из переменной "ВременнаяБаза"
+ И Я добавляю параметр "init" для команды "gitsync"
+ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С"
+ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогSRC"
+ Когда Я выполняю команду "gitsync"
+ Тогда Вывод команды "gitsync" содержит "Инициализация завершена"
+ И Вывод команды "gitsync" не содержит "Внешнее исключение"
+ И Код возврата команды "gitsync" равен 0
+ И В каталоге из переменной "КаталогSRC" создается файл или каталог "AUTHORS"
+ И В каталоге из переменной "КаталогSRC" создается файл или каталог "VERSION"
+ И В каталоге из переменной "КаталогSRC" не создается файл или каталог ".git"
\ 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..5daace23
--- /dev/null
+++ b/features/cmd/step_definitions/all.os
@@ -0,0 +1,148 @@
+#Использовать 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");
+ Запись.ЗаписатьСтроку("");
+ Запись.ЗаписатьСтроку("" + НомерВерсии + "");
+ Запись.Закрыть();
+ Исключение
+ Если Запись <> Неопределено Тогда
+ ОсвободитьОбъект(Запись);
+ КонецЕсли;
+ ВызватьИсключение;
+ КонецПопытки;
+КонецПроцедуры
+
+//Я создаю файл настройки из файла и сохраняю в переменную "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, "<ПутьКаталогаИсходниковРасширения>", ПутьКаталогаИсходниковРасширения);
+ ТекстYaml = СтрЗаменить(ТекстYaml, "<КаталогХранилищаРасширения>", КаталогХранилищаРасширения);
+
+ ВременныйФайл = ВременныеФайлы.СоздатьФайл(".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/features/cmd/step_definitions/clone.os b/features/cmd/step_definitions/clone.os
index ed02201e..dde5cd7e 100644
--- a/features/cmd/step_definitions/clone.os
+++ b/features/cmd/step_definitions/clone.os
@@ -2,7 +2,7 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
Перем БДД; //контекст фреймворка 1bdd
-Перем ЛокальныеВременныеФайлы;
+
// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
@@ -19,14 +19,13 @@
// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
-
- ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
+
КонецПроцедуры
// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы.Удалить();
+
КонецПроцедуры
@@ -36,7 +35,7 @@
ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий");
URLРепозитория = БДД.ПолучитьИзКонтекста(ПеременнаяURLРепозитория);
- ВременныйКаталог = ЛокальныеВременныеФайлы.СоздатьКаталог();
+ ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
ГитРепозиторий.УстановитьРабочийКаталог(ВременныйКаталог);
ГитРепозиторий.Инициализировать();
@@ -62,7 +61,7 @@
ГитРепозиторий.Отправить();
- ЛокальныеВременныеФайлы.БезопасноУдалитьФайл(ВременныйКаталог);
+ ВременныеФайлы.БезопасноУдалитьФайл(ВременныйКаталог);
КонецПроцедуры
diff --git a/features/cmd/step_definitions/extention.os b/features/cmd/step_definitions/extention.os
new file mode 100644
index 00000000..6a1811fc
--- /dev/null
+++ b/features/cmd/step_definitions/extention.os
@@ -0,0 +1,54 @@
+#Использовать fs
+
+// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
+
+Перем БДД; //контекст фреймворка 1bdd
+
+
+// Метод выдает список шагов, реализованных в данном файле-шагов
+Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
+ БДД = КонтекстФреймворкаBDD;
+
+ ВсеШаги = Новый Массив;
+
+ ВсеШаги.Добавить("ЯСкопировалКаталогТестовогоХранилищаКонфигурацииРасширенияВКаталогИзПеременной");
+
+ Возврат ВсеШаги;
+КонецФункции
+
+// Реализация шагов
+
+// Процедура выполняется перед запуском каждого сценария
+Процедура ПередЗапускомСценария(Знач Узел) Экспорт
+
+
+
+КонецПроцедуры
+
+// Процедура выполняется после завершения каждого сценария
+Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
+
+
+КонецПроцедуры
+
+
+//я скопировал каталог тестового хранилища конфигурации расширения в каталог из переменной "КаталогХранилища1С"
+Процедура ЯСкопировалКаталогТестовогоХранилищаКонфигурацииРасширенияВКаталогИзПеременной(Знач ИмяПеременной) Экспорт
+ КаталогХранилища1С = БДД.ПолучитьИзКонтекста(ИмяПеременной);
+ ФС.КопироватьСодержимоеКаталога(ПутьКВременномуФайлуХранилища1С(), КаталогХранилища1С);
+ // КопироватьФайл(ПутьКВременномуФайлуХранилища1С(), ОбъединитьПути(КаталогХранилища1С, "1cv8ddb.1CD"));
+КонецПроцедуры
+
+Функция ПутьКВременномуФайлуХранилища1С()
+
+ Возврат ОбъединитьПути(КаталогFixtures(), "extension_storage");
+
+КонецФункции
+
+Функция КаталогFixtures()
+ Возврат ОбъединитьПути(КаталогГитсинк(), "tests", "fixtures");
+КонецФункции
+
+Функция КаталогГитсинк()
+ Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..", "..", "..");
+КонецФункции
diff --git a/features/cmd/step_definitions/ibconnection.os b/features/cmd/step_definitions/ibconnection.os
new file mode 100644
index 00000000..d1bd8d0e
--- /dev/null
+++ b/features/cmd/step_definitions/ibconnection.os
@@ -0,0 +1,47 @@
+#Использовать v8runner
+#Использовать tempfiles
+
+// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
+
+
+Перем БДД; //контекст фреймворка 1bdd
+
+
+// Метод выдает список шагов, реализованных в данном файле-шагов
+Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
+ БДД = КонтекстФреймворкаBDD;
+
+ ВсеШаги = Новый Массив;
+
+ ВсеШаги.Добавить("ЯСоздаюВременнуюБазуИСохраняюВПеременную");
+
+ Возврат ВсеШаги;
+КонецФункции
+
+// Реализация шагов
+
+
+// Процедура выполняется перед запуском каждого сценария
+Процедура ПередЗапускомСценария(Знач Узел) Экспорт
+
+
+
+КонецПроцедуры
+
+// Процедура выполняется после завершения каждого сценария
+Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
+
+КонецПроцедуры
+
+
+//Я создаю временную базу и сохраняю в переменную "ВременнаяБаза"
+Процедура ЯСоздаюВременнуюБазуИСохраняюВПеременную(Знач ИмяПеременной) Экспорт
+
+ ПутьКВременнойБазе = ВременныеФайлы.СоздатьКаталог();
+
+ УправлениеКонфигуратором = Новый УправлениеКонфигуратором;
+ УправлениеКонфигуратором.СоздатьФайловуюБазу(ПутьКВременнойБазе);
+
+ БДД.СохранитьВКонтекст(ИмяПеременной, СтрШаблон("/F%1",ПутьКВременнойБазе));
+
+КонецПроцедуры
diff --git a/features/cmd/step_definitions/init.os b/features/cmd/step_definitions/init.os
index 4ae473fb..153fea24 100644
--- a/features/cmd/step_definitions/init.os
+++ b/features/cmd/step_definitions/init.os
@@ -2,7 +2,7 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
Перем БДД; //контекст фреймворка 1bdd
-Перем ЛокальныеВременныеФайлы;
+
// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;
@@ -20,13 +20,13 @@
// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
+
КонецПроцедуры
// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы.Удалить();
+
КонецПроцедуры
//Я инициализирую пустой репозиторий в каталог из переменной "ПутьКаталогаИсходников"
diff --git a/features/cmd/step_definitions/shared.os b/features/cmd/step_definitions/shared.os
index 42af4ccd..30784c14 100644
--- a/features/cmd/step_definitions/shared.os
+++ b/features/cmd/step_definitions/shared.os
@@ -6,7 +6,7 @@
#Использовать "../../../src/core"
Перем БДД; //контекст фреймворка 1bdd
-Перем ЛокальныеВременныеФайлы;
+
Перем Лог;
// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
@@ -53,13 +53,13 @@
// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
+
КонецПроцедуры
// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы.Удалить();
+
КонецПроцедуры
//я устанавливаю в контексте признак статистики скриптов OneScript
@@ -104,7 +104,7 @@
//Я устанавливаю рабочей каталог во временный каталог
Процедура ЯУстанавливаюРабочейКаталогВоВременныйКаталог() Экспорт
- УстановитьТекущийКаталог(ЛокальныеВременныеФайлы.СоздатьКаталог());
+ УстановитьТекущийКаталог(ВременныеФайлы.СоздатьКаталог());
КонецПроцедуры
//Я создаю новый объект ГитРепозиторий
@@ -193,7 +193,13 @@
Процедура ЯДобавляюПараметрДляКомандыИзПеременной(Знач Параметр, Знач ИмяКоманды, Знач ИмяПеременной) Экспорт
Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды));
ЗначениеПеременной = БДД.ПолучитьИзКонтекста(ИмяПеременной);
+
+ Если СтрНайти(ЗначениеПеременной, " ") Тогда
+ ЗначениеПеременной = ОбернутьВКавычки(ЗначениеПеременной);
+ КонецЕсли;
+
Команда.ДобавитьПараметр(СтрШаблон("%1 %2", Параметр, ЗначениеПеременной));
+
КонецПроцедуры
//Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке
@@ -214,8 +220,7 @@
Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды));
Если НЕ ЭтоExe Тогда
- ПодготовитьПриложениеКТестированию(КаталогГитсинк());
-
+
Команда.УстановитьКоманду("oscript");
Команда.ДобавитьПараметр("-encoding=utf-8");
@@ -365,40 +370,7 @@
Возврат "Команда-" + ИмяКоманды;
КонецФункции
-Процедура ПодготовитьПриложениеКТестированию(Знач РабочийКаталог) Экспорт
-
- Лог.Отладка("Установка локальных зависимостей библиотек");
- КомандаOpm = Новый Команда;
- КомандаOpm.УстановитьРабочийКаталог(РабочийКаталог);
- КомандаOpm.УстановитьКоманду("opm");
- КомандаOpm.ДобавитьПараметр("install -l");
- КодВозврата = КомандаOpm.Исполнить();
-
- Если КодВозврата <> 0 Тогда
- ВызватьИсключение КомандаOpm.ПолучитьВывод();
- КонецЕсли;
-
- Лог.Отладка("Настройка локальных библиотек");
-
- ПутьКФайлуЗагрузчику = ОбъединитьПути(РабочийКаталог, "oscript_modules", "package-loader.os");
- ШаблонныйФайлЗагрузчик = ОбъединитьПути(РабочийКаталог, "templates", "package-loader.os");
- ФайлЗагрузчик = Новый Файл(ПутьКФайлуЗагрузчику);
- Если Не ФайлЗагрузчик.Существует() Тогда
- КопироватьФайл(ШаблонныйФайлЗагрузчик, ПутьКФайлуЗагрузчику);
- Лог.Информация("Добавлен файл загрузки локальных библиотек");
- КонецЕсли;
-
- ПутьКФайлуНастройкиСкрипта = ОбъединитьПути(РабочийКаталог, "src", "cmd", "oscript.cfg");
- ШаблонныйФайлНастройкиСкрипта = ОбъединитьПути(РабочийКаталог, "templates", "oscript.cfg");
- ФайлНастройкиСкрипта= Новый Файл(ПутьКФайлуНастройкиСкрипта);
- Если Не ФайлНастройкиСкрипта.Существует() Тогда
- КопироватьФайл(ШаблонныйФайлНастройкиСкрипта, ПутьКФайлуНастройкиСкрипта);
- Лог.Информация("Добавлен файл настройки запуска");
- КонецЕсли;
-
-КонецПроцедуры
-ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
Лог = Логирование.ПолучитьЛог(ИмяЛога());
\ No newline at end of file
diff --git a/features/cmd/step_definitions/sync.core.os b/features/cmd/step_definitions/sync.core.os
index e0327d2a..2951866e 100644
--- a/features/cmd/step_definitions/sync.core.os
+++ b/features/cmd/step_definitions/sync.core.os
@@ -4,7 +4,7 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
Перем БДД; //контекст фреймворка 1bdd
-Перем ЛокальныеВременныеФайлы;
+
// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;
@@ -12,7 +12,7 @@
ВсеШаги = Новый Массив;
ВсеШаги.Добавить("ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной");
- ВсеШаги.Добавить("ЯСоздаюНовыйУправлениеплагинами");
+ ВсеШаги.Добавить("ЯСоздаюНовыйМенеджерПлагинов");
ВсеШаги.Добавить("ЯСобираюТестовыйПлагинИСохраняюВКонтекст");
ВсеШаги.Добавить("ЯУстанавливаюФайлПлагинаИзПеременной");
ВсеШаги.Добавить("ЯЗагружаюПлагиныИзКаталогаВПеременной");
@@ -26,19 +26,19 @@
// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
+
КонецПроцедуры
// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы.Удалить();
+
КонецПроцедуры
//Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов"
Процедура ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной(Знач ИмяПеременной) Экспорт
- ВременныйКаталог = ЛокальныеВременныеФайлы.СоздатьКаталог();
+ ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
БДД.СохранитьВКонтекст(ИмяПеременной, ВременныйКаталог);
@@ -47,7 +47,7 @@
//Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина"
Процедура ЯСобираюТестовыйПлагинИСохраняюВКонтекст(Знач ИмяПеременной) Экспорт
- ВременныйКаталог = ЛокальныеВременныеФайлы.СоздатьКаталог();
+ ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
ФС.КопироватьСодержимоеКаталога(КаталогТестовогоПлагина(), ВременныйКаталог);
@@ -77,32 +77,32 @@
КонецПроцедуры
-//Я создаю новый УправлениеПлагинами
-Процедура ЯСоздаюНовыйУправлениеплагинами() Экспорт
- УправлениеПлагинами = Новый УправлениеПлагинами;
+//Я создаю новый МенеджерПлагинов
+Процедура ЯСоздаюНовыйМенеджерПлагинов() Экспорт
+ МенеджерПлагинов = Новый МенеджерПлагинов;
- БДД.СохранитьВКонтекст("УправлениеПлагинами", УправлениеПлагинами);
+ БДД.СохранитьВКонтекст("МенеджерПлагинов", МенеджерПлагинов);
КонецПроцедуры
//Я загружаю плагины из каталога в переменной "КаталогПлагинов"
Процедура ЯЗагружаюПлагиныИзКаталогаВПеременной(Знач ИмяПеременнойКаталога) Экспорт
- УправлениеПлагинами = БДД.ПолучитьИзКонтекста("УправлениеПлагинами");
+ МенеджерПлагинов = БДД.ПолучитьИзКонтекста("МенеджерПлагинов");
КаталогПлагинов = БДД.ПолучитьИзКонтекста(ИмяПеременнойКаталога);
- УправлениеПлагинами.УстановитьКаталогПлагинов(КаталогПлагинов);
- УправлениеПлагинами.ЗагрузитьПлагины();
+ МенеджерПлагинов.УстановитьКаталогПлагинов(КаталогПлагинов);
+ МенеджерПлагинов.ЗагрузитьПлагины();
- УправлениеПлагинами.ВключитьПлагин("test_plugin");
+ МенеджерПлагинов.ВключитьПлагин("test_plugin");
КонецПроцедуры
//Я подключаю плагины в МенеджерСинхронизации
Процедура ЯПодключаюПлагиныВМенеджерсинхронизации() Экспорт
- УправлениеПлагинами = БДД.ПолучитьИзКонтекста("УправлениеПлагинами");
+ МенеджерПлагинов = БДД.ПолучитьИзКонтекста("МенеджерПлагинов");
- ИндексПлагинов = УправлениеПлагинами.ПолучитьИндексПлагинов();
+ ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов();
МенеджерСинхронизации = БДД.ПолучитьИзКонтекста("МенеджерСинхронизации");
МенеджерСинхронизации.ПодпискиНаСобытия(ИндексПлагинов);
@@ -115,9 +115,9 @@
КаталогПлагинов = БДД.ПолучитьИзКонтекста("КаталогПлагинов");
ФайлПлагина = БДД.ПолучитьИзКонтекста(ПутьКФайлуПлагина);
- УправлениеПлагинами = БДД.ПолучитьИзКонтекста("УправлениеПлагинами");
- УправлениеПлагинами.УстановитьКаталогПлагинов(КаталогПлагинов);
- УправлениеПлагинами.УстановитьФайлПлагин(ФайлПлагина);
+ МенеджерПлагинов = БДД.ПолучитьИзКонтекста("МенеджерПлагинов");
+ МенеджерПлагинов.УстановитьКаталогПлагинов(КаталогПлагинов);
+ МенеджерПлагинов.УстановитьФайлПлагин(ФайлПлагина);
КонецПроцедуры
@@ -126,4 +126,4 @@
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "testsata", "test_plugin");
КонецФункции
-ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
+
diff --git a/features/cmd/step_definitions/sync.os b/features/cmd/step_definitions/sync.os
index 3a99892e..1aa3b993 100644
--- a/features/cmd/step_definitions/sync.os
+++ b/features/cmd/step_definitions/sync.os
@@ -1,7 +1,7 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
Перем БДД; //контекст фреймворка 1bdd
-Перем ЛокальныеВременныеФайлы;
+
// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
@@ -17,12 +17,12 @@
// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
+
КонецПроцедуры
// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы.Удалить();
+
КонецПроцедуры
diff --git "a/features/cmd/step_definitions/testsata/test_plugin/src/\320\232\320\273\320\260\321\201\321\201\321\213/testPlugin.os" "b/features/cmd/step_definitions/testsata/test_plugin/src/\320\232\320\273\320\260\321\201\321\201\321\213/testPlugin.os"
index 32280b51..9f99d014 100644
--- "a/features/cmd/step_definitions/testsata/test_plugin/src/\320\232\320\273\320\260\321\201\321\201\321\213/testPlugin.os"
+++ "b/features/cmd/step_definitions/testsata/test_plugin/src/\320\232\320\273\320\260\321\201\321\201\321\213/testPlugin.os"
@@ -116,7 +116,7 @@
// ПутьКХранилищу - Строка - полный путь к хранилищу конфигурации
// СтандартнаяОбработка - Булево - признак отказ от обработки по умолчанию
//
-Процедура ПриПолученииТаблицыВерсий(ТаблицаВерсий, ПутьКХранилищу, СтандартнаяОбработка) Экспорт
+Процедура ПриПолученииТаблицыВерсий(ТаблицаВерсий, ПутьКХранилищу, ТекущаяВерсия, СтандартнаяОбработка) Экспорт
Лог.Информация("Вызвано событие <ПриПолученииТаблицыВерсий> для плагина <%1>", Имя());
diff --git a/features/cmd/step_definitions/v8path.os b/features/cmd/step_definitions/v8path.os
new file mode 100644
index 00000000..3d675627
--- /dev/null
+++ b/features/cmd/step_definitions/v8path.os
@@ -0,0 +1,45 @@
+#Использовать v8find
+// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
+
+Перем БДД; //контекст фреймворка 1bdd
+
+// Метод выдает список шагов, реализованных в данном файле-шагов
+Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
+ БДД = КонтекстФреймворкаBDD;
+
+ ВсеШаги = Новый Массив;
+
+ ВсеШаги.Добавить("ЯИщюПлатформуИСохранюНайденныйПуть");
+
+ Возврат ВсеШаги;
+КонецФункции
+
+// Реализация шагов
+
+// Процедура выполняется перед запуском каждого сценария
+Процедура ПередЗапускомСценария(Знач Узел) Экспорт
+
+КонецПроцедуры
+
+// Процедура выполняется после завершения каждого сценария
+Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
+
+КонецПроцедуры
+
+
+//Я ищю платформу и сохраню найденный путь "ПутьКПлатформе1С"
+Процедура ЯИщюПлатформуИСохранюНайденныйПуть(Знач ИмяПеременной) Экспорт
+
+ ПутьКПлатформе1С = Платформа1С.ПутьКПредприятию("8.3");
+
+ Если Не ЗначениеЗаполнено(ПутьКПлатформе1С) Тогда
+ ВызватьИсключение "Не найден путь к платформе 1С";
+ КонецЕсли;
+
+ БДД.СохранитьВКонтекст(ИмяПеременной, ПутьКПлатформе1С);
+
+КонецПроцедуры
+
+Функция ОбернутьВКавычки(Знач Строка);
+ Возврат """" + Строка + """";
+КонецФункции
\ No newline at end of file
diff --git a/features/cmd/v8path.feature b/features/cmd/v8path.feature
index 14870025..67eb83c3 100644
--- a/features/cmd/v8path.feature
+++ b/features/cmd/v8path.feature
@@ -13,19 +13,20 @@
И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С"
И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников"
И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников"
+ И Я ищю платформу и сохраню найденный путь "ПутьКПлатформе1С"
И Я создаю тестовой файл AUTHORS
И Я записываю "0" в файл VERSION
Сценарий: Простая синхронизация хранилища с git-репозиторием
Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория"
И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория"
- И Я добавляю параметр "--v8-path /opt/1C/v8.3/i386/1cv8" для команды "gitsync"
+ И Я добавляю параметр "--v8-path" для команды "gitsync" из переменной "ПутьКПлатформе1С"
И Я добавляю параметр "-v" для команды "gitsync"
И Я добавляю параметр "sync" для команды "gitsync"
И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С"
И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников"
Когда Я выполняю команду "gitsync"
- Тогда Вывод команды "gitsync" содержит "ОТЛАДКА - Используется путь к платформе 1С "
+ Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Используется путь к платформе 1С"
И Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git"
И Вывод команды "gitsync" не содержит "Внешнее исключение"
И Код возврата команды "gitsync" равен 0
\ No newline at end of file
diff --git a/features/core/step_definitions/clone.os b/features/core/step_definitions/clone.os
index ed02201e..1503098b 100644
--- a/features/core/step_definitions/clone.os
+++ b/features/core/step_definitions/clone.os
@@ -2,7 +2,7 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
Перем БДД; //контекст фреймворка 1bdd
-Перем ЛокальныеВременныеФайлы;
+
// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
@@ -20,13 +20,13 @@
// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
+
КонецПроцедуры
// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы.Удалить();
+
КонецПроцедуры
@@ -36,7 +36,7 @@
ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий");
URLРепозитория = БДД.ПолучитьИзКонтекста(ПеременнаяURLРепозитория);
- ВременныйКаталог = ЛокальныеВременныеФайлы.СоздатьКаталог();
+ ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
ГитРепозиторий.УстановитьРабочийКаталог(ВременныйКаталог);
ГитРепозиторий.Инициализировать();
@@ -62,7 +62,7 @@
ГитРепозиторий.Отправить();
- ЛокальныеВременныеФайлы.БезопасноУдалитьФайл(ВременныйКаталог);
+ ВременныеФайлы.БезопасноУдалитьФайл(ВременныйКаталог);
КонецПроцедуры
diff --git a/features/core/step_definitions/init.os b/features/core/step_definitions/init.os
index 4ae473fb..153fea24 100644
--- a/features/core/step_definitions/init.os
+++ b/features/core/step_definitions/init.os
@@ -2,7 +2,7 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
Перем БДД; //контекст фреймворка 1bdd
-Перем ЛокальныеВременныеФайлы;
+
// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;
@@ -20,13 +20,13 @@
// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
+
КонецПроцедуры
// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы.Удалить();
+
КонецПроцедуры
//Я инициализирую пустой репозиторий в каталог из переменной "ПутьКаталогаИсходников"
diff --git a/features/core/step_definitions/shared.os b/features/core/step_definitions/shared.os
index d5ada6ff..21cbc2e4 100644
--- a/features/core/step_definitions/shared.os
+++ b/features/core/step_definitions/shared.os
@@ -6,7 +6,7 @@
#Использовать "../../../src/core"
Перем БДД; //контекст фреймворка 1bdd
-Перем ЛокальныеВременныеФайлы;
+
Перем Лог;
// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
@@ -53,13 +53,13 @@
// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
+
КонецПроцедуры
// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы.Удалить();
+
КонецПроцедуры
//я устанавливаю в контексте признак статистики скриптов OneScript
@@ -104,7 +104,7 @@
//Я устанавливаю рабочей каталог во временный каталог
Процедура ЯУстанавливаюРабочейКаталогВоВременныйКаталог() Экспорт
- УстановитьТекущийКаталог(ЛокальныеВременныеФайлы.СоздатьКаталог());
+ УстановитьТекущийКаталог(ВременныеФайлы.СоздатьКаталог());
КонецПроцедуры
//Я создаю новый объект ГитРепозиторий
@@ -199,7 +199,6 @@
//Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке
Процедура ЯУстанавливаюПутьВыполненияКомандыКТекущейБиблиотеке(Знач ИмяКоманды) Экспорт
- ПодготовитьПриложениеКТестированию(КаталогГитсинк());
ПутьГитсинк = ОбъединитьПути(КаталогГитсинк(), "src", "cmd", "gitsync.os");
Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды));
@@ -344,41 +343,7 @@
Возврат "Команда-" + ИмяКоманды;
КонецФункции
-Процедура ПодготовитьПриложениеКТестированию(Знач РабочийКаталог) Экспорт
-
- Лог.Отладка("Установка локальных зависимостей библиотек");
- КомандаOpm = Новый Команда;
- КомандаOpm.УстановитьРабочийКаталог(РабочийКаталог);
- КомандаOpm.УстановитьКоманду("opm");
- КомандаOpm.ДобавитьПараметр("install -l");
-
- КодВозврата = КомандаOpm.Исполнить();
-
- Если КодВозврата <> 0 Тогда
- ВызватьИсключение КомандаOpm.ПолучитьВывод();
- КонецЕсли;
-
- Лог.Отладка("Настройка локальных библиотек");
-
- ПутьКФайлуЗагрузчику = ОбъединитьПути(РабочийКаталог, "oscript_modules", "package-loader.os");
- ШаблонныйФайлЗагрузчик = ОбъединитьПути(РабочийКаталог, "templates", "package-loader.os");
- ФайлЗагрузчик = Новый Файл(ПутьКФайлуЗагрузчику);
- Если Не ФайлЗагрузчик.Существует() Тогда
- КопироватьФайл(ШаблонныйФайлЗагрузчик, ПутьКФайлуЗагрузчику);
- Лог.Информация("Добавлен файл загрузки локальных библиотек");
- КонецЕсли;
-
- ПутьКФайлуНастройкиСкрипта = ОбъединитьПути(РабочийКаталог, "src", "cmd", "oscript.cfg");
- ШаблонныйФайлНастройкиСкрипта = ОбъединитьПути(РабочийКаталог, "templates", "oscript.cfg");
- ФайлНастройкиСкрипта= Новый Файл(ПутьКФайлуНастройкиСкрипта);
- Если Не ФайлНастройкиСкрипта.Существует() Тогда
- КопироватьФайл(ШаблонныйФайлНастройкиСкрипта, ПутьКФайлуНастройкиСкрипта);
- Лог.Информация("Добавлен файл настройки запуска");
- КонецЕсли;
-
-КонецПроцедуры
-ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
Лог = Логирование.ПолучитьЛог(ИмяЛога());
//Лог.УстановитьУровень(Логирование.ПолучитьЛог("bdd").Уровень());
diff --git a/features/core/step_definitions/sync.batch.os b/features/core/step_definitions/sync.batch.os
index e19cfa00..089d86c5 100644
--- a/features/core/step_definitions/sync.batch.os
+++ b/features/core/step_definitions/sync.batch.os
@@ -31,7 +31,7 @@
// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
- ВременныеФайлы.Удалить();
+
КонецПроцедуры
diff --git a/features/core/step_definitions/sync.core.os b/features/core/step_definitions/sync.core.os
index fd9f3663..40b7e976 100644
--- a/features/core/step_definitions/sync.core.os
+++ b/features/core/step_definitions/sync.core.os
@@ -4,7 +4,7 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
Перем БДД; //контекст фреймворка 1bdd
-Перем ЛокальныеВременныеФайлы;
+
// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;
@@ -12,7 +12,7 @@
ВсеШаги = Новый Массив;
ВсеШаги.Добавить("ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной");
- ВсеШаги.Добавить("ЯСоздаюНовыйУправлениеплагинами");
+ ВсеШаги.Добавить("ЯСоздаюНовыйМенеджерПлагинов");
ВсеШаги.Добавить("ЯСобираюТестовыйПлагинИСохраняюВКонтекст");
ВсеШаги.Добавить("ЯУстанавливаюФайлПлагинаИзПеременной");
ВсеШаги.Добавить("ЯЗагружаюПлагиныИзКаталогаВПеременной");
@@ -26,19 +26,19 @@
// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
+
КонецПроцедуры
// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы.Удалить();
+
КонецПроцедуры
//Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов"
Процедура ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной(Знач ИмяПеременной) Экспорт
- ВременныйКаталог = ЛокальныеВременныеФайлы.СоздатьКаталог();
+ ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
БДД.СохранитьВКонтекст(ИмяПеременной, ВременныйКаталог);
@@ -47,7 +47,7 @@
//Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина"
Процедура ЯСобираюТестовыйПлагинИСохраняюВКонтекст(Знач ИмяПеременной) Экспорт
- ВременныйКаталог = ЛокальныеВременныеФайлы.СоздатьКаталог();
+ ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
ФС.КопироватьСодержимоеКаталога(КаталогТестовогоПлагина(), ВременныйКаталог);
@@ -78,32 +78,32 @@
КонецПроцедуры
-//Я создаю новый УправлениеПлагинами
-Процедура ЯСоздаюНовыйУправлениеплагинами() Экспорт
- УправлениеПлагинами = Новый УправлениеПлагинами;
+//Я создаю новый МенеджерПлагинов
+Процедура ЯСоздаюНовыйМенеджерПлагинов() Экспорт
+ МенеджерПлагинов = Новый МенеджерПлагинов;
- БДД.СохранитьВКонтекст("УправлениеПлагинами", УправлениеПлагинами);
+ БДД.СохранитьВКонтекст("МенеджерПлагинов", МенеджерПлагинов);
КонецПроцедуры
//Я загружаю плагины из каталога в переменной "КаталогПлагинов"
Процедура ЯЗагружаюПлагиныИзКаталогаВПеременной(Знач ИмяПеременнойКаталога) Экспорт
- УправлениеПлагинами = БДД.ПолучитьИзКонтекста("УправлениеПлагинами");
+ МенеджерПлагинов = БДД.ПолучитьИзКонтекста("МенеджерПлагинов");
КаталогПлагинов = БДД.ПолучитьИзКонтекста(ИмяПеременнойКаталога);
- УправлениеПлагинами.УстановитьКаталогПлагинов(КаталогПлагинов);
- УправлениеПлагинами.ЗагрузитьПлагины();
+ МенеджерПлагинов.УстановитьКаталогПлагинов(КаталогПлагинов);
+ МенеджерПлагинов.ЗагрузитьПлагины();
- УправлениеПлагинами.ВключитьПлагин("test_plugin");
+ МенеджерПлагинов.ВключитьПлагин("test_plugin");
КонецПроцедуры
//Я подключаю плагины в МенеджерСинхронизации
Процедура ЯПодключаюПлагиныВМенеджерсинхронизации() Экспорт
- УправлениеПлагинами = БДД.ПолучитьИзКонтекста("УправлениеПлагинами");
+ МенеджерПлагинов = БДД.ПолучитьИзКонтекста("МенеджерПлагинов");
- ИндексПлагинов = УправлениеПлагинами.ПолучитьИндексПлагинов();
+ ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов();
МенеджерСинхронизации = БДД.ПолучитьИзКонтекста("МенеджерСинхронизации");
МенеджерСинхронизации.ПодпискиНаСобытия(ИндексПлагинов);
@@ -116,9 +116,9 @@
КаталогПлагинов = БДД.ПолучитьИзКонтекста("КаталогПлагинов");
ФайлПлагина = БДД.ПолучитьИзКонтекста(ПутьКФайлуПлагина);
- УправлениеПлагинами = БДД.ПолучитьИзКонтекста("УправлениеПлагинами");
- УправлениеПлагинами.УстановитьКаталогПлагинов(КаталогПлагинов);
- УправлениеПлагинами.УстановитьФайлПлагин(ФайлПлагина);
+ МенеджерПлагинов = БДД.ПолучитьИзКонтекста("МенеджерПлагинов");
+ МенеджерПлагинов.УстановитьКаталогПлагинов(КаталогПлагинов);
+ МенеджерПлагинов.УстановитьФайлПлагин(ФайлПлагина);
КонецПроцедуры
@@ -127,4 +127,4 @@
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "testsata", "test_plugin");
КонецФункции
-ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
+
diff --git a/features/core/step_definitions/sync.os b/features/core/step_definitions/sync.os
index 3a99892e..1aa3b993 100644
--- a/features/core/step_definitions/sync.os
+++ b/features/core/step_definitions/sync.os
@@ -1,7 +1,7 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
Перем БДД; //контекст фреймворка 1bdd
-Перем ЛокальныеВременныеФайлы;
+
// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
@@ -17,12 +17,12 @@
// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы = Новый МенеджерВременныхФайлов;
+
КонецПроцедуры
// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
- ЛокальныеВременныеФайлы.Удалить();
+
КонецПроцедуры
diff --git a/features/core/sync.batch.feature b/features/core/sync.batch.feature
index 7e4bd981..ee5f703b 100644
--- a/features/core/sync.batch.feature
+++ b/features/core/sync.batch.feature
@@ -91,7 +91,7 @@ repositories:
# Допустим Я устанавливаю авторизацию в хранилище пользователя "Администратор" с паролем ""
# И Я устанавливаю версию платформы "8.3"
# И Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов"
-# И Я создаю новый УправлениеПлагинами
+# И Я создаю новый МенеджерПлагинов
# И Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина"
# И Я устанавливаю файл плагина из переменной "ПутьКФайлуПлагина"
# И Я загружаю плагины из каталога в переменной "КаталогПлагинов"
diff --git a/features/core/sync.core.feature b/features/core/sync.core.feature
index d2b1deb9..c2546b2f 100644
--- a/features/core/sync.core.feature
+++ b/features/core/sync.core.feature
@@ -27,7 +27,7 @@
Допустим Я устанавливаю авторизацию в хранилище пользователя "Администратор" с паролем ""
И Я устанавливаю версию платформы "8.3"
И Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов"
- И Я создаю новый УправлениеПлагинами
+ И Я создаю новый МенеджерПлагинов
И Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина"
И Я устанавливаю файл плагина из переменной "ПутьКФайлуПлагина"
И Я загружаю плагины из каталога в переменной "КаталогПлагинов"
diff --git a/package-loader.os b/package-loader.os
deleted file mode 100644
index d9e4f5b4..00000000
--- a/package-loader.os
+++ /dev/null
@@ -1,8 +0,0 @@
-
-#Использовать "src/core"
-
-Процедура ПриЗагрузкеБиблиотеки(Путь, СтандартнаяОбработка, Отказ)
-
- СтандартнаяОбработка = Ложь;
-
-КонецПроцедуры
diff --git a/packagedef b/packagedef
index 2ac7b97f..ba2eac7b 100644
--- a/packagedef
+++ b/packagedef
@@ -1,101 +1,28 @@
-#Использовать logos
-#Использовать fs
-Перем Лог;
-
-Процедура ПередСборкой(Знач РабочийКаталог) Экспорт
-
- ФС.ОбеспечитьПустойКаталог(ОбъединитьПути(РабочийКаталог, "oscript_modules"));
-
- Лог.Информация("Установка локальных зависимостей библиотек");
- КомандаOpm = Новый Команда;
-
- КомандаOpm.УстановитьКоманду("opm");
- КомандаOpm.ДобавитьПараметр("install -l");
- КомандаOpm.ДобавитьЛогВыводаКоманды("task.build");
-
- КодВозврата = КомандаOpm.Исполнить();
-
- Если КодВозврата <> 0 Тогда
- ВызватьИсключение КомандаOpm.ПолучитьВывод();
- КонецЕсли;
-
- Лог.Информация("Настройка локальных библиотек");
-
- ПутьКФайлуЗагрузчику = ОбъединитьПути(РабочийКаталог, "oscript_modules", "package-loader.os");
- ШаблонныйФайлЗагрузчик = ОбъединитьПути(РабочийКаталог, "templates", "package-loader.os");
- ФайлЗагрузчик = Новый Файл(ПутьКФайлуЗагрузчику);
- Если Не ФайлЗагрузчик.Существует() Тогда
- КопироватьФайл(ШаблонныйФайлЗагрузчик, ПутьКФайлуЗагрузчику);
- Лог.Информация("Добавлен файл загрузки локальных библиотек");
- КонецЕсли;
-
- ПутьКФайлуНастройкиСкрипта = ОбъединитьПути(РабочийКаталог, "src", "cmd", "oscript.cfg");
- ШаблонныйФайлНастройкиСкрипта = ОбъединитьПути(РабочийКаталог, "templates", "oscript.cfg");
- ФайлНастройкиСкрипта= Новый Файл(ПутьКФайлуНастройкиСкрипта);
- Если Не ФайлНастройкиСкрипта.Существует() Тогда
- КопироватьФайл(ШаблонныйФайлНастройкиСкрипта, ПутьКФайлуНастройкиСкрипта);
- Лог.Информация("Добавлен файл настройки запуска");
- КонецЕсли;
-
- ФС.ОбеспечитьПустойКаталог(ОбъединитьПути(РабочийКаталог, "embedded_plugins"));
-
- КомандаOpm = Новый Команда;
- КомандаOpm.УстановитьКоманду("opm");
- КомандаOpm.ДобавитьПараметр("run get-plugins");
-
- КодВозврата = КомандаOpm.Исполнить();
-
- Если КодВозврата <> 0 Тогда
- ВызватьИсключение КомандаOpm.ПолучитьВывод();
- КонецЕсли;
-
- Лог.Информация("Настройка локальных библиотек - завершена");
-
-КонецПроцедуры
-
-Процедура ПослеСборки(Знач РабочийКаталог, Знач ПутьКФайлуПакета) Экспорт
-
- ПутьКФайлуНастройкиСкрипта = ОбъединитьПути(РабочийКаталог, "src", "cmd", "oscript.cfg");
- ФайлНастройкиСкрипта= Новый Файл(ПутьКФайлуНастройкиСкрипта);
- Если ФайлНастройкиСкрипта.Существует() Тогда
- УдалитьФайлы(ПутьКФайлуНастройкиСкрипта);
- КонецЕсли;
-
- ФС.ОбеспечитьПустойКаталог(ОбъединитьПути(РабочийКаталог, "oscript_modules"));
-
-КонецПроцедуры
-
-Лог = Логирование.ПолучитьЛог("task.build");
-
-ПутьКСценариюПараметров = ОбъединитьПути(ТекущийСценарий().Каталог, "src/cmd", "Модули", "ПараметрыПриложения.os");
-ПараметрыСистемы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюПараметров);
-ИмяПродукта = НРег(ПараметрыСистемы_ЛокальнаяВерсия.ИмяПриложения());
-ВерсияПродукта = ПараметрыСистемы_ЛокальнаяВерсия.Версия();
-
-Описание.Имя(ИмяПродукта)
- .Версия(ВерсияПродукта)
- .ВерсияСреды("1.0.20")
+Описание.Имя("gitsync")
+ .Версия("3.0.0-rc.2")
+ .ВерсияСреды("1.0.21")
.ЗависитОт("logos", "1.2.0")
.ЗависитОт("tempfiles", "0.2.2")
- .ЗависитОт("v8runner", "1.1.3")
+ .ЗависитОт("v8runner", "1.3.0")
.ЗависитОт("gitrunner", "1.2.0")
.ЗависитОт("strings", "0.4.1")
.ЗависитОт("1commands", "1.3.4")
.ЗависитОт("json", "1.0.1")
.ЗависитОт("fs", "0.4.1")
.ЗависитОт("delegate", "0.2.0")
- .ЗависитОт("v8storage", "0.7.0")
+ .ЗависитОт("v8storage", "0.8.0")
.ЗависитОт("reflector", "0.4.0")
.ЗависитОт("opm", "0.15.3")
.ЗависитОт("cli", "0.9.10")
- .ЗависитОт("configor", "0.5.3")
+ .ЗависитОт("configor", "0.6.3")
.ВключитьФайл("src")
.ВключитьФайл("docs")
.ВключитьФайл("embedded_plugins")
.ВключитьФайл("oscript_modules")
.ВключитьФайл("readme.md")
.ВключитьФайл("templates/temp.cfe")
+ .ОпределяетКласс("МенеджерПлагинов", "src/core/Классы/МенеджерПлагинов.os")
.ОпределяетКласс("МенеджерСинхронизации", "src/core/Классы/МенеджерСинхронизации.os")
- .ОпределяетКласс("УправлениеПлагинами", "src/core/Классы/УправлениеПлагинами.os")
- .ИсполняемыйФайл("src/cmd/gitsync.os", ИмяПродукта);
+ .ОпределяетКласс("ПакетнаяСинхронизация", "src/core/Классы/ПакетнаяСинхронизация.os")
+ .ИсполняемыйФайл("src/cmd/gitsync.os");
diff --git a/readme.md b/readme.md
index 646d0e12..e7b688d5 100644
--- a/readme.md
+++ b/readme.md
@@ -14,6 +14,7 @@
- [Установка](#установка)
- [Вручную](#вручную)
- [Через пакетный менеджер opm](#через-пакетный-менеджер-opm)
+- [Требования](#требования)
- [Особенности](#особенности)
- [Отличия от `gitsync` версий 2.x](#отличия-от-gitsync-версий-2x)
- [Описание функциональности](#описание-функциональности)
@@ -70,9 +71,15 @@ $ opm install -f <ПутьКФайлу>
1. командой `opm install gitsync`
2. Запустить командой `gitsync`
+
+## Требования
+
+* утилита `ring` и `` - для работы с 1С старше версии > 8.3.11
+
## Особенности
+
### Отличия от `gitsync` версий 2.x
diff --git a/src/cmd/gitsync.os b/src/cmd/gitsync.os
index 98a961a5..bc4e859d 100644
--- a/src/cmd/gitsync.os
+++ b/src/cmd/gitsync.os
@@ -27,19 +27,31 @@
Приложение.Опция("v verbose", Ложь, "вывод отладочной информация в процессе выполнении")
.Флаговый()
.ВОкружении("GITSYNC_VERBOSE");
-
+
+ Приложение.Опция("U ib-user ib-usr", "", "пользователь информационной базы")
+ .ТСтрока()
+ .ВОкружении("GITSYNC_IB_USR GITSYNC_IB_USER");
+
+ Приложение.Опция("P ib-pwd", "", "пароль пользователя информационной базы")
+ .ТСтрока()
+ .ВОкружении("GITSYNC_IB_PASSWORD GITSYNC_IB_PWD");
+
+ Приложение.Опция("C ib-connection ibconnection", "", "путь подключения к информационной базе")
+ .ТСтрока()
+ .ВОкружении("GITSYNC_IB_CONNECTION GITSYNC_IBCONNECTION");
+
// Приложение.Опция("p plugins", "", "плагины к загрузке и исполнению (дополнительное ограничение)")
// .ТМассивСтрок()
// .ВОкружении("GITSYNC_RUN_PLUGINS");
Приложение.Опция("t tempdir", "", "путь к каталогу временных файлов")
- .ВОкружении("GITSYNC_TEMP");
+ .ВОкружении("GITSYNC_TEMP GITSYNC_TEMPDIR");
Приложение.Опция("git-path", "", "путь к исполняемому файлу git")
.ВОкружении("GITSYNC_GIT_PATH GIT_PATH");
Приложение.Опция("domain-email", "localhost", "домен почты для пользователей git")
- .ВОкружении("GITSYNC_EMAIL");
+ .ВОкружении("GITSYNC_EMAIL GITSYNC_DOMAIN_EMAIL");
Приложение.ДобавитьКоманду("usage u", "Выводит примеры использования",
Новый КомандаUsage);
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 05959f55..ae70b108 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
+
Перем Лог;
Процедура ОписаниеКоманды(Команда) Экспорт
@@ -7,10 +8,16 @@
.ТЧисло()
.ВОкружении("GITSYNC_ALL_TIMER");
+ Команда.Опция("thread", 1, "количество потоков выполнения")
+ .ТЧисло()
+ .ВОкружении("GITSYNC_ALL_THREAD");
+
+ Команда.Опция("n name", "", "имя настройки пакетной синхронизации")
+ .ТСтрока();
+
Команда.Опция("u storage-user", "", "пользователь хранилища конфигурации")
.ТСтрока()
- .ВОкружении("GITSYNC_STORAGE_USER")
- .ПоУмолчанию("Администратор");
+ .ВОкружении("GITSYNC_STORAGE_USER");
Команда.Опция("p storage-pwd", "", "пароль пользователя хранилища конфигурации")
.ТСтрока()
@@ -34,32 +41,77 @@
ПользовательХранилища = Команда.ЗначениеОпции("storage-user");
ПарольПользователяХранилища = Команда.ЗначениеОпции("storage-pwd");
-
+
+ ИмяНастройкиСинхронизации = Команда.ЗначениеОпции("name");
+ КоличествоПотоковСинхронизации = Команда.ЗначениеОпции("thread");
+
ИнтервалПовторенияСинхронизации = Команда.ЗначениеОпции("timer");
ФайлНастроек = Новый Файл(ПутьКФайлуНастроек);
Если Не ФайлНастроек.Существует() Тогда
- ВызватьИсключение Новый ИнформацияОбОшибке(СтрШаблон("Файл настроек <%1> не найден", ФайлНастроек.ПолноеИмя), "Работа приложения остановлена");
+ ВызватьИсключение СтрШаблон("Файл настроек <%1> не найден", ФайлНастроек.ПолноеИмя);
КонецЕсли;
ОбщиеПараметры = ПараметрыПриложения.Параметры();
+ ПараметрыФайлаНастроек = ПрочитатьФайлНастроек(ПутьКФайлуНастроек);
+
+ Если ПараметрыФайлаНастроек.Количество() = 0 Тогда
+ ВызватьИсключение "Файл настроек не содержит данных";
+ КонецЕсли;
+
ПакетнаяСинхронизация = Новый ПакетнаяСинхронизация();
- ПакетнаяСинхронизация.УстановитьНастройки(ФайлНастроек);
- ПакетнаяСинхронизация.ТаймерПовторения(ИнтервалПовторенияСинхронизации)
+ ПакетнаяСинхронизация
+ .ТаймерПовторения(ИнтервалПовторенияСинхронизации)
.КаталогПлагинов(ПараметрыПриложения.КаталогПлагинов())
- .ФайлВключенныхПлагинов(ПараметрыПриложения.ФайлВключенныхПлагинов())
.ВерсияПлатформы(ОбщиеПараметры.ВерсияПлатформы)
.ДоменПочтыПоУмолчанию(ОбщиеПараметры.ДоменПочты)
.ИсполняемыйФайлГит(ОбщиеПараметры.ПутьКГит)
- .УровеньЛога(ПараметрыПриложения.УровеньЛога())
- .РежимУдаленияВременныхФайлов(Истина)
- .АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища);
-
- ПакетнаяСинхронизация.ВыполнитьСинхронизацию();
+ .ПутьКПлатформе(ОбщиеПараметры.ПутьКПлатформе)
+ .РежимУдаленияВременныхФайлов(Истина)
+ .АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища)
+ ;
+
+ ПакетнаяСинхронизация.ПрочитатьНастройки(ПараметрыФайлаНастроек);
+
+ Если ЗначениеЗаполнено(ИмяНастройкиСинхронизации) Тогда
+ ПакетнаяСинхронизация.ВыполнитьСинхронизациюПоНастройке(ИмяНастройкиСинхронизации);
+ Иначе
+ ПакетнаяСинхронизация.ВыполнитьСинхронизацию(КоличествоПотоковСинхронизации);
+ КонецЕсли;
Лог.Информация("Завершено выполнение команды ");
КонецПроцедуры
+Функция ПрочитатьФайлНастроек(Знач ПутьКФайлуНастроек)
+
+ Лог.Отладка("Чтение файла настроек начато");
+
+ ТекстФайла = РаботаСФайлами.ПрочитатьФайл(ПутьКФайлуНастроек);
+
+ Лог.Отладка("Чтение файла настроек завершено");
+
+ ПрочитанныйПараметры = РаботаСФайлами.ОбъектИзJson(ТекстФайла);
+
+ ЭтоОдинРепозиторий = ПрочитанныйПараметры.Получить("repositories") = Неопределено
+ И ПрочитанныйПараметры.Получить("Репозитории") = Неопределено;
+
+ Параметры = ПрочитанныйПараметры;
+
+ Если ЭтоОдинРепозиторий Тогда
+
+ Параметры = Новый Соответствие();
+ МассивРепозиториев = Новый Массив;
+ МассивРепозиториев.Добавить(ПрочитанныйПараметры);
+
+ Параметры.Вставить("repositories", МассивРепозиториев);
+
+ КонецЕсли;
+
+ Возврат Параметры;
+
+КонецФункции
+
+
Лог = ПараметрыПриложения.Лог();
\ No newline at end of file
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 3ebe9b56..312ceadb 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С.")
.ТСтрока()
@@ -32,8 +36,13 @@
КаталогРабочейКопии = Команда.ЗначениеАргумента("WORKDIR");
URLРепозитория = Команда.ЗначениеАргумента("URL");
- ПользовательХранилища = Команда.ЗначениеОпции("--storage-user");
- ПарольПользователяХранилища = Команда.ЗначениеОпции("--storage-pwd");
+ ПользовательХранилища = Команда.ЗначениеОпции("storage-user");
+ ПарольПользователяХранилища = Команда.ЗначениеОпции("storage-pwd");
+ ИмяРасширения = Команда.ЗначениеОпции("extension");
+
+ ПользовательИБ = Команда.ЗначениеОпции("ib-user");
+ ПарольПользователяИБ = Команда.ЗначениеОпции("ib-pwd");
+ СтрокаСоединенияИБ = Команда.ЗначениеОпции("ib-connection");
Лог.Отладка("КаталогРабочейКопии: %1", КаталогРабочейКопии);
@@ -52,7 +61,7 @@
КонецЕсли;
ОбщиеПараметры = ПараметрыПриложения.Параметры();
- МенеджерПлагинов = ОбщиеПараметры.УправлениеПлагинами;
+ МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов();
ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов();
@@ -61,6 +70,8 @@
.ПутьКПлатформе(ОбщиеПараметры.ПутьКПлатформе)
.ДоменПочтыПоУмолчанию(ОбщиеПараметры.ДоменПочты)
.ИсполняемыйФайлГит(ОбщиеПараметры.ПутьКГит)
+ .УстановитьКонтекст(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ)
+ .ИмяРасширения(ИмяРасширения)
.ПодпискиНаСобытия(ИндексПлагинов)
.ПараметрыПодписокНаСобытия(Команда.ПараметрыКоманды())
.УровеньЛога(ПараметрыПриложения.УровеньЛога())
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\260Init.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\260Init.os"
index 9dd884e7..bde6d66b 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\260Init.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\260Init.os"
@@ -35,10 +35,14 @@
ПутьКХранилищу = Команда.ЗначениеАргумента("PATH");
КаталогРабочейКопии = Команда.ЗначениеАргумента("WORKDIR");
- ПользовательХранилища = Команда.ЗначениеОпции("--storage-user");
- ПарольПользователяХранилища = Команда.ЗначениеОпции("--storage-pwd");
+ ПользовательХранилища = Команда.ЗначениеОпции("storage-user");
+ ПарольПользователяХранилища = Команда.ЗначениеОпции("storage-pwd");
ИмяРасширения = Команда.ЗначениеОпции("extension");
+ ПользовательИБ = Команда.ЗначениеОпции("ib-user");
+ ПарольПользователяИБ = Команда.ЗначениеОпции("ib-pwd");
+ СтрокаСоединенияИБ = Команда.ЗначениеОпции("ib-connection");
+
// инициализировать с нуля
ФайлКаталогРабочейКопии = Новый Файл(КаталогРабочейКопии);
Если Не ФайлКаталогРабочейКопии.Существует() Тогда
@@ -59,7 +63,7 @@
КонецЕсли;
ОбщиеПараметры = ПараметрыПриложения.Параметры();
- МенеджерПлагинов = ОбщиеПараметры.УправлениеПлагинами;
+ МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов();
ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов();
@@ -68,6 +72,7 @@
.ПутьКПлатформе(ОбщиеПараметры.ПутьКПлатформе)
.ДоменПочтыПоУмолчанию(ОбщиеПараметры.ДоменПочты)
.ИсполняемыйФайлГит(ОбщиеПараметры.ПутьКГит)
+ .УстановитьКонтекст(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ)
.ПодпискиНаСобытия(ИндексПлагинов)
.ПараметрыПодписокНаСобытия(Команда.ПараметрыКоманды())
.ИмяРасширения(ИмяРасширения)
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\260PluginDisable.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\260PluginDisable.os"
index 1f10d9c1..a0c9872e 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\260PluginDisable.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\260PluginDisable.os"
@@ -17,27 +17,17 @@
ИменаПлагинов = Команда.ЗначениеАргумента("PLUGIN");
ВсеВключенные = Команда.ЗначениеОпции("all");
- ОбщиеПараметры = ПараметрыПриложения.Параметры();
- МенеджерПлагинов = ОбщиеПараметры.УправлениеПлагинами;
-
- ВсеПлагины = МенеджерПлагинов.ПолучитьИндексПлагинов();
+ МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов();
Лог = ПараметрыПриложения.Лог();
Лог.Отладка("Отключение всех плагинов <%1>", ВсеВключенные);
- ПлагиныДляОтключения = Новый Массив;
-
Если ВсеВключенные Тогда
- Для каждого Плагин Из ВсеПлагины Цикл
- Лог.Отладка(" --> отключаю плагин <%1>", Плагин.Ключ);
- ПлагиныДляОтключения.Добавить(Плагин.Ключ);
- КонецЦикла;
+ МенеджерПлагинов.ОтключитьВсеПлагины();
Иначе
- ПлагиныДляОтключения = ИменаПлагинов;
+ МенеджерПлагинов.ОтключитьПлагины(ИменаПлагинов);
КонецЕсли;
- МенеджерПлагинов.ОтключитьПлагины(ПлагиныДляОтключения);
-
- МенеджерПлагинов.ЗаписатьВключенныеПлагины();
+ ПараметрыПриложения.ЗаписатьВключенныеПлагины();
КонецПроцедуры
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\260PluginEnable.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\260PluginEnable.os"
index b89d503b..5be60ffa 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\260PluginEnable.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\260PluginEnable.os"
@@ -19,19 +19,14 @@
ИменаПлагинов = Команда.ЗначениеАргумента("PLUGIN");
ВсеУстановленные = Команда.ЗначениеОпции("all");
- ОбщиеПараметры = ПараметрыПриложения.Параметры();
- МенеджерПлагинов = ОбщиеПараметры.УправлениеПлагинами;
+ МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов();
- ВсеПлагины = МенеджерПлагинов.ПолучитьИндексПлагинов();
-
Если ВсеУстановленные Тогда
+ МенеджерПлагинов.ВключитьВсеПлагины();
+ Иначе
- Для каждого Плагин Из ВсеПлагины Цикл
- МенеджерПлагинов.ВключитьПлагин(Плагин.Ключ);
- КонецЦикла;
+ ВсеПлагины = МенеджерПлагинов.ПолучитьИндексПлагинов();
- Иначе
-
Для каждого Плагин Из ИменаПлагинов Цикл
ИмяПлагина = СокрЛ(Плагин);
@@ -42,7 +37,7 @@
Продолжить;
КонецЕсли;
- МенеджерПлагинов.ВключитьПлагин(ИмяПлагина);
+ НашлиПлагин.Включить();
Сообщить("Включен плагин: "+ ИмяПлагина);
@@ -50,7 +45,7 @@
КонецЕсли;
- МенеджерПлагинов.ЗаписатьВключенныеПлагины();
+ ПараметрыПриложения.ЗаписатьВключенныеПлагины();
КонецПроцедуры
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\260PluginInstall.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\260PluginInstall.os"
index ff4b90c2..b607b9be 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\260PluginInstall.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\260PluginInstall.os"
@@ -29,8 +29,7 @@
ПакетыКУстановке = Команда.ЗначениеАргумента("NAME");
МассивФайловПлагинов = Команда.ЗначениеОпции("file");
- ОбщиеПараметры = ПараметрыПриложения.Параметры();
- МенеджерПлагинов = ОбщиеПараметры.УправлениеПлагинами;
+ МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов();
Для каждого ПутьКПлагину Из МассивФайловПлагинов Цикл
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\260PluginList.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\260PluginList.os"
index edfdae9d..e94ea93d 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\260PluginList.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\260PluginList.os"
@@ -13,38 +13,34 @@
Процедура ВыполнитьКоманду(Знач Команда) Экспорт
- ВывестиВсеПлагины = Команда.ЗначениеОпции("-a");
- ВыводТолькоНазваний = Команда.ЗначениеОпции("-q");
+ ВывестиВсеПлагины = Команда.ЗначениеОпции("all");
+ ВыводТолькоНазваний = Команда.ЗначениеОпции("quiet");
- ОбщиеПараметры = ПараметрыПриложения.Параметры();
- МенеджерПлагинов = ОбщиеПараметры.УправлениеПлагинами;
-
+ МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов();
ВсеПлагины = МенеджерПлагинов.ПолучитьИндексПлагинов();
- ВключенныеПлагины = МенеджерПлагинов.ПрочитатьВключенныеПлагины();
-
+
Если НЕ ВыводТолькоНазваний Тогда
Сообщить(СтрШаблон("Каталог плагинов: <%1>", ПараметрыПриложения.КаталогПлагинов()));
Сообщить("Список плагинов: ");
КонецЕсли;
- Для каждого Плагин Из ВсеПлагины Цикл
+ Для каждого КлючЗначение Из ВсеПлагины Цикл
- ВключенныйПлагин = ВключенныеПлагины[Плагин.Ключ];
+ Плагин = КлючЗначение.Значение;
- Если ВключенныйПлагин = Неопределено
- И НЕ ВывестиВсеПлагины Тогда
- Продолжить;
+ Если НЕ ВывестиВсеПлагины Тогда
+ Если НЕ Плагин.Включен() Тогда
+ Продолжить;
+ КонецЕсли;
КонецЕсли;
- КлассПлагина = Плагин.Значение;
-
Если ВыводТолькоНазваний Тогда
-
- Сообщить(КлассПлагина.Имя());
+
+ Сообщить(Плагин.Имя());
Иначе
- ВывестиОписаниеПлагина(КлассПлагина);
+ ВывестиОписаниеПлагина(Плагин);
КонецЕсли;
@@ -54,9 +50,10 @@
Процедура ВывестиОписаниеПлагина(КлассПлагина);
- ШаблонНаименования = " %1 (версия: %3) "+ Символы.Таб + "%2";
+ ШаблонНаименования = " %4 %1 [%3] " + Символы.Таб + "%2";
+ ТекстВключен = ?(КлассПлагина.Включен(), "[on] ", "[off]");
- Сообщить(СтрШаблон(ШаблонНаименования, КлассПлагина.Имя(), КлассПлагина.Описание(), КлассПлагина.Версия()));
+ Сообщить(СтрШаблон(ШаблонНаименования, КлассПлагина.Имя(), КлассПлагина.Описание(), КлассПлагина.Версия(), ТекстВключен));
КонецПроцедуры
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\260PluginsInit.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\260PluginsInit.os"
index 33f2830d..724e1d39 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\260PluginsInit.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\260PluginsInit.os"
@@ -16,9 +16,9 @@
МассивФайловПлагинов = НайтиФайлы(КаталогВстроенныхПлагинов, "*.ospx");
ОбщиеПараметры = ПараметрыПриложения.Параметры();
- МенеджерПлагинов = ОбщиеПараметры.УправлениеПлагинами;
+ МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов();
- Лог.Информация("Начала инициализация предустановленных плагинов");
+ Лог.Информация("Начата инициализация предустановленных плагинов");
Лог.Отладка("Каталог поиска предустановленных плагинов: <%1>", КаталогВстроенныхПлагинов);
Лог.Отладка("Количество пакетов плагинов к установке: <%1>", МассивФайловПлагинов.Количество());
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\260SetVersion.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\260SetVersion.os"
index 10867197..e8456901 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\260SetVersion.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\260SetVersion.os"
@@ -24,7 +24,7 @@
ВызватьКоммит = Команда.ЗначениеОпции("commit");
ОбщиеПараметры = ПараметрыПриложения.Параметры();
- МенеджерПлагинов = ОбщиеПараметры.УправлениеПлагинами;
+ МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов();
ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов();
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\260Sync.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\260Sync.os"
index e53d6dfe..2f624e43 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\260Sync.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\260Sync.os"
@@ -36,10 +36,14 @@
ПутьКХранилищу = Команда.ЗначениеАргумента("PATH");
КаталогРабочейКопии = Команда.ЗначениеАргумента("WORKDIR");
- ПользовательХранилища = Команда.ЗначениеОпции("--storage-user");
- ПарольПользователяХранилища = Команда.ЗначениеОпции("--storage-pwd");
+ ПользовательХранилища = Команда.ЗначениеОпции("storage-user");
+ ПарольПользователяХранилища = Команда.ЗначениеОпции("storage-pwd");
ИмяРасширения = Команда.ЗначениеОпции("extension");
+ ПользовательИБ = Команда.ЗначениеОпции("ib-user");
+ ПарольПользователяИБ = Команда.ЗначениеОпции("ib-pwd");
+ СтрокаСоединенияИБ = Команда.ЗначениеОпции("ib-connection");
+
ФайлКаталогРабочейКопии = Новый Файл(КаталогРабочейКопии);
КаталогРабочейКопии = ФайлКаталогРабочейКопии.ПолноеИмя;
@@ -53,7 +57,7 @@
КонецЕсли;
ОбщиеПараметры = ПараметрыПриложения.Параметры();
- МенеджерПлагинов = ОбщиеПараметры.УправлениеПлагинами;
+ МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов();
ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов();
@@ -62,13 +66,13 @@
.ПутьКПлатформе(ОбщиеПараметры.ПутьКПлатформе)
.ДоменПочтыПоУмолчанию(ОбщиеПараметры.ДоменПочты)
.ИсполняемыйФайлГит(ОбщиеПараметры.ПутьКГит)
+ .УстановитьКонтекст(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ)
.ПодпискиНаСобытия(ИндексПлагинов)
.ПараметрыПодписокНаСобытия(Команда.ПараметрыКоманды())
.УровеньЛога(ПараметрыПриложения.УровеньЛога())
.ИмяРасширения(ИмяРасширения)
.АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища)
.РежимУдаленияВременныхФайлов(Истина)
- .РежимРаботыСХранилищемРасширения(ОбщиеПараметры.ЭтоРасширение)
.Синхронизировать(КаталогИсходников, ПутьКХранилищу);
Лог.Информация("Завершено выполнение команды ");
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\260Usage.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\260Usage.os"
index 054bb432..3e18eefd 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\260Usage.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\260Usage.os"
@@ -1,3 +1,5 @@
+#Использовать "../../core/Классы/internal/bindata"
+
Перем ЭтоWindows;
Перем ИмяКомандыGitsync;
@@ -8,22 +10,11 @@
Команда.Аргумент("COMMAND", "", "Команда для вывода подробностей использования").ТСтрока().Обязательный(Ложь);
- //Команда.УстановитьДействиеПередВыполнением(ПараметрыПриложения);
- //Команда.УстановитьДействиеПослеВыполнения(ПараметрыПриложения);
-
КонецПроцедуры
Процедура ВыполнитьКоманду(Знач Команда) Экспорт
- Если ПараметрыПриложения.ЭтоСборкаEXE() Тогда
-
- Лог.Информация("Команда для собранного приложения в exe не доступна");
-
- Возврат;
-
- КонецЕсли;
-
- ИмяКоманды = Команда.ЗначениеАргумента("COMMAND");
+ ИмяКоманды = Команда.ЗначениеАргумента("COMMAND");
Если ПустаяСтрока(ИмяКоманды) Тогда
ВывестиОбщееИспользование();
@@ -101,26 +92,29 @@
Процедура ВывестиИспользованиеКоманды(Знач ИмяКоманды)
+ ИмяКомандыСправки = "";
+
Если ИмяКоманды = "init"
или ИмяКоманды = "i" Тогда
- ВывестиИспользованиеInit();
+ ИмяКомандыСправки = "init";
ИначеЕсли ИмяКоманды = "clone"
или ИмяКоманды = "c" Тогда
- ВывестиИспользованиеClone();
+ ИмяКомандыСправки = "clone";
ИначеЕсли ИмяКоманды = "sync"
или ИмяКоманды = "s" Тогда
- ВывестиИспользованиеSync();
+ ИмяКомандыСправки = "sync";
ИначеЕсли ИмяКоманды = "setversion"
- или ИмяКоманды = "v" Тогда
- ВывестиИспользованиеSetVersion();
+ или ИмяКоманды = "sv" Тогда
+ ИмяКомандыСправки = "set-version";
ИначеЕсли ИмяКоманды = "plugins"
или ИмяКоманды = "p" Тогда
- ВывестиИспользованиеPlugins();
+ ИмяКомандыСправки = "plugins";
Иначе
- Сообщить("Команда для подробного использования не корректная или не найдена");
- ВывестиОбщееИспользование();
+ ИмяКомандыСправки = "usage";
КонецЕсли;
+ ВывестиОписаниеДляКоманды(ИмяКомандыСправки);
+
КонецПроцедуры
Процедура ВывестиОписание(Знач ТекстОписания)
@@ -163,110 +157,31 @@
КонецПроцедуры
-Процедура ВывестиИспользованиеInit()
-
- ОписаниеКомандыInit = ПрочитатьФайл(ОбъединитьПути(КаталогДокументации, "init.md"));
-
- ВывестиОписание(ОписаниеКомандыInit);
-
-КонецПроцедуры
-
-Процедура ВывестиИспользованиеClone()
-
- ПодробноеОписаниеКоманды = "
- | Подробное описание использования команды
- |
- | clone (синоним c) - клонирует репозиторий git и при необходимости наполняет его данными из хранилища 1С
- | Подробную справку по параметрам см. %1 clone --help
- |
- | В РАЗРАБОТКЕ
- |";
-
- ВывестиОписание(ПодробноеОписаниеКоманды);
-
-КонецПроцедуры
-
-Процедура ВывестиИспользованиеSync()
-
- ПодробноеОписаниеКоманды = "
- | Подробное описание использования команды
- |
- | sync (синоним s) - инициализация нового хранилища git и наполнение его данными из хранилища 1С
- | Подробную справку по параметрам см. %1 sync --help
- |
- | Переменные окружения:
- | * GITSYNC_WORKDIR - рабочий каталог для команды
- | * GITSYNC_STORAGE_PATH - путь к хранилищу конфигурации 1С.
- |
- | Примеры, использования:
- |
- | 1. Простое использование
- |
- | > %1 sync C:/Хранилище_1С/ C:/work_dir/
- |
- | Данная команда выполнит синхронизация
- | версий хранилища 1С ""C:/Хранилище_1С/""
- | в рабочем каталоге ""C:/work_dir/""
- |
- | 2. Инциализация в текущем рабочем каталоге,
- | переменная окружения не должна быть задана
- |
- | > cd C:/work_dir/
- | > %1 sync C:/Хранилище_1С/
- |
- | Данная команда выполнит синхронизация
- | версий хранилища 1С ""C:/Хранилище_1С/""
- | в рабочем каталоге ""C:/work_dir/""
- |
-
- |";
+Процедура ВывестиОписаниеДляКоманды(Знач ИмяКоманды)
- ВывестиОписание(ПодробноеОписаниеКоманды);
-
-КонецПроцедуры
-
-Процедура ВывестиИспользованиеSetVersion()
-
- ПодробноеОписаниеКоманды = "Подробное описание использования команды
- |
- | setversion (синоним v) - устанавливает необходимую версию в файл VERSION
- | Подробную справку по параметрам см. %1 setversion --help
- |
- | В РАЗРАБОТКЕ
- |";
+ ИмяФайла = СтрШаблон("%1.md", ИмяКоманды);
- ВывестиОписание(ПодробноеОписаниеКоманды);
+ Если ПараметрыПриложения.ЭтоСборкаEXE() Тогда
+
+ ЗагрузчикЗапакованныхФайловGitsync = Новый ЗагрузчикЗапакованныхФайловGitsync;
+ ТекстОписанияКоманды = ПрочитатьФайл(ЗагрузчикЗапакованныхФайловGitsync.ПолучитьПутьКФайлу(ИмяФайла));
-КонецПроцедуры
+ Иначе
-Процедура ВывестиИспользованиеPlugins()
-
- ПодробноеОписаниеКоманды = "Подробное описание использования команды
- |
- | plugins (синоним p) - инициализация нового хранилища git и наполнение его данными из хранилища 1С
- | Подробную справку по параметрам см. %1 plugins --help
- |
- | В РАЗРАБОТКЕ
- |";
+ КаталогДокументации = ОбъединитьПути(ОбъединитьПути(ТекущийСценарий().Каталог, "..","..", ".."),"docs");
+ ТекстОписанияКоманды = ПрочитатьФайл(ОбъединитьПути(КаталогДокументации, ИмяФайла));
- ВывестиОписание(ПодробноеОписаниеКоманды);
+ КонецЕсли;
+
+ ВывестиОписание(ТекстОписанияКоманды);
КонецПроцедуры
-
Функция Инициализация()
СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
- Если ЭтоWindows Тогда
- ИмяКомандыGitsync = "gitsync";
- Иначе
- ИмяКомандыGitsync = "gitsync";
- КонецЕсли;
-
- КаталогДокументации = ОбъединитьПути(ОбъединитьПути(ТекущийСценарий().Каталог, "..","..", ".."),"docs");
-
Лог = ПараметрыПриложения.Лог();
КонецФункции
diff --git "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os"
index 98e8db96..507e5848 100644
--- "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os"
+++ "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os"
@@ -1,6 +1,8 @@
#Использовать logos
#Использовать tempfiles
#Использовать fs
+#Использовать "../../core"
+#Использовать "../../core/Классы/internal/files"
Перем ЛогПриложения;
Перем ОбщиеПараметры;
@@ -11,25 +13,116 @@
Перем ИмяКаталогаПлагинов;
Перем ИмяКаталогаПриложения;
Перем ИмяФайлаНастройкиПриложения;
+Перем МенеджерПлагинов;
+Перем ИмяФайлаПлагинов;
Процедура Инициализация()
ОбщиеПараметры = Новый Структура();
- ОбщиеПараметры.Вставить("Плагины", Новый Массив);
ОбщиеПараметры.Вставить("ВерсияПлатформы", "8.3");
ОбщиеПараметры.Вставить("ПутьКПлатформе", "");
ОбщиеПараметры.Вставить("ДоменПочты", "localhost");
ОбщиеПараметры.Вставить("ПутьКГит", "");
- ОбщиеПараметры.Вставить("ЭтоРасширение", "");
ИмяКаталогаПлагинов = "plugins";
ИмяКаталогаПриложения = ".gitsync";
ИмяФайлаНастройкиПриложения = "config.json";
+ ИмяФайлаПлагинов = "plugins.json gitsync-plugins.json";
+ МенеджерПлагинов = Новый МенеджерПлагинов;
ОпределитьКаталогПлагинов();
КонецПроцедуры
+// Выполняет чтение включенных плагинов из файла
+//
+// Возвращаемое значение:
+// Соответствие - набор данных о плагина
+// * ключ - строка - имя плагина
+// * значение - булево - признак включенности плагина
+//
+Функция ПрочитатьВключенныеПлагины()
+
+ ВключенныеПлагины = Новый Соответствие;
+
+ ПутьКФайлу = ПолучитьПутьКФайлуПлагинов();
+ ФайлПлагинов = Новый Файл(ПутьКФайлу);
+
+ Если Не ФайлПлагинов.Существует() Тогда
+ Возврат ВключенныеПлагины;
+ КонецЕсли;
+
+ JsonСтрока = РаботаСФайлами.ПрочитатьФайл(ПутьКФайлу);
+
+ Если ПустаяСтрока(JsonСтрока) Тогда
+ Возврат ВключенныеПлагины;
+ КонецЕсли;
+
+ ДанныеФайла = РаботаСФайлами.ОбъектИзJson(JsonСтрока);
+
+ Для каждого ДанныеПлагинаИзФайла Из ДанныеФайла Цикл
+
+ Если Булево(ДанныеПлагинаИзФайла.Значение) Тогда
+ ВключенныеПлагины.Вставить(ДанныеПлагинаИзФайла.Ключ, ДанныеПлагинаИзФайла.Значение);
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Возврат ВключенныеПлагины;
+
+КонецФункции
+
+Функция МенеджерПлагинов() Экспорт
+ Возврат МенеджерПлагинов;
+КонецФункции
+
+// Процедура записывает активированные плагины в файл
+//
+Процедура ЗаписатьВключенныеПлагины() Экспорт
+
+ ИмяФайла = ПолучитьПутьКФайлуПлагинов();
+
+ КаталогФайла = Новый Файл(ИмяФайла).Путь;
+ ФС.ОбеспечитьКаталог(КаталогФайла);
+
+ ДанныеДляЗаписи = Новый Соответствие;
+ ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов();
+
+ Для каждого КлючЗначение Из ИндексПлагинов Цикл
+
+ Плагин = КлючЗначение.Значение;
+ ДанныеДляЗаписи.Вставить(Плагин.Имя(), Плагин.Включен());
+
+ КонецЦикла;
+
+ ТекстФайла = РаботаСФайлами.ОБъектВJson(ДанныеДляЗаписи);
+
+ РаботаСФайлами.ЗаписатьФайл(ИмяФайла, ТекстФайла);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+Функция ПолучитьПутьКФайлуПлагинов()
+
+ МассивИменФайла = СтрРазделить(ИмяФайлаПлагинов, " ", Ложь);
+
+ Для каждого ИмяФайла Из МассивИменФайла Цикл
+
+ ПутьКФайлуПлагинов = ОбъединитьПути(КаталогПлагинов(), ИмяФайла);
+
+ ФайлПлагинов = Новый Файл(ПутьКФайлуПлагинов);
+
+ Если Не ФайлПлагинов.Существует() Тогда
+ Возврат ФайлПлагинов.ПолноеИмя;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Возврат ОбъединитьПути(КаталогПлагинов(), МассивИменФайла[0]);
+
+КонецФункции
+
Функция ЭтоСборкаEXE() Экспорт
Если ЭтоПриложениеEXE = Неопределено Тогда
@@ -58,7 +151,7 @@
Если ЗначениеЗаполнено(ПутьККаталогуПлагинов) Тогда
- ОбщиеПараметры.УправлениеПлагинами.УстановитьКаталогПлагинов(ПутьККаталогуПлагинов);
+ МенеджерПлагинов.УстановитьКаталогПлагинов(ПутьККаталогуПлагинов);
КонецЕсли;
@@ -109,7 +202,7 @@
ИначеЕсли ПроверитьТекущийКаталог() Тогда
- Возврат ;
+ Возврат;
Иначе
@@ -177,29 +270,26 @@
// TODO Сделать чтение настройки из файла
КонецПроцедуры
-Функция ФайлВключенныхПлагинов() Экспорт
- Возврат ОбъединитьПути(КаталогПлагинов(), "gitsync-plugins.json");
-КонецФункции
-
Функция ИмяФайлаНастройкиПакетнойСинхронизации() Экспорт
- Возврат "config.yaml";
+ Возврат "config.json";
КонецФункции
Процедура ВыполнитьПодпискуПриРегистрацииКомандыПриложения(Команда) Экспорт
- ОбработчикПодписок = ОбщиеПараметры.УправлениеПлагинами.НовыйМенеджерПодписок();
+ ОбработчикПодписок = МенеджерПлагинов.НовыйМенеджерПодписок();
ОбработчикПодписок.ПриРегистрацииКомандыПриложения(Команда.ПолучитьИмяКоманды(), Команда);
КонецПроцедуры
Процедура ПодготовитьПлагины() Экспорт
- МенеджерПлагинов = Новый УправлениеПлагинами;
+ МенеджерПлагинов = Новый МенеджерПлагинов;
МенеджерПлагинов.УстановитьКаталогПлагинов(КаталогПлагинов());
- МенеджерПлагинов.УстановитьФайлВключенныхПлагинов(ФайлВключенныхПлагинов());
МенеджерПлагинов.ЗагрузитьПлагины();
+ ВключенныеПлагины = ПрочитатьВключенныеПлагины();
+ МенеджерПлагинов.ВключитьПлагины(ВключенныеПлагины);
- ОбщиеПараметры.Вставить("УправлениеПлагинами", МенеджерПлагинов);
+ ОбщиеПараметры.Вставить("МенеджерПлагинов", МенеджерПлагинов);
КонецПроцедуры
@@ -248,7 +338,7 @@
Если РежимОтладки Тогда
Лог().УстановитьУровень(УровниЛога.Отладка);
- ОбщиеПараметры.УправлениеПлагинами.УстановитьРежимОтладки();
+ МенеджерПлагинов().УстановитьРежимОтладки();
КонецЕсли;
@@ -281,7 +371,7 @@
Функция Версия() Экспорт
- Возврат "3.0.0-beta4";
+ Возврат "3.0.0-rc.2";
КонецФункции
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/README_Gitsync.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/README_Gitsync.os"
new file mode 100644
index 00000000..2fa0476d
--- /dev/null
+++ "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/README_Gitsync.os"
@@ -0,0 +1,34 @@
+
+///////////////////////////////////////////
+// ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ //
+///////////////////////////////////////////
+//
+// ФАЙЛ:
+//
+
+// Возвращает версию запакованного файла
+//
+Функция Версия() Экспорт
+ Возврат "1.0.0";
+КонецФункции
+
+// Возвращает имя запакованного файла
+//
+Функция ИмяФайла() Экспорт
+ Возврат "README.md";
+КонецФункции
+
+// Возвращает хеш строку запакованного файла
+//
+Функция Хеш() Экспорт
+ Возврат "D716283B8EAD871D80805B7FAB76784C";
+КонецФункции
+
+// Возвращает запакованные данные файла
+//
+Функция ДвоичныеДанные() Экспорт
+ ЗапакованныеДанные = "0J7Qv9C40YHQsNC90LjQtSDQv9GD0LHQu9C40YfQvdC+0LPQviDQuNC90YLQtdGA0YTQtdC50YHQsCDQsdC40LHQu9C40L7RgtC10LrQuCBgZ2l0c3luY2AKPT09PT09PT09Cgo8IS0tIFRPQyBpbnNlcnRBbmNob3I6dHJ1ZSAtLT4KCgo8IS0tIC9UT0MgLS0+Cgo+INCU0L7QutGD0LzQtdC90YLQsNGG0LjRjyDQsiDRgNCw0LfRgNCw0LHQvtGC0LrQtQoKPCEtLSBUT0RPOiDQn9C+0LTQs9C+0YLQvtCy0LjRgtGMINC00L7QutGD0LzQtdC90YLQsNGG0LjRjiAtLT4=";
+ Возврат ЗапакованныеДанные;
+КонецФункции
+
+
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/clone_Gitsync.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/clone_Gitsync.os"
new file mode 100644
index 00000000..6217bcc1
--- /dev/null
+++ "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/clone_Gitsync.os"
@@ -0,0 +1,34 @@
+
+///////////////////////////////////////////
+// ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ //
+///////////////////////////////////////////
+//
+// ФАЙЛ:
+//
+
+// Возвращает версию запакованного файла
+//
+Функция Версия() Экспорт
+ Возврат "1.0.0";
+КонецФункции
+
+// Возвращает имя запакованного файла
+//
+Функция ИмяФайла() Экспорт
+ Возврат "clone.md";
+КонецФункции
+
+// Возвращает хеш строку запакованного файла
+//
+Функция Хеш() Экспорт
+ Возврат "D41D8CD98F00B204E9800998ECF8427E";
+КонецФункции
+
+// Возвращает запакованные данные файла
+//
+Функция ДвоичныеДанные() Экспорт
+ ЗапакованныеДанные = "";
+ Возврат ЗапакованныеДанные;
+КонецФункции
+
+
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/init_Gitsync.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/init_Gitsync.os"
new file mode 100644
index 00000000..22a0dc34
--- /dev/null
+++ "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/init_Gitsync.os"
@@ -0,0 +1,34 @@
+
+///////////////////////////////////////////
+// ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ //
+///////////////////////////////////////////
+//
+// ФАЙЛ:
+//
+
+// Возвращает версию запакованного файла
+//
+Функция Версия() Экспорт
+ Возврат "1.0.0";
+КонецФункции
+
+// Возвращает имя запакованного файла
+//
+Функция ИмяФайла() Экспорт
+ Возврат "init.md";
+КонецФункции
+
+// Возвращает хеш строку запакованного файла
+//
+Функция Хеш() Экспорт
+ Возврат "C13A148F21716C93E20BA5B2F99F57E4";
+КонецФункции
+
+// Возвращает запакованные данные файла
+//
+Функция ДвоичныеДанные() Экспорт
+ ЗапакованныеДанные = "IyDQn9C+0LTRgNC+0LHQvdC+0LUg0L7Qv9C40YHQsNC90LjQtSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDQutC+0LzQsNC90LTRiyA8aW5pdD4KCmluaXQgKNGB0LjQvdC+0L3QuNC8IGkpIC0g0LjQvdC40YbQuNCw0LvQuNC30LDRhtC40Y8g0L3QvtCy0L7Qs9C+INGF0YDQsNC90LjQu9C40YnQsCBnaXQg0Lgg0L3QsNC/0L7Qu9C90LXQvdC40LUg0LXQs9C+INC00LDQvdC90YvQvNC4INC40Lcg0YXRgNCw0L3QuNC70LjRidCwIDHQoQoKPiDQn9C+0LTRgNC+0LHQvdGD0Y4g0YHQv9GA0LDQstC60YMg0L/QviDQvtC/0YbQuNGP0Lwg0Lgg0LDRgNCz0YPQvNC10L3RgtCw0Lwg0YHQvC4gYGdpdHN5bmMgaW5pdCAtLWhlbHBgCgotLS0tLS0tLS0tLS0tLQojIyMg0KHQv9GA0LDQstC60LAg0L/QviDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjiDQutC+0LzQsNC90LTRizoKYGBgCtCa0L7QvNCw0L3QtNCwOiBpbml0LCBpCiDQmNC90LjRhtC40LDQu9C40LfQsNGG0LjRjyDRgdGC0YDRg9C60YLRg9GA0Ysg0L3QvtCy0L7Qs9C+INGF0YDQsNC90LjQu9C40YnQsCBnaXQuINCf0L7QtNCz0L7RgtC+0LLQutCwINC6INGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNC4CgrQodGC0YDQvtC60LAg0LfQsNC/0YPRgdC60LA6IGdpdHN5bmMgaW5pdCBb0J7Qn9Cm0JjQmF0gUEFUSCBbV09SS0RJUl0KCtCQ0YDQs9GD0LzQtdC90YLRizoKICBQQVRIICAgICAgICAgINCf0YPRgtGMINC6INGF0YDQsNC90LjQu9C40YnRgyDQutC+0L3RhNC40LPRg9GA0LDRhtC40LggMdChLiAoZW52ICRHSVRTWU5DX1NUT1JBR0VfUEFUSCkKICBXT1JLRElSICAgICAgINCQ0LTRgNC10YEg0LvQvtC60LDQu9GM0L3QvtCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyBHSVQg0LjQu9C4INC60LDRgtCw0LvQvtCzINC40YHRhdC+0LTQvdC40LrQvtCyINCy0L3Rg9GC0YDQuCDQu9C+0LrQsNC70YzQvdC+0Lkg0LrQvtC/0LjQuCBnaXQt0YDQtdC/0L7Qt9C40YLQsNGA0LjRjy4g0J/QviDRg9C80L7Qu9GH0LDQvdC40Y4g0YLQtdC60YPRidC40Lkg0LrQsNGC0LDQu9C+0LMgKGVudiAkR0lUU1lOQ19XT1JLRElSKQoK0J7Qv9GG0LjQuDoKICAtdSwgLS1zdG9yYWdlLXVzZXIgICAg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GMINGF0YDQsNC90LjQu9C40YnQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40LggKGVudiAkR0lUU1lOQ19TVE9SQUdFX1VTRVIpICjQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgCkKICAtcCwgLS1zdG9yYWdlLXB3ZCAgICAg0L/QsNGA0L7Qu9GMINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDRhdGA0LDQvdC40LvQuNGJ0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IChlbnYgJEdJVFNZTkNfU1RPUkFHRV9QQVNTV09SRCwgJEdJVFNZTkNfU1RPUkFHRV9QV0QpCmBgYAotLS0tLS0tLS0tLS0tLQojIyMg0JPQu9C+0LHQsNC70YzQvdGL0LUg0L/QtdGA0LXQvNC10L3QvdGL0LUg0L7QutGA0YPQttC10L3QuNGPCnwg0JjQvNGPICAgICAgICAgICAgICAgICB8INCe0L/QuNGB0LDQvdC40LUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCBgR0lUU1lOQ19WOFZFUlNJT05gIHwg0LzQsNGB0LrQsCDQstC10YDRgdC40Lgg0L/Qu9Cw0YLRhNC+0YDQvNGLICg4LjMsIDguMy41LCA4LjMuNi4yMjk5INC4INGCLtC/LikgfAp8IGBHSVRTWU5DX1ZFUlNPQkVgICAgfCDQstGL0LLQvtC0INC+0YLQu9Cw0LTQvtGH0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNGPINCyINC/0YDQvtGG0LXRgdGB0LUg0LLRi9C/0L7Qu9C90LXQvdC40LggICAgICB8CnwgYEdJVFNZTkNfVEVNUGAgICAgICB8INC/0YPRgtGMINC6INC60LDRgtCw0LvQvtCz0YMg0LLRgNC10LzQtdC90L3Ri9GFINGE0LDQudC70L7QsiAgICAgICAgICAgICAgICAgICAgICAgfAp8IGBHSVRTWU5DX0VNQUlMYCAgICAgfCDQtNC+0LzQtdC9INC/0L7Rh9GC0Ysg0LTQu9GPINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5IGdpdCAgICAgICAgICAgICAgICAgICAgICB8CgotLS0tLS0tLS0tLS0tLQojIyMg0J/QtdGA0LXQvNC10L3QvdGL0LUg0L7QutGA0YPQttC10L3QuNGPINC60L7QvNCw0L3QtNGLCgp8INCY0LzRjyAgICAgICAgICAgICAgICAgICAgICAgIHwg0J7Qv9C40YHQsNC90LjQtSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCBgR0lUU1lOQ19XT1JLRElSYCAgICAgICAgICB8INGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINC00LvRjyDQutC+0LzQsNC90LTRiyAgICAgICAgICAgICAgICB8CnwgYEdJVFNZTkNfU1RPUkFHRV9QQVRIYCAgICAgfCDQv9GD0YLRjCDQuiDRhdGA0LDQvdC40LvQuNGJ0YMg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IDHQoS4gICAgICAgICAgfAp8IGBHSVRTWU5DX1NUT1JBR0VfVVNFUmAgICAgIHwg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GMINGF0YDQsNC90LjQu9C40YnQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40LggICAgICAgIHwKfCBgR0lUU1lOQ19TVE9SQUdFX1BBU1NXT1JEYCB8INC/0LDRgNC+0LvRjCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0YXRgNCw0L3QuNC70LjRidCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCB8Ci0tLS0tLS0tLS0tLS0tCiMjIyDQl9C90LDRh9C10L3QuNGPINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOgp8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8IFdPUktESVIgICAgICAgICAgICB8INGC0LXQutGD0YnQsNGPINGA0LDQsdC+0YfQsNGPINC00LjRgNC10LrRgtC+0YDQuNGPICAgfAp8IC11LCAtLXN0b3JhZ2UtdXNlciB8INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjCBg0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YBgIHwKCi0tLS0tLS0tLS0tLS0tCiMjINCf0YDQuNC80LXRgNGLLCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjwoqKioKKiDQn9GA0L7RgdGC0L7QtSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtQoKICAgIGBnaXRzeW5jIGluaXQgQzov0KXRgNCw0L3QuNC70LjRidC1XzHQoS8gQzovR0lUL3NyY2AKCiAgICDQlNCw0L3QvdCw0Y8g0LrQvtC80LDQvdC00LAg0YHQvtC30LTQsNGB0YIg0L3QvtCy0YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IGdpdCDQsiDQutCw0YLQsNC70L7Qs9C1IGBDOi9HSVQvc3JjYCDQuNC3INGF0YDQsNC90LjQu9C40YnQsCAx0KEg0L/QviDQv9GD0YLQuCBgQzov0KXRgNCw0L3QuNC70LjRidC1XzHQoS9gCioqKgoqINCj0LrQsNC30LDQvdC40LUg0LrQvtC90LrRgNC10YLQvdC+0Lkg0LLQtdGA0YHQuNC4INC/0LvQsNGC0YTQvtGA0LzRiwoKICAgIGBnaXRzeW5jIC0tdjh2ZXJzaW9uPTguMy45IGluaXQgQzov0KXRgNCw0L3QuNC70LjRidC1XzHQoS8gQzovR0lUL3NyY2AKCiAgICDQlNCw0L3QvdCw0Y8g0LrQvtC80LDQvdC00LAg0YHQvtC30LTQsNGB0YIg0L3QvtCy0YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IGdpdCDQsiDQutCw0YLQsNC70L7Qs9C1IGBDOi9HSVQvc3JjYCDQuNC3INGF0YDQsNC90LjQu9C40YnQsCAx0KEg0L/QviDQv9GD0YLQuCBgQzov0KXRgNCw0L3QuNC70LjRidC1XzHQoS9gCiAgICDQlNC70Y8g0YDQsNCx0L7RgtGLINCx0YPQtNC10YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMY9GPINC/0LvQsNGC0YTQvtGA0LzQsCA4LjMuOS54eHh4CioqKgoqINCj0LrQsNC30LDQvdC40LUg0LLRi9Cy0L7QtNCwINC+0YLQu9Cw0LTQvtGH0L3Ri9GFINC70L7Qs9C+0LIKCiAgICBgZ2l0c3luYyAtLXZlcmJvc2UgaW5pdCBDOi/QpdGA0LDQvdC40LvQuNGJ0LVfMdChLyBDOi9HSVQvc3JjYAogICAg0LjQu9C4CiAgICBgZ2l0c3luYyAtdiBpbml0IEM6L9Cl0YDQsNC90LjQu9C40YnQtV8x0KEvIEM6L0dJVC9zcmNgCgogICAg0JTQsNC90L3QsNGPINC60L7QvNCw0L3QtNCwINGB0L7Qt9C00LDRgdGCINC90L7QstGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSBnaXQg0LIg0LrQsNGC0LDQu9C+0LPQtSBgQzovR0lUL3NyY2Ag0LjQtyDRhdGA0LDQvdC40LvQuNGJ0LAgMdChINC/0L4g0L/Rg9GC0LggYEM6L9Cl0YDQsNC90LjQu9C40YnQtV8x0KEvYAogICAg0J/QvtGB0LvQtSDRg9C60LDQt9Cw0L3QuNGPINCx0YPQtNC10YIg0LLRi9Cy0L7QtNC40YLRjNGB0Y8g0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDQvtGC0LvQsNC00L7Rh9C90YvQtSDQu9C+0LPQuCDRgSDQv9GA0LjQt9C90LDQutC+0LwgYNCe0YLQu9Cw0LTQutCwYAoqKioKKiDQo9C60LDQt9Cw0L3QuNC1INC60LDRgtCw0LvQvtCz0LAg0LLRgNC10LzQtdC90L3Ri9GFINGE0LDQudC70L7QsiDQv9GA0Lgg0YDQsNCx0L7RgtC1INC/0YDQuNC70L7QttC10L3QuNGPCgogICAgYGdpdHN5bmMgLS10ZW1wZGlyPS4vdGVtcF9zeW5jLyBpbml0IEM6L9Cl0YDQsNC90LjQu9C40YnQtV8x0KEvIEM6L0dJVC9zcmNgCiAgICDQuNC70LgKICAgIGBnaXRzeW5jIC10IC4vdGVtcF9zeW5jLyBpbml0IEM6L9Cl0YDQsNC90LjQu9C40YnQtV8x0KEvIEM6L0dJVC9zcmNgCgogICAg0JTQsNC90L3QsNGPINC60L7QvNCw0L3QtNCwINGB0L7Qt9C00LDRgdGCINC90L7QstGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSBnaXQg0LIg0LrQsNGC0LDQu9C+0LPQtSBgQzovR0lUL3NyY2Ag0LjQtyDRhdGA0LDQvdC40LvQuNGJ0LAgMdChINC/0L4g0L/Rg9GC0LggYEM6L9Cl0YDQsNC90LjQu9C40YnQtV8x0KEvYAogICAg0JTQu9GPINGA0LDQsdC+0YLRiyDQsdGD0LTQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjGPRjyDQutCw0YLQsNC70L7QsyDQstGA0LXQvNC10L3QvdGL0YUg0YTQsNC50LvQvtCyIGAuL3RlbXBfc3luYy9gCioqKgoqINCY0L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGPINCyINGC0LXQutGD0YnQtdC8INGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUsCgogICAgPiDQv9C10YDQtdC80LXQvdC90LDRjyDQvtC60YDRg9C20LXQvdC40Y8gKipgR0lUU1lOQ19XT1JLRElSYCoqINC90LUg0LTQvtC70LbQvdCwINCx0YvRgtGMINC30LDQtNCw0L3QsAoKICAgIGBgYHNoCiAgICBjZCBDOi93b3JrX2Rpci8KICAgIGdpdHN5bmMgaW5pdCBDOi/QpdGA0LDQvdC40LvQuNGJ0LVfMdChLwogICAgYGBgCiAgICDQlNCw0L3QvdCw0Y8g0LrQvtC80LDQvdC00LAg0YHQvtC30LTQsNGB0YIg0L3QvtCy0YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IGdpdCDQsiDQutCw0YLQsNC70L7Qs9C1IGBDOi93b3JrX2Rpci9gINC40Lcg0YXRgNCw0L3QuNC70LjRidCwIDHQoSDQv9C+INC/0YPRgtC4IGBDOi/QpdGA0LDQvdC40LvQuNGJ0LVfMdChL2AKKioqCiog0JjQvdC40YbQuNCw0LvQuNC30LDRhtC40Y8g0LIg0YEg0YPQutCw0LfQsNC90LjQtdC8INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQuCDQv9Cw0YDQvtC70Y8uCgogICAgYGBgc2gKICAgIGdpdHN5bmMgaW5pdCAtLXN0b3JhZ2UtdXNlciBBZG1pbiAtLXN0b3JhZ2UtcHdkPVNlY3JldCBDOi/QpdGA0LDQvdC40LvQuNGJ0LVfMdChLyBDOi93b3JrX2Rpci8KICAgIGBgYAogICAg0JTQsNC90L3QsNGPINC60L7QvNCw0L3QtNCwINGB0L7Qt9C00LDRgdGCINC90L7QstGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSBnaXQg0LIg0LrQsNGC0LDQu9C+0LPQtSBgQzovd29ya19kaXIvYCDQuNC3INGF0YDQsNC90LjQu9C40YnQsCAx0KEg0L/QviDQv9GD0YLQuCBgQzov0KXRgNCw0L3QuNC70LjRidC1XzHQoS9gCioqKgoqINCY0YHQv9C+0LvRjNC30L7QstCw0L3QuNC1INGB0LjQvdC+0L3QuNC80L7QsiAo0LrQvtGA0L7RgtC60LDRjyDQstC10YDRgdC40Y8g0L/RgNC10LTRi9C00YPRidC10LPQviDQv9GA0LjQvNC10YDQsCkKCiAgICBgYGBzaAogICAgZ2l0c3luYyBpIC11QWRtaW4gLXA9U2VjcmV0IEM6L9Cl0YDQsNC90LjQu9C40YnQtV8x0KEvIEM6L3dvcmtfZGlyLwogICAgYGBgCiAgICDQlNCw0L3QvdCw0Y8g0LrQvtC80LDQvdC00LAg0YHQvtC30LTQsNGB0YIg0L3QvtCy0YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IGdpdCDQsiDQutCw0YLQsNC70L7Qs9C1IGBDOi93b3JrX2Rpci9gINC40Lcg0YXRgNCw0L3QuNC70LjRidCwIDHQoSDQv9C+INC/0YPRgtC4IGBDOi/QpdGA0LDQvdC40LvQuNGJ0LVfMdChL2AKKioqCiog0JjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LUg0YLQvtC70YzQutC+INC/0LXRgNC10LzQtdC90L3Ri9GFINC+0LrRgNGD0LbQtdC90LjRjwoKICAgIGxpbnV4OgogICAgYGBgc2gKICAgIGV4cG9ydCBHSVRTWU5DX1dPUktESVI9Li93b3JrX2Rpci8KICAgIGV4cG9ydCBHSVRTWU5DX1NUT1JBR0VfUEFUSD0uL9Cl0YDQsNC90LjQu9C40YnQtV8x0KEvCgogICAgZXhwb3J0IEdJVFNZTkNfU1RPUkFHRV9VU0VSPdCQ0LTQvNC40L0KICAgIGV4cG9ydCBHSVRTWU5DX1NUT1JBR0VfUEFTU1dPUkQ90J/QsNGA0L7Qu9GMCiAgICBleHBvcnQgR0lUU1lOQ19WOFZFUlNJT049OC4zLjcKICAgIGV4cG9ydCBHSVRTWU5DX1ZFUlNPQkU9dHJ1ZSAj0JzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0JTQsC/Qm9C+0LbRjC/QndC10YIv0JjRgdGC0LjQvdCwCiAgICBleHBvcnQgR0lUU1lOQ19URU1QPS4vdGVtcC9zeW5jCiAgICBnaXRzeW5jIGkKICAgIGBgYAogICAgCiAgICB3aW5kb3dzOgogICAgYGBgY21kCiAgICBzZXQgR0lUU1lOQ19XT1JLRElSPS4vd29ya19kaXIvCiAgICBzZXQgR0lUU1lOQ19TVE9SQUdFX1BBVEg9Li/QpdGA0LDQvdC40LvQuNGJ0LVfMdChLwoKICAgIHNldCBHSVRTWU5DX1NUT1JBR0VfVVNFUj3QkNC00LzQuNC9CiAgICBzZXQgR0lUU1lOQ19TVE9SQUdFX1BBU1NXT1JEPdCf0LDRgNC+0LvRjAogICAgc2V0IEdJVFNZTkNfVjhWRVJTSU9OPTguMy43CiAgICBzZXQgR0lUU1lOQ19WRVJTT0JFPXRydWUgI9Cc0L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCU0LAv0JvQvtC20Ywv0J3QtdGCL9CY0YHRgtC40L3QsAogICAgc2V0IEdJVFNZTkNfVEVNUD0uL3RlbXAvc3luYwoKICAgIGdpdHN5bmMgaQogICAgYGBgCiAgICDQlNCw0L3QvdCw0Y8g0LrQvtC80LDQvdC00LAg0YHQvtC30LTQsNGB0YIg0L3QvtCy0YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IGdpdCDQsiDQutCw0YLQsNC70L7Qs9C1IGBDOi93b3JrX2Rpci9gINC40Lcg0YXRgNCw0L3QuNC70LjRidCwIDHQoSDQv9C+INC/0YPRgtC4IGBDOi/QpdGA0LDQvdC40LvQuNGJ0LVfMdChL2A=";
+ Возврат ЗапакованныеДанные;
+КонецФункции
+
+
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/plugins_Gitsync.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/plugins_Gitsync.os"
new file mode 100644
index 00000000..ffcedf55
--- /dev/null
+++ "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/plugins_Gitsync.os"
@@ -0,0 +1,34 @@
+
+///////////////////////////////////////////
+// ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ //
+///////////////////////////////////////////
+//
+// ФАЙЛ:
+//
+
+// Возвращает версию запакованного файла
+//
+Функция Версия() Экспорт
+ Возврат "1.0.0";
+КонецФункции
+
+// Возвращает имя запакованного файла
+//
+Функция ИмяФайла() Экспорт
+ Возврат "plugins.md";
+КонецФункции
+
+// Возвращает хеш строку запакованного файла
+//
+Функция Хеш() Экспорт
+ Возврат "D41D8CD98F00B204E9800998ECF8427E";
+КонецФункции
+
+// Возвращает запакованные данные файла
+//
+Функция ДвоичныеДанные() Экспорт
+ ЗапакованныеДанные = "";
+ Возврат ЗапакованныеДанные;
+КонецФункции
+
+
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/setversion_Gitsync.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/setversion_Gitsync.os"
new file mode 100644
index 00000000..35edd93d
--- /dev/null
+++ "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/setversion_Gitsync.os"
@@ -0,0 +1,34 @@
+
+///////////////////////////////////////////
+// ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ //
+///////////////////////////////////////////
+//
+// ФАЙЛ:
+//
+
+// Возвращает версию запакованного файла
+//
+Функция Версия() Экспорт
+ Возврат "1.0.0";
+КонецФункции
+
+// Возвращает имя запакованного файла
+//
+Функция ИмяФайла() Экспорт
+ Возврат "setversion.md";
+КонецФункции
+
+// Возвращает хеш строку запакованного файла
+//
+Функция Хеш() Экспорт
+ Возврат "D41D8CD98F00B204E9800998ECF8427E";
+КонецФункции
+
+// Возвращает запакованные данные файла
+//
+Функция ДвоичныеДанные() Экспорт
+ ЗапакованныеДанные = "";
+ Возврат ЗапакованныеДанные;
+КонецФункции
+
+
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/sync_Gitsync.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/sync_Gitsync.os"
new file mode 100644
index 00000000..7243f598
--- /dev/null
+++ "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/sync_Gitsync.os"
@@ -0,0 +1,34 @@
+
+///////////////////////////////////////////
+// ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ //
+///////////////////////////////////////////
+//
+// ФАЙЛ:
+//
+
+// Возвращает версию запакованного файла
+//
+Функция Версия() Экспорт
+ Возврат "1.0.0";
+КонецФункции
+
+// Возвращает имя запакованного файла
+//
+Функция ИмяФайла() Экспорт
+ Возврат "sync.md";
+КонецФункции
+
+// Возвращает хеш строку запакованного файла
+//
+Функция Хеш() Экспорт
+ Возврат "74CEF0F61D02F663EE3857B6112384D2";
+КонецФункции
+
+// Возвращает запакованные данные файла
+//
+Функция ДвоичныеДанные() Экспорт
+ ЗапакованныеДанные = "IyDQn9C+0LTRgNC+0LHQvdC+0LUg0L7Qv9C40YHQsNC90LjQtSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDQutC+0LzQsNC90LTRiyA8c3luYz4KCnN5bmMgKNGB0LjQvdC+0L3QuNC8IHMpIC0g0JLRi9C/0L7Qu9C90Y/QtdGCINGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNGOINGF0YDQsNC90LjQu9C40YnQsCAx0KEg0YEgZ2l0LdGA0LXQv9C+0LfQuNGC0L7RgNC40LXQvAoKPiDQn9C+0LTRgNC+0LHQvdGD0Y4g0YHQv9GA0LDQstC60YMg0L/QviDQvtC/0YbQuNGP0Lwg0Lgg0LDRgNCz0YPQvNC10L3RgtCw0Lwg0YHQvC4gYGdpdHN5bmMgc3luYyAtLWhlbHBgCgojIyMg0KHQv9GA0LDQstC60LAg0L/QviDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjiDQutC+0LzQsNC90LTRizoKYGBgCtCa0L7QvNCw0L3QtNCwOiBzeW5jLCBzCiDQktGL0L/QvtC70L3Rj9C10YIg0YHQuNC90YXRgNC+0L3QuNC30LDRhtC40Y4g0YXRgNCw0L3QuNC70LjRidCwIDHQoSDRgSBnaXQt0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdC8CgrQodGC0YDQvtC60LAg0LfQsNC/0YPRgdC60LA6IGdpdHN5bmMgc3luYyBb0J7Qn9Cm0JjQmF0gUEFUSCBbV09SS0RJUl0KCtCQ0YDQs9GD0LzQtdC90YLRizoKICBQQVRIICAgICAgICAgINCf0YPRgtGMINC6INGF0YDQsNC90LjQu9C40YnRgyDQutC+0L3RhNC40LPRg9GA0LDRhtC40LggMdChLiAoZW52ICRHSVRTWU5DX1NUT1JBR0VfUEFUSCkKICBXT1JLRElSICAgICAgINCa0LDRgtCw0LvQvtCzINC40YHRhdC+0LTQvdC40LrQvtCyINCy0L3Rg9GC0YDQuCDQu9C+0LrQsNC70YzQvdC+0Lkg0LrQvtC/0LjQuCBnaXQt0YDQtdC/0L7Qt9C40YLQsNGA0LjRjy4gKGVudiAkR0lUU1lOQ19XT1JLRElSKQoK0J7Qv9GG0LjQuDoKICAtdSwgLS1zdG9yYWdlLXVzZXIgICAg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GMINGF0YDQsNC90LjQu9C40YnQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40LggKGVudiAkR0lUU1lOQ19TVE9SQUdFX1VTRVIpICjQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgCkKICAtcCwgLS1zdG9yYWdlLXB3ZCAgICAg0L/QsNGA0L7Qu9GMINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDRhdGA0LDQvdC40LvQuNGJ0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IChlbnYgJEdJVFNZTkNfU1RPUkFHRV9QQVNTV09SRCwgJEdJVFNZTkNfU1RPUkFHRV9QV0QpCgpgYGAKIyMjINCT0LvQvtCx0LDQu9GM0L3Ri9C1INC/0LXRgNC10LzQtdC90L3Ri9C1INC+0LrRgNGD0LbQtdC90LjRjwp8INCY0LzRjyAgICAgICAgICAgICAgICAgfCDQntC/0LjRgdCw0L3QuNC1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgYEdJVFNZTkNfVjhWRVJTSU9OYCB8INC80LDRgdC60LAg0LLQtdGA0YHQuNC4INC/0LvQsNGC0YTQvtGA0LzRiyAoOC4zLCA4LjMuNSwgOC4zLjYuMjI5OSDQuCDRgi7Qvy4pIHwKfCBgR0lUU1lOQ19WRVJTT0JFYCAgIHwg0LLRi9Cy0L7QtCDQvtGC0LvQsNC00L7Rh9C90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQsiDQv9GA0L7RhtC10YHRgdC1INCy0YvQv9C+0LvQvdC10L3QuNC4ICAgICAgfAp8IGBHSVRTWU5DX1RFTVBgICAgICAgfCDQv9GD0YLRjCDQuiDQutCw0YLQsNC70L7Qs9GDINCy0YDQtdC80LXQvdC90YvRhSDRhNCw0LnQu9C+0LIgICAgICAgICAgICAgICAgICAgICAgIHwKfCBgR0lUU1lOQ19FTUFJTGAgICAgIHwg0LTQvtC80LXQvSDQv9C+0YfRgtGLINC00LvRjyDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSBnaXQgICAgICAgICAgICAgICAgICAgICAgfAoKIyMjINCf0LXRgNC10LzQtdC90L3Ri9C1INC+0LrRgNGD0LbQtdC90LjRjyDQutC+0LzQsNC90LTRiwoKfCDQmNC80Y8gICAgICAgICAgICAgICAgICAgICAgICB8INCe0L/QuNGB0LDQvdC40LUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgYEdJVFNZTkNfV09SS0RJUmAgICAgICAgICAgfCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQtNC70Y8g0LrQvtC80LDQvdC00YsgICAgICAgICAgICAgICAgfAp8IGBHSVRTWU5DX1NUT1JBR0VfUEFUSGAgICAgIHwg0L/Rg9GC0Ywg0Log0YXRgNCw0L3QuNC70LjRidGDINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCAx0KEuICAgICAgICAgIHwKfCBgR0lUU1lOQ19TVE9SQUdFX1VTRVJgICAgICB8INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjCDRhdGA0LDQvdC40LvQuNGJ0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4ICAgICAgICB8CnwgYEdJVFNZTkNfU1RPUkFHRV9QQVNTV09SRGAgfCDQv9Cw0YDQvtC70Ywg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINGF0YDQsNC90LjQu9C40YnQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40LggfAoKIyMjINCX0L3QsNGH0LXQvdC40Y8g0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4KCnwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgV09SS0RJUiAgICAgICAgICAgIHwg0YLQtdC60YPRidCw0Y8g0YDQsNCx0L7Rh9Cw0Y8g0LTQuNGA0LXQutGC0L7RgNC40Y8gICB8CnwgLXUsIC0tc3RvcmFnZS11c2VyIHwg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GMIGDQkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgGAgfAoKIyMg0J/RgNC40LzQtdGA0YssINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPCgoqINCf0YDQvtGB0YLQvtC1INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC1CgogICAgYGdpdHN5bmMgc3luYyBDOi/QpdGA0LDQvdC40LvQuNGJ0LVfMdChLyBDOi9HSVQvc3JjYAoKICAgINCU0LDQvdC90LDRjyDQutC+0LzQsNC90LTQsCDQstGL0L/QvtC70L3QuNGC0Ywg0YHQuNC90YXRgNC+0L3QuNC30LDRhtC40Y4g0YXRgNCw0L3QuNC70LjRidCwIDHQoSDQv9C+INC/0YPRgtC4IGBDOi/QpdGA0LDQvdC40LvQuNGJ0LVfMdChL2Ag0Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyBnaXQg0LIg0LrQsNGC0LDQu9C+0LPQtSBgQzovR0lUL3NyY2AKCiog0JjQvdC40YbQuNCw0LvQuNC30LDRhtC40Y8g0LIg0YLQtdC60YPRidC10Lwg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSwKCiAgICA+INC/0LXRgNC10LzQtdC90L3QsNGPINC+0LrRgNGD0LbQtdC90LjRjyAqKmBHSVRTWU5DX1dPUktESVJgKiog0L3QtSDQtNC+0LvQttC90LAg0LHRi9GC0Ywg0LfQsNC00LDQvdCwCgogICAgYGBgc2gKICAgIGNkIEM6L3dvcmtfZGlyLwogICAgZ2l0c3luYyBzeW5jIEM6L9Cl0YDQsNC90LjQu9C40YnQtV8x0KEvCiAgICBgYGAKICAgINCU0LDQvdC90LDRjyDQutC+0LzQsNC90LTQsCDQstGL0L/QvtC70L3QuNGC0Ywg0YHQuNC90YXRgNC+0L3QuNC30LDRhtC40Y4g0YXRgNCw0L3QuNC70LjRidCwIDHQoSDQv9C+INC/0YPRgtC4IGBDOi/QpdGA0LDQvdC40LvQuNGJ0LVfMdChL2Ag0Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyBnaXQg0LIg0LrQsNGC0LDQu9C+0LPQtSBgQzovd29ya19kaXJgCgoqINCY0L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGPINCyINGBINGD0LrQsNC30LDQvdC40LXQvCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0Lgg0L/QsNGA0L7Qu9GPLgoKICAgIGBgYHNoCiAgICBnaXRzeW5jIHN5bmMgLS1zdG9yYWdlLXVzZXIgQWRtaW4gLS1zdG9yYWdlLXB3ZD1TZWNyZXQgQzov0KXRgNCw0L3QuNC70LjRidC1XzHQoS8gQzovd29ya19kaXIvCiAgICBgYGAKICAgINCU0LDQvdC90LDRjyDQutC+0LzQsNC90LTQsCDQstGL0L/QvtC70L3QuNGC0Ywg0YHQuNC90YXRgNC+0L3QuNC30LDRhtC40Y4g0YXRgNCw0L3QuNC70LjRidCwIDHQoSDQv9C+INC/0YPRgtC4IGBDOi/QpdGA0LDQvdC40LvQuNGJ0LVfMdChL2Ag0Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyBnaXQg0LIg0LrQsNGC0LDQu9C+0LPQtSBgQzovd29ya19kaXJgCiAgICDQmNGB0L/QvtC70YzQt9GD0Y8g0LTQu9GPINC/0L7QtNC60LvRjtGH0LXQvdC40Y8g0Log0YXRgNCw0L3QuNC70LjRidGDIDHQoSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gYEFkbWluYCDQuCDQv9Cw0YDQvtC70YwgYFNlY3JldGAKCiog0JjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LUg0YHQuNC90L7QvdC40LzQvtCyICjQutC+0YDQvtGC0LrQsNGPINCy0LXRgNGB0LjRjyDQv9GA0LXQtNGL0LTRg9GJ0LXQs9C+INC/0YDQuNC80LXRgNCwKQoKICAgIGBgYHNoCiAgICBnaXRzeW5jIHMgLXVBZG1pbiAtcD1TZWNyZXQgQzov0KXRgNCw0L3QuNC70LjRidC1XzHQoS8gQzovd29ya19kaXIvCiAgICBgYGAKICAgINCU0LDQvdC90LDRjyDQutC+0LzQsNC90LTQsCDQstGL0L/QvtC70L3QuNGC0Ywg0YHQuNC90YXRgNC+0L3QuNC30LDRhtC40Y4g0YXRgNCw0L3QuNC70LjRidCwIDHQoSDQv9C+INC/0YPRgtC4IGBDOi/QpdGA0LDQvdC40LvQuNGJ0LVfMdChL2Ag0Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyBnaXQg0LIg0LrQsNGC0LDQu9C+0LPQtSBgQzovd29ya19kaXJgCiAgICDQmNGB0L/QvtC70YzQt9GD0Y8g0LTQu9GPINC/0L7QtNC60LvRjtGH0LXQvdC40Y8g0Log0YXRgNCw0L3QuNC70LjRidGDIDHQoSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gYEFkbWluYCDQuCDQv9Cw0YDQvtC70YwgYFNlY3JldGAKCiog0JjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LUg0YLQvtC70YzQutC+INC/0LXRgNC10LzQtdC90L3Ri9GFINC+0LrRgNGD0LbQtdC90LjRjwoKICAgIGxpbnV4OgogICAgYGBgc2gKICAgIGV4cG9ydCBHSVRTWU5DX1dPUktESVI9Li93b3JrX2Rpci8KICAgIGV4cG9ydCBHSVRTWU5DX1NUT1JBR0VfUEFUSD0uL9Cl0YDQsNC90LjQu9C40YnQtV8x0KEvCgogICAgZXhwb3J0IEdJVFNZTkNfU1RPUkFHRV9VU0VSPUFkbWluCiAgICBleHBvcnQgR0lUU1lOQ19TVE9SQUdFX1BBU1NXT1JEPVNlY3JldAogICAgZXhwb3J0IEdJVFNZTkNfVjhWRVJTSU9OPTguMy43CiAgICBleHBvcnQgR0lUU1lOQ19WRVJTT0JFPXRydWUgI9Cc0L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCU0LAv0JvQvtC20Ywv0J3QtdGCL9CY0YHRgtC40L3QsAogICAgZXhwb3J0IEdJVFNZTkNfVEVNUD0uL3RlbXAvc3luYwogICAgZ2l0c3luYyBzCiAgICBgYGAKICAgIHdpbmRvd3M6CiAgICBgYGBjbWQKICAgIHNldCBHSVRTWU5DX1dPUktESVI9Li93b3JrX2Rpci8KICAgIHNldCBHSVRTWU5DX1NUT1JBR0VfUEFUSD0uL9Cl0YDQsNC90LjQu9C40YnQtV8x0KEvCgogICAgc2V0IEdJVFNZTkNfU1RPUkFHRV9VU0VSPUFkbWluCiAgICBzZXQgR0lUU1lOQ19TVE9SQUdFX1BBU1NXT1JEPVNlY3JldAogICAgc2V0IEdJVFNZTkNfVjhWRVJTSU9OPTguMy43CiAgICBzZXQgR0lUU1lOQ19WRVJTT0JFPXRydWUgI9Cc0L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCU0LAv0JvQvtC20Ywv0J3QtdGCL9CY0YHRgtC40L3QsAogICAgc2V0IEdJVFNZTkNfVEVNUD0uL3RlbXAvc3luYwoKICAgIGdpdHN5bmMgcwogICAgYGBgCiAgICDQlNCw0L3QvdCw0Y8g0LrQvtC80LDQvdC00LAg0LLRi9C/0L7Qu9C90LjRgtGMINGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNGOINGF0YDQsNC90LjQu9C40YnQsCAx0KEg0L/QviDQv9GD0YLQuCBgQzov0KXRgNCw0L3QuNC70LjRidC1XzHQoS9gINC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gZ2l0INCyINC60LDRgtCw0LvQvtCz0LUgYEM6L3dvcmtfZGlyYAogICAg0JjRgdC/0L7Qu9GM0LfRg9GPINC00LvRjyDQv9C+0LTQutC70Y7Rh9C10L3QuNGPINC6INGF0YDQsNC90LjQu9C40YnRgyAx0KEg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPIGBBZG1pbmAg0Lgg0L/QsNGA0L7Qu9GMIGBTZWNyZXRgCg==";
+ Возврат ЗапакованныеДанные;
+КонецФункции
+
+
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/tempExtension_Gitsync.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/tempExtension_Gitsync.os"
new file mode 100644
index 00000000..dd27e4e9
--- /dev/null
+++ "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/tempExtension_Gitsync.os"
@@ -0,0 +1,34 @@
+
+///////////////////////////////////////////
+// ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ //
+///////////////////////////////////////////
+//
+// ФАЙЛ:
+//
+
+// Возвращает версию запакованного файла
+//
+Функция Версия() Экспорт
+ Возврат "1.0.0";
+КонецФункции
+
+// Возвращает имя запакованного файла
+//
+Функция ИмяФайла() Экспорт
+ Возврат "tempExtension.cfe";
+КонецФункции
+
+// Возвращает хеш строку запакованного файла
+//
+Функция Хеш() Экспорт
+ Возврат "6B3A3B869213E02BE3C63E74A4117049";
+КонецФункции
+
+// Возвращает запакованные данные файла
+//
+Функция ДвоичныеДанные() Экспорт
+ ЗапакованныеДанные = "////fwACAAADAAAAAAAAAA0KMDAwMDAwMjQgMDAwMDAyMDAgN2ZmZmZmZmYgDQovAgAArgIAAP///3+ACQAA/wkAAP///38eDAAAaQwAAP///38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0KMDAwMDAwNjAgMDAwMDAwNjAgN2ZmZmZmZmYgDQqgmg3OP0MCAKCaDc4/QwIAAAAAAGIANQBhAGEAMAA3ADYAYwAtAGMAMQA4ADcALQA0ADQAZAAwAC0AYQBmADgANQAtADkAYwAwADIANABkADQAMQBkADMAYwA5AAAAAAANCjAwMDAwNmIzIDAwMDAwNmIzIDdmZmZmZmZmIA0KvVhNbiW5Dd4PMJdwto+AKFEitc1FBiIlHSBAVgMDyS7HyBGyGWCAYJAruE+SK+Sr56rX7cl0TwduxN0o+NmUxCL5/cj//ue/fsy377/70esYSVtQsCmJzERjW6UeKcsUniX6860doT1m5RSThu8g5inUpQilJKnXxXmHHnF8POp99/T4nG7pJhpScjKKXRJJRKPeZ6ZU9trd+kilPd+eXv7+8o8Pf/3wt5efP/zl5aeXX15+fvmJn153evrTn58+F4GlTze+6a3PHcN9Uxs6SGwMMs1Mc9el5qVptFu5cV1FWnby6E5yvFmffdOM1HPeJrWlW77pbtoKCyk37DarkJVSaSiPYlU9c2C38Mmb1yTNsyBsFPKZMkWTMnvt1XViN27sIXF/fTyKZRpJKu1qO9eVRa0gLBr+zRXIaDHCeJMzXmaJ5LV8WwtG2BxNDLWjvDmTsG2ylfHotXlwGq3tW37+/ruzNkcjnj/7TOcX/cbj+rphThpbGA1LnaSZUc+K124tj7qkidav2+nrgo7EX/9fc/T85rtveNQ3C7JUOD1yPF7i/5zAhbqnP6BsmmxPYCA8Fkm2Tl60UNJRh4qv1fnG9xn5dgnkrwsrjyIdGd/zPrNeErXsLrTqBi8N8IxhoCmz+TTmGIvPdU9/fMJ3R/7/43J+3/L8vuXlfcvlfcvr+5a39y3X9y239y3vb5cfO+SPosI/PJ0Avg9Yfp3RrqU56LzHCJJVwMeCE2ZZvWob3sXOcUxhPbRn4hblkMlK3ptj8GvysdLodV6he4l1Q3o1zyO00SihH0NV2yN0b+hSkG1BAhqBBBgfZ406cuap/cIR+7xr+KxjQok6k3sWgtCvtbj0BHE+Q6t2yFyhCGiN8EYCVoJWoHzeR4WInKFZIN4qEO9ejKTCKNiEKiaWLEOzM68ztKRZq0ynKgzG2S1DkBTGgqPN2MuzxxWqO+/RB3nW9vAU9a2nOEO7z7khwSmQoVQId4f00uw9NraGBPoVuqokGTAAayPXANuNyUwdlclzDwiwPUIVbgZSnJr+TgukucTsSnsyFH6BUoePTAV5TW0d2Vy7yrJsEGdKW4TEK0wG45CRvaAA6jOuClQzMYgnlbZgL+DFyAw8CVZeLjAOaV4V0BnzMBM0YlSSnht5lU5sMAVt4NDYZyh8SchA54EDJIBXJmtoseKo3DYDE1eu1qqmkhepChzJYhi84oPqnG3Z2K527Xo6wPVFB8hfZRHu+41dBQOYqOSGPhXZOHopXI7ONnMrFuU8OmCSUu+LuDj23A7vOGsiOL2UcspdH+MXAQOo3UgDRCCNEaqwmQoAuHpUGL8zFGek3rbjd/WACpzU2IADzk+iyhhN/0gSRwV2zFwH6mQ5XxU4UJAsCTrOvPsR1x4SfHpfjF/o9EJ9ZLS5gB865oIOYnH2NfrUrxNgmJ56ZwRGyS2BB4DiL0MnNZ5wwOipHia/pUW9YiTWVIxxQc1NrlBd+IDJMt18sRdo5zfYiwsXyYlpt+SvoZ+DDkfVNRwzVjCvIqiD81wEJ4sfN3UU/OKZzaMed5HtSFM84S4CkoQrPwZSOJcH05Y27LDwqCmwCLzD2UyfsOe+SrBqV31gl7NPrTDxfuhCBR4iKmVP3urue6QrAXh916PFua/8ZUawPBjLcWzO6WBakCxYilhwFPizjkeu3vDrgVHnJr+zKyYUxceGpQLrXw49binMBgCpH0jLYARcq7LVmUH3nvsVGlvQAFBSwY3lGpe0307uayhI1pKiUdAPFCuhu1a5U+lHEzbuKZIfqDiBsUozqANTGvcRywG6B6v1XaR22d19fHIZPFExBvBoindD28FojJsaXhNy3SYbt52ynfp8jEaxpQtsUiBPQCDew0BVZGBKX+E5rccUzbVmdzuK1kAXG5wlkIHIuBNFQW3uEvQJsHHPkp7APZGBf9yJCcQAjasVIuPNa/FfY1q3lm4Z4Ot63L4KFAZCCtkL0AOmaqxPsi/JOSU0E01B9gr8jYW2hlsMG2DCdk3rRvqmw6jJAtHX5VAOOAQvY80BSKSlb7KvjCV1Gq0h4LHUYHsMFGO5V9aaYGfWf1cfbd5eklBJh6AFONjrcW/NxrgxhLv4J/mvhmsvgMNFQda9InDh4gwcewUfowP1yj9mgQCDrOtRTENNukP+VkwHbzaTwW/yX83Y8qF/uehxKwZPNt3UU/AqRdEt/XX14TBaXgJlLfBlUiGJY8B0AHUFQMM0xmv1z79HKAAI1epRDq5QhpOqmIqElIbnMld9k9L9lPvF8/zhfwANCjAwMDAwMDYwIDAwMDAwMDYwIDdmZmZmZmZmIA0KoJoNzj9DAgCgmg3OP0MCAAAAAABjADEAOAA2ADEAOABjADgALQBhADgAMAA5AC0ANAA2ADgAOAAtADkAMgA3AGQALQA3ADYANgAyAGEANQBlADQANgA0ADcANQAAAAAADQowMDAwMDA3ZCAwMDAwMDIwMCA3ZmZmZmZmZiANCi2MwQlCMRBE74JN5JyF3XWzyS9nk68FCJ4+OXxsxDLUf7CFpBJbMIoMDMNjZt7bayG/3y34tX9CXygppZLAEk4gmhJMHGeIqmzhKCoxVO/arV/72tf2bPf2cL/1wM7TkGQ2zuU0PiSAUDYwPMyAIeNkXLQQeR7188VVj/UDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQowMDAwMDAyYyAwMDAwMDAyYyA3ZmZmZmZmZiANCqCaDc4/QwIAoJoNzj9DAgAAAAAAYwBvAG4AZgBpAGcAaQBuAGYAbwAAAAAADQowMDAwMDBmYyAwMDAwMDIwMCA3ZmZmZmZmZiANCo2OTW6CQABG9yRcgi0zcQZmhpkFixpFG7BYS0DYwQy1RZHKT1s1nqyLHqlXaGt6gCZv8SUvX/K+Pj7PCOja2cIMXAdHNkYAXXTtl6sCBc1z5DAJJeYOJEQhmD9yCoVEFlEEK1sKkGdPiyax3t5LM/LZ3KPWdGSfnE6eaL3P4ociQau9GUzGq24I42OvttkkvntNpqLiu3BY67rWF2F6PKh6qEkT9DfpTPDO3LjuX4bxnw4DHG6ffc8bVeqFBmbjdyqSXlS1y1177wLj58owlxzmHAlIGOdQWI6CDmNWTkvCiEMNMPJwMF4Uy3mIzSgMN22Jt0UwzNZF6l6+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
+ Возврат ЗапакованныеДанные;
+КонецФункции
+
+
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/usage_Gitsync.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/usage_Gitsync.os"
new file mode 100644
index 00000000..2831f01d
--- /dev/null
+++ "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/usage_Gitsync.os"
@@ -0,0 +1,34 @@
+
+///////////////////////////////////////////
+// ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ //
+///////////////////////////////////////////
+//
+// ФАЙЛ:
+//
+
+// Возвращает версию запакованного файла
+//
+Функция Версия() Экспорт
+ Возврат "1.0.0";
+КонецФункции
+
+// Возвращает имя запакованного файла
+//
+Функция ИмяФайла() Экспорт
+ Возврат "usage.md";
+КонецФункции
+
+// Возвращает хеш строку запакованного файла
+//
+Функция Хеш() Экспорт
+ Возврат "D41D8CD98F00B204E9800998ECF8427E";
+КонецФункции
+
+// Возвращает запакованные данные файла
+//
+Функция ДвоичныеДанные() Экспорт
+ ЗапакованныеДанные = "";
+ Возврат ЗапакованныеДанные;
+КонецФункции
+
+
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"
new file mode 100644
index 00000000..beb0b8e7
--- /dev/null
+++ "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"
@@ -0,0 +1,79 @@
+#Использовать tempfiles
+
+#Область ПрограммныйИнтерфейс
+
+Функция ПолучитьПутьКФайлу(Знач ИмяФайла) Экспорт
+
+ Возврат ПолучитьВременныйПутьКФайлу(ИмяФайла);
+
+КонецФункции
+
+Функция ПолучитьВременныйПутьКФайлу(Знач ИмяФайла) Экспорт
+
+ МенеджерЗапакованныхФайлов = Новый МенеджерЗапакованныхФайловGitsync;
+ ИндексФайлов = МенеджерЗапакованныхФайлов.ПолучитьИндексФайлов();
+
+ ИмяКлассаФайла = ИндексФайлов[ИмяФайла];
+
+ Если ИмяКлассаФайла = Неопределено Тогда
+ ВызватьИсключение СтрШаблон("Не удалось найти двоичные данные для файла <%1>", ИмяФайла);
+ КонецЕсли;
+
+ ФайлРаспаковки = Новый Файл(ИмяФайла);
+
+ КлассФайла = Новый (ИмяКлассаФайла);
+
+ ПутьКФайлу = ВременныеФайлы.НовоеИмяФайла(ФайлРаспаковки.Расширение);
+
+ РаспаковатьДанные(ПутьКФайлу, КлассФайла);
+
+ Возврат ПутьКФайлу;
+
+КонецФункции
+
+Функция ПолучитьХешФайла(Знач ИмяФайла) Экспорт
+
+ МенеджерЗапакованныхФайлов = Новый МенеджерЗапакованныхФайловGitsync;
+ ИндексФайлов = МенеджерЗапакованныхФайлов.ПолучитьИндексФайлов();
+
+ ИмяКлассаФайла = ИндексФайлов[ИмяФайла];
+
+ Если ИмяКлассаФайла = Неопределено Тогда
+ ВызватьИсключение СтрШаблон("Не удалось найти двоичные данные для файла <%1>", ИмяФайла);
+ КонецЕсли;
+
+ ФайлРаспаковки = Новый Файл(ИмяФайла);
+
+ КлассФайла = Новый (ИмяКлассаФайла);
+
+ Возврат КлассФайла.Хеш()
+
+КонецФункции
+
+#КонецОбласти
+
+#Область Упакованные_файлы
+
+Процедура РаспаковатьДанные(Знач ПутьКФайлу, КлассФайла)
+
+ ДвоичныеДанные = Base64Значение(КлассФайла.ДвоичныеДанные());
+
+ ОбеспечитьКаталог(ПутьКФайлу);
+
+ ДвоичныеДанные.Записать(ПутьКФайлу);
+
+КонецПроцедуры
+
+Процедура ОбеспечитьКаталог(ПутьККаталогу)
+
+ ВременныйКаталог = Новый Файл(ПутьККаталогу);
+
+ Если ВременныйКаталог.Существует() Тогда
+ Возврат;
+ КонецЕсли;
+
+ СоздатьКаталог(ВременныйКаталог.Путь);
+
+КонецПроцедуры
+
+#КонецОбласти
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\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\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\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\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"
new file mode 100644
index 00000000..8b1191eb
--- /dev/null
+++ "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\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\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"
@@ -0,0 +1,15 @@
+Функция ПолучитьИндексФайлов() Экспорт
+
+ ИндексФайлов = Новый Соответствие;
+ ИндексФайлов.Вставить("tempExtension.cfe", "tempExtension_Gitsync");
+ ИндексФайлов.Вставить("clone.md", "clone_Gitsync");
+ ИндексФайлов.Вставить("init.md", "init_Gitsync");
+ ИндексФайлов.Вставить("plugins.md", "plugins_Gitsync");
+ ИндексФайлов.Вставить("README.md", "README_Gitsync");
+ ИндексФайлов.Вставить("setversion.md", "setversion_Gitsync");
+ ИндексФайлов.Вставить("sync.md", "sync_Gitsync");
+ ИндексФайлов.Вставить("usage.md", "usage_Gitsync");
+
+ Возврат ИндексФайлов;
+
+КонецФункции
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/files/\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/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/files/\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/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/files/\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
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\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.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\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os"
index f6af1162..9104f016 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\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.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\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os"
@@ -1,6 +1,6 @@
#Использовать logos
-Перем ИндексУстановленныхПлагинов; // Соответствие
+Перем НаборПлагиновСинхронизации; // Соответствие
Перем Лог; // Объект - Логирование
Перем ДоступныйИнтерфейсПлагинов; // Объект.ИнтерфейсОбъекта - интерфейс плагинов
Перем КаталогПлагинов; // Строка - каталог пакетов плагинов
@@ -20,7 +20,29 @@
//
Процедура ЗагрузитьПлагины() Экспорт
- ОбновитьИндексПлагинов();
+ ПодключениеПлагиновКаталога = Новый ПодключениеПлагиновКаталога;
+ МассивПлагинов = ПодключениеПлагиновКаталога.ПодключитьПлагиныКаталога(КаталогПлагинов);
+ Лог.Отладка("Количество плагинов <%1> каталога <%2>", МассивПлагинов.Количество(), КаталогПлагинов);
+
+ СоздательНабораПлагиновСинхронизации = Новый СоздательНабораПлагиновСинхронизации;
+
+ Для каждого ИмяКлассаПлагина Из МассивПлагинов Цикл
+
+ СоздательНабораПлагиновСинхронизации.ДобавитьПлагин(ИмяКлассаПлагина);
+
+ КонецЦикла;
+
+ ПодключениеЗапакованныхПлагинов = Новый ПодключениеЗапакованныхПлагинов;
+ МассивПлагинов = ПодключениеЗапакованныхПлагинов.ИндексПлагинов();
+ Лог.Отладка("Количество встроенных плагинов <%1>", МассивПлагинов.Количество());
+
+ Для каждого ИмяКлассаПлагина Из МассивПлагинов Цикл
+
+ СоздательНабораПлагиновСинхронизации.ДобавитьПлагин(ИмяКлассаПлагина);
+
+ КонецЦикла;
+
+ НаборПлагиновСинхронизации = СоздательНабораПлагиновСинхронизации.Создать();
КонецПроцедуры
@@ -32,113 +54,17 @@
// * значение - Объект - ссылка на произвольный объект
//
Функция ИндексПлагинов() Экспорт
- Возврат ИндексУстановленныхПлагинов;
+ Возврат НаборПлагиновСинхронизации;
КонецФункции
#КонецОбласти
#Область Вспомогательные_процедуры_и_функции
-Процедура ОбновитьИндексПлагинов()
-
- Лог.Отладка("Обновление индекса плагина из каталога <%1>", КаталогПлагинов);
- ИндексУстановленныхПлагинов = Новый Соответствие;
-
- КаталогиПлагинов = НайтиФайлы(КаталогПлагинов, ПолучитьМаскуВсеФайлы(), Ложь);
-
- Для каждого Каталоги Из КаталогиПлагинов Цикл
-
- Если Не Каталоги.ЭтоКаталог() Тогда
- Продолжить;
- КонецЕсли;
-
- ЗагрузитьПлагин(Каталоги.ПолноеИмя);
-
- КонецЦикла;
-
- Лог.Отладка("В индекс плагинов добавлено <%1> плагинов", ИндексУстановленныхПлагинов.Количество());
-
-КонецПроцедуры
-
-Процедура ЗагрузитьПлагин(Знач Путь)
-
- Лог.Отладка("Загружаю плагины из каталога <%1>", Путь);
-
- ФайлМанифеста = Новый Файл(ОбъединитьПути(Путь, "lib.config"));
-
- Если ФайлМанифеста.Существует() Тогда
- Лог.Отладка("Обрабатываем по манифесту");
- ДобавитьКлассыПлагинов(ФайлМанифеста.ПолноеИмя, Путь);
- Иначе
- Лог.Отладка("Плагины из каталога <%1> не могут быть загружены - не найден файл ", Путь);
- КонецЕсли;
-
-КонецПроцедуры
-
-Процедура ДобавитьКлассыПлагинов(Знач Файл, Знач Путь)
-
- Чтение = Новый ЧтениеXML;
- Чтение.ОткрытьФайл(Файл);
- Чтение.ПерейтиКСодержимому();
-
- Если Чтение.ЛокальноеИмя <> "package-def" Тогда
- Чтение.Закрыть();
- Возврат;
- КонецЕсли;
-
- Пока Чтение.Прочитать() Цикл
-
- Если Чтение.ТипУзла = ТипУзлаXML.Комментарий Тогда
-
- Продолжить;
-
- КонецЕсли;
-
- Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
-
- Если Чтение.ЛокальноеИмя = "class" Тогда
- ФайлКласса = Новый Файл(ОбъединитьПути(Путь, Чтение.ЗначениеАтрибута("file")));
- Если ФайлКласса.Существует()
- И ФайлКласса.ЭтоФайл() Тогда
- Идентификатор = Чтение.ЗначениеАтрибута("name");
- Если Не ПустаяСтрока(Идентификатор) Тогда
- ДобавитьПлагинВИндекс(Идентификатор, ФайлКласса.ПолноеИмя);
- КонецЕсли;
- Иначе
- ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте";
- КонецЕсли;
-
- Чтение.Прочитать(); // в конец элемента
-
- КонецЕсли;
-
- КонецЕсли;
-
- КонецЦикла;
-
- Чтение.Закрыть();
-
-КонецПроцедуры
-
-Процедура ДобавитьПлагинВИндекс(Знач ИмяКлассаПлагина, Знач ИмяФайлаКласса)
-
- Лог.Отладка("Добавляю плагин <%1> в индекс плагинов", ИмяКлассаПлагина);
-
- Попытка
- НовыйПлагин = Новый ПлагинСинхронизации(ИмяФайлаКласса, ИмяКлассаПлагина, ДоступныйИнтерфейсПлагинов);
- Исключение
- Лог.Отладка("Ошибка добавления плагина в индекс плагинов. По причине: <%1>", ОписаниеОшибки());
- Возврат;
- КонецПопытки;
-
- ИндексУстановленныхПлагинов.Вставить(НовыйПлагин.Имя(), НовыйПлагин);
-
-КонецПроцедуры
-
Процедура ПриСозданииОбъекта(Знач ВходящийКаталогПлагинов = Неопределено)
КаталогПлагинов = ВходящийКаталогПлагинов;
- ДоступныйИнтерфейсПлагинов = Новый ИнтерфейсПлагинов().Интерфейс();
+ НаборПлагиновСинхронизации = Новый Соответствие();
Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync.plugins.loader");
КонецПроцедуры
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\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262EXE.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\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262EXE.os"
deleted file mode 100644
index 776223b2..00000000
--- "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\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262EXE.os"
+++ /dev/null
@@ -1,84 +0,0 @@
-#Использовать logos
-
-Перем ИндексУстановленныхПлагинов; // Соответствие
-Перем Лог; // Объект - Логирование
-Перем ДоступныйИнтерфейсПлагинов; // Объект.ИнтерфейсОбъекта - интерфейс плагинов
-Перем КаталогПлагинов; // Строка - каталог пакетов плагинов
-
-#Область Экспортные_методы
-
-// Устанавливает каталог плагинов
-//
-// Параметры:
-// ПутьККаталогу - Строка - полный путь к каталогу плагинов
-//
-Процедура УстановитьКаталогПлагинов(Знач ПутьККаталогу) Экспорт
- КаталогПлагинов = ПутьККаталогу;
-КонецПроцедуры
-
-// Выполняет загрузки плагинов в индекс
-//
-Процедура ЗагрузитьПлагины() Экспорт
-
- ОбновитьИндексПлагинов();
-
-КонецПроцедуры
-
-// Возвращает загруженный индекс плагинов
-//
-// Возвращаемое значение:
-// Соответствие - набор плагинов
-// * ключ - Строка - имя плагина
-// * значение - Объект - ссылка на произвольный объект
-//
-Функция ИндексПлагинов() Экспорт
- Возврат ИндексУстановленныхПлагинов;
-КонецФункции
-
-#КонецОбласти
-
-#Область Вспомогательные_процедуры_и_функции
-
-Процедура ОбновитьИндексПлагинов()
-
- Лог.Отладка("Обновление индекса плагина из каталога <%1>", КаталогПлагинов);
- ИндексУстановленныхПлагинов = Новый Соответствие;
-
- ИндексПлагиновEXE = Новый ИндексПлагиновEXE;
- ИндексПлагинов = ИндексПлагиновEXE.ПолучитьИндексПлагиновEXE();
-
- Для каждого Плагин Из ИндексПлагинов Цикл
-
- ДобавитьПлагинВИндекс(Плагин);
-
- КонецЦикла;
-
- Лог.Отладка("В индекс плагинов добавлено <%1> плагинов", ИндексУстановленныхПлагинов.Количество());
-
-КонецПроцедуры
-
-Процедура ДобавитьПлагинВИндекс(Знач ИмяКлассаПлагина)
-
- Лог.Отладка("Добавляю плагин <%1> в индекс плагинов", ИмяКлассаПлагина);
-
- Попытка
- НовыйПлагин = Новый ПлагинСинхронизации(Неопределено, ИмяКлассаПлагина, ДоступныйИнтерфейсПлагинов);
- ИндексУстановленныхПлагинов.Вставить(НовыйПлагин.Имя(), НовыйПлагин);
-
- Исключение
- Лог.Отладка("Ошибка добавления плагина в индекс плагинов. По причине: <%1>", ОписаниеОшибки());
-
- КонецПопытки;
-
-
-КонецПроцедуры
-
-Процедура ПриСозданииОбъекта(Знач ВходящийКаталогПлагинов = Неопределено)
-
- КаталогПлагинов = ВходящийКаталогПлагинов;
- ДоступныйИнтерфейсПлагинов = Новый ИнтерфейсПлагинов().Интерфейс();
- Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync.plugins.loader");
-
-КонецПроцедуры
-
-#КонецОбласти
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\230\320\275\320\264\320\265\320\272\321\201\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262EXE.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\230\320\275\320\264\320\265\320\272\321\201\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262EXE.os"
deleted file mode 100644
index 4300f5d9..00000000
--- "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\230\320\275\320\264\320\265\320\272\321\201\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262EXE.os"
+++ /dev/null
@@ -1,7 +0,0 @@
-Функция ПолучитьИндексПлагиновEXE() Экспорт
-
- ИндексПлагинов = Новый Массив;
-
- Возврат ИндексПлагинов;
-
-КонецФункции
\ No newline at end of file
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 4d593898..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"
@@ -153,18 +153,20 @@
// * ГУИД_Автора - Строка - уникальный идентификатор автора версии
// * ПредставлениеАвтора - Строка - представление автора для коммита в git
// ПутьКХранилищу - Строка - полный путь к хранилищу конфигурации
+// НачальнаяВерсия - Число - номер начальной версии хранилища
// СтандартнаяОбработка - Булево - признак отказ от обработки по умолчанию
//
-Процедура ПриПолученииТаблицыВерсий(ТаблицаВерсий, ПутьКХранилищу, СтандартнаяОбработка) Экспорт
+Процедура ПриПолученииТаблицыВерсий(ТаблицаВерсий, ПутьКХранилищу, НачальнаяВерсия, СтандартнаяОбработка) Экспорт
ПараметрыВыполнения = Новый Массив;
ПараметрыВыполнения.Добавить(ТаблицаВерсий);
ПараметрыВыполнения.Добавить(ПутьКХранилищу);
+ ПараметрыВыполнения.Добавить(НачальнаяВерсия);
ПараметрыВыполнения.Добавить(СтандартнаяОбработка);
ВыполнитьПодпискуНаСобытие("ПриПолученииТаблицыВерсий", ПараметрыВыполнения);
- ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ТаблицаВерсий, ПутьКХранилищу, СтандартнаяОбработка);
+ ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ТаблицаВерсий, ПутьКХранилищу, НачальнаяВерсия, СтандартнаяОбработка);
КонецПроцедуры
@@ -243,6 +245,48 @@
КонецПроцедуры
+// Вызывается при получении таблицы пользователей из хранилища конфигурации
+//
+// Параметры:
+// ПутьКФайлуАвторов - Строка - полный путь к хранилищу конфигурации
+// ТаблицаАвторов - ТаблицаЗначений - инициализированная таблица с колонками:
+// * Автор - Строка - имя автора версии в хранилище
+// * ПредставлениеАвтора - Строка - представление автора для коммита в git
+// СтандартнаяОбработка - Булево - признак отказ от обработки по умолчанию
+//
+Процедура ПриПолученииТаблицыАвторов(ПутьКФайлуАвторов, ТаблицаАвторов, СтандартнаяОбработка) Экспорт
+
+ ПараметрыВыполнения = Новый Массив;
+ ПараметрыВыполнения.Добавить(ПутьКФайлуАвторов);
+ ПараметрыВыполнения.Добавить(ТаблицаАвторов);
+ ПараметрыВыполнения.Добавить(СтандартнаяОбработка);
+
+ ВыполнитьПодпискуНаСобытие("ПриПолученииТаблицыАвторов", ПараметрыВыполнения);
+
+ ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ПутьКФайлуАвторов, ТаблицаАвторов, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+// Вызывается при получении таблицы пользователей из хранилища конфигурации
+//
+// Параметры:
+// ПутьКФайлуАвторов - Строка - полный путь к хранилищу конфигурации
+// ТаблицаАвторов - ТаблицаЗначений - инициализированная таблица с колонками:
+// * Автор - Строка - имя автора версии в хранилище
+// * ПредставлениеАвтора - Строка - представление автора для коммита в git
+//
+Процедура ПослеПолученияТаблицыАвторов(ПутьКФайлуАвторов, ТаблицаАвторов) Экспорт
+
+ ПараметрыВыполнения = Новый Массив;
+ ПараметрыВыполнения.Добавить(ПутьКФайлуАвторов);
+ ПараметрыВыполнения.Добавить(ТаблицаАвторов);
+
+ ВыполнитьПодпискуНаСобытие("ПослеПолученияТаблицыАвторов", ПараметрыВыполнения);
+
+ ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ПутьКФайлуАвторов, ТаблицаАвторов);
+
+КонецПроцедуры
+
#КонецОбласти
#Область Подписки_на_обработки_строки_версии
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\237\320\273\320\260\320\263\320\270\320\275\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\237\320\273\320\260\320\263\320\270\320\275\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 1a9eeb86..ebc39004 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\237\320\273\320\260\320\263\320\270\320\275\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\237\320\273\320\260\320\263\320\270\320\275\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"
@@ -154,16 +154,10 @@
КлассПлагина = ПолучитьКлассПлагина();
КонецПроцедуры
-Процедура ПриСозданииОбъекта(Знач ВходящееИмяФайлаКлассаПлагина, Знач ВходящееИмяКлассаПлагина, ИнтерфейсМетодовПлагинов)
+Процедура ПриСозданииОбъекта(Знач ВходящееИмяКлассаПлагина, ИнтерфейсМетодовПлагинов)
ИмяКлассаПлагина = ВходящееИмяКлассаПлагина;
- Если НЕ ВходящееИмяФайлаКлассаПлагина = Неопределено Тогда
-
- ПодключитьСценарий(ВходящееИмяФайлаКлассаПлагина, ИмяКлассаПлагина);
-
- КонецЕсли;
-
КлассПлагина = ПолучитьКлассПлагина();
ИнтерфейсПлагина = Новый ИнтерфейсОбъекта();
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\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\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\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.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\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\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\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os"
new file mode 100644
index 00000000..cbb704bd
--- /dev/null
+++ "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\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\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\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os"
@@ -0,0 +1,9 @@
+// ИСПОЛЬЗУЕТСЯ ТОЛЬКО ДЛЯ СБОРКИ В EXE
+//
+Функция ИндексПлагинов() Экспорт
+
+ ИндексПлагинов = Новый Массив;
+
+ Возврат ИндексПлагинов;
+
+КонецФункции
\ No newline at end of file
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\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.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\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.os"
new file mode 100644
index 00000000..d91e271a
--- /dev/null
+++ "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\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.os"
@@ -0,0 +1,93 @@
+#Использовать logos
+
+Перем МассивПодключенныхПлагинов;
+Перем Лог;
+
+Функция ПодключитьПлагиныКаталога(Знач КаталогПлагинов) Экспорт
+
+ МассивПодключенныхПлагинов = Новый Массив();
+
+ Если ВРег(Прав(ТекущийСценарий().Источник, 3)) = "EXE" Тогда
+ Возврат МассивПодключенныхПлагинов;
+ КонецЕсли;
+
+ Лог.Отладка("Подключение плагинов из каталога <%1>", КаталогПлагинов);
+ КаталогиПлагинов = НайтиФайлы(КаталогПлагинов, ПолучитьМаскуВсеФайлы(), Ложь);
+
+ Для каждого Каталоги Из КаталогиПлагинов Цикл
+
+ Если Не Каталоги.ЭтоКаталог() Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ЗагрузитьПлагин(Каталоги.ПолноеИмя);
+
+ КонецЦикла;
+
+ Возврат МассивПодключенныхПлагинов;
+
+КонецФункции
+
+Процедура ЗагрузитьПлагин(Знач Путь)
+
+ Лог.Отладка("Загружаю плагины из каталога <%1>", Путь);
+
+ ФайлМанифеста = Новый Файл(ОбъединитьПути(Путь, "lib.config"));
+
+ Если ФайлМанифеста.Существует() Тогда
+ Лог.Отладка("Обрабатываем по манифесту");
+ ДобавитьКлассыПлагинов(ФайлМанифеста.ПолноеИмя, Путь);
+ Иначе
+ Лог.Отладка("Плагины из каталога <%1> не могут быть загружены - не найден файл ", Путь);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьКлассыПлагинов(Знач Файл, Знач Путь)
+
+ Чтение = Новый ЧтениеXML;
+ Чтение.ОткрытьФайл(Файл);
+ Чтение.ПерейтиКСодержимому();
+
+ Если Чтение.ЛокальноеИмя <> "package-def" Тогда
+ Чтение.Закрыть();
+ Возврат;
+ КонецЕсли;
+
+ Пока Чтение.Прочитать() Цикл
+
+ Если Чтение.ТипУзла = ТипУзлаXML.Комментарий Тогда
+
+ Продолжить;
+
+ КонецЕсли;
+
+ Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
+
+ Если Чтение.ЛокальноеИмя = "class" Тогда
+ ФайлКласса = Новый Файл(ОбъединитьПути(Путь, Чтение.ЗначениеАтрибута("file")));
+ Если ФайлКласса.Существует()
+ И ФайлКласса.ЭтоФайл() Тогда
+ Идентификатор = Чтение.ЗначениеАтрибута("name");
+ Если Не ПустаяСтрока(Идентификатор) Тогда
+ ПодключитьСценарий(ФайлКласса.ПолноеИмя, Идентификатор);
+ МассивПодключенныхПлагинов.Добавить(Идентификатор);
+ КонецЕсли;
+ Иначе
+ ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте";
+ КонецЕсли;
+
+ Чтение.Прочитать(); // в конец элемента
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Чтение.Закрыть();
+
+КонецПроцедуры
+
+Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync.plugins.loader");
+МассивПодключенныхПлагинов = Новый Массив();
\ No newline at end of file
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 130d1f81..374addbe 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"
@@ -11,14 +11,12 @@
Перем ПарольПользователяХранилища;
Перем УровеньЛогаСинхронизации;
Перем КоличествоЦикловОжиданияЛицензии;
-
+Перем ИмяРасширения;
Перем ИндексПодписчиков;
Перем ПараметрыПодписчиков;
Перем МенеджерСинхронизации;
Перем КаталогПлагинов;
-Перем ПутьКФайлуВключенныхПлагинов;
-Перем ЛокальноеУправлениеПлагинами;
Перем Лог;
@@ -32,7 +30,7 @@
ПроверитьВозможностьСинхронизации();
- НастроитьМенеджерСинхронизации();
+ МенеджерСинхронизации = ПолучитьМенеджерСинхронизации();
Если МенеджерСинхронизации.ТребуетсяСинхронизироватьХранилищеСГит(ПутьКРабочемуКаталогу, ПутьКХранилищу) Тогда
@@ -44,7 +42,7 @@
Лог.Информация("Путь к рабочей копии: <%1>", ПутьКРабочемуКаталогу);
Иначе
- Лог.Предупреждение("--> Синхронизация не требуется <--");
+ Лог.Информация("--> Синхронизация не требуется <--");
КонецЕсли;
Лог.Информация("=================================");
@@ -54,23 +52,25 @@
// TODO: Написать проверку какую? )
КонецПроцедуры
-Процедура НастроитьМенеджерСинхронизации()
+Функция ПолучитьМенеджерСинхронизации()
- Если МенеджерСинхронизации = Неопределено Тогда
- МенеджерСинхронизации = Новый МенеджерСинхронизации();
- КонецЕсли;
-
+ МенеджерСинхронизации = Новый МенеджерСинхронизации();
МенеджерСинхронизации.ВерсияПлатформы(ВерсияПлатформы)
.ДоменПочтыПоУмолчанию(ДоменПочтыПоУмолчанию)
.ИсполняемыйФайлГит(ПутьИсполняемомуФайлуГит)
.ПодпискиНаСобытия(ИндексПодписчиков)
.ПараметрыПодписокНаСобытия(ПараметрыПодписчиков)
- .УровеньЛога(УровеньЛогаСинхронизации)
.ЦикловОжиданияЛицензии(КоличествоЦикловОжиданияЛицензии)
.РежимУдаленияВременныхФайлов(Истина)
.АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища);
-КонецПроцедуры
+ Если ЗначениеЗаполнено(ИмяРасширения) Тогда
+ МенеджерСинхронизации.ИмяРасширения(ИмяРасширения);
+ КонецЕсли;
+
+ Возврат МенеджерСинхронизации;
+
+КонецФункции
// Устанавливает путь к каталогу плагинов
//
@@ -85,40 +85,13 @@
Возврат ЭтотОбъект;
КонецФункции
-// Устанавливает уровень вывода логов
-//
-// Параметры:
-// НовыйУровеньЛога - Строка - уровень вывода лога
-//
-// Возвращаемое значение:
-// Объект.МенеджерСинхронизации - ссылка на текущий объект класса <МенеджерСинхронизации>
-//
-Функция УровеньЛога(Знач НовыйУровеньЛога) Экспорт
-
- УровеньЛогаСинхронизации = НовыйУровеньЛога;
- Возврат ЭтотОбъект;
-
-КонецФункции
-
-// Устанавливает путь к файлу включенных плагинов
-//
-// Параметры:
-// НовыйПутьКФайлуВключенныхПлагинов - Строка - путь к файлу включенных плагинов
-//
-// Возвращаемое значение:
-// Объект.МенеджерСинхронизации - ссылка на текущий объект класса <МенеджерСинхронизации>
-//
-Функция ФайлВключенныхПлагинов(Знач НовыйПутьКФайлуВключенныхПлагинов) Экспорт
- ПутьКФайлуВключенныхПлагинов = НовыйПутьКФайлуВключенныхПлагинов;
- Возврат ЭтотОбъект;
-КонецФункции
-
Процедура ПрочитатьПараметры(Знач ВходящиеПараметры) Экспорт
Наименование = ВходящиеПараметры.Наименование;
ПользовательХранилища = ВходящиеПараметры.ПользовательХранилища;
ПарольПользователяХранилища = ВходящиеПараметры.ПарольПользователяХранилища;
ВерсияПлатформы = ВходящиеПараметры.ВерсияПлатформы;
+ ИмяРасширения = ВходящиеПараметры.ИмяРасширения;
ПутьКХранилищу = ВходящиеПараметры.ПутьКХранилищу;
ПутьКРабочемуКаталогу = ВходящиеПараметры.ПутьКРабочемуКаталогу;
ПутьИсполняемомуФайлуГит = ВходящиеПараметры.ПутьИсполняемомуФайлуГит;
@@ -134,32 +107,20 @@
Процедура ПрочитатьПлагины(Знач НастройкаПлагинов)
- ИнициализироватьУправлениеПлагинами();
-
- ЛокальноеУправлениеПлагинами.ВключитьПлагины(НастройкаПлагинов.ВключенныеПлагины);
- ЛокальноеУправлениеПлагинами.ВключитьПлагины(НастройкаПлагинов.ДополнительныеПлагины);
- ЛокальноеУправлениеПлагинами.ОтключитьПлагины(НастройкаПлагинов.ОтключенныеПлагины);
-
- ИндексПодписчиков = ЛокальноеУправлениеПлагинами.ПолучитьИндексПлагинов();
+ МенеджерПлагинов = Новый МенеджерПлагинов;
+ МенеджерПлагинов.УстановитьКаталогПлагинов(КаталогПлагинов);
+ МенеджерПлагинов.ЗагрузитьПлагины();
-КонецПроцедуры
-
-Процедура ИнициализироватьУправлениеПлагинами()
-
- Если ЛокальноеУправлениеПлагинами = Неопределено Тогда
+ МенеджерПлагинов.ВключитьПлагины(НастройкаПлагинов.ВключенныеПлагины);
+ МенеджерПлагинов.ВключитьПлагины(НастройкаПлагинов.ДополнительныеПлагины);
+ МенеджерПлагинов.ОтключитьПлагины(НастройкаПлагинов.ОтключенныеПлагины);
- ЛокальноеУправлениеПлагинами = Новый УправлениеПлагинами;
- ЛокальноеУправлениеПлагинами.УстановитьКаталогПлагинов(КаталогПлагинов);
- ЛокальноеУправлениеПлагинами.УстановитьФайлВключенныхПлагинов(ПутьКФайлуВключенныхПлагинов);
- ЛокальноеУправлениеПлагинами.ЗагрузитьПлагины();
-
- КонецЕсли;
+ ИндексПодписчиков = МенеджерПлагинов.ПолучитьИндексПлагинов();
КонецПроцедуры
Процедура ПриСозданииОбъекта()
Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync.batch");
- УровеньЛогаСинхронизации = Лог.Уровень();
КонецПроцедуры
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\241\320\276\320\267\320\264\320\260\321\202\320\265\320\273\321\214\320\235\320\260\320\261\320\276\321\200\320\260\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262\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\241\320\276\320\267\320\264\320\260\321\202\320\265\320\273\321\214\320\235\320\260\320\261\320\276\321\200\320\260\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262\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"
new file mode 100644
index 00000000..c240d7cb
--- /dev/null
+++ "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\241\320\276\320\267\320\264\320\260\321\202\320\265\320\273\321\214\320\235\320\260\320\261\320\276\321\200\320\260\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262\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"
@@ -0,0 +1,38 @@
+#Использовать logos
+
+Перем НаборИменКлассовПлагинов;
+Перем ДоступныйИнтерфейсПлагинов;
+Перем Лог;
+
+Функция Создать() Экспорт
+
+ НаборПлагинов = Новый Соответствие();
+
+ Для каждого ИмяКлассаПлагина Из НаборИменКлассовПлагинов Цикл
+
+ Лог.Отладка("Добавляю плагин <%1> в индекс плагинов", ИмяКлассаПлагина);
+
+ Попытка
+ НовыйПлагин = Новый ПлагинСинхронизации(ИмяКлассаПлагина, ДоступныйИнтерфейсПлагинов);
+ Исключение
+ Лог.Отладка("Ошибка добавления плагина в индекс плагинов. По причине: <%1>", ОписаниеОшибки());
+ Продолжить;
+ КонецПопытки;
+
+ НаборПлагинов.Вставить(НовыйПлагин.Имя(), НовыйПлагин);
+
+ КонецЦикла;
+
+ Возврат НаборПлагинов;
+
+КонецФункции
+
+Процедура ДобавитьПлагин(Знач ИмяКласса) Экспорт
+
+ НаборИменКлассовПлагинов.Добавить(ИмяКласса);
+
+КонецПроцедуры
+
+НаборИменКлассовПлагинов = Новый Массив();
+ДоступныйИнтерфейсПлагинов = Новый ИнтерфейсПлагинов().Интерфейс();
+Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync.plugins.loader");
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\243\321\201\321\202\320\260\320\275\320\276\320\262\321\211\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.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\243\321\201\321\202\320\260\320\275\320\276\320\262\321\211\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os"
index d33c975b..aeeb2a1c 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\243\321\201\321\202\320\260\320\275\320\276\320\262\321\211\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.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\243\321\201\321\202\320\260\320\275\320\276\320\262\321\211\320\270\320\272\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os"
@@ -80,6 +80,18 @@
КонецФункции
+Процедура ПриСозданииОбъекта()
+
+ ДополнительныйКаталогБиблиотек = ПолучитьЗначениеСистемнойНастройки("lib.additional");
+
+ Если ЗначениеЗаполнено(ДополнительныйКаталогБиблиотек) Тогда
+ КаталогЗависимостей = ДополнительныйКаталогБиблиотек;
+ Иначе
+ КаталогЗависимостей = ПолучитьЗначениеСистемнойНастройки("lib.system");
+ КонецЕсли;
+
+КонецПроцедуры
+
#КонецОбласти
Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync.plugins.installer");
\ No newline at end of file
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\237\320\273\320\260\320\263\320\270\320\275\320\260\320\274\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\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os"
similarity index 52%
rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\237\320\273\320\260\320\263\320\270\320\275\320\260\320\274\320\270.os"
rename to "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\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os"
index fb19f719..f916e104 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\237\320\273\320\260\320\263\320\270\320\275\320\260\320\274\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\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os"
@@ -5,8 +5,6 @@
Перем ИндексПлагинов;
Перем КаталогПлагинов;
-Перем ПутьКФайлуВключенныхПлагинов;
-Перем КаталогЗависимостей;
#Область Экспортные_методы
@@ -29,9 +27,6 @@
ТекущийЗагрузчикПлагинов.ЗагрузитьПлагины();
ИндексПлагинов = ТекущийЗагрузчикПлагинов.ИндексПлагинов();
- ВключенныеПлагины = ПрочитатьВключенныеПлагины();
- ВключитьПлагины(ВключенныеПлагины);
-
КонецПроцедуры
// Создает и возвращает новый МенеджерПодписок для текущего индекса плагинов
@@ -102,6 +97,28 @@
КонецПроцедуры
+Процедура ВключитьВсеПлагины() Экспорт
+
+ Для каждого КлючЗначение Из ИндексПлагинов Цикл
+
+ Плагин = КлючЗначение.Значение;
+ Плагин.Включить();
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ОтключитьВсеПлагины() Экспорт
+
+ Для каждого КлючЗначение Из ИндексПлагинов Цикл
+
+ Плагин = КлючЗначение.Значение;
+ Плагин.Отключить();
+
+ КонецЦикла;
+
+КонецПроцедуры
+
// Устанавливает каталог установки и чтения плагинов
//
// Параметры:
@@ -111,15 +128,6 @@
КаталогПлагинов = ПутьККаталогу;
КонецПроцедуры
-// Устанавливает каталог для установки зависимостей пакета плагинов
-//
-// Параметры:
-// НовыйКаталогЗависимостей - Строка - полный путь к каталогу установки зависимостей пакета плагина
-//
-Процедура УстановитьКаталогЗависимостей(Знач НовыйКаталогЗависимостей) Экспорт
- КаталогЗависимостей = НовыйКаталогЗависимостей;
-КонецПроцедуры
-
// Производит установку пакета плагинов из файла
//
// Параметры:
@@ -129,8 +137,6 @@
Установщик = Новый УстановщикПлагинов();
Установщик.УстановитьКаталогПлагинов(КаталогПлагинов);
- Установщик.УстановитьКаталогЗависимостей(КаталогЗависимостей);
-
Установщик.УстановитьФайлПлагина(ПутьКФайлуПакета);
КонецПроцедуры
@@ -144,8 +150,6 @@
Установщик = Новый УстановщикПлагинов();
Установщик.УстановитьКаталогПлагинов(КаталогПлагинов);
- Установщик.УстановитьКаталогЗависимостей(КаталогЗависимостей);
-
Установщик.УстановитьПлагинПоИмени(ИмяПлагина);
КонецПроцедуры
@@ -163,123 +167,10 @@
КонецПроцедуры
-// Устанавливает путь к файлу информации о плагинах
-//
-// Параметры:
-// ПутьКФайлу - Строка - полный путь к файлы информации плагинах
-//
-Процедура УстановитьФайлВключенныхПлагинов(Знач ПутьКФайлу) Экспорт
- ПутьКФайлуВключенныхПлагинов = ПутьКФайлу;
-КонецПроцедуры
-
-// Выполняет чтение включенных плагинов из файла
-//
-// Возвращаемое значение:
-// Соответствие - набор данных о плагина
-// * ключ - строка - имя плагина
-// * значение - булево - признак включенности плагина
-//
-Функция ПрочитатьВключенныеПлагины() Экспорт
-
- ВключенныеПлагины = Новый Соответствие;
-
- ПутьКФайлу = ПолучитьПутьКФайлуВключенныхПлагинов();
- ФайлАктивныхПлагинов= Новый Файл(ПутьКФайлу);
-
- Если Не ФайлАктивныхПлагинов.Существует() Тогда
- Возврат ВключенныеПлагины;
- КонецЕсли;
-
- JsonСтрока = ПрочитатьФайл(ПутьКФайлу);
-
- Если ПустаяСтрока(JsonСтрока) Тогда
- Возврат ВключенныеПлагины;
- КонецЕсли;
-
- ПарсерJSON = Новый ПарсерJSON();
- ДанныеФайла = ПарсерJSON.ПрочитатьJSON(JsonСтрока);
-
- Для каждого ДанныеПлагинаИзФайла Из ДанныеФайла Цикл
-
- Если Булево(ДанныеПлагинаИзФайла.Значение) Тогда
- ВключенныеПлагины.Вставить(ДанныеПлагинаИзФайла.Ключ, ДанныеПлагинаИзФайла.Значение);
- КонецЕсли;
-
- КонецЦикла;
-
- Возврат ВключенныеПлагины;
-
-КонецФункции
-
-// Возвращает имя файла информации о плагинах
-//
-// Возвращаемое значение:
-// Строка - имя файла
-//
-Функция ИмяФайлаВключенныхПлагинов() Экспорт
-
- Возврат "gitsync-plugins.json";
-
-КонецФункции
-
-// Процедура записывает активированные плагины в файл
-//
-Процедура ЗаписатьВключенныеПлагины() Экспорт
-
- ИмяФайла = ПолучитьПутьКФайлуВключенныхПлагинов();
-
- КаталогФайла = Новый Файл(ИмяФайла).Путь;
- ФС.ОбеспечитьКаталог(КаталогФайла);
-
- ПарсерJSON = Новый ПарсерJSON();
- ДанныеДляЗаписи = Новый Соответствие;
-
- Для каждого КлючЗначение Из ИндексПлагинов Цикл
-
- Плагин = КлючЗначение.Значение;
- ДанныеДляЗаписи.Вставить(Плагин.Имя(), Плагин.Включен());
-
- КонецЦикла;
-
- ТекстФайла = ПарсерJSON.ЗаписатьJson(ДанныеДляЗаписи);
-
- ЗаписатьФайл(ИмяФайла, ТекстФайла);
-
-КонецПроцедуры
-
#КонецОбласти
#Область Вспомогательные_процедуры_и_функции
-Функция ПолучитьПутьКФайлуВключенныхПлагинов()
-
- ФайлАктивныхПлагинов= Новый Файл(ПутьКФайлуВключенныхПлагинов);
-
- Если Не ФайлАктивныхПлагинов.Существует() Тогда
- Возврат ОбъединитьПути(КаталогПлагинов, ИмяФайлаВключенныхПлагинов());
- КонецЕсли;
-
- Возврат ФайлАктивныхПлагинов.ПолноеИмя;
-
-КонецФункции
-
-Функция ПрочитатьФайл(Знач ИмяФайла)
-
- Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8);
- Рез = Чтение.Прочитать();
- Чтение.Закрыть();
-
- Возврат Рез;
-
-КонецФункции
-
-Процедура ЗаписатьФайл(Знач ИмяФайла, ТекстФайла)
-
- Запись = Новый ЗаписьТекста(ИмяФайла);
- Запись.ЗаписатьСтроку(ТекстФайла);
- Запись.Закрыть();
-
-КонецПроцедуры
Процедура ПриСозданииОбъекта(Знач ЗначениеКаталогПлагинов = Неопределено)
@@ -289,14 +180,6 @@
КаталогПлагинов = ЗначениеКаталогПлагинов;
КонецЕсли;
- ДополнительныйКаталогБиблиотек = ПолучитьЗначениеСистемнойНастройки("lib.additional");
-
- Если ЗначениеЗаполнено(ДополнительныйКаталогБиблиотек) Тогда
- КаталогЗависимостей = ДополнительныйКаталогБиблиотек;
- Иначе
- КаталогЗависимостей = ПолучитьЗначениеСистемнойНастройки("lib.system");
- КонецЕсли;
-
КонецПроцедуры
#КонецОбласти
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 81b251a3..8b2ea4b8 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"
@@ -7,6 +7,7 @@
#Использовать gitrunner
#Использовать fs
#Использовать "./internal"
+#Использовать "./internal/bindata"
Перем Лог; // Объект, для логирования
Перем ЭтоWindows; // Булево, призная операционной системы WINDOWS
@@ -17,7 +18,7 @@
Перем ГитРепозиторийСохр; // Объект.ГитРепозиторий
// Определяем мин количество коммитов между разницей версии уже в git и в хранилище
// для случаев, когда пересоздали хранилище и в гите находится версия 1234, а в хранилище 4,
-// тогда вызываем исключение если разница в коммитах больше чем на эту велечину.
+// тогда вызываем исключение если разница в коммитах больше чем на эту величину.
Перем МинимальнаяРазницаМеждуКоммитамиНовогоХранилища;
Перем ОбработчикПодписок; // Объект.МенеджерПодписок
@@ -26,6 +27,7 @@
Перем РабочийКонфигуратор; // Объект.УправлениеКонфигуратором
Перем ПутьКИсполняемомуФайлуGit; // Строка, полный путь к исполняемому файлу git
Перем ИмяРасширения; // Строка, Имя расширения для синхронизации
+Перем КонтекстВыполнения; // Структура, Ключи СтрокаСоединения, Пользователь, Пароль
///////////////////////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
@@ -92,34 +94,27 @@
// ИмяРасширения - Строка - имя расширения для выгрузки
//
Функция ПолучитьИмяРасширения() Экспорт
- Возврат ИмяРасширения
-КонецФункции
-
-// Устанавливает работу с хранилищем расширения
-//
-// Параметры:
-// ПарамЭтоРасширение - Булево - признак работы с расширением.
-//
-// Возвращаемое значение:
-// Объект.МенеджерСинхронизации - ссылка на текущий объект класса <МенеджерСинхронизации>
-//
-Функция РежимРаботыСХранилищемРасширения(Знач ПарамЭтоРасширение) Экспорт
- ЭтоРасширение = ПарамЭтоРасширение;
- Возврат ЭтотОбъект;
+ Возврат ИмяРасширения
КонецФункции
// Устанавливает набор подписчиков
//
// Параметры:
-// НовыйИндексПодписчиков - Соответствие - набор подписчиков
+// ПИндексПодписчиков - Соответствие - набор подписчиков
// * ключ - Строка - имя подписчика
// * значение - Объект - ссылка на произвольный объект
+// ППараметрыПодписок - Соответствие - набор параметров для подписчиков
// Возвращаемое значение:
// Объект.МенеджерСинхронизации - ссылка на текущий объект класса <МенеджерСинхронизации>
//
-Функция ПодпискиНаСобытия(Знач НовыйИндексПодписчиков) Экспорт
+Функция ПодпискиНаСобытия(Знач ПИндексПодписчиков, Знач ППараметрыПодписок = Неопределено) Экспорт
- УстановитьОбработчикПодписок(НовыйИндексПодписчиков);
+ УстановитьОбработчикПодписок(ПИндексПодписчиков);
+
+ Если Не ППараметрыПодписок = Неопределено Тогда
+ ПараметрыПодписокНаСобытия(ППараметрыПодписок);
+ КонецЕсли;
+
Возврат ЭтотОбъект;
КонецФункции
@@ -231,6 +226,27 @@
КонецФункции
+// Устанавливает контекст выполнения синхронизации
+//
+// Параметры:
+// СтрокаСоединения - Строка - строка соединения с информационной базой
+// Пользователь - Строка - пользователь информационной базы
+// Пароль - Строка - пароль информационной базы
+//
+// Возвращаемое значение:
+// Объект.МенеджерСинхронизации - ссылка на текущий объект класса <МенеджерСинхронизации>
+//
+Функция УстановитьКонтекст(Знач СтрокаСоединения, Знач Пользователь, Знач Пароль) Экспорт
+
+ КонтекстВыполнения.СтрокаСоединения = СтрокаСоединения;
+ КонтекстВыполнения.Пользователь = Пользователь;
+ КонтекстВыполнения.Пароль = Пароль;
+
+ ПоказатьКонтекстВРежимеОтладки();
+
+ Возврат ЭтотОбъект;
+КонецФункции
+
// Основная функция синхронизации.
// Перемещает в git набор коммитов хранилища 1С
//
@@ -248,12 +264,12 @@
ХранилищеКонфигурации = ПолучитьХранилищеКонфигурации(ПутьКХранилищу);
- ТаблицаИсторииХранилища = ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ПутьКХранилищу);
-
- ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(ТаблицаИсторииХранилища, КаталогРабочейКопии);
-
ТекущаяВерсия = НомерСинхронизированнойВерсии(КаталогРабочейКопии);
+ ТаблицаИсторииХранилища = ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ПутьКХранилищу, ТекущаяВерсия);
+
+ ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(ТаблицаИсторииХранилища, КаталогРабочейКопии);
+
Лог.Информация("Номер синхронизированной версии: " + ТекущаяВерсия);
СледующаяВерсия = ТекущаяВерсия + 1;
@@ -356,7 +372,7 @@
КаталогВыгрузки = ВременныеФайлы.СоздатьКаталог();
- Лог.Отладка("Каталог выгрузки <%1> для версии <%2>", КаталогВыгрузки , НомерВерсии);
+ Лог.Отладка("Каталог выгрузки <%1> для версии <%2>", КаталогВыгрузки, НомерВерсии);
ОбработчикПодписок.ПередВыгрузкойКонфигурациюВИсходники(Конфигуратор,
КаталогРабочейКопии,
@@ -451,13 +467,13 @@
Исключение
// проверим текст ошибки, если текст содержит информацию о необходимости конвертировать
// тогда выполним конвертацию и повторно попытаемся загрузить файл
- ТекстОшибки = ВРег(ХранилищеКонфигурации.ПолучитьВыводКоманды());
- Если Найти(ТекстОшибки, Врег("Не обнаружено свободной лицензии!"))
- ИЛИ Найти(ТекстОшибки, Врег("Не найдена лицензия.")) Тогда
+ ТекстОшибки = ХранилищеКонфигурации.ПолучитьВыводКоманды();
+ Если Найти(ВРег(ТекстОшибки), Врег("Не обнаружено свободной лицензии!"))
+ ИЛИ Найти(ВРег(ТекстОшибки), Врег("Не найдена лицензия.")) Тогда
ПериодОжидания = 10000;
Лог.Ошибка(ТекстОшибки);
- Лог.Информация("Повторное подключение через 10сек. Осталось попыток: <%1>", КоличествоЦикловОжиданияЛицензии);
+ Лог.Информация("Повторное подключение через 10 сек. Осталось попыток: <%1>", КоличествоЦикловОжиданияЛицензии);
Приостановить(ПериодОжидания);
Иначе
@@ -494,13 +510,14 @@
Если СтандартнаяОбработка Тогда
- Параметры = Конфигуратор.ПолучитьПараметрыЗапуска();
- Параметры.Добавить(СтрШаблон("/DumpConfigToFiles %1", КаталогВыгрузки));
- Если ИмяРасширения <> "" Тогда
- Параметры.Добавить(СтрШаблон("-Extension %1", ИмяРасширения));
- КонецЕсли;
Попытка
- Конфигуратор.ВыполнитьКоманду(Параметры);
+
+ Если НЕ ПустаяСтрока(ИмяРасширения) Тогда
+ Конфигуратор.ВыгрузитьРасширениеВФайлы(КаталогВыгрузки, ИмяРасширения);
+ Иначе
+ Конфигуратор.ВыгрузитьКонфигурациюВФайлы(КаталогВыгрузки);
+ КонецЕсли;
+
Исключение
ОписаниеОшибки = ОписаниеОшибки();
Если Не ЭтоПропускаемаяОшибка(ОписаниеОшибки) Тогда
@@ -510,34 +527,12 @@
КонецЕсли;
КонецПопытки;
- КонецЕсли;
+ КонецЕсли;
ОбработчикПодписок.ПослеВыгрузкиКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки);
КонецПроцедуры
-Функция МассивИсключаемыхОшибок()
-
- Массив = Новый Массив;
- Массив.Добавить("Конфигурация содержит объекты метаданных, длина имен которых превышает 80 символов!");
-
- Возврат Массив;
-КонецФункции
-
-Функция ЭтоПропускаемаяОшибка(Знач ОписаниеОшибки)
-
- МассивИсключаемыхОшибок = МассивИсключаемыхОшибок();
-
- Для Каждого ИсключаемаяОшибка Из МассивИсключаемыхОшибок Цикл
-
- Если СтрНайти(ОписаниеОшибки, ИсключаемаяОшибка) > 0 Тогда
- Возврат Истина;
- КонецЕсли;
-
- КонецЦикла;
- Возврат Ложь;
-КонецФункции
-
#КонецОбласти
#Область Функциональность_очистки_каталога_рабочей_копии
@@ -557,8 +552,8 @@
СоответствиеИменФайловДляПропуска.Вставить(ИмяФайлаВерсииХранилища(), Истина); // Номер версии, может использоватся для синхронизации с хранилищем.
ОбработчикПодписок.ПриОчисткеКаталогаРабочейКопии(КаталогРабочейКопии,
- СоответствиеИменФайловДляПропуска,
- СтандартнаяОбработка);
+ СоответствиеИменФайловДляПропуска,
+ СтандартнаяОбработка);
Если СтандартнаяОбработка Тогда
@@ -630,7 +625,7 @@
Если СтандартнаяОбработка Тогда
ПереместитьВКаталогРабочейКопииСтандартнаяОбработка(КаталогРабочейКопии,
- КаталогВыгрузки);
+ КаталогВыгрузки);
КонецЕсли;
@@ -646,7 +641,7 @@
// КаталогВыгрузки - Строка - полный путь к каталогу выгрузки
//
Процедура ПереместитьВКаталогРабочейКопииСтандартнаяОбработка(Знач КаталогРабочейКопии,
- Знач КаталогВыгрузки)
+ Знач КаталогВыгрузки)
СписокФайлов = НайтиФайлы(КаталогВыгрузки, ПолучитьМаскуВсеФайлы(), Истина);
Лог.Отладка("Найдено файлов выгрузки: %1 шт.", СписокФайлов.Количество());
@@ -718,6 +713,13 @@
КаталогСборки = ВременныеФайлы.СоздатьКаталог();
УправлениеКонфигуратором.КаталогСборки(КаталогСборки);
+ Если ЗначениеЗаполнено(КонтекстВыполнения.СтрокаСоединения) Тогда
+
+ Лог.Отладка("Для синхронизации используется база <%1>", КонтекстВыполнения.СтрокаСоединения);
+ УправлениеКонфигуратором.УстановитьКонтекст(КонтекстВыполнения.СтрокаСоединения, КонтекстВыполнения.Пользователь, КонтекстВыполнения.Пароль);
+
+ КонецЕсли;
+
Если ЗначениеЗаполнено(ТекущийПутьКПлатформе) Тогда
Если Не ФС.ФайлСуществует(ТекущийПутьКПлатформе) Тогда
@@ -730,7 +732,7 @@
Лог.Информация("Используется путь к платформе 1С <%1>", ТекущийПутьКПлатформе);
Иначе
УправлениеКонфигуратором.ИспользоватьВерсиюПлатформы(ТекущаяВерсияПлатформы);
- Лог.Отладка("Используется платформа 1С версии <%1>", ТекущийПутьКПлатформе);
+ Лог.Отладка("Используется платформа 1С версии <%1>", ТекущаяВерсияПлатформы);
КонецЕсли;
Возврат УправлениеКонфигуратором;
@@ -836,6 +838,7 @@
//
// Параметры:
// ПутьКХранилищу - Строка - путь к хранилищу 1С
+// НачальнаяВерсия - Число - номер начальной версии хранилища
//
// Возвращаемое значение:
// ТаблицаВерсий - ТаблицаЗначений - инициализированная таблица с колонками:
@@ -847,13 +850,17 @@
// * ГУИД_Автора - Строка - уникальный идентификатор автора версии
// * ПредставлениеАвтора - Строка - представление автора для коммита в git
//
-Функция ПрочитатьТаблицуИсторииХранилища(Знач ПутьКХранилищу) Экспорт
+Функция ПрочитатьТаблицуИсторииХранилища(Знач ПутьКХранилищу, Знач НачальнаяВерсия = 1) Экспорт
СтандартнаяОбработка = Истина;
+ Если НачальнаяВерсия = Неопределено Тогда
+ НачальнаяВерсия = 1;
+ КонецЕсли;
+
ТаблицаВерсий = НоваяТаблицаИсторииВерсий();
- ОбработчикПодписок.ПриПолученииТаблицыВерсий(ТаблицаВерсий, ПутьКХранилищу, СтандартнаяОбработка);
+ ОбработчикПодписок.ПриПолученииТаблицыВерсий(ТаблицаВерсий, ПутьКХранилищу, НачальнаяВерсия, СтандартнаяОбработка);
Если СтандартнаяОбработка Тогда
@@ -861,6 +868,12 @@
Если ХранилищеКонфигурации = Неопределено Тогда
ХранилищеКонфигурации = ПолучитьХранилищеКонфигурации(ПутьКХранилищу);
КонецЕсли;
+
+ Если Не ХранилищеКонфигурации.ЧтениеХранилищаВыполнено() Тогда
+
+ ХранилищеКонфигурации.ПрочитатьХранилище(НачальнаяВерсия);
+
+ КонецЕсли;
ТаблицаВерсийХранилища = ХранилищеКонфигурации.ПолучитьТаблицуВерсий();
@@ -903,6 +916,7 @@
//
// Параметры:
// ПутьКХранилищу - Строка - путь к хранилищу 1С
+// НачальнаяВерсия - Число - номер начальной версии хранилища
//
// Возвращаемое значение:
// ТаблицаЗначений - таблица пользователей с колонками
@@ -910,12 +924,16 @@
// * ПредставлениеАвтора - Строка - представление автора для коммита в git
// * ГУИД_Автора - Строка - уникальный идентификатор автора версии
//
-Функция ПрочитатьТаблицуПользователейХранилища(Знач ПутьКХранилищу) Экспорт
+Функция ПрочитатьТаблицуПользователейХранилища(Знач ПутьКХранилищу, Знач НачальнаяВерсия = 1) Экспорт
СтандартнаяОбработка = Истина;
ТаблицаПользователей = НоваяТаблицаПользователейХранилища();
+ Если НачальнаяВерсия = Неопределено Тогда
+ НачальнаяВерсия = 1;
+ КонецЕсли;
+
ОбработчикПодписок.ПриПолученииТаблицыПользователей(ТаблицаПользователей, ПутьКХранилищу, СтандартнаяОбработка);
Если СтандартнаяОбработка Тогда
@@ -923,7 +941,13 @@
Если ХранилищеКонфигурации = Неопределено Тогда
ХранилищеКонфигурации = ПолучитьХранилищеКонфигурации(ПутьКХранилищу);
КонецЕсли;
+
+ Если Не ХранилищеКонфигурации.ЧтениеХранилищаВыполнено() Тогда
+
+ ХранилищеКонфигурации.ПрочитатьХранилище(НачальнаяВерсия);
+ КонецЕсли;
+
МассивАвторовХранилища = ХранилищеКонфигурации.ПолучитьАвторов();
Для Каждого Автор Из МассивАвторовХранилища Цикл
@@ -946,6 +970,7 @@
//
// Параметры:
// ПутьКХранилищу - Строка - путь к хранилищу 1С
+// ТекущаяВерсия - Число - номер версии откуда начинать чтение
//
// Возвращаемое значение:
// ТаблицаВерсий - ТаблицаЗначений - инициализированная таблица с колонками:
@@ -957,10 +982,10 @@
// * ГУИД_Автора - Строка - уникальный идентификатор автора версии
// * ПредставлениеАвтора - Строка - представление автора для коммита в git
//
-Функция ПрочитатьИзХранилищаИсториюКоммитовСАвторами(Знач ПутьКХранилищу) Экспорт
+Функция ПрочитатьИзХранилищаИсториюКоммитовСАвторами(Знач ПутьКХранилищу, Знач НачальнаяВерсия = 1) Экспорт
- ТаблицаВерсий = ПрочитатьТаблицуИсторииХранилища(ПутьКХранилищу);
- ТаблицаПользователей = ПрочитатьТаблицуПользователейХранилища(ПутьКХранилищу);
+ ТаблицаВерсий = ПрочитатьТаблицуИсторииХранилища(ПутьКХранилищу, НачальнаяВерсия);
+ ТаблицаПользователей = ПрочитатьТаблицуПользователейХранилища(ПутьКХранилищу, НачальнаяВерсия);
ДополнитьТаблицуВерсийИменамиАвторов(ТаблицаВерсий, ТаблицаПользователей);
ТаблицаВерсий.Сортировать("НомерВерсии");
@@ -976,17 +1001,19 @@
// КаталогРабочейКопии - Строка - путь к каталогу рабочей копии git
//
Процедура ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(Знач ТаблицаХранилища,
- Знач КаталогРабочейКопии) Экспорт
+ Знач КаталогРабочейКопии) Экспорт
ПутьКФайлуСопоставления = ОбъединитьПути(КаталогРабочейКопии, ИмяФайлаАвторов());
- ТаблицаСопоставления = ПрочитатьФайлАвторовГитВТаблицуПользователей(ПутьКФайлуСопоставления);
+
+ ТаблицаСопоставления = ПолучитьТаблицуАвторов(ПутьКФайлуСопоставления);
+
Для Каждого СтрокаТаблицы Из ТаблицаХранилища Цикл
СтрокаПользователя = ТаблицаСопоставления.Найти(СтрокаТаблицы.Автор, "Автор");
Если СтрокаПользователя = Неопределено Тогда
ПредставлениеАвтора = СтрШаблон("%1 <%1@%2>", СтрокаТаблицы.Автор, Строка(ДоменПочтыДляGit()));
Иначе
- ПредставлениеАвтора = строкаПользователя.ПредставлениеАвтора;
+ ПредставлениеАвтора = СтрокаПользователя.ПредставлениеАвтора;
КонецЕсли;
СтрокаТаблицы.ПредставлениеАвтора = ПредставлениеАвтора;
@@ -1026,7 +1053,7 @@
КонецПроцедуры
-// Читает файл авторов и возвращает таблицу пользователей
+// Получает таблицу авторов из файла
//
// Параметры:
// ПутьКФайлуАвторов - Строка - путь к файлу авторов
@@ -1035,52 +1062,68 @@
// ТаблицаЗначений - таблица пользователей с колонками
// * Автор - Строка - имя автора версии в хранилище
// * ПредставлениеАвтора - Строка - представление автора для коммита в git
-// * ГУИД_Автора - Строка - уникальный идентификатор автора версии
//
-Функция ПрочитатьФайлАвторовГитВТаблицуПользователей(Знач ПутьКФайлуАвторов) Экспорт
+Функция ПолучитьТаблицуАвторов(Знач ПутьКФайлуАвторов) Экспорт
- Если НЕ ЗначениеЗаполнено(ПутьКФайлуАвторов) Тогда
- Возврат Неопределено;
+ СтандартнаяОбработка = Истина;
+
+ ТаблицаАвторов = НоваяТаблицаАвторов();
+
+ ОбработчикПодписок.ПриПолученииТаблицыАвторов(ПутьКФайлуАвторов, ТаблицаАвторов, СтандартнаяОбработка);
+
+ Если СтандартнаяОбработка Тогда
+ ПрочитатьФайлАвторов(ПутьКФайлуАвторов, ТаблицаАвторов);
КонецЕсли;
+ ОбработчикПодписок.ПослеПолученияТаблицыАвторов(ПутьКФайлуАвторов, ТаблицаАвторов);
+
+ Возврат ТаблицаАвторов;
+
+КонецФункции
+
+Процедура ПрочитатьФайлАвторов(ПутьКФайлуАвторов, ТаблицаАвторов)
+
+ Если НЕ ЗначениеЗаполнено(ПутьКФайлуАвторов) Тогда
+ Возврат;
+ КонецЕсли;
+
Файл = Новый Файл(ПутьКФайлуАвторов);
Если Не Файл.Существует() Тогда
- Возврат НоваяТаблицаПользователейХранилища();
+ Возврат;
КонецЕсли;
+
+ ТекстовыйФайл = Новый ЧтениеТекста(ПутьКФайлуАвторов, "utf-8");
+ ТекстФайла = ТекстовыйФайл.Прочитать();
- Пользователи = НоваяТаблицаПользователейХранилища();
-
- Попытка
- ТекстовыйФайл = Новый ЧтениеТекста(ПутьКФайлуАвторов, "utf-8");
- СтрокаФайла = "";
- Пока СтрокаФайла <> Неопределено Цикл
- СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();
- Индекс = Найти(СтрокаФайла, "=");
- Если Индекс > 0 Тогда
-
- Ключ = Лев(СтрокаФайла, Индекс - 1);
- АвторПредставление = Сред(СтрокаФайла, Индекс + 1);
-
- НоваяСтрока = Пользователи.Добавить();
- НоваяСтрока.ПредставлениеАвтора = АвторПредставление;
- НоваяСтрока.Автор = Ключ;
- КонецЕсли;
- КонецЦикла;
-
- Исключение
- Если ТекстовыйФайл <> Неопределено Тогда
- ОсвободитьОбъект(ТекстовыйФайл);
+ МассивСтрокФайла = СтрРазделить(ТекстФайла, Символы.ПС, Ложь);
+
+ Для каждого СтрокаФайла Из МассивСтрокФайла Цикл
+
+ Если СтрНачинаетсяС(СокрЛП(СтрокаФайла), "//") Тогда
+ Продолжить;
КонецЕсли;
- ВызватьИсключение;
- КонецПопытки;
-
+
+ МассивКлючей = СтрРазделить(СтрокаФайла, "=", Ложь);
+
+ Если Не МассивКлючей.Количество() = 2 Тогда
+ Лог.Предупреждение("Ошибка чтения файла авторов строка <%1>", СтрокаФайла);
+ Продолжить;
+ КонецЕсли;
+
+ НоваяСтрока = ТаблицаАвторов.Добавить();
+ НоваяСтрока.Автор = СокрЛП(МассивКлючей[0]);
+ НоваяСтрока.ПредставлениеАвтора = СокрЛП(МассивКлючей[1]);
+
+ КонецЦикла;
+
+ ТекстовыйФайл.Закрыть();
+
Если ТекстовыйФайл <> Неопределено Тогда
ОсвободитьОбъект(ТекстовыйФайл);
КонецЕсли;
-
- Возврат Пользователи;
-
-КонецФункции
+
+КонецПроцедуры
+
// Наполняет каталог рабочей копии служебными данными
//
@@ -1206,13 +1249,34 @@
КонецПроцедуры
+Функция МассивИсключаемыхОшибок()
+
+ Массив = Новый Массив;
+ Массив.Добавить("Конфигурация содержит объекты метаданных, длина имен которых превышает 80 символов!");
+
+ Возврат Массив;
+КонецФункции
+
+Функция ЭтоПропускаемаяОшибка(Знач ОписаниеОшибки)
+
+ МассивИсключаемыхОшибок = МассивИсключаемыхОшибок();
+
+ Для Каждого ИсключаемаяОшибка Из МассивИсключаемыхОшибок Цикл
+
+ Если СтрНайти(ОписаниеОшибки, ИсключаемаяОшибка) > 0 Тогда
+ Возврат Истина;
+ КонецЕсли;
+
+ КонецЦикла;
+ Возврат Ложь;
+КонецФункции
+
Процедура СоздатьРасширениеВБазе(УправлениеКонфигуратором)
Параметры = УправлениеКонфигуратором.ПолучитьПараметрыЗапуска();
- ФайлИсточника = Новый Файл(ТекущийСценарий().Источник);
- ПутьКИнструменту = Новый Файл(ОбъединитьПути(ФайлИсточника.Путь, "../../../")).ПолноеИмя;
- ПутьКШаблонуРасширения = ОбъединитьПути(ПутьКИнструменту, "./templates/temp.cfe");
- Параметры.Добавить("/LoadCfg " + """" + ПутьКШаблонуРасширения + """");
+ ЗагрузчикЗапакованныхФайловGitsync = Новый ЗагрузчикЗапакованныхФайловGitsync;
+ ПутьКШаблонуРасширения = ЗагрузчикЗапакованныхФайловGitsync.ПолучитьПутьКФайлу("tempExtension.cfe");
+ Параметры.Добавить(СтрШаблон("/LoadCfg ""%1""", ПутьКШаблонуРасширения));
Параметры.Добавить(СтрШаблон("-Extension %1", ИмяРасширения));
УправлениеКонфигуратором.ВыполнитьКоманду(Параметры);
@@ -1235,7 +1299,6 @@
КонецЕсли;
Логирование.ПолучитьЛог("oscript.lib.v8storage").УстановитьУровень(Лог.Уровень());
- Сообщить("Пользователь " + АвторизацияВХранилище.ПользовательХранилища);
ПроверитьПараметрыДоступаКХранилищу();
МенеджерХранилищаКонфигурации.УстановитьПараметрыАвторизации(АвторизацияВХранилище.ПользовательХранилища, АвторизацияВХранилище.ПарольХранилища);
МенеджерХранилищаКонфигурации.УстановитьПутьКХранилищу(ПутьКХранилищу);
@@ -1255,6 +1318,16 @@
КонецФункции
+Функция НоваяТаблицаАвторов()
+
+ Таблица = Новый ТаблицаЗначений;
+ Таблица.Колонки.Добавить("Автор");
+ Таблица.Колонки.Добавить("ПредставлениеАвтора");
+
+ Возврат Таблица;
+
+КонецФункции
+
Функция ПодготовитьФайлКоммита(Знач Комментарий)
ИмяФайлаКомментария = ВременныеФайлы.СоздатьФайл("txt");
@@ -1437,7 +1510,6 @@
Процедура УстановитьОбработчикПодписок(НовыйИндексПодписчиков)
ОбработчикПодписок.УстановитьПодписчиков(НовыйИндексПодписчиков);
-
ОбработчикПодписок.ПриАктивизации(ЭтотОбъект);
КонецПроцедуры
@@ -1491,6 +1563,12 @@
КонецПроцедуры
+Процедура ПоказатьКонтекстВРежимеОтладки()
+ Лог.Отладка("СтрокаСоединения <%1>", КонтекстВыполнения.СтрокаСоединения);
+ Лог.Отладка("Пользователь <%1>", КонтекстВыполнения.Пользователь);
+ Лог.Отладка(?(ПустаяСтрока(КонтекстВыполнения.Пароль), "Пароль не задан", СтрШаблон("Задан пароль <%1>", КонтекстВыполнения.Пароль)));
+КонецПроцедуры
+
Функция ФорматДвузначноеЧисло(ЗначениеЧисло)
ЧислоСтрокой = Строка(ЗначениеЧисло);
Если СтрДлина(ЧислоСтрокой) < 2 Тогда
@@ -1520,6 +1598,8 @@
ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
ТекущаяВерсияПлатформы = "8.3";
+
+ КонтекстВыполнения = Новый Структура("СтрокаСоединения, Пользователь, Пароль", "", "", "");
КонецПроцедуры
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 af3ef44e..9befb0f0 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,19 +135,43 @@
КонецФункции
-// Устанавливает путь к файлу настроек пакетной синхронизации
+// Устанавливает путь к платформе 1С
//
// Параметры:
-// НовыйПутьКФайлуНастроек - Строка - путь к настроек пакетной синхронизации
+// НовыйПутьКПлатформе - Строка - путь к исполняемому файлу платформы 1С.Предприятие
//
// Возвращаемое значение:
// Объект.МенеджерСинхронизации - ссылка на текущий объект класса <МенеджерСинхронизации>
//
-Функция УстановитьНастройки(НовыйПутьКФайлуНастроек) Экспорт
- ПутьКФайлуНастроек = НовыйПутьКФайлуНастроек;
+Функция ПутьКПлатформе(Знач НовыйПутьКПлатформе) Экспорт
+
+ ТекущийПутьКПлатформе = НовыйПутьКПлатформе;
Возврат ЭтотОбъект;
+
КонецФункции
+// Читает настройки пакетной синхронизации из соответствия
+//
+// Параметры:
+// НастройкиСинхронизации - Соответствие - набор настроек для пакетной синхронизации
+//
+Процедура ПрочитатьНастройки(Знач НастройкиСинхронизации) Экспорт
+
+ Лог.Отладка("Количество настроек <%1>", НастройкиСинхронизации.Количество());
+
+ КонструкторПараметров = КонструкторПараметровПакетнойСинхронизации();
+ КонструкторПараметров.ИзСоответствия(НастройкиСинхронизации);
+
+ Параметры = КонструкторПараметров.ВСтруктуру();
+
+ НастройкиПоУмолчанию = Параметры.НастройкиПоУмолчанию;
+
+ ДополнитьНастройкиПоУмолчания();
+
+ РепозиторииСинхронизации = Параметры.Репозитории;
+
+КонецПроцедуры
+
// Устанавливает таймер повторения пакетной синхронизации
//
// Параметры:
@@ -173,23 +198,12 @@
Возврат ЭтотОбъект;
КонецФункции
-// Устанавливает путь к файлу включенных плагинов
-//
-// Параметры:
-// НовыйПутьКФайлуВключенныхПлагинов - Строка - путь к файлу включенных плагинов
-//
-// Возвращаемое значение:
-// Объект.МенеджерСинхронизации - ссылка на текущий объект класса <МенеджерСинхронизации>
-//
-Функция ФайлВключенныхПлагинов(Знач НовыйПутьКФайлуВключенныхПлагинов) Экспорт
- ПутьКФайлуВключенныхПлагинов = НовыйПутьКФайлуВключенныхПлагинов;
- Возврат ЭтотОбъект;
-КонецФункции
-
// Выполняет пакетную синхронизацию
//
-Процедура ВыполнитьСинхронизацию() Экспорт
+Процедура ВыполнитьСинхронизацию(Знач КоличествоПотоков = 1) Экспорт
+ ПодготовитьИндексРепозиториев();
+
Пока Истина Цикл
ПакетнаяСинхронизация();
@@ -209,87 +223,107 @@
КонецПроцедуры
-#КонецОбласти
+// Выполняет пакетную синхронизацию
+//
+Процедура ВыполнитьСинхронизациюПоНастройке(Знач ИмяНастройкиСинхронизации) Экспорт
+
+ ПодготовитьИндексРепозиториев();
-Процедура ПрочитатьФайлНастроек()
+ Пока Истина Цикл
- МенеджерПараметров = Новый МенеджерПараметров();
- МенеджерПараметров.УстановитьФайлПараметров(ПутьКФайлуНастроек);
- МенеджерПараметров.ИспользоватьПровайдерJSON();
- МенеджерПараметров.ИспользоватьПровайдерYAML();
- МенеджерПараметров.КонструкторПараметров(ЭтотОбъект);
- Лог.Отладка("Чтение файла настроек начато");
- МенеджерПараметров.Прочитать();
- Лог.Отладка("Чтение файла настроек завершено");
+ РепоСинхронизации = ИндексРепозиториев[ИмяНастройкиСинхронизации];
+
+ Если РепоСинхронизации = Неопределено Тогда
+ Лог.Информация("Не найдена или отключена настройка синхронизации <%1>", ИмяНастройкиСинхронизации);
+ Прервать;
+ КонецЕсли;
-КонецПроцедуры
+ Лог.Информация("Начата синхронизация с репозиторием <%1> ", ИмяНастройкиСинхронизации);
-#Область Интерфейс_конструктора_параметров
+ РепоСинхронизации.Синхронизировать();
-Функция Параметры() Экспорт
- Возврат Параметры;
-КонецФункции
+ Если ТаймерПовторения <= 0 Тогда
+
+ Прервать;
+
+ Иначе
+
+ Лог.Информация("Ожидаем <%1> секунд перед новым циклом", ТаймерПовторения);
+ Приостановить(ТаймерПовторения * 1000);
+
+ КонецЕсли;
+
+ КонецЦикла;
-Процедура УстановитьПараметры(Знач ВходящиеПараметры) Экспорт
- Параметры = ВходящиеПараметры;
КонецПроцедуры
-Процедура ОписаниеПараметров(Знач Конструктор) Экспорт
+#КонецОбласти
+
+#Область Интерфейс_конструктора_параметров
- ПараметрыПлагины = Конструктор.НовыеПараметры();
+Функция КонструкторОбщихПараметров()
+
+ ПараметрыПлагины = Новый КонструкторПараметров();
ПараметрыПлагины.ПолеМассив("ВключенныеПлагины 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")
- // Стандартные поля
- .ПолеСтрока("ПользовательХранилища 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", ПараметрыНастроекПлагинов)
+ .ПолеСтрока("ИмяРасширения extention")
;
- Конструктор.ПолеОбъект("НастройкиПоУмолчанию globals default", ГлобальныеПараметры)
+ Возврат КонструкторПараметров;
+
+КонецФункции
+
+Функция КонструкторПараметровПакетнойСинхронизации() Экспорт
+
+ КонструкторПараметров = Новый КонструкторПараметров();
+
+ ОбщиеПараметры = КонструкторОбщихПараметров();
+ ПараметрыРепозитория = КонструкторПараметровРепозитория();
+
+ КонструкторПараметров.ПолеОбъект("НастройкиПоУмолчанию globals default", ОбщиеПараметры)
.ПолеМассив("Репозитории repositories", ПараметрыРепозитория)
;
+
+ Возврат КонструкторПараметров;
-КонецПроцедуры
+КонецФункции
+
#КонецОбласти
Процедура ПакетнаяСинхронизация()
- ПрочитатьФайлНастроек();
-
- ПодготовитьИндексРепозиториев();
-
Лог.Информация("Начата пакетная синхронизация с <%1> репозиториями", ИндексРепозиториев.Количество());
Для каждого КлючЗначение Из ИндексРепозиториев Цикл
@@ -303,34 +337,21 @@
Процедура ПодготовитьИндексРепозиториев()
- Лог.Отладка("Готовлю индекс для <%1> репозиториев", Параметры.Репозитории.Количество());
- Для каждого ПараметрыРепозитория Из Параметры.Репозитории Цикл
+ ИндексРепозиториев = Новый Соответствие();
- РепоСинхронизации = ИндексРепозиториев[ПараметрыРепозитория.Наименование];
- ОтключенныйРепозиторий = ПараметрыРепозитория.Отключено;
+ Лог.Отладка("Готовлю индекс для <%1> репозиториев", РепозиторииСинхронизации.Количество());
+ Для каждого ПараметрыРепозитория Из РепозиторииСинхронизации Цикл
- Если ОтключенныйРепозиторий
- И НЕ РепоСинхронизации = Неопределено Тогда
- ИндексРепозиториев.Удалить(РепоСинхронизации);
- КонецЕсли;
- Если ОтключенныйРепозиторий Тогда
- Продолжить;
- КонецЕсли;
-
- Если РепоСинхронизации = Неопределено Тогда
-
- РепоСинхронизации = Новый РепозиторийСинхронизации();
- РепоСинхронизации.КаталогПлагинов(КаталогПлагинов)
- .ФайлВключенныхПлагинов(ПутьКФайлуВключенныхПлагинов)
- // .УровеньЛога(Лог.ПолучитьУровеньЛога())
- ;
-
- ИндексРепозиториев.Вставить(ПараметрыРепозитория.Наименование, РепоСинхронизации);
-
- КонецЕсли;
+ РепоСинхронизации = Новый РепозиторийСинхронизации();
+ РепоСинхронизации.КаталогПлагинов(КаталогПлагинов)
+ // .ФайлВключенныхПлагинов(ПутьКФайлуВключенныхПлагинов)
+ // .УровеньЛога(Лог.ПолучитьУровеньЛога())
+ ;
+
+ ИндексРепозиториев.Вставить(ПараметрыРепозитория.Наименование, РепоСинхронизации);
- ОбъединитьПараметрыРепозиторияИГлобальные(ПараметрыРепозитория);
+ ДополнитьПараметрыРепозитория(ПараметрыРепозитория);
РепоСинхронизации.ПрочитатьПараметры(ПараметрыРепозитория);
@@ -338,35 +359,69 @@
КонецПроцедуры
-Процедура ОбъединитьПараметрыРепозиторияИГлобальные(ПараметрыРепозитория)
+Процедура ДополнитьНастройкиПоУмолчания()
+
+ Если ЗначениеЗаполнено(АвторизацияВХранилище.ПользовательХранилища) Тогда
+ НастройкиПоУмолчанию.Вставить("ПользовательХранилища", АвторизацияВХранилище.ПользовательХранилища);
+ НастройкиПоУмолчанию.Вставить("ПарольПользователяХранилища", АвторизацияВХранилище.ПарольПользователяХранилища);
+ КонецЕсли;
- ГлобальныеПараметры = Параметры.НастройкиПоУмолчанию;
+ ЗаполнитьПриемникПриНеобходимости("ПутьИсполняемомуФайлуГит", ПутьКИсполняемомуФайлуGit, НастройкиПоУмолчанию);
+ ЗаполнитьПриемникПриНеобходимости("ПутьКВременномуКаталогу", ПутьКВременномуКаталогу, НастройкиПоУмолчанию);
+ ЗаполнитьПриемникПриНеобходимости("ВерсияПлатформы", ТекущаяВерсияПлатформы, НастройкиПоУмолчанию);
+ ЗаполнитьПриемникПриНеобходимости("ДоменПочтыПоУмолчанию", ДоменПочтыДляGitПоУмолчанию, НастройкиПоУмолчанию);
+ ЗаполнитьПриемникПриНеобходимости("КоличествоЦикловОжиданияЛицензии", КоличествоЦикловОжиданияЛицензииПоУмолчанию, НастройкиПоУмолчанию);
- Для каждого ГлобальныйПараметр Из ГлобальныеПараметры Цикл
-
- КлючПараметра = ГлобальныйПараметр.Ключ;
- ЗначениеПараметра = ГлобальныйПараметр.Значение;
+КонецПроцедуры
- Если Не ЗначениеЗаполнено(ЗначениеПараметра) Тогда
- Продолжить;
- КонецЕсли;
+Процедура ДополнитьПараметрыРепозитория(ПараметрыРепозитория)
- ЗначениеИзПараметровРепо = ПараметрыРепозитория[КлючПараметра];
+ ГлобальныеПараметры = НастройкиПоУмолчанию;
- Если КлючПараметра = "Плагины" Тогда
- ОбъединитьПлагины(ЗначениеПараметра, ЗначениеИзПараметровРепо);
- Продолжить;
- ИначеЕсли КлючПараметра = "НастройкиПлагинов" Тогда
- Лог.Отладка("Тип значения настройки плагинов <%1>", ТипЗнч(ЗначениеИзПараметровРепо));
- ОбъединитьНастройкиПлагинов(ЗначениеПараметра, ЗначениеИзПараметровРепо);
- Продолжить;
- КонецЕсли;
+ ЗаполнитьПриНеобходимости("ПользовательХранилища", ГлобальныеПараметры, ПараметрыРепозитория);
+ ЗаполнитьПриНеобходимости("ПарольПользователяХранилища", ГлобальныеПараметры, ПараметрыРепозитория);
+ ЗаполнитьПриНеобходимости("ПутьИсполняемомуФайлуГит", ГлобальныеПараметры, ПараметрыРепозитория);
+ ЗаполнитьПриНеобходимости("ПутьКВременномуКаталогу", ГлобальныеПараметры, ПараметрыРепозитория);
+ ЗаполнитьПриНеобходимости("ВерсияПлатформы", ГлобальныеПараметры, ПараметрыРепозитория);
+ ЗаполнитьПриНеобходимости("ДоменПочтыПоУмолчанию", ГлобальныеПараметры, ПараметрыРепозитория);
+ ЗаполнитьПриНеобходимости("КоличествоЦикловОжиданияЛицензии", ГлобальныеПараметры, ПараметрыРепозитория);
- Если Не ЗначениеЗаполнено(ЗначениеИзПараметровРепо) Тогда
- ПараметрыРепозитория.Вставить(КлючПараметра, ЗначениеПараметра);
- КонецЕсли;
+ ОбъединитьПлагины(ГлобальныеПараметры.Плагины, ПараметрыРепозитория.Плагины);
+ ОбъединитьНастройкиПлагинов(ГлобальныеПараметры.НастройкиПлагинов, ПараметрыРепозитория.НастройкиПлагинов);
- КонецЦикла;
+КонецПроцедуры
+
+Процедура ЗаполнитьПриемникПриНеобходимости(Ключ, Значение, Приемник)
+
+ Если Не ЗначениеЗаполнено(Значение) Тогда
+ Возврат;
+ КонецЕсли;
+
+ ЗначениеПриемник = Приемник[Ключ];
+
+ Если ЗначениеЗаполнено(ЗначениеПриемник) Тогда
+ Возврат;
+ КонецЕсли;
+
+ Приемник.Вставить(Ключ, Значение);
+
+КонецПроцедуры
+
+Процедура ЗаполнитьПриНеобходимости(КлючНастройки, Источник, Приемник)
+
+ ЗначениеИсточник = Источник[КлючНастройки];
+
+ Если Не ЗначениеЗаполнено(ЗначениеИсточник) Тогда
+ Возврат;
+ КонецЕсли;
+
+ ЗначениеПриемник = Приемник[КлючНастройки];
+
+ Если ЗначениеЗаполнено(ЗначениеПриемник) Тогда
+ Возврат;
+ КонецЕсли;
+
+ Приемник.Вставить(КлючНастройки, ЗначениеИсточник);
КонецПроцедуры
@@ -388,9 +443,13 @@
КонецЕсли;
ЗначениеНастройкиИзРепозитория = ПолучитьЗначениеПоКлючу(НастройкиПлагиновРепозитория, КлючНастройки);
+ Лог.Отладка("Ключа <%1> значение из репозитория <%2>", КлючНастройки, ЗначениеНастройкиИзРепозитория);
Если ЗначениеНастройкиИзРепозитория = Неопределено Тогда
+
+ Лог.Отладка("Устанавливаю ключ настройки <%1> в значение <%2>", КлючНастройки, ЗначениеНастройки);
НастройкиПлагиновРепозитория.Вставить(КлючНастройки, ЗначениеНастройки);
+
КонецЕсли;
КонецЦикла;
diff --git a/tasks/get-plugins.os b/tasks/get-plugins.os
index e75a354d..021670d0 100644
--- a/tasks/get-plugins.os
+++ b/tasks/get-plugins.os
@@ -46,6 +46,8 @@
ФС.ОбеспечитьКаталог(КаталогПроекта);
+ УдалитьФайлы(КаталогПроекта, "gitsync-plugins*.ospx");
+
ФайлПриемник = ОбъединитьПути(КаталогПроекта, МассивФайлов[0].Имя);
КопироватьФайл(ФайлПлагина, ФайлПриемник);
diff --git a/tasks/get-v8storage.os b/tasks/get-v8storage.os
deleted file mode 100644
index 7f17775c..00000000
--- a/tasks/get-v8storage.os
+++ /dev/null
@@ -1,92 +0,0 @@
-#Использовать gitrunner
-#Использовать tempfiles
-#Использовать fs
-
-Перем Лог;
-
-Процедура ПолучитьИсходники(Знач URLРепозитория, Знач Ветка, Знач Каталог)
-
- ГитРепозиторий = Новый ГитРепозиторий;
-
- ГитРепозиторий.УстановитьРабочийКаталог(Каталог);
-
- ГитРепозиторий.КлонироватьРепозиторий(URLРепозитория, Каталог);
- ГитРепозиторий.ПерейтиВВетку(Ветка);
-
-КонецПроцедуры
-
-Процедура УстановитьПакет(Знач Каталог, ПутьКМанифестуСборки)
-
- // Лог.Информация("Каталог сборки <%1>", Каталог);
-
- // Лог.Информация("Сборка пакета библиотеки");
- // КомандаOpm = Новый Команда;
- // КомандаOpm.УстановитьРабочийКаталог(Каталог);
- // КомандаOpm.УстановитьКоманду("opm");
- // КомандаOpm.ДобавитьПараметр("build");
- // КомандаOpm.ДобавитьПараметр(Каталог);
- // КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm");
-
- // КодВозврата = КомандаOpm.Исполнить();
-
- // Если КодВозврата <> 0 Тогда
- // ВызватьИсключение КомандаOpm.ПолучитьВывод();
- // КонецЕсли;
-
- // МассивФайлов = НайтиФайлы(Каталог, "*.ospx");
-
- // Если МассивФайлов.Количество() = 0 Тогда
- // ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка создания пакета opm", "Не найден собранный файл пакета opm");
- // КонецЕсли;
-
- // ФайлПлагина = МассивФайлов[0].ПолноеИмя;
-
- КаталогПроекта = ОбъединитьПути(ТекущийСценарий().Каталог, "..");
-
- // ФС.ОбеспечитьКаталог(КаталогПроекта);
-
- // Лог.Информация("Установка в каталог проекта <%1>", КаталогПроекта);
-
- ФайлПлагина = ОбъединитьПути(КаталогПроекта, "templates/v8storage-0.6.6.ospx");
-
- Лог.Информация("Установка пакета из файла <%1>", ФайлПлагина);
-
- КомандаOpm = Новый Команда;
- // КомандаOpm.УстановитьРабочийКаталог(КаталогПроекта);
- КомандаOpm.УстановитьКоманду("opm");
- КомандаOpm.ДобавитьПараметр("install");
- КомандаOpm.ДобавитьПараметр("-l");
- КомандаOpm.ДобавитьПараметр("-f");
- КомандаOpm.ДобавитьПараметр(ФайлПлагина);
- // КомандаOpm.ДобавитьПараметр("-dest");
- // КомандаOpm.ДобавитьПараметр(КаталогПроекта);
- // КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm");
-
- КодВозврата = КомандаOpm.Исполнить();
-
- Если КодВозврата <> 0 Тогда
- ВызватьИсключение СтрШаблон("Ошибка установки opm из <%1> по причине <%2>", ФайлПлагина, КомандаOpm.ПолучитьВывод());
- КонецЕсли;
-
-КонецПроцедуры
-
-Процедура ПолезнаяРабота()
-
- URLРепозитория = "https://github.com/khorevaa/v8storage.git";
- КаталогСборки = ВременныеФайлы.СоздатьКаталог();
- Ветка = "feature/pack-epf";
-
- ПутьКМанифестуСборки = ОбъединитьПути(ТекущийСценарий().Каталог, "opm_packagedef_global");
-
- // ПолучитьИсходники(URLРепозитория, Ветка, КаталогСборки);
- УстановитьПакет(КаталогСборки, ПутьКМанифестуСборки);
-
- ВременныеФайлы.УдалитьФайл(КаталогСборки);
-
-КонецПроцедуры
-
-Лог = Логирование.ПолучитьЛог("task.install-opm");
-
-ПолезнаяРабота();
-
-
diff --git a/tasks/install-opm-global.os b/tasks/install-opm-global.os
deleted file mode 100644
index 35323d2d..00000000
--- a/tasks/install-opm-global.os
+++ /dev/null
@@ -1,89 +0,0 @@
-#Использовать gitrunner
-#Использовать tempfiles
-#Использовать fs
-
-Перем Лог;
-
-Процедура ПолучитьИсходники(Знач URLРепозитория, Знач Ветка, Знач Каталог)
-
- ГитРепозиторий = Новый ГитРепозиторий;
-
- ГитРепозиторий.УстановитьРабочийКаталог(Каталог);
-
- ГитРепозиторий.КлонироватьРепозиторий(URLРепозитория, Каталог);
- ГитРепозиторий.ПерейтиВВетку(Ветка);
-
-КонецПроцедуры
-
-Процедура УстановитьПакет(Знач Каталог, ПутьКМанифестуСборки)
-
- Лог.Информация("Каталог сборки <%1>", Каталог);
-
- Лог.Информация("Сборка пакета библиотеки");
- КомандаOpm = Новый Команда;
- КомандаOpm.УстановитьРабочийКаталог(Каталог);
- КомандаOpm.УстановитьКоманду("opm");
- КомандаOpm.ДобавитьПараметр("build");
- КомандаOpm.ДобавитьПараметр(Каталог);
- КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm");
-
- КодВозврата = КомандаOpm.Исполнить();
-
- Если КодВозврата <> 0 Тогда
- ВызватьИсключение КомандаOpm.ПолучитьВывод();
- КонецЕсли;
-
- МассивФайлов = НайтиФайлы(Каталог, "*.ospx");
-
- Если МассивФайлов.Количество() = 0 Тогда
- ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка создания пакета opm", "Не найден собранный файл пакета opm");
- КонецЕсли;
-
- ФайлПлагина = МассивФайлов[0].ПолноеИмя;
-
- КаталогПроекта = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "oscript_modules");
-
- ФС.ОбеспечитьКаталог(КаталогПроекта);
-
- Лог.Информация("Установка в каталог проекта <%1>", КаталогПроекта);
-
- Лог.Информация("Установка пакета из файла <%1>", ФайлПлагина);
-
- КомандаOpm = Новый Команда;
- КомандаOpm.УстановитьРабочийКаталог(КаталогПроекта);
- КомандаOpm.УстановитьКоманду("opm");
- КомандаOpm.ДобавитьПараметр("install");
- КомандаOpm.ДобавитьПараметр("-f");
- КомандаOpm.ДобавитьПараметр(ФайлПлагина);
- // КомандаOpm.ДобавитьПараметр("-dest");
- // КомандаOpm.ДобавитьПараметр(КаталогПроекта);
- КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm");
-
- КодВозврата = КомандаOpm.Исполнить();
-
- Если КодВозврата <> 0 Тогда
- ВызватьИсключение СтрШаблон("Ошибка установки opm из <%1> по причине <%2>", ФайлПлагина, КомандаOpm.ПолучитьВывод());
- КонецЕсли;
-
-КонецПроцедуры
-
-Процедура ПолезнаяРабота()
-
- URLРепозитория = "https://github.com/khorevaa/opm.git";
- КаталогСборки = ВременныеФайлы.СоздатьКаталог();
- Ветка = "develop";
-
- ПутьКМанифестуСборки = ОбъединитьПути(ТекущийСценарий().Каталог, "opm_packagedef_global");
-
- ПолучитьИсходники(URLРепозитория, Ветка, КаталогСборки);
- УстановитьПакет(КаталогСборки, ПутьКМанифестуСборки);
-
- ВременныеФайлы.УдалитьФайл(КаталогСборки);
-
-КонецПроцедуры
-
-Лог = Логирование.ПолучитьЛог("task.install-opm");
-
-ПолезнаяРабота();
-
-
diff --git a/tasks/make.os b/tasks/make.os
index c4c6232d..daae77ee 100644
--- a/tasks/make.os
+++ b/tasks/make.os
@@ -15,7 +15,7 @@
КомандаOpm.ДобавитьПараметр("-o");
КомандаOpm.ДобавитьПараметр(ВыходнойКаталог);
КомандаOpm.ДобавитьПараметр(КаталогПроекта);
- КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm");
+ КомандаOpm.ПоказыватьВыводНемедленно(Истина);
КодВозврата = КомандаOpm.Исполнить();
@@ -46,7 +46,7 @@
КомандаOpm.ДобавитьПараметр(ФайлПлагина);
КомандаOpm.ДобавитьПараметр("--dest");
КомандаOpm.ДобавитьПараметр(КаталогУстановки);
- КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm");
+ КомандаOpm.ПоказыватьВыводНемедленно(Истина);
КодВозврата = КомандаOpm.Исполнить();
@@ -69,7 +69,7 @@
КомандаOpm.ДобавитьПараметр("-make");
КомандаOpm.ДобавитьПараметр(ФайлПриложения);
КомандаOpm.ДобавитьПараметр(ВыходнойФайл);
- КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm");
+ КомандаOpm.ПоказыватьВыводНемедленно(Истина);
КодВозврата = КомандаOpm.Исполнить();
@@ -92,7 +92,6 @@
КаталогПлагинов = ПараметрыПриложения.КаталогПлагинов();
КаталогВнутреннихКлассов = ОбъединитьПути(КаталогУстановки, "gitsync", "src/core/Классы/internal/Классы");
- СкопироватьЗагрузчикПлагинов(КаталогВнутреннихКлассов);
СкопироватьСтандартныйЗагрузчик(КаталогПлагинов);
ПодготовитьФайлИндексПлагиновEXE(КаталогВнутреннихКлассов, КаталогПлагинов);
@@ -103,7 +102,7 @@
МассивПлагинов = ПолучитьМассивПлагинов(КаталогПлагинов);
- ФайлИндексПлагиновEXE = ОбъединитьПути(КаталогВнутреннихКлассов, "ИндексПлагиновEXE.os");
+ ФайлИндексПлагиновEXE = ОбъединитьПути(КаталогВнутреннихКлассов, "ПодключениеЗапакованныхПлагинов.os");
ЗаписьТекста = Новый ЗаписьТекста(ФайлИндексПлагиновEXE);
@@ -119,7 +118,7 @@
КонецЦикла;
- ЗаписьТекста.ЗаписатьСтроку("Функция ПолучитьИндексПлагиновEXE() Экспорт");
+ ЗаписьТекста.ЗаписатьСтроку("Функция ИндексПлагинов() Экспорт");
ЗаписьТекста.ЗаписатьСтроку(" ИндексПлагинов = Новый Массив;");
Для каждого ИмяПлагина Из МассивПлагинов Цикл
@@ -224,28 +223,26 @@
КонецПроцедуры
-Процедура СкопироватьЗагрузчикПлагинов(Знач КаталогВнутреннихКлассов)
-
- ЗагрузчикПлагиновEXE = ОбъединитьПути(КаталогВнутреннихКлассов, "ЗагрузчикПлагиновEXE.os");
- ПриемникЗагрузчикПлагинов = ОбъединитьПути(КаталогВнутреннихКлассов, "ЗагрузчикПлагинов.os");
- КопироватьФайл(ЗагрузчикПлагиновEXE, ПриемникЗагрузчикПлагинов);
-
-КонецПроцедуры
-
Процедура ИнициализироватьВстроенныеПлагины(Знач КаталогУстановки)
ФайлПриложения = ОбъединитьПути(КаталогУстановки, "gitsync", "src/cmd", "gitsync.os");
КомандаOpm = Новый Команда;
+ КаталогПлагинов = ВременныеФайлы.СоздатьКаталог();
+
+ УстановитьПеременнуюСреды("GITSYNC_PLUGINS_PATH", КаталогПлагинов);
+ Лог.Информация("Каталог плагинов сборки <%1>", КаталогПлагинов);
+
КомандаOpm.УстановитьРабочийКаталог(КаталогУстановки);
КомандаOpm.УстановитьКоманду("oscript");
КомандаOpm.ДобавитьПараметр(ФайлПриложения);
КомандаOpm.ДобавитьПараметр("p init");
- КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm");
+ КомандаOpm.ПоказыватьВыводНемедленно(Истина);
+ // КомандаOpm.("task.install-opm");
КодВозврата = КомандаOpm.Исполнить();
- Если КодВозврата <> 0 Тогда
+ Если КодВозврата <> 0 Тогда
ВызватьИсключение КомандаOpm.ПолучитьВывод();
КонецЕсли;
@@ -256,7 +253,6 @@
КаталогСборки = ВременныеФайлы.СоздатьКаталог();
КаталогУстановки = ВременныеФайлы.СоздатьКаталог();
-
ПутьКМанифестуСборки = ОбъединитьПути(КаталогПроекта, "build_packagedef");
СобратьПакет(КаталогСборки, ПутьКМанифестуСборки);
@@ -270,11 +266,12 @@
ВыполнитьСборкуEXE(КаталогУстановки);
ВременныеФайлы.УдалитьФайл(КаталогСборки);
- ВременныеФайлы.УдалитьФайл(КаталогУстановки);
+ //ВременныеФайлы.УдалитьФайл(КаталогУстановки);
КонецПроцедуры
КаталогПроекта = ОбъединитьПути(ТекущийСценарий().Каталог, "..");
Лог = Логирование.ПолучитьЛог("task.install-opm");
+// Лог.УстановитьУровень(УровниЛОга.отладка);
ПолезнаяРабота();
diff --git a/tasks/pack.os b/tasks/pack.os
new file mode 100644
index 00000000..e77635a9
--- /dev/null
+++ b/tasks/pack.os
@@ -0,0 +1,149 @@
+Перем ИндексКлассов;
+Перем КаталогBin;
+Перем КаталогКлассов;
+Перем ПрефиксКлассов;
+Перем ИмяМенеджераФайлов;
+
+Процедура ВыполнитьЗапаковку()
+
+ ТекущийКаталогЗадачи = ТекущийСценарий().Каталог;
+
+ КаталогПроекта = Новый Файл(ОбъединитьПути(ТекущийКаталогЗадачи, "..")).ПолноеИмя;
+
+ ПрефиксКлассов = "Gitsync";
+
+ КаталогКлассов = ОбъединитьПути(КаталогПроекта, "src", "core", ОбъединитьПути("Классы","internal","bindata","Классы"));
+
+ КаталогBin = ОбъединитьПути(КаталогПроекта, "bin");
+
+ ИмяМенеджераФайлов = СтрШаблон("МенеджерЗапакованныхФайлов%1.os", ПрефиксКлассов);
+
+ ИндексКлассов = Новый Соответствие;
+ ОбработатьКаталог(КаталогBin, "*.cfe");
+ ОбработатьКаталог(ОбъединитьПути(КаталогПроекта, "docs"), "*.md");
+
+ ЗаписатьКлассИндексаЗапаковки(ИндексКлассов);
+
+КонецПроцедуры
+
+Процедура ЗаписатьКлассИндексаЗапаковки(ИндексКлассов)
+
+ ТекстБлока = "Функция ПолучитьИндексФайлов() Экспорт
+ |
+ | ИндексФайлов = Новый Соответствие;
+ |";
+
+ ШаблонДобавленияВИндекс = " ИндексФайлов.Вставить(""%1"", ""%2"");";
+
+ Для каждого ДанныеКласса Из ИндексКлассов Цикл
+
+ ТекстБлока = ТекстБлока + СтрШаблон(ШаблонДобавленияВИндекс, ДанныеКласса.Ключ, ДанныеКласса.Значение) + Символы.ПС;
+
+ КонецЦикла;
+
+ ТекстБлока = ТекстБлока + "
+ | Возврат ИндексФайлов;
+ |
+ |КонецФункции";
+
+ ФайлКлассаМенеджерЗапакованныхФайлов = ОбъединитьПути(КаталогКлассов, ИмяМенеджераФайлов);
+
+ ЗаписьТекста = Новый ЗаписьТекста(ФайлКлассаМенеджерЗапакованныхФайлов);
+ ЗаписьТекста.ЗаписатьСтроку(ТекстБлока);
+ ЗаписьТекста.Закрыть();
+
+ Сообщить("Данные запакованы в классы");
+
+КонецПроцедуры
+
+Процедура ОбработатьКаталог(Знач КаталогОбработки, Знач МаскаПоискаФайлов)
+
+ МассивНайденныхФайлов = НайтиФайлы(КаталогОбработки, МаскаПоискаФайлов);
+
+ Для каждого НайденныйФайл Из МассивНайденныхФайлов Цикл
+
+ Если НайденныйФайл.ЭтоКаталог() Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ИмяФайла = СтрЗаменить(НайденныйФайл.ИмяБезРасширения, ".", "_");
+ ПолныйПутьКФайлу = НайденныйФайл.ПолноеИмя;
+
+ ИмяКлассаФайла = СтрШаблон("%1_%2", ИмяФайла, ПрефиксКлассов);
+
+ ПутьКФайлуКласса = ОбъединитьПути(КаталогКлассов, ИмяКлассаФайла + ".os");
+ ДанныеФайла = ПолучитBase64Строка(ПолныйПутьКФайлу);
+ ХешСтрока = ПолучитьХешСтроку(ПолныйПутьКФайлу);
+
+ ЗаписатьКласс(ПутьКФайлуКласса, НайденныйФайл.Имя, "1.0.0", ХешСтрока, ДанныеФайла);
+
+ ИндексКлассов.Вставить(НайденныйФайл.Имя, ИмяКлассаФайла);
+
+ КонецЦикла;
+
+
+КонецПроцедуры
+
+Функция ПолучитьХешСтроку(ПутьКФайлу)
+
+ ХешФайла = Новый ХешированиеДанных(ХешФункция.MD5);
+ ХешФайла.ДобавитьФайл(ПутьКФайлу);
+
+ Возврат ХешФайла.ХешСуммаСтрокой;
+
+КонецФункции
+
+Процедура ЗаписатьКласс(ПутьКФайлуКласса, ИмяФайла, ВерсияФайла, ХешСтрока, ДанныеФайла)
+
+ ШаблонТекст = "
+ |///////////////////////////////////////////
+ |// ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ //
+ |///////////////////////////////////////////
+ |//
+ |// ФАЙЛ: <%1>
+ |//
+ |
+ |// Возвращает версию запакованного файла
+ |//
+ |Функция Версия() Экспорт
+ | Возврат ""%2"";
+ |КонецФункции
+ |
+ |// Возвращает имя запакованного файла
+ |//
+ |Функция ИмяФайла() Экспорт
+ | Возврат ""%1"";
+ |КонецФункции
+ |
+ |// Возвращает хеш строку запакованного файла
+ |//
+ |Функция Хеш() Экспорт
+ | Возврат ""%3"";
+ |КонецФункции
+ |
+ |// Возвращает запакованные данные файла
+ |//
+ |Функция ДвоичныеДанные() Экспорт
+ | ЗапакованныеДанные = ""%4"";
+ | Возврат ЗапакованныеДанные;
+ |КонецФункции
+ |
+ |";
+
+ ТекстКласса = СтрШаблон(ШаблонТекст, ИмяФайла, ВерсияФайла, ХешСтрока, ДанныеФайла);
+
+ ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлуКласса);
+ ЗаписьТекста.ЗаписатьСтроку(ТекстКласса);
+ ЗаписьТекста.Закрыть();
+
+КонецПроцедуры
+
+Функция ПолучитBase64Строка(ПутьКФайлу)
+
+ ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлу);
+ Строка = Base64Строка(ДвоичныеДанныеФайла);
+ Возврат Строка;
+
+КонецФункции
+
+ВыполнитьЗапаковку();
\ No newline at end of file
diff --git a/tasks/test.os b/tasks/test.os
index 46098aeb..034f396c 100644
--- a/tasks/test.os
+++ b/tasks/test.os
@@ -188,12 +188,12 @@
КонецФункции // ПрогнатьФичи()
Функция ПрогнатьФичи()
+
ФичиПрошли_opm = ПрогнатьФичи_opm();
ФичиПрошли_core = ПрогнатьФичи_core();
ФичиПрошли_cmd = ПрогнатьФичи_cmd();
-
- //ФичиПрошли_exe = ПрогнатьФичи_exe();
- ФичиПрошли_exe = Истина;
+ ФичиПрошли_exe = ПрогнатьФичи_exe();
+ // ФичиПрошли_exe = Истина;
Возврат
ФичиПрошли_opm
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
diff --git a/tests/fixtures/ext.yaml b/tests/fixtures/ext.yaml
new file mode 100644
index 00000000..3f02e665
--- /dev/null
+++ b/tests/fixtures/ext.yaml
@@ -0,0 +1,11 @@
+ name: Расширение1
+ extention: test
+ path: <КаталогХранилищаРасширения>
+ dir: <ПутьКаталогаИсходниковРасширения>
+ 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/tests/fixtures/extension_storage/1cv8ddb.1CD b/tests/fixtures/extension_storage/1cv8ddb.1CD
index 01c27148..bad3a7ee 100644
Binary files a/tests/fixtures/extension_storage/1cv8ddb.1CD and b/tests/fixtures/extension_storage/1cv8ddb.1CD differ
diff --git a/tests/fixtures/extension_storage/data/objects/09/0694564fb2cc20d4ee82dff29581aea6ebceb2 b/tests/fixtures/extension_storage/data/objects/09/0694564fb2cc20d4ee82dff29581aea6ebceb2
new file mode 100644
index 00000000..40436522
Binary files /dev/null and b/tests/fixtures/extension_storage/data/objects/09/0694564fb2cc20d4ee82dff29581aea6ebceb2 differ
diff --git a/tests/fixtures/extension_storage/data/objects/15/af5e8f18aea8397ae287ef2f0f237eca7ba410 b/tests/fixtures/extension_storage/data/objects/15/af5e8f18aea8397ae287ef2f0f237eca7ba410
new file mode 100644
index 00000000..778f3f5c
--- /dev/null
+++ b/tests/fixtures/extension_storage/data/objects/15/af5e8f18aea8397ae287ef2f0f237eca7ba410
@@ -0,0 +1 @@
+{0,0}
\ No newline at end of file
diff --git a/tests/fixtures/extension_storage/data/objects/3e/09dd8ca40ee4c38920ec37b53860a6335d9749 b/tests/fixtures/extension_storage/data/objects/3e/09dd8ca40ee4c38920ec37b53860a6335d9749
new file mode 100644
index 00000000..fa9ff593
Binary files /dev/null and b/tests/fixtures/extension_storage/data/objects/3e/09dd8ca40ee4c38920ec37b53860a6335d9749 differ
diff --git a/tests/fixtures/extension_storage/data/objects/51/ddb08f4a5453469fb93b1cdc90304d747357b7 b/tests/fixtures/extension_storage/data/objects/51/ddb08f4a5453469fb93b1cdc90304d747357b7
new file mode 100644
index 00000000..2d9537fe
Binary files /dev/null and b/tests/fixtures/extension_storage/data/objects/51/ddb08f4a5453469fb93b1cdc90304d747357b7 differ
diff --git a/tests/fixtures/extension_storage/data/objects/90/5786cba6e9271268f277226315b61c46427718 b/tests/fixtures/extension_storage/data/objects/90/5786cba6e9271268f277226315b61c46427718
new file mode 100644
index 00000000..ba0858ba
Binary files /dev/null and b/tests/fixtures/extension_storage/data/objects/90/5786cba6e9271268f277226315b61c46427718 differ
diff --git a/tests/fixtures/extension_storage/data/objects/fd/94de288b43ff531cadf282f9664dd70031a9cb b/tests/fixtures/extension_storage/data/objects/fd/94de288b43ff531cadf282f9664dd70031a9cb
new file mode 100644
index 00000000..06aa04e9
Binary files /dev/null and b/tests/fixtures/extension_storage/data/objects/fd/94de288b43ff531cadf282f9664dd70031a9cb differ
diff --git a/tests/fixtures/extension_storage/data/pack/pack-c262dc49d0c6254821c6af2f1aaced0d0d28d2b3.ind b/tests/fixtures/extension_storage/data/pack/pack-c262dc49d0c6254821c6af2f1aaced0d0d28d2b3.ind
new file mode 100644
index 00000000..d159252b
Binary files /dev/null and b/tests/fixtures/extension_storage/data/pack/pack-c262dc49d0c6254821c6af2f1aaced0d0d28d2b3.ind differ
diff --git a/tests/fixtures/extension_storage/data/pack/pack-c262dc49d0c6254821c6af2f1aaced0d0d28d2b3.pck b/tests/fixtures/extension_storage/data/pack/pack-c262dc49d0c6254821c6af2f1aaced0d0d28d2b3.pck
new file mode 100644
index 00000000..6e606fc3
Binary files /dev/null and b/tests/fixtures/extension_storage/data/pack/pack-c262dc49d0c6254821c6af2f1aaced0d0d28d2b3.pck differ
diff --git a/tests/fixtures/extension_storage/data/ver b/tests/fixtures/extension_storage/data/ver
new file mode 100644
index 00000000..20d5cb86
Binary files /dev/null and b/tests/fixtures/extension_storage/data/ver differ
diff --git a/tests/fixtures/extension_storage/ver b/tests/fixtures/extension_storage/ver
new file mode 100644
index 00000000..bbaa99cd
--- /dev/null
+++ b/tests/fixtures/extension_storage/ver
@@ -0,0 +1 @@
+{0,2,8,3,14,1533,"Designer"}
\ No newline at end of file
diff --git "a/tests/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262_test.os" "b/tests/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262_test.os"
new file mode 100644
index 00000000..45e707ca
--- /dev/null
+++ "b/tests/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262_test.os"
@@ -0,0 +1,100 @@
+#использовать "../src/core/"
+#Использовать asserts
+#Использовать logos
+
+Перем юТест;
+Перем Лог;
+
+Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт
+
+ юТест = Тестирование;
+
+ ИменаТестов = Новый Массив;
+
+ ИменаТестов.Добавить("ТестДолжен_ПроверитьИндексПлагинов");
+ ИменаТестов.Добавить("ТестДолжен_ПроверитьВключениеПлагинов");
+ ИменаТестов.Добавить("ТестДолжен_ПроверитьВыключениеПлагинов");
+
+ Возврат ИменаТестов;
+
+КонецФункции
+
+Процедура ТестДолжен_ПроверитьИндексПлагинов() Экспорт
+
+ КаталогПлагинов = ВременныеФайлы.СоздатьКаталог();
+
+ МенеджерПлагинов = Новый МенеджерПлагинов(КаталогПлагинов);
+ МенеджерПлагинов.УстановитьФайлПлагин(ОбъединитьПути(КаталогПроекта(), "tests", "test_plugin-0.0.1.ospx"));
+ МенеджерПлагинов.ЗагрузитьПлагины();
+
+ ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов();
+ Ожидаем.Что(ИндексПлагинов.Количество(), "Количество плагинов должно быть равны").Равно(1);
+ ВременныеФайлы.УдалитьФайл(КаталогПлагинов);
+
+КонецПроцедуры
+
+Процедура ТестДолжен_ПроверитьВключениеПлагинов() Экспорт
+
+ КаталогПлагинов = ВременныеФайлы.СоздатьКаталог();
+
+ МенеджерПлагинов = Новый МенеджерПлагинов(КаталогПлагинов);
+ МенеджерПлагинов.УстановитьФайлПлагин(ОбъединитьПути(КаталогПроекта(), "tests", "test_plugin-0.0.1.ospx"));
+ МенеджерПлагинов.ЗагрузитьПлагины();
+
+ ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов();
+ Ожидаем.Что(ИндексПлагинов.Количество(), "Количество плагинов должно быть равны").Равно(1);
+
+ МенеджерПлагинов.ВключитьПлагин("test_plugin");
+
+ Ожидаем.Что(ИндексПлагинов["test_plugin"].Включен(), "Плагин должен быть включен").ЭтоИстина();
+
+ ВременныеФайлы.УдалитьФайл(КаталогПлагинов);
+
+КонецПроцедуры
+
+Процедура ТестДолжен_ПроверитьВыключениеПлагинов() Экспорт
+
+ КаталогПлагинов = ВременныеФайлы.СоздатьКаталог();
+
+ МенеджерПлагинов = Новый МенеджерПлагинов(КаталогПлагинов);
+ МенеджерПлагинов.УстановитьФайлПлагин(ОбъединитьПути(КаталогПроекта(), "tests", "test_plugin-0.0.1.ospx"));
+ МенеджерПлагинов.ЗагрузитьПлагины();
+
+ ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов();
+ Ожидаем.Что(ИндексПлагинов.Количество(), "Количество плагинов должно быть равны").Равно(1);
+
+ МенеджерПлагинов.ВключитьПлагин("test_plugin");
+
+ Ожидаем.Что(ИндексПлагинов["test_plugin"].Включен(), "Плагин должен быть включен").ЭтоИстина();
+
+ МассивПлагинов = Новый Массив();
+ МассивПлагинов.Добавить("test_plugin");
+
+ МенеджерПлагинов.ОтключитьПлагины(МассивПлагинов);
+
+ Ожидаем.Что(ИндексПлагинов["test_plugin"].Включен(), "Плагин должен быть выключен").ЭтоЛожь();
+
+ ВременныеФайлы.УдалитьФайл(КаталогПлагинов);
+
+КонецПроцедуры
+
+Функция КаталогПлагинов()
+
+ КаталогТестов = ТекущийСценарий().Каталог;
+
+ КаталогПлагинов = ОбъединитьПути(КаталогТестов, "fixtures", "КаталогПлагинов");
+ Файл = Новый Файл(КаталогПлагинов);
+ Возврат Файл.ПолноеИмя;
+
+КонецФункции
+
+Функция КаталогПроекта()
+
+ ПутьККаталогуПроекта = ОбъединитьПути(ТекущийСценарий().Каталог, "..");
+ Файл = Новый Файл(ПутьККаталогуПроекта);
+ Возврат Файл.ПолноеИмя;
+
+КонецФункции
+
+Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync");
+// Лог.УстановитьУровень(УровниЛога.Отладка);
\ No newline at end of file