diff --git a/config-example.json b/config-example.json index efead47f..87c36e4a 100644 --- a/config-example.json +++ b/config-example.json @@ -3,40 +3,61 @@ { "global": { - "email-domain": "server.com", - "v8-version": "8.3.10", - "git-executable": "git" - } - }, - "repositories" : [ - { - "name" : "test", - "git-local-path": "Путь", - "git-remote": "адрес2", - "v8-storage-dir": "каталог2", - "process-fatform-modules": "on", - "push-every-n-commits": 5, - "auto-set-tags": "on", - "stop-if-empty-comment": "on", - "check-authors": "on" - //"email-domain", - //"v8-version", - //"git-executable", - }, - { - "name" : "test2", - "git-local-path": "Путь2", - "git-remote": "адрес2", - "v8-storage-dir": "каталог2", - "process-fatform-modules": "on", - "push-every-n-commits": 5, - "auto-set-tags": "on", - "stop-if-empty-comment": "on", - "check-authors": "on" - //"email-domain", - //"v8-version", - //"git-executable", - + "-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/features/gitsync-all.feature b/features/gitsync-all.feature new file mode 100644 index 00000000..93c6243b --- /dev/null +++ b/features/gitsync-all.feature @@ -0,0 +1,36 @@ +# language: ru + +Функционал: Мультисинхронизация чере команду all + Как Пользователь + Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища + Чтобы автоматизировать свою работы с хранилищем с git + +Контекст: Тестовый контекст + Когда Я очищаю параметры команды "gitsync" в контексте + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я добавляю параметр "sync" для команды "gitsync" + И Я создаю временный каталог и сохраняю его в контекст + И я скопировал каталог тестового хранилища конфигурации во временный каталог + И Я сохраняю значение временного каталога в переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ПутьКаталогаИсходников" + И Я создаю тестовой файл AUTHORS + И Я записываю "0" в файл VERSION + И Я создаю временный каталог и сохраняю его в контекст + И Я инициализирую bare репозиторий во временном каталоге + И Я сохраняю значение временного каталога в переменной "URLРепозитория" + И я инициализирую связь "ПутьКаталогаИсходников" с внешним репозиторием "URLРепозитория" + И я включаю отладку лога с именем "oscript.app.gitsync" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + +Сценарий: Простая синхронизация хранилища с git-репозиторием + Допустим Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" + И Я добавляю параметр "-tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 diff --git a/features/gitsync-init.feature b/features/gitsync-init.feature index 048459fc..0a73f915 100644 --- a/features/gitsync-init.feature +++ b/features/gitsync-init.feature @@ -1,6 +1,6 @@ # language: ru -Функционал: Инициализация каталога исходников конфигурации +Функционал: Инициализация каталога исходников конфигурации (команда init) Как Пользователь Я хочу создать каталог исходников конфигурации 1С в git-репозитории Чтобы выполнять автоматическую выгрузку конфигураций из хранилища diff --git a/features/gitsync-plugin-check-authors.feature b/features/gitsync-plugin-check-authors.feature new file mode 100644 index 00000000..80d89ec7 --- /dev/null +++ b/features/gitsync-plugin-check-authors.feature @@ -0,0 +1,40 @@ +# language: ru + +Функционал: Работа плагина проверки пользователей хранилища + Как Пользователь + Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища + Чтобы автоматизировать свою работы с хранилищем с git + +Контекст: Тестовый контекст + Когда Я очищаю параметры команды "gitsync" в контексте + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я добавляю параметр "sync" для команды "gitsync" + И Я создаю временный каталог и сохраняю его в контекст + И я скопировал каталог тестового хранилища конфигурации во временный каталог + И Я сохраняю значение временного каталога в переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ПутьКаталогаИсходников" + И Я создаю тестовой файл AUTHORS + И Я записываю "0" в файл VERSION + И Я создаю временный каталог и сохраняю его в контекст + И Я инициализирую bare репозиторий во временном каталоге + И Я сохраняю значение временного каталога в переменной "URLРепозитория" + И я инициализирую связь "ПутьКаталогаИсходников" с внешним репозиторием "URLРепозитория" + И я включаю отладку лога с именем "oscript.app.GitSync" + И я включаю отладку лога с именем "oscript.app.gitsync_plugins_check-authors" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" + И Я добавляю параметр "-tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + +Сценарий: Cинхронизация c простым использованием + Допустим Я добавляю параметр "-plugins check-authors" для команды "gitsync" + И Я создаю неполный тестовой файл AUTHORS + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "В таблице истории версий найдены авторы (количество 7), которые не сопоставлены в AUTHORS" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 1 + diff --git a/features/gitsync-plugin-check-comments.feature b/features/gitsync-plugin-check-comments.feature new file mode 100644 index 00000000..fdc5a288 --- /dev/null +++ b/features/gitsync-plugin-check-comments.feature @@ -0,0 +1,64 @@ +# language: ru + +Функционал: Работа плагина проверки комментариев в хранилище + Как Пользователь + Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища + Чтобы автоматизировать свою работы с хранилищем с git + +Контекст: Тестовый контекст + Когда Я очищаю параметры команды "gitsync" в контексте + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я добавляю параметр "sync" для команды "gitsync" + И Я создаю временный каталог и сохраняю его в контекст + И я скопировал каталог тестового хранилища конфигурации во временный каталог + И Я сохраняю значение временного каталога в переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ПутьКаталогаИсходников" + И Я создаю тестовой файл AUTHORS + И Я записываю "0" в файл VERSION + И Я создаю временный каталог и сохраняю его в контекст + И Я инициализирую bare репозиторий во временном каталоге + И Я сохраняю значение временного каталога в переменной "URLРепозитория" + И я инициализирую связь "ПутьКаталогаИсходников" с внешним репозиторием "URLРепозитория" + И я включаю отладку лога с именем "oscript.app.GitSync" + И я включаю отладку лога с именем "oscript.app.gitsync_plugins_check-comments" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" + И Я добавляю параметр "-tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + +Сценарий: Cинхронизация с использованием просто check-comments + Допустим Я добавляю параметр "-plugins check-comments" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "КРИТИЧНАЯОШИБКА - Нашли следующую версию <4> от автора <Администратор>, а комментарий не задан!" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 1 + +Сценарий: Cинхронизация c использованием call-error + Допустим Я добавляю параметр "-call-error" для команды "gitsync" + И Я добавляю параметр "-plugins check-comments" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "КРИТИЧНАЯОШИБКА - Нашли следующую версию <4> от автора <Администратор>, а комментарий не задан!" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 1 + +Сценарий: Cинхронизация c использованием send-email + Допустим Я добавляю параметр "-send-email" для команды "gitsync" + И Я добавляю параметр "-plugins check-comments" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 + +Сценарий: Cинхронизация хранилища все вместе + Допустим Я добавляю параметр "-send-email" для команды "gitsync" + И Я добавляю параметр "-add-emails test@mail.ru" для команды "gitsync" + И Я добавляю параметр "-call-error" для команды "gitsync" + И Я добавляю параметр "-plugins check-comments" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 diff --git a/features/gitsync-plugin-increment.feature b/features/gitsync-plugin-increment.feature new file mode 100644 index 00000000..078e782b --- /dev/null +++ b/features/gitsync-plugin-increment.feature @@ -0,0 +1,39 @@ +# language: ru + +Функционал: Работа плагина инекрементальной выгрузки конфигурации + Как Пользователь + Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища + Чтобы автоматизировать свою работы с хранилищем с git + +Контекст: Тестовый контекст + Когда Я очищаю параметры команды "gitsync" в контексте + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я добавляю параметр "sync" для команды "gitsync" + И Я создаю временный каталог и сохраняю его в контекст + И я скопировал каталог тестового хранилища конфигурации во временный каталог + И Я сохраняю значение временного каталога в переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ПутьКаталогаИсходников" + И Я создаю тестовой файл AUTHORS + И Я записываю "0" в файл VERSION + И Я создаю временный каталог и сохраняю его в контекст + И Я инициализирую bare репозиторий во временном каталоге + И Я сохраняю значение временного каталога в переменной "URLРепозитория" + И я инициализирую связь "ПутьКаталогаИсходников" с внешним репозиторием "URLРепозитория" + И я включаю отладку лога с именем "oscript.app.GitSync" + И я включаю отладку лога с именем "oscript.app.gitsync.plugins" + И я включаю отладку лога с именем "oscript.app.gitsync_plugins_increment" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" + И Я добавляю параметр "-tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + +Сценарий: Cинхронизация с использованием increment + Допустим Я добавляю параметр "-plugins increment" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 \ No newline at end of file diff --git a/features/gitsync-plugin-limit.feature b/features/gitsync-plugin-limit.feature new file mode 100644 index 00000000..e2474089 --- /dev/null +++ b/features/gitsync-plugin-limit.feature @@ -0,0 +1,75 @@ +# language: ru + +Функционал: Работа плагина ограничений выгрузки + Как Пользователь + Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища + Чтобы автоматизировать свою работы с хранилищем с git + +Контекст: Тестовый контекст + Когда Я очищаю параметры команды "gitsync" в контексте + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я добавляю параметр "sync" для команды "gitsync" + И Я создаю временный каталог и сохраняю его в контекст + И я скопировал каталог тестового хранилища конфигурации во временный каталог + И Я сохраняю значение временного каталога в переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ПутьКаталогаИсходников" + И Я создаю тестовой файл AUTHORS + И Я записываю "0" в файл VERSION + И Я создаю временный каталог и сохраняю его в контекст + И Я инициализирую bare репозиторий во временном каталоге + И Я сохраняю значение временного каталога в переменной "URLРепозитория" + И я инициализирую связь "ПутьКаталогаИсходников" с внешним репозиторием "URLРепозитория" + И я включаю отладку лога с именем "oscript.app.GitSync" + И я включаю отладку лога с именем "oscript.app.gitsync_plugins_limit" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + +Сценарий: Cинхронизация с использованием limit + Допустим Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" + И Я добавляю параметр "-tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + И Я добавляю параметр "-limit 1" для команды "gitsync" + И Я добавляю параметр "-plugins limit" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 + +Сценарий: Cинхронизация c использованием maxversion + Допустим Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" + И Я добавляю параметр "-tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + И Я добавляю параметр "-maxversion 2" для команды "gitsync" + И Я добавляю параметр "-plugins limit" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 + +Сценарий: Cинхронизация c использованием minversion + Допустим Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" + И Я добавляю параметр "-tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + И Я добавляю параметр "-minversion 5" для команды "gitsync" + И Я добавляю параметр "-plugins limit" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 + И Количество коммитов должно быть "5" + +Сценарий: Cинхронизация хранилища все вместе + Допустим Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" + И Я добавляю параметр "-tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + И Я добавляю параметр "-limit 3" для команды "gitsync" + И Я добавляю параметр "-minversion 2" для команды "gitsync" + И Я добавляю параметр "-maxversion 4" для команды "gitsync" + И Я добавляю параметр "-plugins limit" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 diff --git a/features/gitsync-plugin-process-fatform-modules.feature b/features/gitsync-plugin-process-fatform-modules.feature new file mode 100644 index 00000000..01e7820d --- /dev/null +++ b/features/gitsync-plugin-process-fatform-modules.feature @@ -0,0 +1,39 @@ +# language: ru + +Функционал: Работа плагина конвертации файлов форм module > module.bsl + Как Пользователь + Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища + Чтобы автоматизировать свою работы с хранилищем с git + +Контекст: Тестовый контекст + Когда Я очищаю параметры команды "gitsync" в контексте + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я добавляю параметр "sync" для команды "gitsync" + И Я создаю временный каталог и сохраняю его в контекст + И я скопировал каталог тестового хранилища конфигурации во временный каталог + И Я сохраняю значение временного каталога в переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ПутьКаталогаИсходников" + И Я создаю тестовой файл AUTHORS + И Я записываю "0" в файл VERSION + И Я создаю временный каталог и сохраняю его в контекст + И Я инициализирую bare репозиторий во временном каталоге + И Я сохраняю значение временного каталога в переменной "URLРепозитория" + И я инициализирую связь "ПутьКаталогаИсходников" с внешним репозиторием "URLРепозитория" + И я включаю отладку лога с именем "oscript.app.GitSync" + И я включаю отладку лога с именем "oscript.app.gitsync.plugins" + И я включаю отладку лога с именем "oscript.app.gitsync_plugins_process-fatform-modules" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" + И Я добавляю параметр "-tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + +Сценарий: Cинхронизация с использованием process-fatform-modules + Допустим Я добавляю параметр "-plugins process-fatform-modules" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 diff --git a/features/gitsync-plugin-push.feature b/features/gitsync-plugin-push.feature new file mode 100644 index 00000000..24c05ed8 --- /dev/null +++ b/features/gitsync-plugin-push.feature @@ -0,0 +1,65 @@ +# language: ru + +Функционал: Работа плагина отправки изменений на удаленный узел + Как Пользователь + Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища + Чтобы автоматизировать свою работы с хранилищем с git + +Контекст: Тестовый контекст + Когда Я очищаю параметры команды "gitsync" в контексте + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я добавляю параметр "sync" для команды "gitsync" + И Я создаю временный каталог и сохраняю его в контекст + И я скопировал каталог тестового хранилища конфигурации во временный каталог + И Я сохраняю значение временного каталога в переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ПутьКаталогаИсходников" + И Я создаю тестовой файл AUTHORS + И Я записываю "0" в файл VERSION + И Я создаю временный каталог и сохраняю его в контекст + И Я инициализирую bare репозиторий во временном каталоге + И Я сохраняю значение временного каталога в переменной "URLРепозитория" + И я инициализирую связь "ПутьКаталогаИсходников" с внешним репозиторием "URLРепозитория" + И я включаю отладку лога с именем "oscript.app.GitSync" + И я включаю отладку лога с именем "oscript.app.gitsync.plugins" + И я включаю отладку лога с именем "oscript.app.gitsync_plugins_push" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" + И Я добавляю параметр "-tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + +Сценарий: Cинхронизация с использованием push + Допустим Я добавляю параметр "-plugins push" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 + +Сценарий: Cинхронизация c использованием push-tags + Допустим Я добавляю параметр "-push-tags" для команды "gitsync" + И Я добавляю параметр "-plugins pull" для команды "gitsync" + И Я добавляю параметр "-plugins push" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 + +Сценарий: Cинхронизация c использованием push-every-n-commits + Допустим Я добавляю параметр "-push-every-n-commits 1" для команды "gitsync" + И Я добавляю параметр "-plugins push" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 + +Сценарий: Cинхронизация хранилища все вместе + Допустим Я добавляю параметр "-push-tags" для команды "gitsync" + И Я добавляю параметр "-push-every-n-commits 2" для команды "gitsync" + И Я добавляю параметр "-plugins push" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 diff --git a/features/gitsync-plugin-smart-tags.feature b/features/gitsync-plugin-smart-tags.feature new file mode 100644 index 00000000..6d4062b4 --- /dev/null +++ b/features/gitsync-plugin-smart-tags.feature @@ -0,0 +1,38 @@ +# language: ru + +Функционал: Работа плагина расстановки меток при коммите + Как Пользователь + Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища + Чтобы автоматизировать свою работы с хранилищем с git + +Контекст: Тестовый контекст + Когда Я очищаю параметры команды "gitsync" в контексте + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я добавляю параметр "sync" для команды "gitsync" + И Я создаю временный каталог и сохраняю его в контекст + И я скопировал каталог тестового хранилища конфигурации во временный каталог + И Я сохраняю значение временного каталога в переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ПутьКаталогаИсходников" + И Я создаю тестовой файл AUTHORS + И Я записываю "0" в файл VERSION + И Я создаю временный каталог и сохраняю его в контекст + И Я инициализирую bare репозиторий во временном каталоге + И Я сохраняю значение временного каталога в переменной "URLРепозитория" + И я инициализирую связь "ПутьКаталогаИсходников" с внешним репозиторием "URLРепозитория" + И я включаю отладку лога с именем "oscript.app.GitSync" + И я включаю отладку лога с именем "oscript.app.gitsync_plugins_smart-tags" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" + И Я добавляю параметр "-tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + +Сценарий: Cинхронизация c простым использованием + Допустим Я добавляю параметр "-plugins smart-tags" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 \ No newline at end of file diff --git a/features/gitsync-plugin-vendorUpload.feature b/features/gitsync-plugin-vendorUpload.feature new file mode 100644 index 00000000..091ad86d --- /dev/null +++ b/features/gitsync-plugin-vendorUpload.feature @@ -0,0 +1,51 @@ +# language: ru + +Функционал: Работа плагина использования механизма 1С Предприятие для получения версии из хранилища конфигурации + Как Пользователь + Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища + Чтобы автоматизировать свою работы с хранилищем с git + +Контекст: Тестовый контекст + Когда Я очищаю параметры команды "gitsync" в контексте + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я добавляю параметр "sync" для команды "gitsync" + И Я создаю временный каталог и сохраняю его в контекст + И я скопировал каталог тестового хранилища конфигурации во временный каталог + И Я сохраняю значение временного каталога в переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ПутьКаталогаИсходников" + И Я создаю тестовой файл AUTHORS + И Я записываю "0" в файл VERSION + И Я создаю временный каталог и сохраняю его в контекст + И Я инициализирую bare репозиторий во временном каталоге + И Я сохраняю значение временного каталога в переменной "URLРепозитория" + И я инициализирую связь "ПутьКаталогаИсходников" с внешним репозиторием "URLРепозитория" + И я включаю отладку лога с именем "oscript.app.GitSync" + И я включаю отладку лога с именем "oscript.app.gitsync_plugins" + И я включаю отладку лога с именем "oscript.app.gitsync_plugins_vendorUpload" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" + И Я добавляю параметр "-tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + +Сценарий: Cинхронизация с использованием vendorUpload + Допустим Я добавляю параметр "-plugins vendorUpload" для команды "gitsync" + И Я добавляю параметры для команды "gitsync" + |--storage-user Администратор| + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 + +Сценарий: Cинхронизация с использованием vendorUpload с получением истории через 1С + Допустим Я добавляю параметр "-plugins vendorUpload" для команды "gitsync" + И Я добавляю параметры для команды "gitsync" + |--storage-user Администратор| + |--vendorHistory | + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 \ No newline at end of file diff --git a/features/gitsync-plugins.feature b/features/gitsync-plugins.feature new file mode 100644 index 00000000..12341280 --- /dev/null +++ b/features/gitsync-plugins.feature @@ -0,0 +1,38 @@ +# language: ru + +Функционал: Работа плагинов совместно + Как Пользователь + Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища + Чтобы автоматизировать свою работы с хранилищем с git + +Контекст: Тестовый контекст + Когда Я очищаю параметры команды "gitsync" в контексте + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я добавляю параметр "sync" для команды "gitsync" + И Я создаю временный каталог и сохраняю его в контекст + И я скопировал каталог тестового хранилища конфигурации во временный каталог + И Я сохраняю значение временного каталога в переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в контекст + И Я сохраняю значение временного каталога в переменной "ПутьКаталогаИсходников" + И Я создаю тестовой файл AUTHORS + И Я записываю "0" в файл VERSION + И Я создаю временный каталог и сохраняю его в контекст + И Я инициализирую bare репозиторий во временном каталоге + И Я сохраняю значение временного каталога в переменной "URLРепозитория" + И я инициализирую связь "ПутьКаталогаИсходников" с внешним репозиторием "URLРепозитория" + И я включаю отладку лога с именем "oscript.app.GitSync" + И я включаю отладку лога с именем "oscript.app.gitsync.plugins" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + +Сценарий: Cинхронизация с использованием плагинов vendorUpload&increment + Допустим Я добавляю параметр "-plugins vendorUpload" для команды "gitsync" + И Я добавляю параметр "-plugins increment" для команды "gitsync" + И Я добавляю параметры для команды "gitsync" + |--storage-user Администратор| + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 \ No newline at end of file diff --git a/features/gitsync-sync.feature b/features/gitsync-sync.feature index 9cd0ae4a..5b436c86 100644 --- a/features/gitsync-sync.feature +++ b/features/gitsync-sync.feature @@ -1,12 +1,13 @@ # language: ru -Функционал: Инициализация каталога исходников конфигурации +Функционал: Синхронизация хранилища конфигурации 1С и гит (команды sync) Как Пользователь Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища Чтобы автоматизировать свою работы с хранилищем с git Контекст: Тестовый контекст Когда Я очищаю параметры команды "gitsync" в контексте + И Я создаю новый объект ГитРепозиторий И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке И Я добавляю параметр "sync" для команды "gitsync" И Я создаю временный каталог и сохраняю его в контекст @@ -32,64 +33,4 @@ Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" И Вывод команды "gitsync" не содержит "Внешнее исключение" - И Код возврата команды "gitsync" равен 0 - -Сценарий: Синхронизация хранилища с git-репозиторием без tool1CD - Допустим Я добавляю параметры для команды "gitsync" - |--storage-user Администратор| - |-useVendorUnload| - Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" - И Вывод команды "gitsync" не содержит "Внешнее исключение" - И Код возврата команды "gitsync" равен 0 - -Сценарий: Синхронизация хранилища с git-репозиторием с дополнительными параметрами без tool1CD - Допустим Я добавляю параметр "-useVendorUnload" для команды "gitsync" - И Я создаю временный каталог и сохраняю его в контекст - И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" - И Я добавляю параметр "-tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" - И Я добавляю параметры для команды "gitsync" - |--storage-user Администратор| - |-useVendorUnload| - |-check-authors| - |-auto-set-tags| - |-process-fatform-modules| - И Я добавляю параметр "-push-every-n-commits 5" для команды "gitsync" - Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" - И Вывод команды "gitsync" не содержит "Внешнее исключение" - И Код возврата команды "gitsync" равен 0 - -Сценарий: Синхронизация хранилища с git-репозиторием с выгрузкой только изменений - Допустим Я создаю временный каталог и сохраняю его в контекст - И Я сохраняю значение временного каталога в переменной "ВременнаяДиректория" - И Я добавляю параметр "-increment" для команды "gitsync" - Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" - И Вывод команды "gitsync" не содержит "Внешнее исключение" - И Код возврата команды "gitsync" равен 0 - -Сценарий: Синхронизация хранилища с git-репозиторием с выгрузкой только изменений без tool1CD - Допустим Я добавляю параметры для команды "gitsync" - |--storage-user Администратор| - |-increment| - |-useVendorUnload| - Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Синхронизация завершена" - И Вывод команды "gitsync" не содержит "Внешнее исключение" - И Код возврата команды "gitsync" равен 0 - - -Сценарий: Синхронизация хранилища с git-репозиторием с проверкой заполненности комментария - Допустим Я добавляю параметр "-stop-if-empty-comment" для команды "gitsync" - Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "КРИТИЧНАЯОШИБКА - Нашли следующую версию <4> от автора <Администратор>, а комментарий не задан!" - И Код возврата команды "gitsync" равен 1 - -Сценарий: Синхронизация хранилища с git-репозиторием с проверкой авторов версий в хранилище - Допустим Я добавляю параметр "-check-authors" для команды "gitsync" - И Я создаю неполный тестовой файл AUTHORS - И Я инициализирую связь "ПутьКаталогаИсходников" с внешним репозиторием "URLРепозитория" - Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "КРИТИЧНАЯОШИБКА - Пользователю хранилища <Администратор> не сопоставлен пользователь git." - И Код возврата команды "gitsync" равен 1 + И Код возврата команды "gitsync" равен 0 \ No newline at end of file diff --git a/features/step_definitions/gitsync-plugin-limit.os b/features/step_definitions/gitsync-plugin-limit.os new file mode 100644 index 00000000..b84f67f4 --- /dev/null +++ b/features/step_definitions/gitsync-plugin-limit.os @@ -0,0 +1,52 @@ +// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd +#Использовать tempfiles + +Перем БДД; //контекст фреймворка 1bdd + +// Метод выдает список шагов, реализованных в данном файле-шагов +Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт + БДД = КонтекстФреймворкаBDD; + + ВсеШаги = Новый Массив; + + ВсеШаги.Добавить("КоличествоКоммитовДолжноБыть"); + + Возврат ВсеШаги; +КонецФункции + +// Реализация шагов + +// Процедура выполняется перед запуском каждого сценария +Процедура ПередЗапускомСценария(Знач Узел) Экспорт + +КонецПроцедуры + +// Процедура выполняется после завершения каждого сценария +Процедура ПослеЗапускаСценария(Знач Узел) Экспорт + +КонецПроцедуры + +//Количество коммитов должно быть "5" +Процедура КоличествоКоммитовДолжноБыть(Знач ЧислоПроверки) Экспорт + + // ИмяФайлаЛогаГит = ВременныеФайлы.НовоеИмяФайла("txt"); + + // Батник = Новый КомандныйФайл; + // Батник.ДобавитьКоманду(СтрШаблон("cd %1 %2",?(ЭтоWindows, "/d", ""), ОбернутьВКавычки(КаталогИсходников))); + // Батник.ДобавитьКоманду("git log --pretty=oneline >"+ОбернутьВКавычки(ИмяФайлаЛогаГит)); + + // КодВозврата = Батник.Исполнить(); + // Утверждения.ПроверитьРавенство(0, КодВозврата, "Получение краткого лога хранилища git"); + + // ЛогГит = Новый ЧтениеТекста; + // ЛогГит.Открыть(ИмяФайлаЛогаГит); + // КоличествоКоммитов = 0; + // Пока ЛогГит.ПрочитатьСтроку() <> Неопределено Цикл + // КоличествоКоммитов = КоличествоКоммитов + 1; + // КонецЦикла; + // ЛогГит.Закрыть(); + + // Утверждения.ПроверитьРавенство(Число(ЧислоПроверки), КоличествоКоммитов, ""); + +КонецПроцедуры + diff --git a/features/step_definitions/gitsync-sync.os b/features/step_definitions/gitsync-sync.os index 3e68b3d5..75c1be64 100644 --- a/features/step_definitions/gitsync-sync.os +++ b/features/step_definitions/gitsync-sync.os @@ -22,6 +22,8 @@ ВсеШаги.Добавить("ЯДобавляюПараметрДляКомандыИзПеременной"); ВсеШаги.Добавить("ЯДобавляюПараметрыДляКоманды"); ВсеШаги.Добавить("ЯСоздаюНеполныйТестовойФайлAuthors"); + ВсеШаги.Добавить("ЯСоздаюНовыйОбъектГитрепозиторий"); + Возврат ВсеШаги; КонецФункции diff --git a/packagedef b/packagedef index 7e2b8f04..37010ae2 100644 --- a/packagedef +++ b/packagedef @@ -8,13 +8,15 @@ .ЗависитОт("cmdline", "0.6.1") .ЗависитОт("tempfiles", "0.2.1") .ЗависитОт("tool1cd", "0.4") - .ЗависитОт("v8runner", "0.11.2") + .ЗависитОт("v8runner", "0.13.0") .ЗависитОт("gitrunner", "1.5.0") .ЗависитОт("strings", "0.4.1") .ЗависитОт("1commands", "1.2.1") .ЗависитОт("v8unpack", "1.0.1") .ЗависитОт("json", "1.0.1") .ЗависитОт("fs", "0.4.1") + .ЗависитОт("delegate", "0.2.0") + .ЗависитОт("v8storage", "0.6.4") .ВключитьФайл("src") .ВключитьФайл("tests") .ВключитьФайл("features") diff --git a/src/buldle-plugins/check-authors.os b/src/buldle-plugins/check-authors.os new file mode 100644 index 00000000..98c16962 --- /dev/null +++ b/src/buldle-plugins/check-authors.os @@ -0,0 +1,86 @@ +#Использовать logos + +Перем ВерсияПлагина; +Перем Лог; +Перем Обработчик; +Перем МассивНомеровВерсий; + +Функция Информация() Экспорт + + Возврат Новый Структура("Версия, Лог", ВерсияПлагина, Лог) + +КонецФункции // Информация() Экспорт + +Процедура ПриАктивизацииПлагина(СтандартныйОбработчик) Экспорт + + Обработчик = СтандартныйОбработчик; + МассивНомеровВерсий = Неопределено; + +КонецПроцедуры + +Процедура ПослеПолученияТаблицыВерсий(ТаблицаИсторииХранилища, ПутьКХранилищу, КаталогРабочейКопии) Экспорт + + ПутьКФайлуСопоставления = ОбъединитьПути(КаталогРабочейКопии, Обработчик.ИмяФайлаАвторов()); + ТаблицаСопоставления = Обработчик.ПрочитатьФайлАвторовГитВТаблицуПользователей(ПутьКФайлуСопоставления); + СоответствиеСообщенийОбОшибочныхАвторах = Новый Соответствие; + + МассивНомеровВерсий = новый Массив; + + Для Каждого Строка Из ТаблицаИсторииХранилища Цикл + + СтрокаПользователя = ТаблицаСопоставления.Найти(строка.Автор, "Автор"); + Если СтрокаПользователя = Неопределено Тогда + + МассивНомеровВерсий.Добавить(Строка.НомерВерсии); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПередНачаломЦиклаОбработкиВерсий(ТаблицаИсторииХранилища, ТекущаяВерсия, СледующаяВерсия, МаксимальнаяВерсияДляРазбора) Экспорт + + КоличествоВерсий = 0; + + Для Каждого СтрокаВерсии из ТаблицаИсторииХранилища Цикл + + Если СтрокаВерсии.НомерВерсии < ТекущаяВерсия Тогда + Продолжить; + КонецЕсли; + + Если НЕ МассивНомеровВерсий.Найти(СтрокаВерсии.НомерВерсии) = Неопределено Тогда + + Лог.Отладка("Проверяю строку: "+ СтрокаВерсии.НомерВерсии); + СтрокаОшибки = СтрШаблон("Нашли версию <%1>, а автор <%2> не сопоставлен пользователь git.", СтрокаВерсии.НомерВерсии, СтрокаВерсии.Автор); + Лог.КритичнаяОшибка(СтрокаОшибки); + КоличествоВерсий = КоличествоВерсий +1; + КонецЕсли; + + КонецЦикла; + + Если КоличествоВерсий > 0 Тогда + + СтрокаОшибки = СтрШаблон("В таблице истории версий найдены авторы (количество %1), которые не сопоставлены в AUTHORS",КоличествоВерсий); + + ВызватьИсключение СтрокаОшибки; + + КонецЕсли; + +КонецПроцедуры + +Функция ИмяПлагина() + возврат "check-authors"; +КонецФункции // ИмяПлагина() + +Процедура Инициализация() + + ВерсияПлагина = "1.0.0"; + Лог = Логирование.ПолучитьЛог("oscript.app.gitsync_plugins_"+ СтрЗаменить(ИмяПлагина(),"-", "_")); + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("sync"); + КомандыПлагина.Добавить("export"); + +КонецПроцедуры + +Инициализация(); diff --git a/src/buldle-plugins/check-comments.os b/src/buldle-plugins/check-comments.os new file mode 100644 index 00000000..49400282 --- /dev/null +++ b/src/buldle-plugins/check-comments.os @@ -0,0 +1,96 @@ +#Использовать logos + +Перем ВерсияПлагина; +Перем Лог; +Перем КомандыПлагина; +Перем ВызватьОшибку; +Перем ДополнительныеПочтовыеАдреса; +Перем ОтправитьСообщение; + +Функция Информация() Экспорт + + Возврат Новый Структура("Версия, Лог", ВерсияПлагина, Лог) + +КонецФункции // Информация() Экспорт + + +Процедура ПриАктивизацииПлагина(СтандартныйОбработчик) Экспорт + + Обработчик = СтандартныйОбработчик; + +КонецПроцедуры + +Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации, Парсер) Экспорт + + Лог.Отладка("Ищю команду <%1> в списке поддерживаемых", ИмяКоманды); + Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда + Возврат; + КонецЕсли; + + Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); + + ОписаниеКоманды = Парсер.ПолучитьКоманду(ИмяКоманды); + // Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-push-every-n-commits", "[PLUGIN] [push] <число> количество коммитов до промежуточной отправки на удаленный сервер"); + Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "--call-error-comment", СтрШаблон("[*%1] флаг вызова ошибки при отсутствии текста комментария", ИмяПлагина())); + //Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "--send-email", СтрШаблон("[*%1] флаг отправки почты автору коммита и на дополнительные адреса", ИмяПлагина())); + //Парсер.ДобавитьИменованныйПараметрКоманды (ОписаниеКоманды, "--add-email", СтрШаблон("[*%1] дополнительный адрес для отправки сообщения", ИмяПлагина())); + //Парсер.ДобавитьИменованныйПараметрКоманды (ОписаниеКоманды, "--server-pop3", СтрШаблон("[*%1] адрес сервера (POP3) для отправки сообщения", ИмяПлагина())); + //Парсер.ДобавитьИменованныйПараметрКоманды (ОписаниеКоманды, "--server-user", СтрШаблон("[*%1] <пользователь> для сервера(POP3) для отправки сообщения", ИмяПлагина())); + //Парсер.ДобавитьИменованныйПараметрКоманды (ОписаниеКоманды, "--server-pwd", СтрШаблон("[*%1] <пароль> пользователя сервера(POP3) для отправки сообщения", ИмяПлагина())); + //Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "--server-use-ssl", СтрШаблон("[*%1] флаг использования SSL на сервере (POP3)", ИмяПлагина())); + + Парсер.ДобавитьКоманду(ОписаниеКоманды); + +КонецПроцедуры + +Процедура ПриПолученииПараметров(ПараметрыКоманды, ДополнительныеПараметры) Экспорт + + ВызватьОшибку = ПараметрыКоманды["-call-error"]; + //ОтправитьСообщение = ПараметрыКоманды["-send-email"]; + //ДополнительныеПочтовыеАдреса = ПараметрыКоманды["-add-email"]; + + Если ВызватьОшибку = Неопределено Тогда + ВызватьОшибку = Ложь; + КонецЕсли; + + // Если ОтправитьСообщение = Неопределено Тогда + // ОтправитьСообщение = Ложь; + // КонецЕсли; + + // Если ДополнительныеПочтовыеАдреса = Неопределено Тогда + // ДополнительныеПочтовыеАдреса = Новый Массивы; + // КонецЕсли; + +КонецПроцедуры + +Процедура ПередОбработкойВерсииХранилища(СтрокаВерсии, СледующаяВерсия) Экспорт + + Если ПустаяСтрока(СтрокаВерсии.Комментарий) Тогда + СтрокаОшибки = СтрШаблон("Нашли следующую версию <%1> от автора <%2>, а комментарий не задан!", СледующаяВерсия, СтрокаВерсии.Автор); + Лог.КритичнаяОшибка(СтрокаОшибки); + + Если ВызватьОшибку Тогда + + ВызватьИсключение СтрокаОшибки; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Функция ИмяПлагина() + возврат "check-comments"; +КонецФункции // ИмяПлагина() + +Процедура Инициализация() + + ВерсияПлагина = "1.0.0"; + Лог = Логирование.ПолучитьЛог("oscript.app.gitsync_plugins_"+ СтрЗаменить(ИмяПлагина(),"-", "_")); + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("sync"); + КомандыПлагина.Добавить("export"); + +КонецПроцедуры + +Инициализация(); diff --git a/src/buldle-plugins/disableSupport.os b/src/buldle-plugins/disableSupport.os new file mode 100644 index 00000000..a0c0ff96 --- /dev/null +++ b/src/buldle-plugins/disableSupport.os @@ -0,0 +1,57 @@ + +#Использовать logos + + +Перем ВерсияПлагина; +Перем Лог; +Перем КомандыПлагина; + +Перем Обработчик; + +Функция Информация() Экспорт + + Возврат Новый Структура("Версия, Лог", ВерсияПлагина, Лог) + +КонецФункции // Информация() Экспорт + +Процедура ПриАктивизацииПлагина(СтандартныйОбработчик) Экспорт + + Обработчик = СтандартныйОбработчик; + +КонецПроцедуры + +Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации, Парсер) Экспорт + + Лог.Отладка("Ищю команду <%1> в списке поддерживаемых", ИмяКоманды); + Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда + Возврат; + КонецЕсли; + + //Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); + +КонецПроцедуры + +Процедура ПередВыгрузкойКонфигурациюВИсходники(Конфигуратор, КаталогРабочейКопии, КаталогВыгрузки, ПутьКХранилищу, НомерВерсии, Формат) Экспорт + + Конфигуратор.СнятьКонфигурациюСПоддержки(Истина); + +КонецПроцедуры + +Функция ИмяПлагина() + возврат "disableSupport"; +КонецФункции // ИмяПлагина() + +Процедура Инициализация() + + ВерсияПлагина = "1.0.0"; + Лог = Логирование.ПолучитьЛог("oscript.app.gitsync_plugins_"+ СтрЗаменить(ИмяПлагина(),"-", "_")); + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("sync"); + КомандыПлагина.Добавить("export"); + ПутьКФайлуВерсийМетаданных = ""; + ИмяФайлаДампаКонфигурации = "ConfigDumpInfo.xml"; + ВыгрузкаИзмененийВозможна = Ложь; + +КонецПроцедуры + +Инициализация(); diff --git a/src/buldle-plugins/increment.os b/src/buldle-plugins/increment.os new file mode 100644 index 00000000..3b47e2a9 --- /dev/null +++ b/src/buldle-plugins/increment.os @@ -0,0 +1,186 @@ + +#Использовать logos +#Использовать gitrunner + +Перем ВерсияПлагина; +Перем Лог; +Перем КомандыПлагина; + +Перем Обработчик; + +Перем ИмяФайлаДампаКонфигурации; +Перем ПутьКФайлуВерсийМетаданных; +Перем ОчиститьКаталогРабочейКопии; +Перем ВыгрузкаИзмененийВозможна; + +Функция Информация() Экспорт + + Возврат Новый Структура("Версия, Лог", ВерсияПлагина, Лог) + +КонецФункции // Информация() Экспорт + +Процедура ПриАктивизацииПлагина(СтандартныйОбработчик) Экспорт + + Обработчик = СтандартныйОбработчик; + ПутьКФайлуВерсийМетаданных = ""; + ВыгрузкаИзмененийВозможна = Ложь; + +КонецПроцедуры + +Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации, Парсер) Экспорт + + Лог.Отладка("Ищю команду <%1> в списке поддерживаемых", ИмяКоманды); + Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда + Возврат; + КонецЕсли; + + Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); + +КонецПроцедуры + +Процедура ПередВыгрузкойКонфигурациюВИсходники(Конфигуратор, КаталогРабочейКопии, КаталогВыгрузки, ПутьКХранилищу, НомерВерсии, Формат) Экспорт + + Консоль = Новый Консоль(); + //Консоль.ВидимостьКурсора(Ложь); + ЦветТекстаКонсоли = Консоль.ЦветТекста; + Консоль.ЦветТекста = ЦветКонсоли.Yellow; + //Консоль.ВывестиСтроку("ИНФОРМАЦИЯ - Определяю тип возможной выгрузки в файлы"); + + Лог.Информация("Определяю тип возможной выгрузки конфигурации в файлы"); + Консоль.ЦветТекста = ЦветТекстаКонсоли; + + ТекущийФайлВерсийМетаданных = Новый Файл(ОбъединитьПути(КаталогРабочейКопии, ИмяФайлаДампаКонфигурации)); + + ПутьКФайлуВерсийМетаданных = ТекущийФайлВерсийМетаданных.ПолноеИмя; + + Лог.Отладка("Проверяю существование файла <%1> в каталоге <%2>, файл <%3>", ИмяФайлаДампаКонфигурации, КаталогРабочейКопии, ?(ТекущийФайлВерсийМетаданных.Существует(), "существует", "отсутствует")); + + Лог.Отладка("Проверяю возможность обновление выгрузки для файла <%1>", ПутьКФайлуВерсийМетаданных); + + ВыгрузкаИзмененийВозможна = ТекущийФайлВерсийМетаданных.Существует() + И ПроверитьВозможностьОбновленияФайловВыгрузки(Конфигуратор, КаталогВыгрузки, ПутьКФайлуВерсийМетаданных, Формат); + + Лог.Отладка("Инкрементальная выгрузка конфигурации - %1", ?(ВыгрузкаИзмененийВозможна, "ВОЗМОЖНА","НЕВОЗМОЖНА")); + + ЦветИнкрементальнаяВыгрузка = ЦветКонсоли.Зеленый; + ЦветПолнаяВыгрузка = ЦветКонсоли.Синий; + + Консоль.ЦветТекста = ЦветКонсоли.Yellow; + Консоль.Вывести("ИНФОРМАЦИЯ - Тип выгрузки конфигурации в файлы:"); + //Консоль.КурсорЛево = СтрДлина("ИНФОРМАЦИЯ - Определяю тип возможной выгрузки в файлы: "); + + Если ВыгрузкаИзмененийВозможна Тогда + Текст = "ИНКРЕМЕНТАЛЬНАЯ ВЫГРУЗКА"; + Консоль.ЦветТекста = ЦветИнкрементальнаяВыгрузка; + Иначе + Текст = "ПОЛНАЯ ВЫГРУЗКА"; + Консоль.ЦветТекста = ЦветПолнаяВыгрузка; + КонецЕсли; + + Консоль.Вывести(" " + Текст); + + Консоль.ЦветТекста = ЦветТекстаКонсоли; + + Консоль.ВывестиСтроку(""); + Консоль = Неопределено; + +КонецПроцедуры + +Процедура ПриВыгрузкеКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки, Формат, СтандартнаяОбработка) Экспорт + + Если ВыгрузкаИзмененийВозможна Тогда + + СтандартнаяОбработка = ложь; + + Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); + Параметры.Добавить(СтрШаблон("/DumpConfigToFiles %1", ОбернутьВКавычки(КаталогВыгрузки))); + Параметры.Добавить(СтрШаблон("-format %1", Формат)); + + Параметры.Добавить("-update"); + + Параметры.Добавить(СтрШаблон("-configDumpInfoForChanges %1", ОбернутьВКавычки(ПутьКФайлуВерсийМетаданных))); + + Конфигуратор.ВыполнитьКоманду(Параметры); + + КонецЕсли; + +КонецПроцедуры + +Процедура ПриОчисткеКаталогаРабочейКопии(КаталогРабочейКопии, СоответствиеИменФайловДляПропуска, СтандартнаяОбработка) Экспорт + + Если ВыгрузкаИзмененийВозможна Тогда + СтандартнаяОбработка = Ложь; + КонецЕсли; + +КонецПроцедуры + + +// Функция проверяет возможность обновления файлов выгрузки, для каталога или конкретного файла версий +// +Функция ПроверитьВозможностьОбновленияФайловВыгрузки(Конфигуратор, Знач КаталогВыгрузки, Знач ПутьКФайлуВерсийДляСравнения = "", Знач ФорматВыгрузки = "") + + ПутьКФайлуИзменений = ВременныеФайлы.НовоеИмяФайла(); + ОбновлениеВозможно = Ложь; + + ТекущийФайлВерсийМетаданных = Новый Файл(ОбъединитьПути(КаталогВыгрузки,"ConfigDumpInfo.xml")); + ФайлВерсийДляСравнения = Новый Файл(ПутьКФайлуВерсийДляСравнения); + + Если НЕ ТекущийФайлВерсийМетаданных.Существует() И ПустаяСтрока(ПутьКФайлуВерсийДляСравнения) Тогда + Возврат ОбновлениеВозможно; + КонецЕсли; + + Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); + Параметры.Добавить(СтрШаблон("/DumpConfigToFiles %1", ОбернутьВКавычки(КаталогВыгрузки))); + Параметры.Добавить(СтрШаблон("-getChanges %1", ОбернутьВКавычки(ПутьКФайлуИзменений))); + + Если ЗначениеЗаполнено(ПутьКФайлуВерсийДляСравнения) Тогда + + Параметры.Добавить(СтрШаблон("-configDumpInfoForChanges %1", ОбернутьВКавычки(ПутьКФайлуВерсийДляСравнения))); + + КонецЕсли; + + Конфигуратор.ВыполнитьКоманду(Параметры); + + ФайлИзменений = Новый Файл(ПутьКФайлуИзменений); + + Если ФайлИзменений.Существует() Тогда + СтрокаПолныйДамп = ВРег("FullDump"); + чтениеФайла = Новый ЧтениеТекста(ПутьКФайлуИзменений); + СтрокаВыгрузки = Лев(ВРег(чтениеФайла.ПрочитатьСтроку()),СтрДлина(СтрокаПолныйДамп)); + + Если Не ПустаяСтрока(СокрЛП(СтрокаВыгрузки)) Тогда + + Лог.Отладка("Строка проверки на возможность выгрузки конфигурации: <%1> = <%2> ", СтрокаПолныйДамп, СтрокаВыгрузки); + ОбновлениеВозможно = НЕ (СтрокаВыгрузки = СтрокаПолныйДамп); + + КонецЕсли; + чтениеФайла.Закрыть(); + + КонецЕсли; + + Возврат ОбновлениеВозможно; + +КонецФункции + +Функция ОбернутьВКавычки(Знач Строка) + Возврат """" + Строка + """"; +КонецФункции + +Функция ИмяПлагина() + возврат "increment"; +КонецФункции // ИмяПлагина() + +Процедура Инициализация() + + ВерсияПлагина = "1.0.0"; + Лог = Логирование.ПолучитьЛог("oscript.app.gitsync_plugins_"+ СтрЗаменить(ИмяПлагина(),"-", "_")); + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("sync"); + КомандыПлагина.Добавить("export"); + ПутьКФайлуВерсийМетаданных = ""; + ИмяФайлаДампаКонфигурации = "ConfigDumpInfo.xml"; + ВыгрузкаИзмененийВозможна = Ложь; + +КонецПроцедуры + +Инициализация(); diff --git a/src/buldle-plugins/limit.os b/src/buldle-plugins/limit.os new file mode 100644 index 00000000..dff33ec1 --- /dev/null +++ b/src/buldle-plugins/limit.os @@ -0,0 +1,166 @@ + +#Использовать logos + +Перем ВерсияПлагина; +Перем Лог; +Перем КомандыПлагина; +Перем МассивНомеровВерсий; +Перем Лимит; +Перем Обработчик; +Перем НачальнаяВерсия; +Перем КонечнаяВерсия; + +Функция Информация() Экспорт + + Возврат Новый Структура("Версия, Лог", ВерсияПлагина, Лог) + +КонецФункции // Информация() Экспорт + +Процедура ПриАктивизацииПлагина(СтандартныйОбработчик) Экспорт + + Обработчик = СтандартныйОбработчик; + +КонецПроцедуры + +Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации, Парсер) Экспорт + + Лог.Отладка("Ищю команду <%1> в списке поддерживаемых", ИмяКоманды); + Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда + Возврат; + КонецЕсли; + + Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); + + ОписаниеКоманды = Парсер.ПолучитьКоманду(ИмяКоманды); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-limit", "[*limit] выгрузить не более <Количества> версий от текущей выгруженной"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-minversion", "[*limit] <номер> минимальной версии для выгрузки"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-maxversion", "[*limit] <номер> максимальной версии для выгрузки"); + + Парсер.ДобавитьКоманду(ОписаниеКоманды); + +КонецПроцедуры + +Процедура ПриПолученииПараметров(ПараметрыКоманды, ДополнительныеПараметры) Экспорт + + Лимит = ПараметрыКоманды["-limit"]; + НачальнаяВерсия = ПараметрыКоманды["-minversion"]; + КонечнаяВерсия = ПараметрыКоманды["-maxversion"]; + + Если Лимит = Неопределено Тогда + Лимит = 0; + КонецЕсли; + + Если НачальнаяВерсия = Неопределено Тогда + НачальнаяВерсия = 0; + КонецЕсли; + + Если КонечнаяВерсия = Неопределено Тогда + КонечнаяВерсия = 0; + КонецЕсли; + + + Лимит = Число(Лимит); + НачальнаяВерсия = Число(НачальнаяВерсия); + КонечнаяВерсия = Число(КонечнаяВерсия); + Если Лимит > 0 Тогда + Лог.Информация("Установлен лимит <%1> для количества версий, при выгрузке", Лимит); + КонецЕсли; + + Если НачальнаяВерсия > 0 Тогда + Лог.Информация("Установлена начальная версия <%1> при выгрузке версий", НачальнаяВерсия); + КонецЕсли; + Если КонечнаяВерсия > 0 Тогда + Лог.Информация("Установлена конечная версия <%1> при выгрузке версий", КонечнаяВерсия); + КонецЕсли; + +КонецПроцедуры + +Процедура ПередНачаломЦиклаОбработкиВерсий(ТаблицаИсторииХранилища, ТекущаяВерсия, СледующаяВерсия, МаксимальнаяВерсияДляРазбора) Экспорт + + Если НачальнаяВерсия > 0 Тогда + СледующаяВерсия = Макс(НачальнаяВерсия, СледующаяВерсия); + КонецЕсли; + + Если Лимит > 0 Тогда + + СтрокаТекущейВерсии = ТаблицаИсторииХранилища.Найти(ТекущаяВерсия, "НомерВерсии"); + ИндексСтрокиТекущейВерсии = ТаблицаИсторииХранилища.Индекс(СтрокаТекущейВерсии); + ИндексСтрокиСОграничением = Мин(ТаблицаИсторииХранилища.Количество() - 1, ИндексСтрокиТекущейВерсии + Лимит); + НомерВерсииСогласноЛимита = ТаблицаИсторииХранилища[ИндексСтрокиСОграничением].НомерВерсии; + + Если КонечнаяВерсия = 0 Тогда + КонечнаяВерсия = НомерВерсииСогласноЛимита; + Иначе + КонечнаяВерсия = ?(КонечнаяВерсия >= НомерВерсииСогласноЛимита, КонечнаяВерсия, НомерВерсииСогласноЛимита); + КонецЕсли; + + КонецЕсли; + + МаксимальнаяВерсияДляРазбора = ОпределитьМаксимальнуюВерсиюСУчетомОграниченияСверху(ТаблицаИсторииХранилища, ТекущаяВерсия, КонечнаяВерсия); + +КонецПроцедуры + + +Функция ОпределитьМаксимальнуюВерсиюСУчетомОграниченияСверху(Знач ТаблицаИсторииХранилища, Знач ТекущаяВерсия, Знач МаксимальнаяВерсия) + + МаксимальнаяВерсияДляРазбора = 0; + ЧислоВерсийПлюс = 0; + + Если МаксимальнаяВерсия <> 0 Тогда + Попытка + МаксимальнаяВерсия = Число(МаксимальнаяВерсия); + Исключение + МаксимальнаяВерсия = 0; + КонецПопытки; + КонецЕсли; + + МаксВерсияВХранилище = ОпределитьМаксимальнуюВерсиюВХранилище(ТаблицаИсторииХранилища); + + Если МаксимальнаяВерсия > 0 Тогда + МаксимальнаяВерсияДляРазбора = Мин(МаксВерсияВХранилище, МаксимальнаяВерсия) ; + Иначе + МаксимальнаяВерсияДляРазбора = МаксВерсияВХранилище; + КонецЕсли; + + Возврат МаксимальнаяВерсияДляРазбора; + +КонецФункции + +Функция ОпределитьМаксимальнуюВерсиюВХранилище(Знач ТаблицаИсторииХранилища) + + Если ТаблицаИсторииХранилища.Количество() = 0 Тогда + Возврат 0; + КонецЕсли; + + МаксимальнаяВерсия = Число(ТаблицаИсторииХранилища[0].НомерВерсии); + Для Сч = 1 По ТаблицаИсторииХранилища.Количество()-1 Цикл + ЧислоВерсии = Число(ТаблицаИсторииХранилища[Сч].НомерВерсии); + Если ЧислоВерсии > МаксимальнаяВерсия Тогда + МаксимальнаяВерсия = ЧислоВерсии; + КонецЕсли; + КонецЦикла; + + Возврат МаксимальнаяВерсия; + +КонецФункции + +Функция ИмяПлагина() + возврат "limit"; +КонецФункции // ИмяПлагина() + +Процедура Инициализация() + + ВерсияПлагина = "1.0.0"; + Лог = Логирование.ПолучитьЛог("oscript.app.gitsync_plugins_"+ СтрЗаменить(ИмяПлагина(),"-", "_")); + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("sync"); + КомандыПлагина.Добавить("export"); + Лимит = 0; + КонечнаяВерсия = 0; + НачальнаяВерсия = 0; + +КонецПроцедуры + +Инициализация(); + + diff --git a/src/buldle-plugins/process-fatform-modules.os b/src/buldle-plugins/process-fatform-modules.os new file mode 100644 index 00000000..54eabc8a --- /dev/null +++ b/src/buldle-plugins/process-fatform-modules.os @@ -0,0 +1,110 @@ + +#Использовать logos +#Использовать gitrunner + +Перем ВерсияПлагина; +Перем Лог; +Перем КомандыПлагина; + +Перем Обработчик; + +Перем КорневойКаталог; +Перем ДополнительнаяТаблицаПереименования; + +Функция Информация() Экспорт + + Возврат Новый Структура("Версия, Лог", ВерсияПлагина, Лог) + +КонецФункции // Информация() Экспорт + +Процедура ПриАктивизацииПлагина(СтандартныйОбработчик) Экспорт + + Обработчик = СтандартныйОбработчик; + + ДополнительнаяТаблицаПереименования.Очистить(); + +КонецПроцедуры + +Процедура ПриПеремещенииВКаталогРабочейКопии(КаталогРабочейКопии, КаталогВыгрузки, ТаблицаПереименования, ПутьКФайлуПереименования, СтандартнаяОбработка) Экспорт + + КорневойКаталог = КаталогРабочейКопии + ПолучитьРазделительПути(); + Лог.Отладка("Корневой каталог: %1", КорневойКаталог); + +КонецПроцедуры + +Процедура ПослеРаспаковкиКонтейнераМетаданных(ФайлРаспаковки, КаталогРаспаковки) Экспорт + + Для Каждого ФайлМодуля Из НайтиФайлы(КаталогРаспаковки, "module", Истина) Цикл + + СтароеИмяФайла = ФайлМодуля.ПолноеИмя; + НовоеИмяФайла = ОбъединитьПути(ФайлМодуля.Путь, "Module.bsl"); + + Лог.Отладка("Конвертирую наименование файла <%1> --> <%2>", СтароеИмяФайла, НовоеИмяФайла); + КопироватьФайл(СтароеИмяФайла, НовоеИмяФайла); + УдалитьФайлы(СтароеИмяФайла); + + ДобавитьПереименование( + СтрЗаменить(СтароеИмяФайла, КорневойКаталог, ""), + СтрЗаменить(НовоеИмяФайла, КорневойКаталог, "")); + + КонецЦикла; + +КонецПроцедуры + +Процедура ПослеПеремещенияВКаталогРабочейКопии(КаталогРабочейКопии, КаталогВыгрузки, ТаблицаПереименования, ПутьКФайлуПереименования) Экспорт + + ТекстовыйДокумент = Новый ЗаписьТекста(ПутьКФайлуПереименования,,,Истина); + + Для Каждого ЭлементСтроки Из ДополнительнаяТаблицаПереименования Цикл + ТекстовыйДокумент.ЗаписатьСтроку(СтрШаблон("%1-->%2", ЭлементСтроки.Источник, ЭлементСтроки.Приемник)); + КонецЦикла; + ТекстовыйДокумент.Закрыть(); + + +КонецПроцедуры + +Процедура ДобавитьПереименование(Знач Источник, Знач Приемник) + + Приемник = СтрЗаменить(Приемник, "/", "\"); + Источник = СтрЗаменить(Источник, "/", "\"); + + Если Не Источник = Приемник Тогда + + СтрокаПереименования = ДополнительнаяТаблицаПереименования.Добавить(); + СтрокаПереименования.Источник = Источник; + СтрокаПереименования.Приемник = Приемник; + + КонецЕсли; + +КонецПроцедуры + + +Функция Форматировать(Знач Уровень, Знач Сообщение) Экспорт + + Возврат СтрШаблон("%2 - %3 [PLUGIN %1]", ИмяПлагина(), УровниЛога.НаименованиеУровня(Уровень), Сообщение); + +КонецФункции + +Функция ИмяПлагина() + возврат "process-fatform-modules"; +КонецФункции // ИмяПлагина() + +Процедура Инициализация() + + ВерсияПлагина = "1.0.0"; + Лог = Логирование.ПолучитьЛог("oscript.app.gitsync_plugins_"+ СтрЗаменить(ИмяПлагина(),"-", "_")); + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("sync"); + КомандыПлагина.Добавить("export"); + + КорневойКаталог = Неопределено; + ДополнительнаяТаблицаПереименования = Новый ТаблицаЗначений; + ДополнительнаяТаблицаПереименования.Колонки.Добавить("Источник"); + ДополнительнаяТаблицаПереименования.Колонки.Добавить("Приемник"); + + + Лог.УстановитьРаскладку(ЭтотОбъект); + +КонецПроцедуры + +Инициализация(); diff --git a/src/buldle-plugins/pull.os b/src/buldle-plugins/pull.os new file mode 100644 index 00000000..29be77e1 --- /dev/null +++ b/src/buldle-plugins/pull.os @@ -0,0 +1,86 @@ + +#Использовать logos +#Использовать gitrunner + +Перем ВерсияПлагина; +Перем Лог; +Перем КомандыПлагина; + +Перем Обработчик; + +Перем URLРепозитория; +Перем ИмяВетки; + +Перем ГитРепозиторийСохр; +Перем РабочийКаталогСохр; + +Функция Информация() Экспорт + + Возврат Новый Структура("Версия, Лог", ВерсияПлагина, Лог) + +КонецФункции // Информация() Экспорт + +Процедура ПриАктивизацииПлагина(СтандартныйОбработчик) Экспорт + + Обработчик = СтандартныйОбработчик; + +КонецПроцедуры + +Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации, Парсер) Экспорт + + Лог.Отладка("Ищю команду <%1> в списке поддерживаемых", ИмяКоманды); + Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда + Возврат; + КонецЕсли; + + Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); + +КонецПроцедуры + +Процедура ПередНачаломВыполнения(ПутьКХранилищу, КаталогРабочейКопии, URLРепозитория, ИмяВетки) Экспорт + + Лог.Информация("Получение изменений с удаленного узла (pull)"); + + ГитРепозиторий = ПолучитьГитРепозиторий(КаталогРабочейКопии); + ГитРепозиторий.Получить(URLРепозитория, ИмяВетки); + +КонецПроцедуры + +Функция ПолучитьГитРепозиторий(Знач КаталогРабочейКопии) + + ФайлКаталога = Новый Файл(ОбъединитьПути(ТекущийКаталог(), КаталогРабочейКопии)); + Если ФайлКаталога.ПолноеИмя = РабочийКаталогСохр Тогда + ГитРепозиторий = ГитРепозиторийСохр; + Иначе + ГитРепозиторий = Новый ГитРепозиторий; + ГитРепозиторий.УстановитьРабочийКаталог(КаталогРабочейКопии); + ГитРепозиторий.УстановитьНастройку("core.quotepath", "false", РежимУстановкиНастроекGit.Локально); + ГитРепозиторий.УстановитьНастройку("merge.ours.driver", "true", РежимУстановкиНастроекGit.Локально); + + РабочийКаталогСохр = ФайлКаталога.ПолноеИмя; + ГитРепозиторийСохр = ГитРепозиторий; + + КонецЕсли; + + Возврат ГитРепозиторий; + +КонецФункции // ПолучитьГитРепозиторий() + +Функция ИмяПлагина() + возврат "pull"; +КонецФункции // ИмяПлагина() + +Процедура Инициализация() + + ВерсияПлагина = "1.0.0"; + Лог = Логирование.ПолучитьЛог("oscript.app.gitsync_plugins_"+ СтрЗаменить(ИмяПлагина(),"-", "_")); + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("sync"); + КомандыПлагина.Добавить("export"); + + ИмяВетки = "master"; + СчетчикКоммитов = 0; + +КонецПроцедуры + +Инициализация(); diff --git a/src/buldle-plugins/push.os b/src/buldle-plugins/push.os new file mode 100644 index 00000000..6bb28387 --- /dev/null +++ b/src/buldle-plugins/push.os @@ -0,0 +1,174 @@ + +#Использовать logos +#Использовать gitrunner + +Перем ВерсияПлагина; +Перем Лог; +Перем КомандыПлагина; + +Перем Обработчик; +Перем СчетчикКоммитов; +Перем URLРепозитория; +Перем КоличествоКоммитовДоPush; +Перем ИмяВетки; +Перем ОтправлятьТеги; +Перем ГитРепозиторийСохр; +Перем РабочийКаталогСохр; + +Функция Информация() Экспорт + + Возврат Новый Структура("Версия, Лог", ВерсияПлагина, Лог) + +КонецФункции // Информация() Экспорт + +Процедура ПриАктивизацииПлагина(СтандартныйОбработчик) Экспорт + + Обработчик = СтандартныйОбработчик; + +КонецПроцедуры + +Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации, Парсер) Экспорт + + Лог.Отладка("Ищю команду <%1> в списке поддерживаемых", ИмяКоманды); + Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда + Возврат; + КонецЕсли; + + Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); + + ОписаниеКоманды = Парсер.ПолучитьКоманду(ИмяКоманды); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-push-every-n-commits", "[*push] <число> количество коммитов до промежуточной отправки на удаленный сервер"); + Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-push-tags", "[*push] Флаг отправки установленных меток"); + + Парсер.ДобавитьКоманду(ОписаниеКоманды); + +КонецПроцедуры + +Процедура ПриПолученииПараметров(ПараметрыКоманды, ДополнительныеПараметры) Экспорт + + КоличествоКоммитовДоPush = ПараметрыКоманды["-push-every-n-commits"]; + ОтправлятьТеги = ПараметрыКоманды["-push-tags"]; + + СчетчикКоммитов = 0; + + Если КоличествоКоммитовДоPush = Неопределено Тогда + КоличествоКоммитовДоPush = 0; + КонецЕсли; + + Если ОтправлятьТеги = Неопределено Тогда + ОтправлятьТеги = Ложь; + КонецЕсли; + + КоличествоКоммитовДоPush = Число(КоличествоКоммитовДоPush); + + Лог.Отладка("Установлено количество коммитов <%1> после, которых осущевствляется отправка", КоличествоКоммитовДоPush); + Лог.Отладка("Установлен флаг оправки меток в значение <%1> выгрузки версий", ОтправлятьТеги); + +КонецПроцедуры + + + +Процедура ПередНачаломВыполнения(ПутьКХранилищу, КаталогРабочейКопии, URLРепозитория, ИмяВетки) Экспорт + + URLРепозитория = URLРепозитория; + ИмяВетки = ИмяВетки; + +КонецПроцедуры + +Процедура ПослеОкончанияВыполнения(ПутьКХранилищу, КаталогРабочейКопии, URLРепозитория, ИмяВетки) Экспорт + + Если СчетчикКоммитов = 0 Тогда + Возврат; + КонецЕсли; + + ГитРепозиторий = ПолучитьГитРепозиторий(КаталогРабочейКопии); + ВыполнитьGitPush(ГитРепозиторий, КаталогРабочейКопии, URLРепозитория, ИмяВетки); + +КонецПроцедуры + + +Процедура ПослеКоммита(ГитРепозиторий, КаталогРабочейКопии) Экспорт + + СчетчикКоммитов = СчетчикКоммитов + 1; + + Если СчетчикКоммитов = КоличествоКоммитовДоPush Тогда + + ВыполнитьGitPush(ГитРепозиторий, КаталогРабочейКопии, URLРепозитория, ИмяВетки); + СчетчикКоммитов = 0; + + КонецЕсли; + +КонецПроцедуры + + +// Cтандартная процедура git push +// +Функция ВыполнитьGitPush(Знач ГитРепозиторий,Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки = Неопределено, Знач ОтправитьМетки = Ложь) Экспорт + + + Лог.Информация("Отправляю изменения на удаленный url (push)"); + + ГитРепозиторий.ВыполнитьКоманду(СтрРазделить("gc --auto", " ")); + Лог.Отладка(СтрШаблон("Вывод команды gc: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды()))); + + ПараметрыКомандыPush = Новый Массив; + ПараметрыКомандыPush.Добавить("push -u"); + ПараметрыКомандыPush.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%")); + ПараметрыКомандыPush.Добавить("--all -v"); + + ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыPush); + + Если ОтправлятьТеги Тогда + + ПараметрыКомандыPush = Новый Массив; + ПараметрыКомандыPush.Добавить("push -u"); + ПараметрыКомандыPush.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%")); + ПараметрыКомандыPush.Добавить("--tags"); + + ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыPush); + + КонецЕсли; + + Лог.Отладка(СтрШаблон("Вывод команды Push: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды()))); + +КонецФункции + +Функция ПолучитьГитРепозиторий(Знач КаталогРабочейКопии) + + ФайлКаталога = Новый Файл(ОбъединитьПути(ТекущийКаталог(), КаталогРабочейКопии)); + Если ФайлКаталога.ПолноеИмя = РабочийКаталогСохр Тогда + ГитРепозиторий = ГитРепозиторийСохр; + Иначе + ГитРепозиторий = Новый ГитРепозиторий; + ГитРепозиторий.УстановитьРабочийКаталог(КаталогРабочейКопии); + ГитРепозиторий.УстановитьНастройку("core.quotepath", "false", РежимУстановкиНастроекGit.Локально); + ГитРепозиторий.УстановитьНастройку("merge.ours.driver", "true", РежимУстановкиНастроекGit.Локально); + + РабочийКаталогСохр = ФайлКаталога.ПолноеИмя; + ГитРепозиторийСохр = ГитРепозиторий; + + КонецЕсли; + + Возврат ГитРепозиторий; + +КонецФункции // ПолучитьГитРепозиторий() + +Функция ИмяПлагина() + возврат "push"; +КонецФункции // ИмяПлагина() + +Процедура Инициализация() + + ВерсияПлагина = "1.0.0"; + Лог = Логирование.ПолучитьЛог("oscript.app.gitsync_plugins_"+ СтрЗаменить(ИмяПлагина(),"-", "_")); + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("sync"); + КомандыПлагина.Добавить("export"); + + URLРепозитория = Неопределено; + ИмяВетки = "master"; + СчетчикКоммитов = 0; + +КонецПроцедуры + +Инициализация(); diff --git a/src/buldle-plugins/smart-tags.os b/src/buldle-plugins/smart-tags.os new file mode 100644 index 00000000..6bb2b1d7 --- /dev/null +++ b/src/buldle-plugins/smart-tags.os @@ -0,0 +1,162 @@ +#Использовать logos + +Перем ВерсияПлагина; +Перем Лог; +Перем Обработчик; +Перем ПоследняяВерсияКонфигурации; +Перем ТекущаяВерсияКонфигурации; + +Функция Информация() Экспорт + + Возврат Новый Структура("Версия, Лог, Имя", ВерсияПлагина, Лог, ИмяПлагина()) + +КонецФункции // Информация() Экспорт + +Процедура ПриАктивизацииПлагина(СтандартныйОбработчик) Экспорт + + Обработчик = СтандартныйОбработчик; + ПоследняяВерсияКонфигурации = ""; + ТекущаяВерсияКонфигурации = ""; + +КонецПроцедуры + +Процедура ПередНачаломВыполнения(ПутьКХранилищу, КаталогРабочейКопии, URLРепозитория, ИмяВетки) Экспорт + + ПоследняяВерсияКонфигурации = ПрочитатьВерсиюИзИсходников(КаталогРабочейКопии); + +КонецПроцедуры + +Процедура ПередОбработкойВерсииХранилища(СтрокаВерсии, СледующаяВерсия) Экспорт + + Если ЗначениеЗаполнено(СтрокаВерсии.Тэг) Тогда + ТекущаяВерсияКонфигурации = СтрокаВерсии.Тэг; + КонецЕсли; + +КонецПроцедуры + +Процедура ПослеКоммита(ГитРепозиторий, КаталогРабочейКопии) Экспорт + + Если ПустаяСтрока(ТекущаяВерсияКонфигурации) Тогда + ТекущаяВерсияКонфигурации = ПрочитатьВерсиюИзИсходников(КаталогРабочейКопии); + КонецЕсли; + + Если ПоследняяВерсияКонфигурации <> ТекущаяВерсияКонфигурации + И ЗначениеЗаполнено(ТекущаяВерсияКонфигурации) Тогда + Лог.Информация("Определена новая версия конфигурации: %1. Будет установлен новый тег", ТекущаяВерсияКонфигурации); + + ПараметрыКоманды = Новый Массив; + ПараметрыКоманды.Добавить("tag"); + ПараметрыКоманды.Добавить(Строка(ТекущаяВерсияКонфигурации)); + + ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); + ПоследняяВерсияКонфигурации = ТекущаяВерсияКонфигурации; + + КонецЕсли; + +КонецПроцедуры + +Функция ПрочитатьВерсиюИзИсходников(КаталогИсходныхФайлов) + + ФайлКонфигурации = Новый Файл(ОбъединитьПути(КаталогИсходныхФайлов, "Configuration.xml")); + Если Не ФайлКонфигурации.Существует() Тогда + Возврат ПоследняяВерсияКонфигурации; + КонецЕсли; + + ПараметрыКонфигурации = ПолучитьПараметрыКонфигурацииИзИсходников(КаталогИсходныхФайлов); + + Возврат ПараметрыКонфигурации.Version; + +КонецФункции // ПрочитатьВерсиюИзИсходников() + +// Функция читает параметры конфигурации из каталога исходников +// +Функция ПолучитьПараметрыКонфигурацииИзИсходников(КаталогИсходныхФайлов) + + ФайлКонфигурации = Новый Файл(ОбъединитьПути(КаталогИсходныхФайлов, "Configuration.xml")); + Если Не ФайлКонфигурации.Существует() Тогда + ВызватьИсключение СтрШаблон("Файл <%1> не найдет у указанном каталоге.", ФайлКонфигурации.ПолноеИмя); + КонецЕсли; + + ПараметрыКонфигурации = Новый Структура; + + Чтение = Новый ЧтениеXML; + Чтение.ОткрытьФайл(ФайлКонфигурации.ПолноеИмя); + + Пока Чтение.Прочитать() Цикл + Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.Имя = "Properties" Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + //Чтение на следующий элемент + Чтение.Прочитать(); + + МассивДоступныхСвойств = Новый Массив; + МассивДоступныхСвойств.Добавить("Vendor"); + МассивДоступныхСвойств.Добавить("Version"); + МассивДоступныхСвойств.Добавить("UpdateCatalogAddress"); + МассивДоступныхСвойств.Добавить("Comment"); + МассивДоступныхСвойств.Добавить("Name"); + + Пока Не (Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента и Чтение.ЛокальноеИмя = "Properties") Цикл + + КлючИЗначение = ПрочитатьОпцию(Чтение); + + Если МассивДоступныхСвойств.Найти(КлючИЗначение.Ключ) = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПараметрыКонфигурации.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + + КонецЦикла; + Чтение.Закрыть(); + + Возврат ПараметрыКонфигурации; + +КонецФункции + +// Функция читает опцию из ЧтениеXML +// +Функция ПрочитатьОпцию(Знач Чтение) + + Перем Ключ; + Перем Значение; + + Ключ = Чтение.ЛокальноеИмя; + + Чтение.Прочитать(); + Если Чтение.ТипУзла = ТипУзлаXML.Текст Тогда + Значение = Чтение.Значение; + Чтение.Прочитать(); + ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда + Значение = ""; + Иначе + + КонецЕсли; + + Лог.Отладка("Читаю опцию: %1 + | Значение: %2",Ключ,Значение); + + Чтение.Прочитать(); + + Возврат Новый Структура("Ключ,Значение", Ключ, Значение); + +КонецФункции + +Функция ИмяПлагина() + возврат "smart-tags"; +КонецФункции // ИмяПлагина() + +Процедура Инициализация() + + ВерсияПлагина = "1.0.0"; + Лог = Логирование.ПолучитьЛог("oscript.app.gitsync_plugins_"+ СтрЗаменить(ИмяПлагина(),"-", "_")); + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("sync"); + КомандыПлагина.Добавить("export"); + ПоследняяВерсияКонфигурации = ""; + ТекущаяВерсияКонфигурации = ""; + +КонецПроцедуры + +Инициализация(); diff --git a/src/buldle-plugins/vendorUpload.os b/src/buldle-plugins/vendorUpload.os new file mode 100644 index 00000000..7e30e883 --- /dev/null +++ b/src/buldle-plugins/vendorUpload.os @@ -0,0 +1,167 @@ + +#Использовать logos +#Использовать v8storage + +Перем ВерсияПлагина; +Перем Лог; +Перем КомандыПлагина; +Перем МассивНомеровВерсий; +Перем мАвторизацияВХранилищеСредствами1С; +Перем Обработчик; +Перем ПолучитьТаблицуВерсийСредствами1С; +Перем ХранилищеКонфигурации; + +Функция Информация() Экспорт + + Возврат Новый Структура("Версия, Лог, Имя", ВерсияПлагина, Лог, ИмяПлагина()) + +КонецФункции // Информация() Экспорт + +Процедура ПриАктивизацииПлагина(СтандартныйОбработчик) Экспорт + + Обработчик = СтандартныйОбработчик; + ХранилищеКонфигурации = Новый МенеджерХранилищаКонфигурации; + +КонецПроцедуры + +Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации, Парсер) Экспорт + + Лог.Отладка("Ищю команду <%1> в списке поддерживаемых", ИмяКоманды); + Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда + Возврат; + КонецЕсли; + + Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); + + ОписаниеКоманды = Парсер.ПолучитьКоманду(ИмяКоманды); + + Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды,"--vendorHistory", СтрШаблон("[*%1] флаг получения истории версий используя отчет по версиям", ИмяПлагина())); + Парсер.ДобавитьИменованныйПараметрКоманды (ОписаниеКоманды,"--storage-user", СтрШаблон("[*%1] <пользователь хранилища конфигурации", ИмяПлагина())); + Парсер.ДобавитьИменованныйПараметрКоманды (ОписаниеКоманды,"--storage-pwd", СтрШаблон("[*%1] <пароль пользователя хранилища конфигурации>", ИмяПлагина())); + + Парсер.ДобавитьКоманду(ОписаниеКоманды); + +КонецПроцедуры + +Процедура ПередНачаломВыполнения(ПутьКХранилищу, КаталогРабочейКопии, URLРепозитория, ИмяВетки) Экспорт + + ХранилищеКонфигурации.УстановитьПараметрыАвторизации(мАвторизацияВХранилищеСредствами1С.ПользовательХранилища, мАвторизацияВХранилищеСредствами1С.ПарольХранилища); + ХранилищеКонфигурации.УстановитьКаталогХранилища(ПутьКХранилищу); + +КонецПроцедуры + +Процедура ПриПолученииПараметров(ПараметрыКоманды, ДополнительныеПараметры) Экспорт + + УстановитьАвторизациюВХранилищеКонфигурации(ПараметрыКоманды["--storage-user"], ПараметрыКоманды["--storage-pwd"]); + + ПроверитьПараметрыДоступаКХранилищу(); + + ПолучитьТаблицуВерсийСредствами1С = ПараметрыКоманды["--vendorHistory"]; + Если ПолучитьТаблицуВерсийСредствами1С = Неопределено Тогда + ПолучитьТаблицуВерсийСредствами1С = ложь; + КонецЕсли; + Лог.Отладка("Установлен признак получение истории средствами 1С: %1" , ПолучитьТаблицуВерсийСредствами1С); + +КонецПроцедуры + +Процедура ПриПолученииТаблицыВерсий(ТаблицаВерсий, ПутьКХранилищу, КаталогРабочейКопии, СтандартнаяОбработка) Экспорт + + Если НЕ ПолучитьТаблицуВерсийСредствами1С Тогда + Возврат; + КонецЕсли; + + Лог.Информация("Получение таблицы версий средствами 1С.Предприятие"); + + СтандартнаяОбработка = Ложь; + + ХранилищеКонфигурации.ПрочитатьХранилище(); + + ТаблицаВерсийХранилища = ХранилищеКонфигурации.ПолучитьТаблицуВерсий(); + МассивАвторовХранилища = ХранилищеКонфигурации.ПолучитьАвторов(); + + Для Каждого СтрокаВерсииХранилища Из ТаблицаВерсийХранилища Цикл + + СтрокаВерсии = ТаблицаВерсий.Добавить(); + СтрокаВерсии.НомерВерсии = Число(СтрокаВерсииХранилища.Номер); + СтрокаВерсии.Автор = СтрокаВерсииХранилища.Автор; + СтрокаВерсии.ГУИД_Автора = СтрокаВерсииХранилища.Автор; + СтрокаВерсии.Дата = СтрокаВерсииХранилища.Дата; + СтрокаВерсии.Комментарий = СтрокаВерсииХранилища.Комментарий; + СтрокаВерсии.Тэг = ""; // теги в отчете не предоставляются + + СтрокаШаблонаЛога = "Добавили строку в таблицу версий: + | Номер версии: %1 + | Автор: %2 + | ГУИД_Автора: %3 + | Дата: %4 + | Комментарий: %5 + |"; + Лог.Отладка(СтрокаШаблонаЛога, СтрокаВерсии.НомерВерсии, + СтрокаВерсии.Автор, + СтрокаВерсии.ГУИД_Автора, + СтрокаВерсии.Дата, + СтрокаВерсии.Комментарий); + + КонецЦикла; + + ТаблицаВерсий.Сортировать("НомерВерсии"); + +КонецПроцедуры + + +// Выполняет штатную выгрузку конфигурации в файлы (средствами платформы 8.3) без загрузки конфигурации, но с обновлением на версию хранилища +// +Процедура ПриЗагрузкеВерсииХранилищаВКонфигурацию(Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + + ХранилищеКонфигурации.УстановитьУправлениеКонфигуратором(Конфигуратор); + ХранилищеКонфигурации.ОбновитьКонфигурациюНаВерсию(НомерВерсии); + +КонецПроцедуры + +// Устанавливает параметры авторизации в хранилище 1С, если выгрузка версии выполняется средствами платформы +// +Процедура УстановитьАвторизациюВХранилищеКонфигурации(Знач Логин, Знач Пароль) + + мАвторизацияВХранилищеСредствами1С = Новый Структура; + мАвторизацияВХранилищеСредствами1С.Вставить("ПользовательХранилища" , Логин); + мАвторизацияВХранилищеСредствами1С.Вставить("ПарольХранилища", Пароль); + +КонецПроцедуры + +Процедура ПроверитьПараметрыДоступаКХранилищу() Экспорт + + Если мАвторизацияВХранилищеСредствами1С.ПользовательХранилища = Неопределено Тогда + + ВызватьИсключение "Не задан пользователь хранилища конфигурации."; + + КонецЕсли; + + Если мАвторизацияВХранилищеСредствами1С.ПарольХранилища = Неопределено Тогда + + ПарольХранилища = ""; + + КонецЕсли; + +КонецПроцедуры // ПроверитьПараметрыДоступаКХранилищу + + +Функция ИмяПлагина() + возврат "vendorUpload"; +КонецФункции // ИмяПлагина() + +Процедура Инициализация() + + ВерсияПлагина = "1.0.0"; + Лог = Логирование.ПолучитьЛог("oscript.app.gitsync_plugins_"+ СтрЗаменить(ИмяПлагина(),"-", "_")); + КомандыПлагина = Новый Массив; + КомандыПлагина.Добавить("sync"); + КомандыПлагина.Добавить("export"); + мАвторизацияВХранилищеСредствами1С = Новый Структура("ПользовательХранилища, ПарольХранилища"); + +КонецПроцедуры + +Инициализация(); + + diff --git "a/src/core/\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/core/\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 79cb74ae..a69ab262 100644 --- "a/src/core/\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/core/\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" @@ -12,7 +12,7 @@ Перем ДопПараметры; -Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт +Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Парсер) Экспорт ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, "Запускает синхронизацию по нескольким репозиториям"); diff --git "a/src/core/\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\260Export.os" "b/src/core/\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\260Export.os" index 30b53113..ee82e4c4 100644 --- "a/src/core/\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\260Export.os" +++ "b/src/core/\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\260Export.os" @@ -22,22 +22,10 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-debug", ""); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-verbose", ""); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-format", ""); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-minversion", "<номер минимальной версии для выгрузки>"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-maxversion", "<номер максимальной версии для выгрузки>"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-limit", "<выгрузить неболее limit версий от текущей выгруженной>"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-tempdir", "<Путь к каталогу временных файлов>"); - Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl"); - Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-check-authors", "Проверка файла AUTHORS, на наличие всех авторов коммитов "); - - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-amount-look-for-license", "<число> количество повторов получения лицензии (попытка подключения каждые 10 сек), 0 - без ограничений"); - Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой"); - Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-auto-set-tags", "Автоматическая установка тэгов по версия конфиграции"); - Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-increment", "Частичная выгрузка конфигурации"); - - Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-useVendorUnload", "Получение версии хранилища средствами tool1cd или типовыми средствами платформы>"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-user", "<пользователь хранилища конфигурации>"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-pwd", "<пароль пользователя хранилища конфигурации>"); - + + Парсер.ДобавитьИменованныйПараметрКоллекцияКоманды(ОписаниеКоманды, "-plugins", "Плагины к загрузке и исполнения"); + Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры // ЗарегистрироватьКоманду @@ -45,109 +33,31 @@ Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры) Экспорт ЛокальныйКаталогГит = ПараметрыКоманды["ЛокальныйКаталогГит"]; + ПутьКХранилищу = ПараметрыКоманды["ПутьКХранилищу"]; Формат = ПараметрыКоманды["-format"]; - МинВерсия = ПараметрыКоманды["-minversion"]; - МаксВерсия = ПараметрыКоманды["-maxversion"]; - Лимит = ПараметрыКоманды["-limit"]; - ПереименовыватьФайлМодуляОбычнойФормы = ПараметрыКоманды["-process-fatform-modules"]; - ПроверитьАвторовХранилища = ПараметрыКоманды["-check-authors"]; - ПрерватьВыполнениеБезКомментарияКВерсии = ПараметрыКоманды["-stop-if-empty-comment"]; - АвтоматическаяУстановкаТэговПоВерсиям = ПараметрыКоманды["-auto-set-tags"]; - ВыгружатьТолькоИзменения = ПараметрыКоманды["-increment"]; - НеИспользоватьTool1CD = ПараметрыКоманды["-useVendorUnload"]; + СписокПлагинов = ПараметрыКоманды["-plugins"]; + ДополнительныеПараметры.Плагины.ПриВыполненииКоманды(ПараметрыКоманды, ДополнительныеПараметры); + ДополнительныеПараметры.Вставить("СписокПлагинов", СписокПлагинов); + Если ЛокальныйКаталогГит = Неопределено Тогда ЛокальныйКаталогГит = ТекущийКаталог(); КонецЕсли; - Если ПроверитьАвторовХранилища = Неопределено Тогда - - ПроверитьАвторовХранилища = Ложь; - - КонецЕсли; - - Если ПереименовыватьФайлМодуляОбычнойФормы = Неопределено Тогда - - ПереименовыватьФайлМодуляОбычнойФормы = Ложь; - - КонецЕсли; - Если Формат = Неопределено Тогда Формат = РежимВыгрузкиФайлов.Авто; КонецЕсли; - Если МинВерсия = Неопределено Тогда - - МинВерсия = 0; - - КонецЕсли; - - Если МаксВерсия = Неопределено Тогда - - МаксВерсия = 0; - - КонецЕсли; - - Если Лимит = Неопределено Тогда - - Лимит = 0; - - КонецЕсли; - - Если ПрерватьВыполнениеБезКомментарияКВерсии = Неопределено Тогда - - ПрерватьВыполнениеБезКомментарияКВерсии = Ложь; - - КонецЕсли; - - Если АвтоматическаяУстановкаТэговПоВерсиям = Неопределено Тогда - - АвтоматическаяУстановкаТэговПоВерсиям = Ложь; - - КонецЕсли; - - МаксВерсия = Число(МаксВерсия); - МинВерсия = Число(МинВерсия); - Лимит = Число(Лимит); - - Если НеИспользоватьTool1CD = Неопределено Тогда - - НеИспользоватьTool1CD = Ложь; // по умолчанию используем tool1cd - - КонецЕсли; - Распаковщик = РаспаковщикКонфигурации.ПолучитьИНастроитьРаспаковщик(ПараметрыКоманды, ДополнительныеПараметры); Распаковщик.ВерсияПлатформы = ПараметрыКоманды["-v8version"]; Распаковщик.ДоменПочтыДляGitПоУмолчанию = ПараметрыКоманды["-email"]; - Распаковщик.ПереименовыватьФайлМодуляОбычнойФормы = ПереименовыватьФайлМодуляОбычнойФормы; - - Если НеИспользоватьTool1CD Тогда - ПараметрыДоступаКХранилищу = Новый Структура("ПользовательХранилища, ПарольХранилища", ПараметрыКоманды["--storage-user"], ПараметрыКоманды["--storage-pwd"]); - Распаковщик.ПроверитьПараметрыДоступаКХранилищу(ПараметрыДоступаКХранилищу); - Распаковщик.ИспользоватьTool1CD = Не НеИспользоватьTool1CD; - - КонецЕсли; - ДополнительныеПараметры.Лог.Информация("Начинаю выгрузку исходников"); - РаспаковщикКонфигурации.ВыполнитьЭкспортИсходников(Распаковщик, - ПараметрыКоманды["ПутьКХранилищу"], - ЛокальныйКаталогГит, - МинВерсия, - МаксВерсия, - Формат, - , - , - Лимит, - ПрерватьВыполнениеБезКомментарияКВерсии, - , - АвтоматическаяУстановкаТэговПоВерсиям, - ПроверитьАвторовХранилища, - ПараметрыДоступаКХранилищу); + Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(ЛокальныйКаталогГит, ПутьКХранилищу); ДополнительныеПараметры.Лог.Информация("Выгрузка завершена"); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; diff --git "a/src/core/\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/core/\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 ab38da41..fbd496e0 100644 --- "a/src/core/\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/core/\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" @@ -32,7 +32,11 @@ КаталогРабочейКопии = РаспаковщикКонфигурации.ПодготовитьКаталогНовойРабочейКопии(ПараметрыКоманды["ЛокальныйКаталогГит"]); // инициализировать с нуля - СоздатьКаталог(КаталогРабочейКопии); + ФайлКаталогРабочейКопии = Новый Файл(КаталогРабочейКопии); + Если Не ФайлКаталогРабочейКопии.Существует() Тогда + СоздатьКаталог(КаталогРабочейКопии); + КонецЕсли; + ЭтоКаталогГит = Распаковщик.ПроверитьНаличиеРепозитарияГит(КаталогРабочейКопии); Если Не ЭтоКаталогГит Тогда diff --git "a/src/core/\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/core/\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 1b6c3628..155ffd8a 100644 --- "a/src/core/\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/core/\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" @@ -27,16 +27,8 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-branch", "<имя ветки git>"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-format", ""); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-tempdir", "<Путь к каталогу временных файлов>"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-push-every-n-commits", "<число> количество коммитов до промежуточной отправки на удаленный сервер"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-amount-look-for-license", "<число> количество повторов получения лицензии (попытка подключения каждые 10 сек), 0 - без ограничений"); - Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl"); - Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-check-authors", "Проверка файла AUTHORS, на наличие всех авторов коммитов "); - Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой"); - Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-auto-set-tags", "Автоматическая установка тэгов по версия конфиграции"); - Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-increment", "Частичная выгрузка конфигурации"); - Парсер.ДобавитьПараметрФлагКоманды (ОписаниеКоманды, "-useVendorUnload", "Получение версии хранилища средствами tool1cd или типовыми средствами платформы>"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-user", "<пользователь хранилища конфигурации>"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-pwd", "<пароль пользователя хранилища конфигурации>"); + + Парсер.ДобавитьИменованныйПараметрКоллекцияКоманды(ОписаниеКоманды, "-plugins", "Плагины к загрузке и исполнения"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -52,17 +44,6 @@ Парсер.ДобавитьИменованныйПараметр("-branch", "<имя ветки git>"); Парсер.ДобавитьИменованныйПараметр("-format", ""); Парсер.ДобавитьИменованныйПараметр("-tempdir", "<Путь к каталогу временных файлов>"); - Парсер.ДобавитьИменованныйПараметр("-push-every-n-commits", "<число> количество коммитов до промежуточной отправки на удаленный сервер"); - Парсер.ДобавитьПараметрФлаг ("-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl"); - Парсер.ДобавитьПараметрФлаг ("-check-authors", "Проверка файла AUTHORS, на наличие всех авторов коммитов "); - - Парсер.ДобавитьПараметрФлаг("-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой"); - Парсер.ДобавитьПараметрФлаг("-auto-set-tags", "Автоматическая установка тэгов по версия конфиграции"); - - Парсер.ДобавитьПараметрФлаг ("-increment", "Частичная выгрузка конфигурации"); - Парсер.ДобавитьПараметрФлаг ("-useVendorUnload", "Получение версии хранилища средствами tool1cd или типовыми средствами платформы>"); - Парсер.ДобавитьИменованныйПараметр("--storage-user", "<пользователь хранилища конфигурации>"); - Парсер.ДобавитьИменованныйПараметр("--storage-pwd", "<пароль пользователя хранилища конфигурации>"); КонецПроцедуры // ЗарегистрироватьКоманду @@ -76,73 +57,15 @@ ЛокальныйКаталогГит = ПараметрыКоманды["ЛокальныйКаталогГит"]; ДоменПочты = ПараметрыКоманды["-email"]; ВерсияПлатформы = ПараметрыКоманды["-v8version"]; - НачальнаяВерсия = ПараметрыКоманды["-minversion"]; - КонечнаяВерсия = ПараметрыКоманды["-maxversion"]; Формат = ПараметрыКоманды["-format"]; ИмяВетки = ПараметрыКоманды["-branch"]; - Лимит = ПараметрыКоманды["-limit"]; - КоличествоКоммитовДоPush = ПараметрыКоманды["-push-every-n-commits"]; - ПереименовыватьФайлМодуляОбычнойФормы = ПараметрыКоманды["-process-fatform-modules"]; - ПроверитьАвторовХранилища = ПараметрыКоманды["-check-authors"]; - ПрерватьВыполнениеБезКомментарияКВерсии = ПараметрыКоманды["-stop-if-empty-comment"]; - АвтоматическаяУстановкаТэговПоВерсиям = ПараметрыКоманды["-auto-set-tags"]; - ВыгружатьТолькоИзменения = ПараметрыКоманды["-increment"]; - НеИспользоватьTool1CD = ПараметрыКоманды["-useVendorUnload"]; - - Если НачальнаяВерсия = Неопределено Тогда - - НачальнаяВерсия = 0; - - КонецЕсли; - Если ПроверитьАвторовХранилища = Неопределено Тогда - - ПроверитьАвторовХранилища = Ложь; - - КонецЕсли; - - Если ПереименовыватьФайлМодуляОбычнойФормы = Неопределено Тогда - - ПереименовыватьФайлМодуляОбычнойФормы = Ложь; + СписокПлагинов = ПараметрыКоманды["-plugins"]; - КонецЕсли; - - - Если КонечнаяВерсия = Неопределено Тогда - - КонечнаяВерсия = 0; - - КонецЕсли; - - Если Лимит = Неопределено Тогда - - Лимит = 0; - - КонецЕсли; - - Если КоличествоКоммитовДоPush = Неопределено Тогда - - КоличествоКоммитовДоPush = 0; - - КонецЕсли; - - Если ПрерватьВыполнениеБезКомментарияКВерсии = Неопределено Тогда - - ПрерватьВыполнениеБезКомментарияКВерсии = Ложь; - - КонецЕсли; - - Если АвтоматическаяУстановкаТэговПоВерсиям = Неопределено Тогда - - АвтоматическаяУстановкаТэговПоВерсиям = Ложь; - - КонецЕсли; - - НачальнаяВерсия = Число(НачальнаяВерсия); - КонечнаяВерсия = Число(КонечнаяВерсия); - Лимит = Число(Лимит); - КоличествоКоммитовДоPush = Число(КоличествоКоммитовДоPush); + ДополнительныеПараметры.Плагины.ПриВыполненииКоманды(ПараметрыКоманды, ДополнительныеПараметры); + ДополнительныеПараметры.Вставить("СписокПлагинов", СписокПлагинов); + Если ЛокальныйКаталогГит = Неопределено Тогда ЛокальныйКаталогГит = ТекущийКаталог(); @@ -161,11 +84,10 @@ КонецЕсли; - Если НеИспользоватьTool1CD = Неопределено Тогда - - НеИспользоватьTool1CD = Ложь; // по умолчанию используем tool1cd - - КонецЕсли; + ФайлЛокальныйКаталогГит = Новый Файл(ЛокальныйКаталогГит); + ЛокальныйКаталогГит = ФайлЛокальныйКаталогГит.ПолноеИмя; + + Лог.Отладка("ПутьКХранилищу = " + ПутьКХранилищу); Лог.Отладка("URLРепозитория = " + URLРепозитория); @@ -174,59 +96,20 @@ Лог.Отладка("ВерсияПлатформы = " + ВерсияПлатформы); Лог.Отладка("Формат = " + Формат); Лог.Отладка("ИмяВетки = " + ИмяВетки); - Лог.Отладка("НачальнаяВерсия = " + НачальнаяВерсия); - Лог.Отладка("КонечнаяВерсия = " + КонечнаяВерсия); - Лог.Отладка("Лимит = " + Лимит); - Лог.Отладка("КоличествоКоммитовДоPush = " + КоличествоКоммитовДоPush); - Лог.Отладка("ПроверитьАвторовХранилища = " + ПроверитьАвторовХранилища); - Распаковщик = РаспаковщикКонфигурации.ПолучитьРаспаковщик(ДополнительныеПараметры); + Распаковщик = РаспаковщикКонфигурации.ПолучитьИНастроитьРаспаковщик(ПараметрыКоманды, ДополнительныеПараметры); Распаковщик.ВерсияПлатформы = ВерсияПлатформы; Распаковщик.ДоменПочтыДляGitПоУмолчанию = ДоменПочты; - Распаковщик.ПереименовыватьФайлМодуляОбычнойФормы = ПереименовыватьФайлМодуляОбычнойФормы; - Распаковщик.ТолькоИзменения = ВыгружатьТолькоИзменения; - Если НеИспользоватьTool1CD Тогда - - ПараметрыДоступаКХранилищу = Новый Структура("ПользовательХранилища, ПарольХранилища", ПараметрыКоманды["--storage-user"], ПараметрыКоманды["--storage-pwd"]); - Распаковщик.ПроверитьПараметрыДоступаКХранилищу(ПараметрыДоступаКХранилищу); - Распаковщик.ИспользоватьTool1CD = Не НеИспользоватьTool1CD; - - КонецЕсли; - - - Лог.Информация("Получение изменений с удаленного узла (pull)"); - КодВозврата = Распаковщик.ВыполнитьGitPull(ЛокальныйКаталогГит, URLРепозитория, ИмяВетки); - Если КодВозврата <> 0 Тогда - - ВызватьИсключение "Не удалось получить изменения с удаленного узла (код: " + КодВозврата + ")"; - - КонецЕсли; - Лог.Информация("Синхронизация изменений с хранилищем"); - РаспаковщикКонфигурации.ВыполнитьЭкспортИсходников(Распаковщик, + Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(ЛокальныйКаталогГит, ПутьКХранилищу, - ЛокальныйКаталогГит, - НачальнаяВерсия, - КонечнаяВерсия, Формат, - КоличествоКоммитовДоPush, URLРепозитория, - Лимит, - ПрерватьВыполнениеБезКомментарияКВерсии, - ИмяВетки, - АвтоматическаяУстановкаТэговПоВерсиям, - ПроверитьАвторовХранилища, - ПараметрыДоступаКХранилищу); - - Лог.Информация("Отправка изменений на удаленный узел"); - КодВозврата = Распаковщик.ВыполнитьGitPush(ЛокальныйКаталогГит, URLРепозитория, ИмяВетки, АвтоматическаяУстановкаТэговПоВерсиям); - Если КодВозврата <> 0 Тогда - ВызватьИсключение "Не удалось отправить изменения на удаленный узел (код: " + КодВозврата + ")"; - КонецЕсли; + ИмяВетки); Лог.Информация("Синхронизация завершена"); - + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; КонецФункции // ВыполнитьКоманду \ No newline at end of file diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\275\320\276\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/\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\275\320\276\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 5cf47f83..f656758c 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\275\320\276\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/\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\275\320\276\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" @@ -77,53 +77,78 @@ КонецПроцедуры -Функция ПреобразоватьЗначениеКБулево(ЗначениеПараметра) - Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда - Возврат ЗначениеПараметра; - КонецЕсли; - - Если ЗначениеПараметра = "on" Тогда - Возврат Истина; - ИначеЕсли ЗначениеПараметра = "off" Тогда - Возврат Ложь; - Иначе - Возврат Ложь; - КонецЕсли; -КонецФункции - - // Вызывается в качестве обработчика из класса ПакетнаяСинхронизация // -Процедура ПриНеобходимостиСинхронизации(Знач Репо) Экспорт - - ЗначенияПараметров = Новый Соответствие; - ЗначенияПараметров.Вставить("ПутьКХранилищу", Репо.КаталогХранилища1С); - ЗначенияПараметров.Вставить("URLРепозитория", Репо.GitURL); - ЗначенияПараметров.Вставить("ЛокальныйКаталогГит", Репо.КаталогВыгрузки); - ЗначенияПараметров.Вставить("-email", Репо.ДоменПочтыДляGit); - ЗначенияПараметров.Вставить("-v8version", Репо.ПутьКПлатформе83); - ЗначенияПараметров.Вставить("-push-every-n-commits", Репо.КоличествоКоммитовДоPush); - ЗначенияПараметров.Вставить("-check-authors", ПреобразоватьЗначениеКБулево(Репо.ПроверитьАвторовХранилища)); - ЗначенияПараметров.Вставить("-stop-if-empty-comment", ПреобразоватьЗначениеКБулево(Репо.ПрерватьВыполнениеБезКомментарияКВерсии)); - ЗначенияПараметров.Вставить("-auto-set-tags", ПреобразоватьЗначениеКБулево(Репо.АвтоматическаяУстановкаТэговПоВерсиям)); - ЗначенияПараметров.Вставить("-process-fatform-modules", ПреобразоватьЗначениеКБулево(Репо.ПереименовыватьФайлМодуляОбычнойФормы)); - +Процедура ПриНеобходимостиСинхронизации(Знач ПараметрыРепо) Экспорт + // дополним настройками из параметров команды Для Каждого ПараметрКоманды Из мПараметрыКоманды Цикл - ЗначенияПараметров.Вставить(ПараметрКоманды.Ключ, ПараметрКоманды.Значение); + ПараметрыРепо.Вставить(ПараметрКоманды.Ключ, ПараметрКоманды.Значение); КонецЦикла; + мДополнительныеПараметры.Плагины.УстановитьАктивныеПлагины(ПараметрыРепо); + мДополнительныеПараметры.Плагины.ПриПолученииПараметров(ПараметрыРепо, мДополнительныеПараметры); + + Лог = мДополнительныеПараметры.Лог; + Лог.Информация("Начинаю синхронизацию хранилища 1С и репозитария GIT"); + + ПутьКХранилищу = ПараметрыРепо["ПутьКХранилищу"]; + URLРепозитория = ПараметрыРепо["URLРепозитория"]; + ЛокальныйКаталогГит = ПараметрыРепо["ЛокальныйКаталогГит"]; + ДоменПочты = ПараметрыРепо["-email"]; + ВерсияПлатформы = ПараметрыРепо["-v8version"]; + Формат = ПараметрыРепо["-format"]; + ИмяВетки = ПараметрыРепо["-branch"]; - МенеджерКомандПриложения.ВыполнитьКоманду("sync", ЗначенияПараметров); + Если Формат = Неопределено Тогда + + Формат = РежимВыгрузкиФайлов.Авто; + + КонецЕсли; + + Если ИмяВетки = Неопределено Тогда + + ИмяВетки = "master"; + + КонецЕсли; + + ФайлЛокальныйКаталогГит = Новый Файл(ЛокальныйКаталогГит); + ЛокальныйКаталогГит = ФайлЛокальныйКаталогГит.ПолноеИмя; + + ФайлПутьКХранилищу = Новый Файл(ПутьКХранилищу); + ПутьКХранилищу = ФайлПутьКХранилищу.ПолноеИмя; + + Лог.Отладка("ПутьКХранилищу = " + ПутьКХранилищу); + Лог.Отладка("URLРепозитория = " + URLРепозитория); + Лог.Отладка("ЛокальныйКаталогГит = " + ЛокальныйКаталогГит); + Лог.Отладка("ДоменПочты = " + ДоменПочты); + Лог.Отладка("ВерсияПлатформы = " + ВерсияПлатформы); + Лог.Отладка("Формат = " + Формат); + Лог.Отладка("ИмяВетки = " + ИмяВетки); + + Распаковщик = РаспаковщикКонфигурации.ПолучитьИНастроитьРаспаковщик(ПараметрыРепо, мДополнительныеПараметры); + Распаковщик.ВерсияПлатформы = ВерсияПлатформы; + Распаковщик.ДоменПочтыДляGitПоУмолчанию = ДоменПочты; + + Лог.Информация("Синхронизация изменений с хранилищем"); + Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(ЛокальныйКаталогГит, + ПутьКХранилищу, + Формат, + URLРепозитория, + ИмяВетки); + + Лог.Информация("Синхронизация завершена"); + + //МенеджерКомандПриложения.ВыполнитьКоманду("sync", Репо); КонецПроцедуры Функция ТребуетсяСинхронизироватьХранилище(Знач Репо) Экспорт Возврат РаспаковщикКонфигурации.ТребуетсяСинхронизироватьХранилище( - ИмяФайлаБазыХранилища(Репо.КаталогХранилища1С), - Репо.КаталогВыгрузки, + ИмяФайлаБазыХранилища(Репо["ПутьКХранилищу"]), + Репо["ЛокальныйКаталогГит"], мДополнительныеПараметры); КонецФункции @@ -134,21 +159,14 @@ Функция СоответствиеКлючамИПараметра() Экспорт - СоответствиеКлючамИПараметра = Новый Соответствие(); - СоответствиеКлючамИПараметра.Вставить("git-local-path", "КаталогВыгрузки"); - СоответствиеКлючамИПараметра.Вставить("git-remote", "GitURL"); - СоответствиеКлючамИПараметра.Вставить("name", "Имя"); - СоответствиеКлючамИПараметра.Вставить("v8-storage-dir", "КаталогХранилища1С"); - СоответствиеКлючамИПараметра.Вставить("email-domain", "ДоменПочтыДляGit"); - СоответствиеКлючамИПараметра.Вставить("v8-version", "ПутьКПлатформе83"); - СоответствиеКлючамИПараметра.Вставить("git-executable", "ПутьGit"); - СоответствиеКлючамИПараметра.Вставить("push-every-n-commits", "КоличествоКоммитовДоPush"); - СоответствиеКлючамИПараметра.Вставить("check-authors", "ПроверитьАвторовХранилища"); - СоответствиеКлючамИПараметра.Вставить("stop-if-empty-comment", "ПрерватьВыполнениеБезКомментарияКВерсии"); - СоответствиеКлючамИПараметра.Вставить("auto-set-tags", "АвтоматическаяУстановкаТэговПоВерсиям"); - СоответствиеКлючамИПараметра.Вставить("process-fatform-modules", "ПереименовыватьФайлМодуляОбычнойФормы"); - - Возврат Новый ФиксированноеСоответствие(СоответствиеКлючамИПараметра); + СоответствиеПозиционныхПараметров = Новый Соответствие(); + СоответствиеПозиционныхПараметров.Вставить("git-local-path", "ЛокальныйКаталогГит"); + СоответствиеПозиционныхПараметров.Вставить("git-remote", "URLРепозитория"); + СоответствиеПозиционныхПараметров.Вставить("name", "Имя"); + СоответствиеПозиционныхПараметров.Вставить("v8-storage-dir", "ПутьКХранилищу"); + + Возврат СоответствиеПозиционныхПараметров; + //Возврат Новый ФиксированноеСоответствие(СоответствиеПозиционныхПараметров); КонецФункции 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\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/\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" new file mode 100644 index 00000000..57a83b67 --- /dev/null +++ "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" @@ -0,0 +1,898 @@ +#Использовать delegate +#Использовать logos + +Перем МассивЗагруженныхПлагинов; +Перем УстановленныеПлагины; + +Перем ПлагиныОбработчики; +Перем Отказ; +Перем СтандартнаяОбработка; +Перем РефлекторПроверкиКоманд; +Перем ДополнительныеПараметрыПлагинов; +Перем Лог; + +#Область Экспортные процедуры и функции + +Процедура УстановитьАктивныеПлагины(ПараметрыКоманды) Экспорт + + МассивНаименованийПлагинов = ПараметрыКоманды["-plugins"]; + + Если МассивНаименованийПлагинов = Неопределено Тогда + возврат; + КонецЕсли; + + Для каждого ИмяПлагина Из МассивНаименованийПлагинов Цикл + + ИнформацияОПлагине = УстановленныеПлагины[ИмяПлагина]; + + Если ИнформацияОПлагине = Неопределено Тогда + + Лог.Отладка("НЕ НАЙДЕН! Установленный плагин "+ИмяПлагина ); + + Продолжить + КонецЕсли; + + Лог.Отладка("Установленный плагин выбран "+ИмяПлагина +" для запуска"); + МассивЗагруженныхПлагинов.Добавить(ИмяПлагина); + + КонецЦикла; + + ВывестиСообщениеОПлагинах(); + +КонецПроцедуры + +Процедура ВывестиСообщениеОПлагинах() + + ЦветВключенныйПлагин = ЦветКонсоли.Зеленый; + ЦветВыключенныйПлагин = ЦветКонсоли.Yellow; + + Консоль = Новый Консоль(); + ЦветТекстаКонсоли = Консоль.ЦветТекста; + Консоль.ЦветТекста = ЦветВключенныйПлагин; + Консоль.ВывестиСтроку("Включены плагины: "); + + Для каждого ЗагруженныйПлагин Из МассивЗагруженныхПлагинов Цикл + Консоль.ВывестиСтроку(" ---- "+ ЗагруженныйПлагин ); + КонецЦикла; + + Консоль.ЦветТекста = ЦветТекстаКонсоли; + Консоль.ВывестиСтроку(""); + Консоль = Неопределено; + +КонецПроцедуры + +Процедура АктивизироватьПлагины(СтандартныйОбработчик) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(СтандартныйОбработчик); + + ВыполнитьПодключенныеПлагины("ПриАктивизацииПлагина", ПараметрыВыполнения); + +КонецПроцедуры + +Функция ЗагрузитьУстановленныеПлагины() Экспорт + + // Ищем установленные плагины + + МассивПутейПоискаПлагинов = Новый Массив; + МассивПутейПоискаПлагинов.Добавить(ОбъединитьПути(ТекущийСценарий().Каталог, "../..", "buldle-plugins")); + МассивПутейПоискаПлагинов.Добавить(ОбъединитьПути(ТекущийКаталог(),"plugins")); + + СоответствиеНайденныхПлагинов = Новый Соответствие; + + + Для Каждого ПутьКПапкеПлагина Из МассивПутейПоискаПлагинов Цикл + Лог.Отладка("Ищю установленные плагины в : " + ПутьКПапкеПлагина); + + МассивФайлов = НайтиФайлы(ПутьКПапкеПлагина, "*.os"); + + Для каждого НайденныйПлагин Из МассивФайлов Цикл + + ПутьКПлагину = НайденныйПлагин.ПолноеИмя; + ИмяПлагина = НайденныйПлагин.ИмяБезРасширения; + + СоответствиеНайденныхПлагинов.Вставить(ИмяПлагина, ПутьКПлагину); + + КонецЦикла; + + КонецЦикла; + + ИмяПлагинаПатчСовместимости = "patch-compatibility"; + + Для каждого КлючЗначение Из СоответствиеНайденныхПлагинов Цикл + + ПутьКНайденномуПлагину = КлючЗначение.Значение; + ИмяПлагина = КлючЗначение.Ключ; + + Если ИмяПлагина = ИмяПлагинаПатчСовместимости Тогда + Продолжить; + КонецЕсли; + + Попытка + ЗагруженныйПлагин = ЗагрузитьСценарий(ПутьКНайденномуПлагину); //: ИнформацияОСценарии + УстановитьПлагин(ИмяПлагина, ЗагруженныйПлагин); + Исключение + Лог.КритичнаяОшибка("Не удалось загрузить плагин <%1> по причине: %2", ИмяПлагина, ОписаниеОшибки()); + КонецПопытки; + + КонецЦикла; + +КонецФункции + +#КонецОбласти + +#Область Подписка на получение параметров выполнения + +Процедура ПриПолученииПараметров(ПараметрыКоманды, ДополнительныеПараметры) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ПараметрыКоманды); + ПараметрыВыполнения.Добавить(ДополнительныеПараметры); + + ВыполнитьПодключенныеПлагины("ПриПолученииПараметров", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ПараметрыКоманды, ДополнительныеПараметры); + +КонецПроцедуры + +#КонецОбласти + +#Область Подписки на регистрацию команд приложения + +Процедура ПослеРегистрацииКомандПриложения(Парсер) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(Парсер); + + ВыполнитьПодключенныеПлагины("ПослеРегистрацииКомандПриложения", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, Парсер); + +КонецПроцедуры + +Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации, Парсер) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ИмяКоманды); + ПараметрыВыполнения.Добавить(КлассРеализации); + ПараметрыВыполнения.Добавить(Парсер); + + ВыполнитьУстановленныеПлагины("ПриРегистрацииКомандыПриложения", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ИмяКоманды, КлассРеализации, Парсер); + +КонецПроцедуры + +Процедура ПередВыполнениемКоманды(ИмяКоманды, ПараметрыКоманды, ДополнительныеПараметры) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ИмяКоманды); + ПараметрыВыполнения.Добавить(ПараметрыКоманды); + ПараметрыВыполнения.Добавить(ДополнительныеПараметры); + + ВыполнитьПодключенныеПлагины("ПередВыполнениемКоманды", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ИмяКоманды, ПараметрыКоманды, ДополнительныеПараметры); + +КонецПроцедуры + +Процедура ПриВыполненииКоманды(ПараметрыКоманды, ДополнительныеПараметры) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ПараметрыКоманды); + ПараметрыВыполнения.Добавить(ДополнительныеПараметры); + + ВыполнитьПодключенныеПлагины("ПриВыполненииКоманды", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ПараметрыКоманды, ДополнительныеПараметры); + +КонецПроцедуры + +Процедура ПослеВыполненияКоманды(ИмяКоманды, ПараметрыКоманды, ДополнительныеПараметры) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ИмяКоманды); + ПараметрыВыполнения.Добавить(ПараметрыКоманды); + ПараметрыВыполнения.Добавить(ДополнительныеПараметры); + + ВыполнитьПодключенныеПлагины("ПослеВыполненияКоманды", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ИмяКоманды, ПараметрыКоманды, ДополнительныеПараметры); + +КонецПроцедуры + + +#КонецОбласти + +#Область Подписки на начало и окончания выполнения + +Процедура ПередНачаломВыполнения(ПутьКХранилищу, КаталогРабочейКопии, URLРепозитория, ИмяВетки) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ПутьКХранилищу); + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(URLРепозитория); + ПараметрыВыполнения.Добавить(ИмяВетки); + + ВыполнитьПодключенныеПлагины("ПередНачаломВыполнения", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ПутьКХранилищу, КаталогРабочейКопии, URLРепозитория, ИмяВетки); + +КонецПроцедуры + +Процедура ПослеОкончанияВыполнения(ПутьКХранилищу, КаталогРабочейКопии, URLРепозитория, ИмяВетки) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ПутьКХранилищу); + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(URLРепозитория); + ПараметрыВыполнения.Добавить(ИмяВетки); + + ВыполнитьПодключенныеПлагины("ПослеОкончанияВыполнения", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ПутьКХранилищу, КаталогРабочейКопии, URLРепозитория, ИмяВетки); + +КонецПроцедуры + +#КонецОбласти + +#Область Подписки на получение таблицы версий + +Процедура ПриПолученииТаблицыВерсий(ТаблицаВерсий, ПутьКХранилищу, КаталогРабочейКопии, СтандартнаяОбработка) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ТаблицаВерсий); + ПараметрыВыполнения.Добавить(ПутьКХранилищу); + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(СтандартнаяОбработка); + + ВыполнитьПодключенныеПлагины("ПриПолученииТаблицыВерсий", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ТаблицаВерсий, ПутьКХранилищу, КаталогРабочейКопии, СтандартнаяОбработка); + + +КонецПроцедуры + +Процедура ПослеПолученияТаблицыВерсий(ТаблицаВерсий, ПутьКХранилищу, КаталогРабочейКопии) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ТаблицаВерсий); + ПараметрыВыполнения.Добавить(ПутьКХранилищу); + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + + ВыполнитьПодключенныеПлагины("ПослеПолученияТаблицыВерсий", ПараметрыВыполнения); + + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ТаблицаВерсий, ПутьКХранилищу, КаталогРабочейКопии); + +КонецПроцедуры + +#КонецОбласти + +#Область Подписки на обработки строки версии + +Процедура ПередНачаломЦиклаОбработкиВерсий(ТаблицаИсторииХранилища, ТекущаяВерсия, СледующаяВерсия, МаксимальнаяВерсияДляРазбора) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ТаблицаИсторииХранилища); + ПараметрыВыполнения.Добавить(ТекущаяВерсия); + ПараметрыВыполнения.Добавить(СледующаяВерсия); + ПараметрыВыполнения.Добавить(МаксимальнаяВерсияДляРазбора); + + ВыполнитьПодключенныеПлагины("ПередНачаломЦиклаОбработкиВерсий", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ТаблицаИсторииХранилища, ТекущаяВерсия, СледующаяВерсия, МаксимальнаяВерсияДляРазбора); + +КонецПроцедуры + +Процедура ПередОбработкойВерсииХранилища(СтрокаВерсии, ТекущаяВерсия) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(СтрокаВерсии); + ПараметрыВыполнения.Добавить(ТекущаяВерсия); + + ВыполнитьПодключенныеПлагины("ПередОбработкойВерсииХранилища", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, СтрокаВерсии, ТекущаяВерсия); + +КонецПроцедуры + +Процедура ПриОбработкеВерсииХранилища(СтрокаВерсии, ТекущаяВерсия) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(СтрокаВерсии); + ПараметрыВыполнения.Добавить(ТекущаяВерсия); + + ВыполнитьПодключенныеПлагины("ПриОбработкеВерсииХранилища", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, СтрокаВерсии, ТекущаяВерсия); + +КонецПроцедуры + +Процедура ПослеОбработкиВерсииХранилища(СтрокаВерсии, ТекущаяВерсия) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(СтрокаВерсии); + ПараметрыВыполнения.Добавить(ТекущаяВерсия); + + ВыполнитьПодключенныеПлагины("ПослеОбработкиВерсииХранилища", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, СтрокаВерсии, ТекущаяВерсия); + +КонецПроцедуры + +#КонецОбласти + +#Область Подписки на выполнение коммита + +Процедура ПередКоммитом(КаталогРабочейКопии, Комментарий, Автор, Дата) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(Комментарий); + ПараметрыВыполнения.Добавить(Автор); + ПараметрыВыполнения.Добавить(Дата); + + ВыполнитьПодключенныеПлагины("ПередКоммитом", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, КаталогРабочейКопии, Комментарий, Автор, Дата); + +КонецПроцедуры + +Процедура ПриКоммите(ГитРепозиторий, + Комментарий, + ПроиндексироватьОтслеживаемыеФайлы, + ИмяФайлаКомментария, + авторДляГит, + ДатаДляГит, + Коммитер, + ДатаКоммитера) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ГитРепозиторий); + ПараметрыВыполнения.Добавить(Комментарий); + ПараметрыВыполнения.Добавить(ПроиндексироватьОтслеживаемыеФайлы); + ПараметрыВыполнения.Добавить(авторДляГит); + ПараметрыВыполнения.Добавить(ДатаДляГит); + ПараметрыВыполнения.Добавить(Коммитер); + ПараметрыВыполнения.Добавить(ДатаКоммитера); + + ВыполнитьПодключенныеПлагины("ПриКоммите", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ГитРепозиторий, Комментарий, ПроиндексироватьОтслеживаемыеФайлы, авторДляГит, ДатаДляГит, Коммитер, ДатаКоммитера); + + +КонецПроцедуры + +Процедура ПослеКоммита(ГитРепозиторий, КаталогРабочейКопии) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ГитРепозиторий); + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + + ВыполнитьПодключенныеПлагины("ПослеКоммита", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ГитРепозиторий, КаталогРабочейКопии); + +КонецПроцедуры + +#КонецОбласти + +#Область Подписки на начало и окончания выгрузки версии конфигурации + +Процедура ПередНачаломВыгрузкиВерсииХранилищаКонфигурации(Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии, Формат) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(Конфигуратор); + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(ПутьКХранилищу); + ПараметрыВыполнения.Добавить(НомерВерсии); + ПараметрыВыполнения.Добавить(Формат); + + ВыполнитьПодключенныеПлагины("ПередНачаломВыгрузкиВерсииХранилищаКонфигурации", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии, Формат); + +КонецПроцедуры + +Процедура ПослеОкончанияВыгрузкиВерсииХранилищаКонфигурации(Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии, Формат) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(Конфигуратор); + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(ПутьКХранилищу); + ПараметрыВыполнения.Добавить(НомерВерсии); + ПараметрыВыполнения.Добавить(Формат); + + ВыполнитьПодключенныеПлагины("ПослеОкончанияВыгрузкиВерсииХранилищаКонфигурации", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии, Формат); + +КонецПроцедуры + +#КонецОбласти + +#Область Подписки на загрузку версии конфигурации из хранилища + +Процедура ПередЗагрузкойВерсииХранилищаКонфигурации(Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии, Формат) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(Конфигуратор); + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(ПутьКХранилищу); + ПараметрыВыполнения.Добавить(НомерВерсии); + ПараметрыВыполнения.Добавить(Формат); + + ВыполнитьПодключенныеПлагины("ПередЗагрузкойВерсииХранилищаКонфигурации", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии, Формат); + +КонецПроцедуры + +Процедура ПриЗагрузкеВерсииХранилищаВКонфигурацию(Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии, СтандартнаяОбработка) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(Конфигуратор); + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(ПутьКХранилищу); + ПараметрыВыполнения.Добавить(НомерВерсии); + ПараметрыВыполнения.Добавить(СтандартнаяОбработка); + + ВыполнитьПодключенныеПлагины("ПриЗагрузкеВерсииХранилищаВКонфигурацию", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии, СтандартнаяОбработка); + +КонецПроцедуры + +Процедура ПослеЗагрузкиВерсииХранилищаВКонфигурацию(Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(Конфигуратор); + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(ПутьКХранилищу); + ПараметрыВыполнения.Добавить(НомерВерсии); + + ВыполнитьПодключенныеПлагины("ПослеЗагрузкиВерсииХранилищаВКонфигурацию", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии); + +КонецПроцедуры + + +#КонецОбласти + +#Область Подписки на выгрузку конфигурации в исходники + +Процедура ПередВыгрузкойКонфигурациюВИсходники(Конфигуратор, КаталогРабочейКопии, КаталогВыгрузки, ПутьКХранилищу, НомерВерсии, Формат) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(Конфигуратор); + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(КаталогВыгрузки); + ПараметрыВыполнения.Добавить(ПутьКХранилищу); + ПараметрыВыполнения.Добавить(НомерВерсии); + ПараметрыВыполнения.Добавить(Формат); + + ВыполнитьПодключенныеПлагины("ПередВыгрузкойКонфигурациюВИсходники", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, Конфигуратор, КаталогРабочейКопии, КаталогВыгрузки, ПутьКХранилищу, НомерВерсии, Формат); + +КонецПроцедуры + +Процедура ПриВыгрузкеКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки, Формат, СтандартнаяОбработка) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(Конфигуратор); + ПараметрыВыполнения.Добавить(КаталогВыгрузки); + ПараметрыВыполнения.Добавить(Формат); + ПараметрыВыполнения.Добавить(СтандартнаяОбработка); + + ВыполнитьПодключенныеПлагины("ПриВыгрузкеКонфигурациюВИсходники", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, Конфигуратор, КаталогВыгрузки, Формат, СтандартнаяОбработка); + + +КонецПроцедуры + +Процедура ПослеВыгрузкиКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки, Формат) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(Конфигуратор); + ПараметрыВыполнения.Добавить(КаталогВыгрузки); + ПараметрыВыполнения.Добавить(Формат); + + ВыполнитьПодключенныеПлагины("ПослеВыгрузкиКонфигурациюВИсходники", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, Конфигуратор, КаталогВыгрузки, Формат); + +КонецПроцедуры + +#КонецОбласти + +#Область Подписки на очистку каталога рабочей версии + +Процедура ПередОчисткойКаталогаРабочейКопии(Конфигуратор, КаталогРабочейКопии, КаталогВыгрузки, ПутьКХранилищу, НомерВерсии, Формат) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(Конфигуратор); + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(КаталогВыгрузки); + ПараметрыВыполнения.Добавить(ПутьКХранилищу); + ПараметрыВыполнения.Добавить(НомерВерсии); + ПараметрыВыполнения.Добавить(Формат); + + ВыполнитьПодключенныеПлагины("ПередОчисткойКаталогаРабочейКопии", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, Конфигуратор, КаталогРабочейКопии, КаталогВыгрузки, ПутьКХранилищу, НомерВерсии, Формат); + +КонецПроцедуры + +Процедура ПриОчисткеКаталогаРабочейКопии(КаталогРабочейКопии, СоответствиеИменФайловДляПропуска, СтандартнаяОбработка) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(СоответствиеИменФайловДляПропуска); + ПараметрыВыполнения.Добавить(СтандартнаяОбработка); + + ВыполнитьПодключенныеПлагины("ПриОчисткеКаталогаРабочейКопии", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, КаталогРабочейКопии, СоответствиеИменФайловДляПропуска, СтандартнаяОбработка); + +КонецПроцедуры + +Процедура ПослеОчисткиКаталогаРабочейКопии(КаталогРабочейКопии, СоответствиеИменФайловДляПропуска) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(СоответствиеИменФайловДляПропуска); + + ВыполнитьПодключенныеПлагины("ПослеОчисткиКаталогаРабочейКопии", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, КаталогРабочейКопии, СоответствиеИменФайловДляПропуска); + +КонецПроцедуры + +#КонецОбласти + +#Область Подписки на перемещение в каталог рабочей копии + +Процедура ПередПеремещениемВКаталогРабочейКопии(Конфигуратор, КаталогРабочейКопии, КаталогВыгрузки, ПутьКХранилищу, НомерВерсии, Формат) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(Конфигуратор); + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(КаталогВыгрузки); + ПараметрыВыполнения.Добавить(ПутьКХранилищу); + ПараметрыВыполнения.Добавить(НомерВерсии); + ПараметрыВыполнения.Добавить(Формат); + + ВыполнитьПодключенныеПлагины("ПередПеремещениемВКаталогРабочейКопии", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, Конфигуратор, КаталогРабочейКопии, КаталогВыгрузки, ПутьКХранилищу, НомерВерсии, Формат); + +КонецПроцедуры + +Процедура ПриПеремещенииВКаталогРабочейКопии(КаталогРабочейКопии, КаталогВыгрузки, ТаблицаПереименования, ПутьКФайлуПереименования, СтандартнаяОбработка) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(КаталогВыгрузки); + ПараметрыВыполнения.Добавить(ТаблицаПереименования); + ПараметрыВыполнения.Добавить(ПутьКФайлуПереименования); + ПараметрыВыполнения.Добавить(СтандартнаяОбработка); + + ВыполнитьПодключенныеПлагины("ПриПеремещенииВКаталогРабочейКопии", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, КаталогРабочейКопии, КаталогВыгрузки, ТаблицаПереименования, ПутьКФайлуПереименования, СтандартнаяОбработка); + + +КонецПроцедуры + +Процедура ПослеПеремещенияВКаталогРабочейКопии(КаталогРабочейКопии, КаталогВыгрузки, ТаблицаПереименования, ПутьКФайлуПереименования) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(КаталогРабочейКопии); + ПараметрыВыполнения.Добавить(КаталогВыгрузки); + ПараметрыВыполнения.Добавить(ТаблицаПереименования); + ПараметрыВыполнения.Добавить(ПутьКФайлуПереименования); + + ВыполнитьПодключенныеПлагины("ПослеПеремещенияВКаталогРабочейКопии", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, КаталогРабочейКопии, КаталогВыгрузки, ТаблицаПереименования, ПутьКФайлуПереименования); + +КонецПроцедуры + +#КонецОбласти + +#Область Подписка на распаковку файлов form.bin + +Процедура ПриРаспаковкеКонтейнераМетаданных(ФайлРаспаковки, КаталогРаспаковки, СтандартнаяОбработка) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ФайлРаспаковки); + ПараметрыВыполнения.Добавить(КаталогРаспаковки); + ПараметрыВыполнения.Добавить(СтандартнаяОбработка); + + ВыполнитьПодключенныеПлагины("ПриРаспаковкеКонтейнераМетаданных", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ФайлРаспаковки, КаталогРаспаковки, СтандартнаяОбработка); + +КонецПроцедуры + +Процедура ПослеРаспаковкиКонтейнераМетаданных(ФайлРаспаковки, КаталогРаспаковки) Экспорт + + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ФайлРаспаковки); + ПараметрыВыполнения.Добавить(КаталогРаспаковки); + + ВыполнитьПодключенныеПлагины("ПослеРаспаковкиКонтейнераМетаданных", ПараметрыВыполнения); + + ПрисвоитьЗначенияПараметраПроцедуры(ПараметрыВыполнения, ФайлРаспаковки, КаталогРаспаковки); + +КонецПроцедуры + +#КонецОбласти + +#Область Вспомогательные процедуры и функции + +Процедура ВыполнитьУстановленныеПлагины(Знач ИмяПроцедурыВыполнения, ПараметрыПроцедуры, ВыполнитьВсеУстановленные = Ложь) Экспорт + + ВыполнитьПодключенныеПлагины(ИмяПроцедурыВыполнения, ПараметрыПроцедуры, Истина); + +КонецПроцедуры + +Процедура ВыполнитьПодключенныеПлагины(Знач ИмяПроцедурыВыполнения, ПараметрыПроцедуры, ВыполнитьВсеУстановленные = Ложь) Экспорт + + ПодключенныеПлагиныПроцедуры = ПлагиныОбработчики[ИмяПроцедурыВыполнения].ПодключенныеПлагины; + + Для Каждого Плагин Из ПодключенныеПлагиныПроцедуры Цикл + + Если НЕ ВыполнитьВсеУстановленные + И МассивЗагруженныхПлагинов.Найти(Плагин.Ключ) = Неопределено Тогда + Продолжить; + КонецЕсли; + + Лог.Отладка("[%1] выполняю плагин: %2, количество параметров: %3", ИмяПроцедурыВыполнения, Плагин.Ключ, ПараметрыПроцедуры.Количество()); + + Делагат = Плагин.Значение; + Делагат.Исполнить(ПараметрыПроцедуры); + + КонецЦикла; + +КонецПроцедуры + +Функция КопироватьМассив(Знач ВходящийМассив) + ИтоговыйМассив = Новый Массив; + + Для каждого элМассива Из ВходящийМассив Цикл + ИтоговыйМассив.Добавить(элМассива); + КонецЦикла; + + Возврат ИтоговыйМассив; +КонецФункции // КопироватьМассив(Знач ВходящийМассив) + + +Процедура УстановитьПлагин(Знач ИмяПлагина, ЗагруженныйПлагин) + + ИнформацияОПлагине = ЗагруженныйПлагин.Информация(); + + РеализованныеМетоды = НайтиРеализованныеМетодыВПлагине(ЗагруженныйПлагин); + + Для Каждого ИмяМетода Из РеализованныеМетоды Цикл + ДелегатПлагина = НовыйДелегатПлагина(ЗагруженныйПлагин, ИмяМетода); + ПлагиныОбработчики[ИмяМетода].ПодключенныеПлагины.Вставить(ИмяПлагина, ДелегатПлагина); + КонецЦикла; + + ДополнительныеПараметрыПлагинов.Вставить(ИмяПлагина, Новый Структура); + УстановленныеПлагины.Вставить(ИмяПлагина, ИнформацияОПлагине); + +КонецПроцедуры + +Функция НовыйДелегатПлагина(ОбъектОбработчик, Знач ИмяМетода) Экспорт + + Возврат Делегаты.Создать(ОбъектОбработчик, ИмяМетода); + +КонецФункции // НовыйДелегатПлагина(ОбъектОбработчик, ИмяМетода) Экспорт + +Функция НайтиРеализованныеМетодыВПлагине(Знач Обработчик) + + РеализованныеМетоды = Новый Массив; + ДоступныеОбработчики = ДоступныеОбработчики(); + + Для Каждого ТиповойОбработчик Из ДоступныеОбработчики Цикл + + Если Не ПроверитьМетодКласса(Обработчик, ТиповойОбработчик.ИмяПроцедуры, ТиповойОбработчик.КоличествоПараметров) Тогда + Продолжить; + КонецЕсли; + + РеализованныеМетоды.Добавить(ТиповойОбработчик.ИмяПроцедуры); + + КонецЦикла; + + Возврат РеализованныеМетоды; +КонецФункции // НайтиРеализованныеМетодыВПлагине() + +Процедура ПрисвоитьЗначенияПараметраПроцедуры(НовыеЗначения, + Перем0 = Неопределено, + Перем1 = Неопределено, + Перем2 = Неопределено, + Перем3 = Неопределено, + Перем4 = Неопределено, + Перем5 = Неопределено, + Перем6 = Неопределено, + Перем7 = Неопределено, + Перем8 = Неопределено, + Перем9 = Неопределено) + Количество = НовыеЗначения.Количество(); + + Для Индекс = 0 По Количество-1 Цикл + + Если Индекс = 0 Тогда + Перем0 = НовыеЗначения[Индекс]; + ИначеЕсли Индекс = 1 Тогда + Перем1 = НовыеЗначения[Индекс]; + ИначеЕсли Индекс = 2 Тогда + Перем2 = НовыеЗначения[Индекс]; + ИначеЕсли Индекс = 3 Тогда + Перем3 = НовыеЗначения[Индекс]; + ИначеЕсли Индекс = 4 Тогда + Перем4 = НовыеЗначения[Индекс]; + ИначеЕсли Индекс = 5 Тогда + Перем5 = НовыеЗначения[Индекс]; + ИначеЕсли Индекс = 6 Тогда + Перем6 = НовыеЗначения[Индекс]; + ИначеЕсли Индекс = 7 Тогда + Перем7 = НовыеЗначения[Индекс]; + ИначеЕсли Индекс = 8 Тогда + Перем8 = НовыеЗначения[Индекс]; + ИначеЕсли Индекс = 9 Тогда + Перем9 = НовыеЗначения[Индекс]; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + + +Функция НовыйОбработчик(Знач ИмяПроцедуры, Знач КоличествоПараметров, Знач ДополнительныеПараметры = Неопределено ) + + Возврат Новый ФиксированнаяСтруктура("ИмяПроцедуры, КоличествоПараметров, ДополнительныеПараметры",ИмяПроцедуры, КоличествоПараметров, ДополнительныеПараметры); + +КонецФункции // НовыйОбработи() + +Функция ДоступныеОбработчики() + + МассивОбработчиков = новый Массив; + + // Вызывается в процедуре АктивизироватьПлагины + МассивОбработчиков.Добавить(НовыйОбработчик("ПриАктивизацииПлагина", 1)); // + МассивОбработчиков.Добавить(НовыйОбработчик("ПриПолученииПараметров", 2)); // + + // Подписки на регистрацию команд приложения + МассивОбработчиков.Добавить(НовыйОбработчик("ПослеРегистрацииКомандПриложения", 1)); // + МассивОбработчиков.Добавить(НовыйОбработчик("ПриРегистрацииКомандыПриложения", 3)); // + МассивОбработчиков.Добавить(НовыйОбработчик("ПриВыполненииКоманды", 2)); // + МассивОбработчиков.Добавить(НовыйОбработчик("ПередВыполнениемКоманды", 3)); // + МассивОбработчиков.Добавить(НовыйОбработчик("ПослеВыполненияКоманды", 3)); // + + // Подписки на начало и окончания выполнения + МассивОбработчиков.Добавить(НовыйОбработчик("ПередНачаломВыполнения", 4)); // + МассивОбработчиков.Добавить(НовыйОбработчик("ПослеОкончанияВыполнения", 4)); + + // Подписки на получение таблицы версий + МассивОбработчиков.Добавить(НовыйОбработчик("ПриПолученииТаблицыВерсий", 4)); + МассивОбработчиков.Добавить(НовыйОбработчик("ПослеПолученияТаблицыВерсий", 3)); + + // Подписки на обработки строки версии + МассивОбработчиков.Добавить(НовыйОбработчик("ПередНачаломЦиклаОбработкиВерсий", 4)); + МассивОбработчиков.Добавить(НовыйОбработчик("ПередОбработкойВерсииХранилища", 2)); + МассивОбработчиков.Добавить(НовыйОбработчик("ПриОбработкеВерсииХранилища", 2)); + МассивОбработчиков.Добавить(НовыйОбработчик("ПослеОбработкиВерсииХранилища", 3)); + + // Подписки на выполнение коммита + МассивОбработчиков.Добавить(НовыйОбработчик("ПередКоммитом", 4)); + МассивОбработчиков.Добавить(НовыйОбработчик("ПриКоммите", 7)); + МассивОбработчиков.Добавить(НовыйОбработчик("ПослеКоммита", 2)); + + // Подписки на начало и окончания выгрузки версии конфигурации + МассивОбработчиков.Добавить(НовыйОбработчик("ПередНачаломВыгрузкиВерсииХранилищаКонфигурации", 5)); // + МассивОбработчиков.Добавить(НовыйОбработчик("ПослеОкончанияВыгрузкиВерсииХранилищаКонфигурации", 5)); + + // Подписки на загрузку версии конфигурации из хранилища + МассивОбработчиков.Добавить(НовыйОбработчик("ПередЗагрузкойВерсииХранилищаКонфигурации", 5)); // + МассивОбработчиков.Добавить(НовыйОбработчик("ПриЗагрузкеВерсииХранилищаВКонфигурацию", 5)); + МассивОбработчиков.Добавить(НовыйОбработчик("ПослеЗагрузкиВерсииХранилищаВКонфигурацию", 4)); // + + // Подписки на выгрузку конфигурации в исходники + МассивОбработчиков.Добавить(НовыйОбработчик("ПередВыгрузкойКонфигурациюВИсходники", 6)); // + МассивОбработчиков.Добавить(НовыйОбработчик("ПриВыгрузкеКонфигурациюВИсходники", 4)); + МассивОбработчиков.Добавить(НовыйОбработчик("ПослеВыгрузкиКонфигурациюВИсходники", 3)); // + + // Подписки на очистку каталога рабочей версии + МассивОбработчиков.Добавить(НовыйОбработчик("ПередОчисткойКаталогаРабочейКопии", 6)); // + МассивОбработчиков.Добавить(НовыйОбработчик("ПриОчисткеКаталогаРабочейКопии", 3)); + МассивОбработчиков.Добавить(НовыйОбработчик("ПослеОчисткиКаталогаРабочейКопии", 2)); // + + // Подписки на перемещение в каталог рабочей копии + МассивОбработчиков.Добавить(НовыйОбработчик("ПередПеремещениемВКаталогРабочейКопии", 6)); // + МассивОбработчиков.Добавить(НовыйОбработчик("ПриПеремещенииВКаталогРабочейКопии", 5)); + МассивОбработчиков.Добавить(НовыйОбработчик("ПослеПеремещенияВКаталогРабочейКопии", 4)); // + + // Подписка на распаковку файлов form.bin + МассивОбработчиков.Добавить(НовыйОбработчик("ПриРаспаковкеКонтейнераМетаданных", 3)); + МассивОбработчиков.Добавить(НовыйОбработчик("ПослеРаспаковкиКонтейнераМетаданных", 2)); // + + + // Работа с выгрузкой в исходники + МассивОбработчиков.Добавить(НовыйОбработчик("ПередВыполнениемВыгрузки", 6)); + МассивОбработчиков.Добавить(НовыйОбработчик("ПриВыполненииВыгрузки", 7)); + МассивОбработчиков.Добавить(НовыйОбработчик("ПослеВыполненияВыгрузки", 6)); + + Возврат Новый ФиксированныйМассив(МассивОбработчиков); + +КонецФункции // ДоступныеОбработчики() Экспорт + +Функция ПроверитьМетодКласса(Знач КлассРеализацииКоманды, + Знач ИмяМетода, + Знач ТребуемоеКоличествоПараметров = 0, + Знач ЭтоФункция = Ложь) + + ЕстьМетод = РефлекторПроверкиКоманд.МетодСуществует(КлассРеализацииКоманды, ИмяМетода); + + Если Не ЕстьМетод Тогда + Возврат Ложь; + КонецЕсли; + + ТаблицаМетодов = ПолучитьТаблицуМетодов(КлассРеализацииКоманды); + СтрокаМетода = ТаблицаМетодов.Найти(ИмяМетода, "Имя"); + Если СтрокаМетода = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + ПроверкаНаФункцию = ЭтоФункция = СтрокаМетода.ЭтоФункция; + ПроверкаНаКоличествоПараметров = ТребуемоеКоличествоПараметров = СтрокаМетода.КоличествоПараметров; + + //Сообщить(СтрШаблон("Класс %1 метод %2: %3", КлассРеализацииКоманды, ИмяМетода, ПроверкаНаФункцию + // И ПроверкаНаКоличествоПараметров )); + + Возврат ПроверкаНаФункцию + И ПроверкаНаКоличествоПараметров; + + +КонецФункции // ПроверитьМетодУКласса() + +Функция ПолучитьТаблицуМетодов(Знач КлассРеализацииКоманды) + + Возврат РефлекторПроверкиКоманд.ПолучитьТаблицуМетодов(КлассРеализацииКоманды); + +КонецФункции + +Процедура Инициализация() + + ПараметрыКоманды = Новый Массив; + РефлекторПроверкиКоманд = Новый Рефлектор; + СтандартнаяОбработка = Истина; + Отказ = ложь; + ИнициализацияПлагиныОбработчики(); + ДополнительныеПараметрыПлагинов = Новый Соответствие; + МассивЗагруженныхПлагинов = Новый Массив; + УстановленныеПлагины = Новый Соответствие; + Лог = Логирование.ПолучитьЛог("oscript.app.gitsync_plugins"); + +КонецПроцедуры + +Процедура ИнициализацияПлагиныОбработчики() + + ПлагиныОбработчики = Новый Соответствие; + ДоступныеОбработчики = ДоступныеОбработчики(); + Для Каждого ТиповойОбработчик Из ДоступныеОбработчики Цикл + + ПлагиныОбработчики.Вставить(ТиповойОбработчик.ИмяПроцедуры, Новый Структура("Настройка, ПодключенныеПлагины", ТиповойОбработчик, Новый Соответствие)); + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +Инициализация(); 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 8c42df64..a09b5a07 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" @@ -19,7 +19,6 @@ Перем Лог; Перем мФайлПрограммыРаспаковки; -Перем мАвторизацияВХранилищеСредствами1С; Перем ЭтоWindows; Перем УдалятьВременныеФайлы; Перем КоличествоЦикловОжиданияЛицензииПоУмолчанию; @@ -30,66 +29,101 @@ // для случаев, когда пересоздали хранилище и в гите находится версия 1234, а в хранилище 4, // тогда вызываем исключение если разница в коммитах больше чем на эту велечину. Перем МинимальнаяРазницаМеждуКоммитамиНовогоХранилища; - +Перем Плагины; /////////////////////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС Перем ДоменПочтыДляGitПоУмолчанию Экспорт; Перем ВерсияПлатформы Экспорт; -Перем ПереименовыватьФайлМодуляОбычнойФормы Экспорт; -Перем ТолькоИзменения Экспорт; -Перем ИспользоватьTool1CD Экспорт; -// Выполняет выгрузку конфигурации в файлы -// и распределение файлов по каталогам согласно иерархии метаданных. +// Основная функция синхронизации. +// Перемещает в git набор коммитов хранилища 1С // -Процедура РазобратьФайлКонфигурации(Знач ФайлКонфигурации, Знач ВыходнойКаталог, Знач Формат) Экспорт +Процедура СинхронизироватьХранилищеКонфигурацийСГит(Знач КаталогРабочейКопии, + Знач ПутьКХранилищу, + Знач Формат = Неопределено, + Знач URLРепозитория = Неопределено, + Знач ИмяВетки = Неопределено) Экспорт + - ОбъектФайл = Новый Файл(ФайлКонфигурации); - Если Не ОбъектФайл.Существует() Тогда - ВызватьИсключение СтроковыеФункции.ПодставитьПараметрыВСтроку("Файл конфигурации %1 не найден", ФайлКонфигурации.ПолноеИмя); + Если Формат = Неопределено Тогда + Формат = РежимВыгрузкиФайлов.Авто; КонецЕсли; - КаталогПлоскойВыгрузки = ВременныеФайлы.СоздатьКаталог(); + Плагины.ПередНачаломВыполнения(ПутьКХранилищу, КаталогРабочейКопии, URLРепозитория, ИмяВетки); + + Лог.Информация("Начало синхронизации с git"); + Лог.Отладка("Используется формат выгрузки " + Формат); + + ТаблицаИсторииХранилища = ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ПутьКХранилищу, КаталогРабочейКопии); + + ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(ТаблицаИсторииХранилища, КаталогРабочейКопии); - Если Не (Новый Файл(ВыходнойКаталог).Существует()) Тогда - СоздатьКаталог(ВыходнойКаталог); + ТекущаяВерсия = НомерСинхронизированнойВерсии(КаталогРабочейКопии); + + Лог.Информация("Номер синхронизированной версии: " + ТекущаяВерсия); + СледующаяВерсия = ТекущаяВерсия + 1; + + МаксимальнаяВерсияДляРазбора = ОпределитьМаксимальнуюВерсиюВХранилище(ТаблицаИсторииХранилища); + Лог.Информация("Номер последней версии в хранилище: " + МаксимальнаяВерсияДляРазбора); + + Если СледующаяВерсия > МаксимальнаяВерсияДляРазбора И СледующаяВерсия - МаксимальнаяВерсияДляРазбора > МинимальнаяРазницаМеждуКоммитамиНовогоХранилища Тогда + Лог.Ошибка("Несоответствие версий хранилища 1С и версию в репозитории Git. + |Возможно, сократили/обрезали хранилище. + |Для продолжения синхронизации измените файл VERSIONS в корне репозитория Git, + |Исправьте версию %1 на правильную версию <= версии в хранилище %2", ТекущаяВерсия, МаксимальнаяВерсияДляРазбора); + + ВызватьИсключение СтрШаблон("Версия git %1 больше версии хранилища %2 на %3", ТекущаяВерсия, МаксимальнаяВерсияДляРазбора, СледующаяВерсия - МаксимальнаяВерсияДляРазбора); КонецЕсли; - КаталогВыгрузки = ?(ТолькоИзменения, ВыходнойКаталог, КаталогПлоскойВыгрузки); - Попытка - ВыгрузитьМодулиКонфигурации(ФайлКонфигурации, КаталогВыгрузки, Формат); - Если НЕ ТолькоИзменения Тогда - РазложитьМодули1СПоПапкамСогласноИерархииМетаданных(КаталогПлоскойВыгрузки, ВыходнойКаталог, Формат); - Иначе - МассивФайлов = НайтиФайлы(КаталогВыгрузки, "*.bin", Истина); - Для каждого Файл из МассивФайлов Цикл - Если Нрег(Файл.Имя) = "form.bin" Тогда - КаталогФормы = ОбъединитьПути(Файл.Путь, Файл.ИмяБезРасширения); - СоздатьКаталог(КаталогФормы); - ФС.ОбеспечитьПустойКаталог(КаталогФормы); - РаспаковатьКонтейнерМетаданных(Файл.ПолноеИмя, КаталогФормы); - КонецЕсли; - КонецЦикла; + Плагины.ПередНачаломЦиклаОбработкиВерсий(ТаблицаИсторииХранилища, ТекущаяВерсия, СледующаяВерсия, МаксимальнаяВерсияДляРазбора); - Если Новый Файл(ОбъединитьПути(КаталогВыгрузки, "renames.txt")).Существует() Тогда - УдалитьВременныеФайлыПриНеобходимости(ОбъединитьПути(КаталогВыгрузки, "renames.txt")); - КонецЕсли; + Пока СледующаяВерсия <= МаксимальнаяВерсияДляРазбора Цикл + + СтрокаВерсии = ТаблицаИсторииХранилища.Найти(СледующаяВерсия, "НомерВерсии"); + Если СтрокаВерсии <> Неопределено Тогда + + Плагины.ПередОбработкойВерсииХранилища(СтрокаВерсии, СледующаяВерсия); + + Попытка + Лог.Информация("Получаем исходники для версии " + СледующаяВерсия + ", " + ТекущаяДата()); + + Плагины.ПриОбработкеВерсииХранилища(СтрокаВерсии, СледующаяВерсия); + ВыгрузитьВерсиюХранилищаКонфигурацииВИсходники(КаталогРабочейКопии, ПутьКХранилищу, СледующаяВерсия, Формат); + + Лог.Отладка("Фиксируем в файле VERSION версию " + СледующаяВерсия); + ЗаписатьФайлВерсийГит(КаталогРабочейКопии, СледующаяВерсия); + ВыполнитьКоммитГит(КаталогРабочейКопии, СтрокаВерсии.Комментарий, СтрокаВерсии.ПредставлениеАвтора, СтрокаВерсии.Дата); + + + Исключение + Лог.Отладка("Откатываем файл VERSION после ошибки"); + ЗаписатьФайлВерсийГит(КаталогРабочейКопии, ТекущаяВерсия); + ВызватьИсключение; + КонецПопытки; + ТекущаяВерсия = СледующаяВерсия; + Плагины.ПослеОбработкиВерсииХранилища(СтрокаВерсии, ТекущаяВерсия); + КонецЕсли; - Исключение - УдалитьВременныеФайлыПриНеобходимости(КаталогПлоскойВыгрузки); - ВызватьИсключение; - КонецПопытки; - УдалитьВременныеФайлыПриНеобходимости(КаталогПлоскойВыгрузки); + СледующаяВерсия = СледующаяВерсия + 1; + + КонецЦикла; + + ЗавершитьПроцесс_TGitCache_exe(); + + Плагины.ПослеОкончанияВыполнения(ПутьКХранилищу, КаталогРабочейКопии, URLРепозитория, ИмяВетки); КонецПроцедуры -// Выполняет штатную выгрузку конфигурации в файлы (средствами платформы 8.3) -// -Процедура ВыгрузитьМодулиКонфигурации(Знач ФайлКонфигурации, Знач КаталогПлоскойВыгрузки, Знач Формат) Экспорт +#Область ОБРАБОТКА ВЕРСИИ КОНФИГУРАЦИИ +//////////////////////////////// +// ОБРАБОТКА ВЕРСИИ КОНФИГУРАЦИИ + +Процедура ВыгрузитьВерсиюХранилищаКонфигурацииВИсходники(Знач КаталогРабочейКопии, Знач ПутьКХранилищу, Знач НомерВерсии, Знач Формат) Экспорт + Конфигуратор = ПолучитьМенеджерКонфигуратора(); Если ВерсияПлатформы <> Неопределено Тогда Конфигуратор.ИспользоватьВерсиюПлатформы(ВерсияПлатформы); @@ -97,83 +131,244 @@ Конфигуратор.ИспользоватьВерсиюПлатформы("8.3"); КонецЕсли; - ЛогКонфигуратора = Логирование.ПолучитьЛог("oscript.lib.v8runner"); - ЛогКонфигуратора.УстановитьУровень(Лог.Уровень()); - КоличествоЦикловОжиданияЛицензии = ПолучитьКоличествоЦикловОжиданияЛицензииПоУмолчанию(); - Пока КоличествоЦикловОжиданияЛицензии >= 0 Цикл - Попытка - - Конфигуратор.ЗагрузитьКонфигурациюИзФайла(ФайлКонфигурации, Ложь); - Прервать; + Плагины.ПередНачаломВыгрузкиВерсииХранилищаКонфигурации(Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии, Формат); + + Плагины.ПередЗагрузкойВерсииХранилищаКонфигурации(Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии, Формат); + ЗагрузитьВерсиюХранилищаВКонфигурацию(Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии); - Исключение - - // проверим текст ошибки, если текст содержит информацию о необходимости конвертировать - // тогда выполним конвертацию и повторно попытаемся загрузить файл - ТекстОшибки = ВРег(Конфигуратор.ВыводКоманды()); - Если Найти(ТекстОшибки, Врег("Структура конфигурации несовместима с текущей версией программы")) Тогда - - Конфигуратор.СконвертироватьФайлКонфигурации(ФайлКонфигурации); - Конфигуратор.ЗагрузитьКонфигурациюИзФайла(ФайлКонфигурации, Ложь); - Прервать; - - ИначеЕсли Найти(ТекстОшибки, Врег("Не обнаружено свободной лицензии!")) Тогда - Лог.Ошибка(ТекстОшибки); - Лог.Информация("Повторное подключение через 10сек. Осталось попыток: " + КоличествоЦикловОжиданияЛицензии); - Приостановить(10000); + КаталогВыгрузки = ВременныеФайлы.СоздатьКаталог(); + + Лог.Отладка("Каталог выгрузки <%1> для версии <%2>",КаталогВыгрузки , НомерВерсии); - Иначе - - ВызватьИсключение ТекстОшибки; - - КонецЕсли; - - КонецПопытки; + Плагины.ПередВыгрузкойКонфигурациюВИсходники(Конфигуратор, КаталогРабочейКопии, КаталогВыгрузки, ПутьКХранилищу, НомерВерсии, Формат); + ВыгрузитьКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки, Формат); - Если ПолучитьКоличествоЦикловОжиданияЛицензииПоУмолчанию() <> 0 Тогда - КоличествоЦикловОжиданияЛицензии = КоличествоЦикловОжиданияЛицензии - 1; - КонецЕсли; + Плагины.ПередОчисткойКаталогаРабочейКопии(Конфигуратор, КаталогРабочейКопии, КаталогВыгрузки, ПутьКХранилищу, НомерВерсии, Формат); + ОчиститьКаталогРабочейКопии(КаталогРабочейКопии); + + Плагины.ПередПеремещениемВКаталогРабочейКопии(Конфигуратор, КаталогРабочейКопии, КаталогВыгрузки, ПутьКХранилищу, НомерВерсии, Формат); + ПереместитьВКаталогРабочейКопии(КаталогРабочейКопии, КаталогВыгрузки, Формат); + + Плагины.ПослеОкончанияВыгрузкиВерсииХранилищаКонфигурации(Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии, Формат); + + УдалитьВременныеФайлыПриНеобходимости(Конфигуратор.КаталогСборки()); + +КонецПроцедуры + +Процедура ЗагрузитьВерсиюХранилищаВКонфигурацию(Знач Конфигуратор, Знач КаталогРабочейКопии, Знач ПутьКХранилищу, Знач НомерВерсии) Экспорт + СтандартнаяОбработка = Истина; + + Плагины.ПриЗагрузкеВерсииХранилищаВКонфигурацию(Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда - КонецЦикла; + ФайлХранилища = Новый Файл(ПолучитьПутьКБазеДанныхХранилища(ПутьКХранилищу)); + + Если ФайлХранилища.Существует() И ФайлХранилища.ЭтоФайл() И ВРег(ФайлХранилища.Расширение) = ".1CD" Тогда + ВремКаталог = ВременныеФайлы.СоздатьКаталог(); + ФайлВерсии = ИмяФайлаВыгрузкиВерсииХранилища(ВремКаталог, НомерВерсии); + Лог.Отладка("Выгружаем версию хранилища в файл " + ФайлВерсии); + + // Получение cf + ПоНомеруВерсииСохранитьКонфигурациюСредствамиTool1CD(ФайлХранилища.ПолноеИмя, ФайлВерсии, НомерВерсии); + + КоличествоЦикловОжиданияЛицензии = ПолучитьКоличествоЦикловОжиданияЛицензииПоУмолчанию(); + + Пока КоличествоЦикловОжиданияЛицензии >= 0 Цикл + Попытка + + Конфигуратор.ЗагрузитьКонфигурациюИзФайла(ФайлВерсии, Ложь); + Прервать; + + Исключение + + // проверим текст ошибки, если текст содержит информацию о необходимости конвертировать + // тогда выполним конвертацию и повторно попытаемся загрузить файл + ТекстОшибки = ВРег(Конфигуратор.ВыводКоманды()); + Если Найти(ТекстОшибки, Врег("Структура конфигурации несовместима с текущей версией программы")) Тогда + + Конфигуратор.СконвертироватьФайлКонфигурации(ФайлВерсии); + Конфигуратор.ЗагрузитьКонфигурациюИзФайла(ФайлВерсии, Ложь); + Прервать; + + ИначеЕсли Найти(ТекстОшибки, Врег("Не обнаружено свободной лицензии!")) Тогда + Лог.Ошибка(ТекстОшибки); + Лог.Информация("Повторное подключение через 10сек. Осталось попыток: " + КоличествоЦикловОжиданияЛицензии); + Приостановить(10000); + + Иначе + + ВызватьИсключение ТекстОшибки; + + КонецЕсли; + + КонецПопытки; + + Если ПолучитьКоличествоЦикловОжиданияЛицензииПоУмолчанию() <> 0 Тогда + КоличествоЦикловОжиданияЛицензии = КоличествоЦикловОжиданияЛицензии - 1; + КонецЕсли; + + КонецЦикла; + + УдалитьВременныеФайлыПриНеобходимости(ВремКаталог); + Иначе + ВызватьИсключение "Что-то пошло не так " + КонецЕсли - Если Не (Новый Файл(КаталогПлоскойВыгрузки).Существует()) Тогда - СоздатьКаталог(КаталогПлоскойВыгрузки); КонецЕсли; - Если НЕ ТолькоИзменения Тогда - МассивФайлов = НайтиФайлы(КаталогПлоскойВыгрузки, ПолучитьМаскуВсеФайлы()); - Если МассивФайлов.Количество() <> 0 Тогда - ВызватьИсключение "В каталоге <"+КаталогПлоскойВыгрузки+"> не должно быть файлов"; - КонецЕсли; + Плагины.ПослеЗагрузкиВерсииХранилищаВКонфигурацию(Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, НомерВерсии); + +КонецПроцедуры - ПараметрыЗапуска = Конфигуратор.ПолучитьПараметрыЗапуска(); - ПараметрыЗапуска.Добавить("/Visible"); - ПараметрДампаКонфигурации = СтрШаблон("/DumpConfigToFiles ""%1"" -format %2", КаталогПлоскойВыгрузки, ТРег(Формат)); - ПараметрыЗапуска.Добавить(ПараметрДампаКонфигурации); +Процедура ВыгрузитьКонфигурациюВИсходники(Знач Конфигуратор, Знач КаталогВыгрузки, Знач Формат) Экспорт - ВыполнитьКомандуКонфигуратора(Конфигуратор, ПараметрыЗапуска); + СтандартнаяОбработка = Истина; - Иначе - ТекущийФайлВерсийМетаданных = Новый Файл(ОбъединитьПути(КаталогПлоскойВыгрузки,"ConfigDumpInfo.xml")); - ТолькоИзмененияЕслиФайлЕсть = ?(ТекущийФайлВерсийМетаданных.Существует(), ТолькоИзменения, Ложь); - Попытка - Конфигуратор.ВыгрузитьКонфигурациюВФайлы(КаталогПлоскойВыгрузки, , ТолькоИзмененияЕслиФайлЕсть); - Исключение + Плагины.ПриВыгрузкеКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки, Формат, СтандартнаяОбработка); - ОписаниеОшибки = ОписаниеОшибки(); - Если ПроверитьОписаниеОшибкиНаКритичность(ОписаниеОшибки) Тогда - УдалитьВременныеФайлыПриНеобходимости(Конфигуратор.КаталогСборки()); - ВызватьИсключение; + Если СтандартнаяОбработка Тогда + + Конфигуратор.ВыгрузитьКонфигурациюВФайлы(КаталогВыгрузки, Формат); + + КонецЕсли; + + Плагины.ПослеВыгрузкиКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки, Формат); + +КонецПроцедуры + +Процедура ОчиститьКаталогРабочейКопии(Знач КаталогРабочейКопии) Экспорт + + СтандартнаяОбработка = Истина; + + СоответствиеИменФайловДляПропуска = Новый Соответствие; + СоответствиеИменФайловДляПропуска.Вставить(".git", Истина); + СоответствиеИменФайловДляПропуска.Вставить(ИмяФайлаАвторов(), Истина); //Соответствие авторов и транслитерации. + СоответствиеИменФайловДляПропуска.Вставить(ИмяФайлаВерсииХранилища(), Истина); //Номер версии, может использоватся для синхронизации с хранилищем. + + Плагины.ПриОчисткеКаталогаРабочейКопии(КаталогРабочейКопии, СоответствиеИменФайловДляПропуска, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + + //Удалим все каталоги с файлами в папке для разбора, кроме папки, начинающейся с с точки. + ЕстьОшибкаУдаления = Ложь; + Для НомерПопытки = 1 По 2 Цикл + МассивФайлов = НайтиФайлы(КаталогРабочейКопии, ПолучитьМаскуВсеФайлы()); + Если МассивФайлов.Количество() = 0 Тогда + Прервать; + КонецЕсли; + + Для Каждого ЭлементМассива Из МассивФайлов Цикл + Если СоответствиеИменФайловДляПропуска[ЭлементМассива.Имя] = Истина Тогда + Продолжить; + КонецЕсли; + + Попытка + УдалитьФайлы(ЭлементМассива.ПолноеИмя); + Исключение + ЕстьОшибкаУдаления = Истина; + Если НомерПопытки = 2 Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + КонецЦикла; + + Если Не ЕстьОшибкаУдаления Тогда + Прервать; КонецЕсли; - КонецПопытки; - УдалитьВременныеФайлыПриНеобходимости(Конфигуратор.КаталогСборки()); + КонецЦикла; + + КонецЕсли; + + Плагины.ПослеОчисткиКаталогаРабочейКопии(КаталогРабочейКопии, СоответствиеИменФайловДляПропуска); + +КонецПроцедуры + +Процедура ПереместитьВКаталогРабочейКопии(Знач КаталогРабочейКопии, Знач КаталогВыгрузки, Знач Формат) Экспорт + + СтандартнаяОбработка = Истина; + + ТаблицаПереименования = Новый ТаблицаЗначений; + ТаблицаПереименования.Колонки.Добавить("Источник"); + ТаблицаПереименования.Колонки.Добавить("Приемник"); + + ПутьКФайлуПереименования = ОбъединитьПути(КаталогРабочейКопии, "renames.txt"); + Плагины.ПриПеремещенииВКаталогРабочейКопии(КаталогРабочейКопии, КаталогВыгрузки, ТаблицаПереименования, ПутьКФайлуПереименования, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + + НативнаяИерархия = ЭтоНативнаяИерархия(Формат); + СписокФайлов = НайтиФайлы(КаталогВыгрузки, ПолучитьМаскуВсеФайлы(), НативнаяИерархия); + Лог.Отладка("Найдено файлов выгрузки: "+СписокФайлов.Количество()+" шт."); + Для Каждого Файл Из СписокФайлов Цикл + ИмяФайлаДляПереименования = Файл.Имя; + Если НативнаяИерархия Тогда + ИмяНовогоФайла = СтрЗаменить(Файл.ПолноеИмя, КаталогВыгрузки, ""); + ИмяНовогоФайла = ?(Лев(ИмяНовогоФайла, 1) ="/", Сред(ИмяНовогоФайла, 2), ИмяНовогоФайла); + ИмяНовогоФайла = ?(Лев(ИмяНовогоФайла, 1) ="\", Сред(ИмяНовогоФайла, 2), ИмяНовогоФайла); + Если Файл.ЭтоКаталог() Тогда + ИмяКаталога = ОбъединитьПути(КаталогРабочейКопии, ИмяНовогоФайла); + ФайлКаталога = Новый Файл(ИмяКаталога); + Если ФайлКаталога.Существует() = Ложь Тогда + СоздатьКаталог(ИмяКаталога); + КонецЕсли; + Продолжить; + КонецЕсли; + ИмяФайлаДляПереименования = ИмяНовогоФайла; + Иначе + Если Файл.ЭтоКаталог() Тогда + ОбработатьКаталогРезультатаВыгрузки(Файл, КаталогРабочейКопии, ТаблицаПереименования); + Продолжить; + КонецЕсли; + + ИмяФайла = СкорректироватьИмяФайлаМетаданных(Файл.ИмяБезРасширения); + + //Определим длину Наименования папки, по умолчанию не больше 60 символов. + Если СтрДлина(ИмяФайла)>144 Тогда + СократитьДлинуИмениФайла(ИмяФайла, КаталогРабочейКопии); + КонецЕсли; + + ИмяНовогоФайла = СтрЗаменить(ИмяФайла, ".", ПолучитьРазделительПути())+Файл.Расширение; + + КонецЕсли; + + НовыйФайл = Новый Файл(ОбъединитьПути(КаталогРабочейКопии, ИмяНовогоФайла)); + НовыйКаталог = Новый Файл(НовыйФайл.Путь); + Если НЕ НовыйКаталог.Существует() Тогда + СоздатьКаталог(НовыйКаталог.ПолноеИмя); + КонецЕсли; + + ДобавитьПереименование(ТаблицаПереименования,ИмяФайлаДляПереименования, ИмяНовогоФайла); + + КопироватьФайл(Файл.ПолноеИмя, НовыйФайл.ПолноеИмя); + + Если Нрег(Файл.Имя) = "form.bin" Тогда + КаталогФормы = ОбъединитьПути(НовыйКаталог.ПолноеИмя, НовыйФайл.ИмяБезРасширения); + СоздатьКаталог(КаталогФормы); + РаспаковатьКонтейнерМетаданных(НовыйФайл.ПолноеИмя, КаталогФормы); + КонецЕсли; + + КонецЦикла; + + ТекстовыйДокумент = Новый ЗаписьТекста(ПутьКФайлуПереименования); + Для Каждого ЭлементСтроки Из ТаблицаПереименования Цикл + ТекстовыйДокумент.ЗаписатьСтроку(СтрШаблон("%1-->%2", ЭлементСтроки.Источник, ЭлементСтроки.Приемник)); + КонецЦикла; + ТекстовыйДокумент.Закрыть(); + КонецЕсли; + Плагины.ПослеПеремещенияВКаталогРабочейКопии(КаталогРабочейКопии, КаталогВыгрузки, ТаблицаПереименования, ПутьКФайлуПереименования); + КонецПроцедуры -Функция ПолучитьМенеджерКонфигуратора() +#КонецОбласти + +#Область РАБОТА С КОНФИГУРАТОРОМ + +Функция ПолучитьМенеджерКонфигуратора() Экспорт Конфигуратор = Новый УправлениеКонфигуратором; Логирование.ПолучитьЛог("oscript.lib.v8runner").УстановитьУровень(Лог.Уровень()); КаталогСборки = ВременныеФайлы.СоздатьКаталог(); @@ -194,14 +389,10 @@ КонецЕсли; КонецПопытки; - УдалитьВременныеФайлыПриНеобходимости(Конфигуратор.КаталогСборки()); - КонецПроцедуры - - Функция МассивНеКритическихОшибок() - + Массив = Новый Массив; Массив.Добавить("Конфигурация содержит объекты метаданных, длина имен которых превышает 80 символов!"); @@ -222,138 +413,12 @@ Возврат Истина; КонецФункции -// Выполняет перенос файлов из каталога плоской выгрузки в каталог с иерархической структурой метаданных. -// -Процедура РазложитьМодули1СПоПапкамСогласноИерархииМетаданных(Знач КаталогПлоскойВыгрузки, Знач КаталогИерархическойВыгрузки, Знач Формат) Экспорт - - Лог.Информация("Раскладываем модули по папкам согласно иерархии метаданных"); - - КэшПереименований = Новый Соответствие; - - УбедитьсяЧтоФайлИлиКаталогСуществует(КаталогПлоскойВыгрузки); - - Если ПустаяСтрока(КаталогИерархическойВыгрузки) Тогда - ВызватьИсключение "Не задан каталог выгрузки модулей по иерархии"; - КонецЕсли; - - ФайлВыгрузкиКаталог = Новый Файл(КаталогИерархическойВыгрузки); - Если Не ФайлВыгрузкиКаталог.Существует() Тогда - СоздатьКаталог(КаталогИерархическойВыгрузки); - //ЗарегистрироватьВременныйФайл(КаталогИерархическойСтруктурыМодулей); TODO выяснить почему временный? - КонецЕсли; - - ЗавершитьПроцесс_TGitCache_exe(); - - ОчиститьЦелевойКаталогВыгрузки(КаталогИерархическойВыгрузки); - - Переименования = Новый ТаблицаЗначений; - Переименования.Колонки.Добавить("Источник"); - Переименования.Колонки.Добавить("Приемник"); - - НативнаяИерархия = ЭтоНативнаяИерархия(КаталогПлоскойВыгрузки); - СписокФайлов = НайтиФайлы(КаталогПлоскойВыгрузки, ПолучитьМаскуВсеФайлы(), НативнаяИерархия); - Лог.Отладка("Найдено файлов выгрузки: "+СписокФайлов.Количество()+" шт."); - Для Каждого Файл Из СписокФайлов Цикл - ИмяФайлаДляПереименования = Файл.Имя; - Если НативнаяИерархия Тогда - ИмяНовогоФайла = СтрЗаменить(Файл.ПолноеИмя, КаталогПлоскойВыгрузки, ""); - ИмяНовогоФайла = ?(Лев(ИмяНовогоФайла, 1) ="/", Сред(ИмяНовогоФайла, 2), ИмяНовогоФайла); - ИмяНовогоФайла = ?(Лев(ИмяНовогоФайла, 1) ="\", Сред(ИмяНовогоФайла, 2), ИмяНовогоФайла); - Если Файл.ЭтоКаталог() Тогда - ИмяКаталога = ОбъединитьПути(КаталогИерархическойВыгрузки, ИмяНовогоФайла); - ФайлКаталога = Новый Файл(ИмяКаталога); - Если ФайлКаталога.Существует() = Ложь Тогда - СоздатьКаталог(ИмяКаталога); - КонецЕсли; - Продолжить; - КонецЕсли; - ИмяФайлаДляПереименования = ИмяНовогоФайла; - Иначе - Если Файл.ЭтоКаталог() Тогда - ОбработатьКаталогРезультатаВыгрузки(Файл, КаталогИерархическойВыгрузки, Переименования); - Продолжить; - КонецЕсли; +#КонецОбласти - ИмяФайла = СкорректироватьИмяФайлаМетаданных(Файл.ИмяБезРасширения); - - //Определим длину Наименования папки, по умолчанию не больше 60 символов. - Если СтрДлина(ИмяФайла)>144 Тогда - СократитьДлинуИмениФайла(ИмяФайла, КаталогИерархическойВыгрузки); - КонецЕсли; - - ИмяНовогоФайла = СтрЗаменить(ИмяФайла, ".", ПолучитьРазделительПути())+Файл.Расширение; - - КонецЕсли; - - НовыйФайл = Новый Файл(ОбъединитьПути(КаталогИерархическойВыгрузки, ИмяНовогоФайла)); - НовыйКаталог = Новый Файл(НовыйФайл.Путь); - Если НЕ НовыйКаталог.Существует() Тогда - СоздатьКаталог(НовыйКаталог.ПолноеИмя); - КонецЕсли; - - ДобавитьПереименование(Переименования,ИмяФайлаДляПереименования,ИмяНовогоФайла); - - КопироватьФайл(Файл.ПолноеИмя, НовыйФайл.ПолноеИмя); - - Если Нрег(Файл.Имя) = "form.bin" Тогда - КаталогФормы = ОбъединитьПути(НовыйКаталог.ПолноеИмя, НовыйФайл.ИмяБезРасширения); - СоздатьКаталог(КаталогФормы); - РаспаковатьКонтейнерМетаданных(НовыйФайл.ПолноеИмя, КаталогФормы, Переименования, ФайлВыгрузкиКаталог.ПолноеИмя + ПолучитьРазделительПути()); - КонецЕсли; - - КонецЦикла; - - ТекстовыйДокумент = Новый ЗаписьТекста(ОбъединитьПути(КаталогИерархическойВыгрузки, "renames.txt")); - Для Каждого ЭлементСтроки Из Переименования Цикл - ТекстовыйДокумент.ЗаписатьСтроку(ЭлементСтроки.Источник+"-->"+СтрЗаменить(ЭлементСтроки.Приемник, "/", "\")); - КонецЦикла; - ТекстовыйДокумент.Закрыть(); - -КонецПроцедуры - -Функция ЭтоНативнаяИерархия(Знач КаталогПроверки) - КаталогЯзыки = Новый Файл(ОбъединитьПути(КаталогПроверки, "Languages")); - Возврат КаталогЯзыки.Существует(); +Функция ЭтоНативнаяИерархия(Знач Формат) + Возврат Формат = РежимВыгрузкиФайлов.Иерархический; КонецФункции -Процедура ОчиститьЦелевойКаталогВыгрузки(Знач КаталогИерархическойСтруктурыМодулей) - - СоответствиеИменФайловДляПропуска = Новый Соответствие; - СоответствиеИменФайловДляПропуска.Вставить(".git", Истина); - СоответствиеИменФайловДляПропуска.Вставить(ИмяФайлаАвторов(), Истина); //Соответствие авторов и транслитерации. - СоответствиеИменФайловДляПропуска.Вставить(ИмяФайлаВерсииХранилища(), Истина); //Номер версии, может использоватся для синхронизации с хранилищем. - - //Удалим все каталоги с файлами в папке для разбора, кроме папки, начинающейся с с точки. - ЕстьОшибкаУдаления = Ложь; - Для НомерПопытки = 1 По 2 Цикл - МассивФайлов = НайтиФайлы(КаталогИерархическойСтруктурыМодулей, ПолучитьМаскуВсеФайлы()); - Если МассивФайлов.Количество() = 0 Тогда - Прервать; - КонецЕсли; - - Для Каждого ЭлементМассива Из МассивФайлов Цикл - Если СоответствиеИменФайловДляПропуска[ЭлементМассива.Имя] = Истина Тогда - Продолжить; - КонецЕсли; - - Попытка - УдалитьФайлы(ЭлементМассива.ПолноеИмя); - Исключение - ЕстьОшибкаУдаления = Истина; - Если НомерПопытки = 2 Тогда - ВызватьИсключение; - КонецЕсли; - КонецПопытки; - КонецЦикла; - - Если Не ЕстьОшибкаУдаления Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - Процедура ОбработатьКаталогРезультатаВыгрузки(Знач Файл, Знач КаталогИерархическойСтруктурыМодулей, Знач Переименования) Если Прав(Файл.Имя, 5) = "files" Тогда // файлы справки. МассивФайлов = НайтиФайлы(Файл.ПолноеИмя, ПолучитьМаскуВсеФайлы()); @@ -449,29 +514,17 @@ Процедура РаспаковатьКонтейнерМетаданных(Знач ФайлРаспаковки, Знач КаталогРаспаковки, Знач Переименования = "", Знач КорневойКаталог = "") - dllРаспаковать(ФайлРаспаковки, КаталогРаспаковки); - ВыполнитьСборкуМусора(); // см. камент к процедуре dllРаспаковать - - Если ПереименовыватьФайлМодуляОбычнойФормы Тогда - - Для Каждого ФайлМодуля Из НайтиФайлы(КаталогРаспаковки, "module", Истина) Цикл - - СтароеИмяФайла = ФайлМодуля.ПолноеИмя; - НовоеИмяФайла = ОбъединитьПути(ФайлМодуля.Путь, "Module.bsl"); - ПереместитьФайл(СтароеИмяФайла, НовоеИмяФайла); - Если НЕ ПустаяСтрока(Переименования) Тогда - Если ПустаяСтрока(КорневойКаталог) Тогда - ВызватьИсключение - "РаспаковатьКонтейнерМетаданных при заполненном Переименования ожидали и не пустое КорневойКаталог"; - КонецЕсли; - ДобавитьПереименование(Переименования, - СтрЗаменить(СтароеИмяФайла, КорневойКаталог, ""), - СтрЗаменить(НовоеИмяФайла, КорневойКаталог, "")); - КонецЕсли; - КонецЦикла; + СтандартнаяОбработка = Истина; + Плагины.ПриРаспаковкеКонтейнераМетаданных(ФайлРаспаковки, КаталогРаспаковки, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + dllРаспаковать(ФайлРаспаковки, КаталогРаспаковки); + ВыполнитьСборкуМусора(); // см. камент к процедуре dllРаспаковать КонецЕсли; + Плагины.ПослеРаспаковкиКонтейнераМетаданных(ФайлРаспаковки, КаталогРаспаковки); + КонецПроцедуры // хитрость: надо выносить в отдельную процедуру, @@ -487,20 +540,26 @@ КонецПроцедуры +#Область РАБОТА С GIT + ///////////////////////////////////// // GIT Пересмотр Функция ПолучитьГитРепозиторий(Знач КаталогРабочейКопии) - + ФайлКаталога = Новый Файл(ОбъединитьПути(ТекущийКаталог(), КаталогРабочейКопии)); Если ФайлКаталога.ПолноеИмя = РабочийКаталогСохр Тогда ГитРепозиторий = ГитРепозиторийСохр; Иначе ГитРепозиторий = Новый ГитРепозиторий; ГитРепозиторий.УстановитьРабочийКаталог(КаталогРабочейКопии); + ГитРепозиторий.УстановитьТихийРежимРаботы(); + ГитРепозиторий.УстановитьНастройку("core.quotepath", "false", РежимУстановкиНастроекGit.Локально); ГитРепозиторий.УстановитьНастройку("merge.ours.driver", "true", РежимУстановкиНастроекGit.Локально); + ГитРепозиторий.УстановитьНормальныйРежимРаботы(); + РабочийКаталогСохр = ФайлКаталога.ПолноеИмя; ГитРепозиторийСохр = ГитРепозиторий; @@ -510,22 +569,12 @@ КонецФункции // ПолучитьГитРепозиторий() -Функция ПодготовитьФайлКоммита(Знач Комментарий) - - ИмяФайлаКомментария = ВременныеФайлы.СоздатьФайл("txt"); - ФайлКомментария = Новый ЗаписьТекста(ИмяФайлаКомментария, КодировкаТекста.UTF8NoBOM); - ФайлКомментария.Записать(?(ПустаяСтрока(Комментарий), ".", Комментарий)); - ФайлКомментария.Закрыть(); - Лог.Отладка(СтрШаблон("Текст коммита: %1", Комментарий)); - - Возврат ИмяФайлаКомментария; - -КонецФункции - // Выполняет фиксацию изменений в локальном каталоге git // -Процедура ВыполнитьКоммитГит(Знач КаталогРабочейКопии, Знач Комментарий, Знач Автор, Знач Дата = Неопределено, Знач НоваяМетка = "") Экспорт +Процедура ВыполнитьКоммитГит(Знач КаталогРабочейКопии, Знач Комментарий, Знач Автор, Знач Дата = Неопределено) Экспорт + + Плагины.ПередКоммитом(КаталогРабочейКопии, Комментарий, Автор, Дата); Если Дата = Неопределено Тогда Дата = ТекущаяДата(); @@ -533,90 +582,104 @@ авторДляГит = Автор; - Лог.Отладка(СтрШаблон("Автор коммита: %1", авторДляГит)); + Лог.Отладка("Автор коммита: %1", авторДляГит); ДатаДляГит = ДатаPOSIX(Дата); - Лог.Отладка(СтрШаблон("Дата коммита: %1", ДатаДляГит)); + Лог.Отладка("Дата коммита: %1", ДатаДляГит); ИмяФайлаКомментария = ПодготовитьФайлКоммита(Комментарий); ГитРепозиторий = ПолучитьГитРепозиторий(КаталогРабочейКопии); + ПроиндексироватьОтслеживаемыеФайлы = Истина; // Выполнение индексации всех измененных файлов + Плагины.ПриКоммите(ГитРепозиторий, + Комментарий, + ПроиндексироватьОтслеживаемыеФайлы, + ИмяФайлаКомментария, + авторДляГит, + ДатаДляГит, + авторДляГит, + ДатаДляГит); + ГитРепозиторий.ВыполнитьКоманду(СтрРазделить("add -A .", " ")); ГитРепозиторий.Закоммитить(Комментарий, - Истина, - ИмяФайлаКомментария, - авторДляГит, - ДатаДляГит, - авторДляГит, - ДатаДляГит); - Лог.Отладка(СтрШаблон("Вывод команды Commit: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды()))); - - Если ЗначениеЗаполнено(НоваяМетка) Тогда - ПараметрыКоманды = Новый Массив; - ПараметрыКоманды.Добавить("tag"); - ПараметрыКоманды.Добавить(Строка(НоваяМетка)); + ПроиндексироватьОтслеживаемыеФайлы, + ИмяФайлаКомментария, + авторДляГит, + ДатаДляГит, + авторДляГит, + ДатаДляГит); + Лог.Отладка("Вывод команды Commit: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды())); - ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); + Плагины.ПослеКоммита(ГитРепозиторий, КаталогРабочейКопии); - КонецЕсли; - ЗавершитьПроцесс_TGitCache_exe(); КонецПроцедуры -// Cтандартная процедура git push + +// Выполняет клонирование удаленного репо // -Функция ВыполнитьGitPush(Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки = Неопределено, Знач ОтправитьМетки = Ложь) Экспорт +Функция КлонироватьРепозитарий(Знач КаталогЛокальнойКопии, Знач URLРепозитария) Экспорт - ГитРепозиторий = ПолучитьГитРепозиторий(ЛокальныйРепозиторий); - // Оптимизация git - ГитРепозиторий.ВыполнитьКоманду(СтрРазделить("gc --auto", " ")); - Лог.Отладка(СтрШаблон("Вывод команды gc: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды()))); + ГитРепозиторий = ПолучитьГитРепозиторий(КаталогЛокальнойКопии); + ГитРепозиторий.УстановитьТихийРежимРаботы(); + ГитРепозиторий.КлонироватьРепозиторий(URLРепозитария, КаталогЛокальнойКопии); + КодВозврата = ГитРепозиторий.ПолучитьКодВозврата(); - ПараметрыКомандыPush = Новый Массив; - ПараметрыКомандыPush.Добавить("push -u"); - ПараметрыКомандыPush.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%")); - ПараметрыКомандыPush.Добавить("--all -v"); - - ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыPush); + Возврат КодВозврата; - Лог.Отладка(СтрШаблон("Вывод команды Push: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды()))); +КонецФункции - ЗавершитьПроцесс_TGitCache_exe(); +// Выполняет инициализацию репо +// +Функция ИнициализироватьРепозитарий(Знач КаталогЛокальнойКопии) Экспорт - Возврат 0; + ГитРепозиторий = ПолучитьГитРепозиторий(КаталогЛокальнойКопии); + ГитРепозиторий.УстановитьТихийРежимРаботы(); + ГитРепозиторий.Инициализировать(); + КодВозврата = ГитРепозиторий.ПолучитьКодВозврата(); + + Возврат КодВозврата; КонецФункции -// Cтандартная процедура git pull +// Возвращает Истина, если каталог является каталогом или подкаталогом гит-репозитория, иначе возвращается Ложь. // -Функция ВыполнитьGitPull(Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки) Экспорт +Функция ПроверитьНаличиеРепозитарияГит(Знач КаталогЛокальнойКопии) Экспорт + + Сообщить("Пууу"); + ГитРепозиторий = ПолучитьГитРепозиторий(КаталогЛокальнойКопии); + ГитРепозиторий.УстановитьТихийРежимРаботы(); + ТекстСтатуса = ГитРепозиторий.Статус(); + КодВозврата = ГитРепозиторий.ПолучитьКодВозврата(); - ГитРепозиторий = ПолучитьГитРепозиторий(ЛокальныйРепозиторий); - ГитРепозиторий.Получить(УдаленныйРепозиторий, ИмяВетки); + Возврат КодВозврата = 0; - Лог.Отладка(СтрШаблон("Вывод команды Pull: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды()))); +КонецФункции // ПроверитьНаличиеРепозитарияГит(Знач Каталог) Экспорт - ЗавершитьПроцесс_TGitCache_exe(); +Функция ПодготовитьФайлКоммита(Знач Комментарий) + + ИмяФайлаКомментария = ВременныеФайлы.СоздатьФайл("txt"); + ФайлКомментария = Новый ЗаписьТекста(ИмяФайлаКомментария, КодировкаТекста.UTF8NoBOM); + ФайлКомментария.Записать(?(ПустаяСтрока(Комментарий), ".", Комментарий)); + ФайлКомментария.Закрыть(); + Лог.Отладка(СтрШаблон("Текст коммита: %1", Комментарий)); - Возврат 0; + Возврат ИмяФайлаКомментария; КонецФункции -////////////////////////////////////////////////////////////////////////// -// Работа с таблицами хранилища 1С +#КонецОбласти -// Устанавливает параметры авторизации в хранилище 1С, если выгрузка версии выполняется средствами платформы -// -Процедура УстановитьАвторизациюВХранилищеКонфигурации(Знач Логин, Знач Пароль, Знач ВерсияПлатформы = "") - мАвторизацияВХранилищеСредствами1С = Новый Структура; - мАвторизацияВХранилищеСредствами1С.Вставить("Логин" , Логин); - мАвторизацияВХранилищеСредствами1С.Вставить("Пароль", Пароль); - мАвторизацияВХранилищеСредствами1С.Вставить("ВерсияПлатформы", ВерсияПлатформы); -КонецПроцедуры + + + +////////////////////////////////////////////////////////////////////////// +// Работа с таблицами хранилища 1С + // Выполняет чтение таблицы VERSIONS из хранилища 1С // @@ -663,51 +726,57 @@ // Считывает из хранилища историю коммитов с привязкой к пользователям // -Функция ПрочитатьИзХранилищаИсториюКоммитовСАвторами(Знач ФайлХранилища) Экспорт +Функция ПрочитатьИзХранилищаИсториюКоммитовСАвторами(Знач ПутьКХранилищу, Знач КаталогРабочейКопии) Экспорт + + СтандартнаяОбработка = Истина; - Перем ТаблицаВерсий; - Перем ТаблицаПользователей; + ТаблицаВерсий = НоваяТаблицаИсторииВерсий(); + ТаблицаПользователей = НоваяТаблицаПользователейХранилища(); + + Плагины.ПриПолученииТаблицыВерсий(ТаблицаВерсий, ПутьКХранилищу, КаталогРабочейКопии, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + + ФайлХранилища = ПолучитьПутьКБазеДанныхХранилища(ПутьКХранилищу); + Лог.Отладка("Файл хранилища конфигурации: " + ФайлХранилища); + + ЧтениеБазыДанных = Новый ЧтениеТаблицФайловойБазыДанных; + ЧтениеБазыДанных.ОткрытьФайл(ФайлХранилища); + Попытка + Таблицы = ЧтениеБазыДанных.ВыгрузитьТаблицыВXML("USERS;VERSIONS"); + ТаблицаВерсий = ЧтениеБазыДанных.ПрочитатьТаблицуИзXml(Таблицы["VERSIONS"]); + ТаблицаПользователей = ЧтениеБазыДанных.ПрочитатьТаблицуИзXml(Таблицы["USERS"]); + Исключение + ЧтениеБазыДанных.ЗакрытьФайл(); + ВызватьИсключение; + КонецПопытки; - ЧтениеБазыДанных = Новый ЧтениеТаблицФайловойБазыДанных; - ЧтениеБазыДанных.ОткрытьФайл(ФайлХранилища); - Попытка - Таблицы = ЧтениеБазыДанных.ВыгрузитьТаблицыВXML("USERS;VERSIONS"); - ТаблицаВерсий = ЧтениеБазыДанных.ПрочитатьТаблицуИзXml(Таблицы["VERSIONS"]); - ТаблицаПользователей = ЧтениеБазыДанных.ПрочитатьТаблицуИзXml(Таблицы["USERS"]); - Исключение ЧтениеБазыДанных.ЗакрытьФайл(); - ВызватьИсключение; - КонецПопытки; - - ЧтениеБазыДанных.ЗакрытьФайл(); - - ТаблицаВерсий = КонвертироватьТаблицуВерсийИзФорматаБД(ТаблицаВерсий); - ТаблицаПользователей = КонвертироватьТаблицуПользователейИзФорматаБД(ТаблицаПользователей); - - ДополнитьТаблицуВерсийИменамиАвторов(ТаблицаВерсий, ТаблицаПользователей); - ТаблицаВерсий.Сортировать("НомерВерсии"); + ТаблицаВерсий = КонвертироватьТаблицуВерсийИзФорматаБД(ТаблицаВерсий); + ТаблицаПользователей = КонвертироватьТаблицуПользователейИзФорматаБД(ТаблицаПользователей); + + ДополнитьТаблицуВерсийИменамиАвторов(ТаблицаВерсий, ТаблицаПользователей); + ТаблицаВерсий.Сортировать("НомерВерсии"); + + КонецЕсли; + + Плагины.ПослеПолученияТаблицыВерсий(ТаблицаВерсий, ПутьКХранилищу, КаталогРабочейКопии); + Возврат ТаблицаВерсий; КонецФункции // Прописывает в таблицы пользователей и версий информацию о git auth вида user // -Процедура ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(Знач ТаблицаХранилища, Знач КаталогРепо, Знач ПроверитьАвторовХранилища = Ложь) Экспорт +Процедура ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(Знач ТаблицаХранилища, Знач КаталогРепо) Экспорт ПутьКФайлуСопоставления = ОбъединитьПути(КаталогРепо, ИмяФайлаАвторов()); ТаблицаСопоставления = ПрочитатьФайлАвторовГитВТаблицуПользователей(ПутьКФайлуСопоставления); - СоответствиеСообщенийОбОшибочныхАвторах = Новый Соответствие; Для Каждого Строка Из ТаблицаХранилища Цикл СтрокаПользователя = ТаблицаСопоставления.Найти(строка.Автор, "Автор"); Если СтрокаПользователя = Неопределено Тогда - - СтрокаСообщения = СтрШаблон("Пользователю хранилища <%1> не сопоставлен пользователь git.",строка.Автор); - Если ПроверитьАвторовХранилища Тогда - СоответствиеСообщенийОбОшибочныхАвторах.Вставить(строка.Автор, СтрокаСообщения); - КонецЕсли; - Лог.Отладка(СтрокаСообщения + " Использую сопоставление по умолчанию"); ПредставлениеАвтора = СтроковыеФункции.ПодставитьПараметрыВСтроку("%1 <%1@%2>", строка.Автор, Строка(ДоменПочтыДляGit())); Иначе ПредставлениеАвтора = строкаПользователя.ПредставлениеАвтора; @@ -717,15 +786,6 @@ КонецЦикла; - Если СоответствиеСообщенийОбОшибочныхАвторах.Количество() > 0 Тогда - Для каждого КлючЗначение Из СоответствиеСообщенийОбОшибочныхАвторах Цикл - Лог.КритичнаяОшибка(КлючЗначение.Значение); - КонецЦикла; - - ВызватьИсключение СтрШаблон("В таблице истории версий найдены авторы (количество %1), которые не сопоставлены в AUTHORS",СоответствиеСообщенийОбОшибочныхАвторах.Количество()); - - КонецЕсли; - КонецПроцедуры Функция КонвертироватьТаблицуВерсийИзФорматаБД(Знач ТаблицаБД) @@ -844,92 +904,6 @@ КонецПроцедуры -// Выполняет клонирование удаленного репо -// -Функция КлонироватьРепозитарий(Знач КаталогЛокальнойКопии, Знач URLРепозитария) Экспорт - - Батник = Новый КомандныйФайл(); - // Батник.ДобавитьКоманду("chcp 1251 > nul"); - Если ЭтоWindows Тогда - Батник.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd /d ""%1""", КаталогЛокальнойКопии)); - Иначе - Батник.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd ""%1""", КаталогЛокальнойКопии)); - КонецЕсли; - ФайлЛога = ВременныеФайлы.СоздатьФайл("log"); - ПараметрыКоманды = Новый Массив; - ПараметрыКоманды.Добавить("git clone"); - ПараметрыКоманды.Добавить(URLРепозитария); - ПараметрыКоманды.Добавить(ОбернутьВКавычки(КаталогЛокальнойКопии)); - ПараметрыКоманды.Добавить(Батник.СуффиксПеренаправленияВывода(ФайлЛога, Истина)); - - КоманднаяСтрока = СобратьКоманднуюСтроку(ПараметрыКоманды); - Лог.Отладка(КоманднаяСтрока); - Батник.ДобавитьКоманду(КоманднаяСтрока); - Батник.ДобавитьКоманду("exit " + ?(ЭтоWindows, "/b %ERRORLEVEL%", "$#")); - - РезультатКлонирования = Батник.Исполнить(); - - ВывестиТекстФайла(ФайлЛога); - УдалитьВременныеФайлыПриНеобходимости(ФайлЛога); - УдалитьВременныеФайлыПриНеобходимости(Батник.Закрыть()); - Возврат РезультатКлонирования; - -КонецФункции - -// Выполняет инициализацию репо -// -Функция ИнициализироватьРепозитарий(Знач КаталогЛокальнойКопии) Экспорт - - Батник = Новый КомандныйФайл; - Лог.Отладка(КаталогЛокальнойКопии); - ДопСтрокаПерехода = ?(ЭтоWindows, "/d", ""); - Батник.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd %2 ""%1""", КаталогЛокальнойКопии, ДопСтрокаПерехода)); - ФайлЛога = ВременныеФайлы.СоздатьФайл("log"); - ПараметрыКоманды = Новый Массив; - ПараметрыКоманды.Добавить("git init"); - ПараметрыКоманды.Добавить(Батник.СуффиксПеренаправленияВывода(ФайлЛога, Истина)); - - КоманднаяСтрока = СобратьКоманднуюСтроку(ПараметрыКоманды); - Лог.Отладка(КоманднаяСтрока); - Батник.ДобавитьКоманду(КоманднаяСтрока); - Батник.ДобавитьКоманду("exit " + ?(ЭтоWindows, "/b %ERRORLEVEL%", "$#")); - - Результат = Батник.Исполнить(); - - ВывестиТекстФайла(ФайлЛога); - УдалитьВременныеФайлыПриНеобходимости(ФайлЛога); - УдалитьВременныеФайлыПриНеобходимости(Батник.Закрыть()); - Возврат Результат; - -КонецФункции - -// Возвращает Истина, если каталог является каталогом или подкаталогом гит-репозитория, иначе возвращается Ложь. -// -Функция ПроверитьНаличиеРепозитарияГит(Знач КаталогЛокальнойКопии) Экспорт - Батник = Новый КомандныйФайл; - Лог.Отладка(КаталогЛокальнойКопии); - - ДопСтрокаПерехода = ?(ЭтоWindows, "/d", ""); - Батник.ДобавитьКоманду(СтрШаблон("cd %2 ""%1""", КаталогЛокальнойКопии, ДопСтрокаПерехода)); - ФайлЛога = ВременныеФайлы.СоздатьФайл("log"); - - ПараметрыКоманды = Новый Массив; - ПараметрыКоманды.Добавить("git status"); - ПараметрыКоманды.Добавить(Батник.СуффиксПеренаправленияВывода(ФайлЛога, Истина)); - - КоманднаяСтрока = СобратьКоманднуюСтроку(ПараметрыКоманды); - Лог.Отладка(КоманднаяСтрока); - Батник.ДобавитьКоманду(КоманднаяСтрока); - Батник.ДобавитьКоманду("exit " + ?(ЭтоWindows, "/b %ERRORLEVEL%", "$#")); - - КодВозврата = Батник.Исполнить(); - - ВывестиТекстФайла(ФайлЛога); - УдалитьВременныеФайлыПриНеобходимости(ФайлЛога); - УдалитьВременныеФайлыПриНеобходимости(Батник.Закрыть()); - - Возврат КодВозврата = 0; -КонецФункции // ПроверитьНаличиеРепозитарияГит(Знач Каталог) Экспорт // Определяет необходимость синхронизации хранилища и репо GIT. // @@ -946,147 +920,10 @@ КонецФункции -// Основная функция синхронизации. Перемещает в git набор коммитов хранилища 1С -// -Процедура СинхронизироватьХранилищеКонфигурацийСГит(Знач КаталогРабочейКопии, - Знач ПутьКХранилищу, - Знач НачальнаяВерсия = 0, - Знач КонечнаяВерсия = 0, - Знач Формат = Неопределено, - Знач КоличествоКоммитовДоPush = 0, - Знач URLРепозитория = Неопределено, - - Знач Лимит = 0, - Знач ПрерватьВыполнениеБезКомментарияКВерсии = Ложь, - Знач ИмяВетки = Неопределено, - Знач АвтоматическаяУстановкаТэговПоВерсиям = Ложь, - Знач ПроверитьАвторовХранилища = Ложь, - Знач ПараметрыДоступаКХранилищу = Неопределено) Экспорт - - - - Лог.Информация("Начало синхронизации с git"); - - ФайлХранилища = РаспаковщикКонфигурации.ПолучитьПутьКБазеДанныхХранилища(ПутьКХранилищу); - Лог.Отладка("Файл хранилища конфигурации: " + ФайлХранилища); - - ТаблицаИсторииХранилища = ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ФайлХранилища); - ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(ТаблицаИсторииХранилища, КаталогРабочейКопии, ПроверитьАвторовХранилища); - ТекущаяВерсия = НомерСинхронизированнойВерсии(КаталогРабочейКопии); - - Лог.Информация("Номер синхронизированной версии: " + ТекущаяВерсия); - СледующаяВерсия = ТекущаяВерсия + 1; - - Если НачальнаяВерсия > 0 Тогда - СледующаяВерсия = Макс(НачальнаяВерсия, СледующаяВерсия); - КонецЕсли; - - Если Лимит > 0 Тогда - - СтрокаТекущейВерсии = ТаблицаИсторииХранилища.Найти(ТекущаяВерсия, "НомерВерсии"); - ИндексСтрокиТекущейВерсии = ТаблицаИсторииХранилища.Индекс(СтрокаТекущейВерсии); - ИндексСтрокиСОграничением = Мин(ТаблицаИсторииХранилища.Количество() - 1, ИндексСтрокиТекущейВерсии + Лимит); - НомерВерсииСогласноЛимита = ТаблицаИсторииХранилища[ИндексСтрокиСОграничением].НомерВерсии; - - Если КонечнаяВерсия = 0 Тогда - КонечнаяВерсия = НомерВерсииСогласноЛимита; - Иначе - КонечнаяВерсия = ?(КонечнаяВерсия >= НомерВерсииСогласноЛимита, КонечнаяВерсия, НомерВерсииСогласноЛимита); - КонецЕсли; - - КонецЕсли; - - Если Формат = Неопределено Тогда - Формат = РежимВыгрузкиФайлов.Авто; - КонецЕсли; - - Если ПрерватьВыполнениеБезКомментарияКВерсии = Неопределено Тогда - ПрерватьВыполнениеБезКомментарияКВерсии = Ложь; - КонецЕсли; - - Лог.Отладка("Используется формат выгрузки " + Формат); - - МаксимальнаяВерсияДляРазбора = ОпределитьМаксимальнуюВерсиюСУчетомОграниченияСверху(ТаблицаИсторииХранилища, ТекущаяВерсия, КонечнаяВерсия); - Лог.Информация("Номер последней версии в хранилище: " + МаксимальнаяВерсияДляРазбора); - - ИспользоватьПромежуточныйPUSH = КоличествоКоммитовДоPush > 0; - СчетчикКоммитов = 0; - - СтрокаТекущейВерсии = ТаблицаИсторииХранилища.Найти(СледующаяВерсия, "НомерВерсии"); - ОтправитьНовыеМетки = Ложь; - Если СтрокаТекущейВерсии <> Неопределено Тогда - ПоследнняяВерсияКонфигурации = СтрокаТекущейВерсии.Тэг; - КонецЕсли; - - Если СледующаяВерсия > МаксимальнаяВерсияДляРазбора И СледующаяВерсия - МаксимальнаяВерсияДляРазбора > МинимальнаяРазницаМеждуКоммитамиНовогоХранилища Тогда - Лог.Ошибка("Несоответствие версий хранилища 1С и версию в репозитории Git. - |Возможно, сократили/обрезали хранилище. - |Для продолжения синхронизации измените файл VERSIONS в корне репозитория Git, - |Исправьте версию %1 на правильную версию <= версии в хранилище %2", ТекущаяВерсия, МаксимальнаяВерсияДляРазбора); - - ВызватьИсключение СтрШаблон("Версия git %1 больше версии хранилища %2 на %3", ТекущаяВерсия, МаксимальнаяВерсияДляРазбора, СледующаяВерсия - МаксимальнаяВерсияДляРазбора); - КонецЕсли; - - Пока СледующаяВерсия <= МаксимальнаяВерсияДляРазбора Цикл - - СтрокаВерсии = ТаблицаИсторииХранилища.Найти(СледующаяВерсия, "НомерВерсии"); - Если СтрокаВерсии <> Неопределено Тогда - - Если ПустаяСтрока(СтрокаВерсии.ПредставлениеАвтора) Тогда - СтрокаОшибки = СтрШаблон("Нашли следующую версию <%1>, а автор <%2> не прописан", СледующаяВерсия, СтрокаВерсии.Автор); - Лог.КритичнаяОшибка(СтрокаОшибки); - ВызватьИсключение СтрокаОшибки; - КонецЕсли; - - Если ПустаяСтрока(СтрокаВерсии.Комментарий) - И ПрерватьВыполнениеБезКомментарияКВерсии Тогда - СтрокаОшибки = СтрШаблон("Нашли следующую версию <%1> от автора <%2>, а комментарий не задан!", СледующаяВерсия, СтрокаВерсии.Автор); - Лог.КритичнаяОшибка(СтрокаОшибки); - ВызватьИсключение СтрокаОшибки; - КонецЕсли; - - НоваяМетка = ""; - Если ПоследнняяВерсияКонфигурации <> СтрокаВерсии.Тэг - И АвтоматическаяУстановкаТэговПоВерсиям Тогда - ОтправитьНовыеМетки = Истина; - Лог.Информация("Определена новая версия конфигурации: %1 будет установлен новый тэг", СтрокаВерсии.Тэг); - НоваяМетка = СтрокаВерсии.Тэг; - ПоследнняяВерсияКонфигурации = НоваяМетка; - КонецЕсли; - - Попытка - Лог.Информация("Получаем исходники для версии " + СледующаяВерсия + ", " + ТекущаяДата()); - - РазложитьМодулиПоНомеруВерсииХранилища1С(КаталогРабочейКопии, ПутьКХранилищу, СледующаяВерсия, Формат, ПараметрыДоступаКХранилищу); - Лог.Отладка("Фиксируем в файле VERSION версию " + СледующаяВерсия); - ЗаписатьФайлВерсийГит(КаталогРабочейКопии, СледующаяВерсия); - ВыполнитьКоммитГит(КаталогРабочейКопии, СтрокаВерсии.Комментарий, СтрокаВерсии.ПредставлениеАвтора, СтрокаВерсии.Дата, НоваяМетка); - СчетчикКоммитов = СчетчикКоммитов + 1; - - Если ИспользоватьПромежуточныйPUSH И - СчетчикКоммитов = КоличествоКоммитовДоPush Тогда - ВыполнитьGitPush(КаталогРабочейКопии, URLРепозитория, ИмяВетки, ОтправитьНовыеМетки); - СчетчикКоммитов = 0; - ОтправитьНовыеМетки = Ложь; - КонецЕсли; - - - Исключение - Лог.Отладка("Откатываем файл VERSION после ошибки"); - ЗаписатьФайлВерсийГит(КаталогРабочейКопии, ТекущаяВерсия); - ВызватьИсключение; - КонецПопытки; - - ТекущаяВерсия = СледующаяВерсия; - КонецЕсли; - - СледующаяВерсия = СледующаяВерсия + 1; - - КонецЦикла; - ЗавершитьПроцесс_TGitCache_exe(); -КонецПроцедуры +////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ Функция ОпределитьМаксимальнуюВерсиюСУчетомОграниченияСверху(Знач ТаблицаИсторииХранилища, Знач ТекущаяВерсия, Знач МаксимальнаяВерсия) @@ -1150,37 +987,6 @@ КонецФункции -Процедура РазложитьМодулиПоНомеруВерсииХранилища1С(Знач КаталогРабочейКопии, Знач ПутьКХранилищу, Знач НомерВерсии, Знач Формат, Знач ПараметрыДоступаКХранилищу) Экспорт - - - Если ИспользоватьTool1CD Тогда - - ФайлХранилища = Новый Файл(РаспаковщикКонфигурации.ПолучитьПутьКБазеДанныхХранилища(ПутьКХранилищу)); - - Если ФайлХранилища.Существует() И ФайлХранилища.ЭтоФайл() И ВРег(ФайлХранилища.Расширение) = ".1CD" Тогда - ВремКаталог = ВременныеФайлы.СоздатьКаталог(); - ФайлВерсии = ИмяФайлаВыгрузкиВерсииХранилища(ВремКаталог, НомерВерсии); - Лог.Отладка("Выгружаем версию хранилища в файл " + ФайлВерсии); - Попытка - ПоНомеруВерсииСохранитьКонфигурациюСредствамиTool1CD(ФайлХранилища.ПолноеИмя, ФайлВерсии, НомерВерсии); - РазобратьФайлКонфигурации(ФайлВерсии, КаталогРабочейКопии, Формат); - Исключение - УдалитьВременныеФайлыПриНеобходимости(ВремКаталог); - ВызватьИсключение; - КонецПопытки; - - УдалитьВременныеФайлыПриНеобходимости(ВремКаталог); - Иначе - ВызватьИсключение "Что-то пошло не так " - КонецЕсли - Иначе - - РазобратьФайлКонфигурацииШтатнымиСредствами(ПутьКХранилищу, НомерВерсии, ПараметрыДоступаКХранилищу, КаталогРабочейКопии, Формат); - - КонецЕсли; - -КонецПроцедуры - Процедура ПоНомеруВерсииСохранитьКонфигурациюСредствамиTool1CD(Знач ПутьКФайлуХранилища1С, Знач ВыходнойФайл, Знач НомерВерсииХранилища) Логирование.ПолучитьЛог("oscript.lib.tool1cd").УстановитьУровень(Лог.Уровень()); @@ -1214,19 +1020,6 @@ КонецПроцедуры -Функция СобратьКоманднуюСтроку(Знач ПереченьПараметров) - - СтрокаЗапуска = ""; - Для Каждого Параметр Из ПереченьПараметров Цикл - - СтрокаЗапуска = СтрокаЗапуска + " " + Параметр; - - КонецЦикла; - - Возврат СтрокаЗапуска; - -КонецФункции - Функция ПолучитьТекстФайла(ИмяФайла, резТекстФайла = "") // проверим есть ли файл @@ -1340,15 +1133,20 @@ КонецФункции -Функция ДобавитьПереименование(Знач Переименования, Знач Источник, Знач Приемник) +Процедура ДобавитьПереименование(Знач Переименования, Знач Источник, Знач Приемник) - СтрокаПереименования = Переименования.Добавить(); - СтрокаПереименования.Источник = Источник; - СтрокаПереименования.Приемник = Приемник; - - Возврат СтрокаПереименования; + Приемник = СтрЗаменить(Приемник, "/", "\"); + Источник = СтрЗаменить(Источник, "/", "\"); + + Если Не Источник = Приемник Тогда + + СтрокаПереименования = Переименования.Добавить(); + СтрокаПереименования.Источник = Источник; + СтрокаПереименования.Приемник = Приемник; + + КонецЕсли; -КонецФункции +КонецПроцедуры Функция ПрочитатьФайлАвторовГитВТаблицуПользователей(Знач ПутьКФайлуАвторов) Экспорт @@ -1399,122 +1197,7 @@ УдалятьВременныеФайлы = ПарамУдалятьВременныеФайлы; КонецПроцедуры -Процедура ПроверитьПараметрыДоступаКХранилищу(ПараметрыДоступаКХранилищу) Экспорт - - Если ПараметрыДоступаКХранилищу.ПользовательХранилища = Неопределено Тогда - - ВызватьИсключение "Не задан пользователь хранилища конфигурации."; - - КонецЕсли; - - Если ПараметрыДоступаКХранилищу.ПарольХранилища = Неопределено Тогда - - ПарольХранилища = ""; - - КонецЕсли; - -КонецПроцедуры // ПроверитьПараметрыДоступаКХранилищу - -// Выполняет обновление конфигурации из хранилища, выгрузку конфигурации в файлы -// и распределение файлов по каталогам согласно иерархии метаданных. -// -Процедура РазобратьФайлКонфигурацииШтатнымиСредствами(Знач ПутьКХранилищу, Знач НомерВерсии, Знач ПараметрыДоступаКХранилищу, Знач ВыходнойКаталог, Знач Формат) Экспорт - - КаталогПлоскойВыгрузки = ВременныеФайлы.СоздатьКаталог(); - - Если Не (Новый Файл(ВыходнойКаталог).Существует()) Тогда - СоздатьКаталог(ВыходнойКаталог); - КонецЕсли; - - КаталогВыгрузки = ?(ТолькоИзменения, ВыходнойКаталог, КаталогПлоскойВыгрузки); - Попытка - ВыгрузитьМодулиКонфигурацииОбновлениеИзХранилища(ПутьКХранилищу, НомерВерсии, ПараметрыДоступаКХранилищу, КаталогПлоскойВыгрузки, Формат); - Если НЕ ТолькоИзменения Тогда - РазложитьМодули1СПоПапкамСогласноИерархииМетаданных(КаталогПлоскойВыгрузки, ВыходнойКаталог, Формат); - Иначе - МассивФайлов = НайтиФайлы(КаталогВыгрузки, "*.bin", Истина); - Для каждого Файл из МассивФайлов Цикл - Если Нрег(Файл.Имя) = "form.bin" Тогда - КаталогФормы = ОбъединитьПути(Файл.Путь, Файл.ИмяБезРасширения); - СоздатьКаталог(КаталогФормы); - ФС.ОбеспечитьПустойКаталог(КаталогФормы); - РаспаковатьКонтейнерМетаданных(Файл.ПолноеИмя, КаталогФормы); - КонецЕсли; - КонецЦикла; - - Если Новый Файл(ОбъединитьПути(КаталогВыгрузки, "renames.txt")).Существует() Тогда - УдалитьВременныеФайлыПриНеобходимости(ОбъединитьПути(КаталогВыгрузки, "renames.txt")); - КонецЕсли; - - КонецЕсли; - Исключение - УдалитьВременныеФайлыПриНеобходимости(КаталогПлоскойВыгрузки); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - - -// Выполняет штатную выгрузку конфигурации в файлы (средствами платформы 8.3) без загрузки конфигурации, но с обновлением на версию хранилища -// -Процедура ВыгрузитьМодулиКонфигурацииОбновлениеИзХранилища(Знач ПутьКХранилищу, Знач НомерВерсии, Знач ПараметрыДоступаКХранилищу, Знач КаталогПлоскойВыгрузки, Знач Формат) Экспорт - - Конфигуратор = ПолучитьМенеджерКонфигуратора(); - Если ВерсияПлатформы <> Неопределено Тогда - Конфигуратор.ИспользоватьВерсиюПлатформы(ВерсияПлатформы); - Иначе - Конфигуратор.ИспользоватьВерсиюПлатформы("8.3"); - КонецЕсли; - - ЛогКонфигуратора = Логирование.ПолучитьЛог("oscript.lib.v8runner"); - ЛогКонфигуратора.УстановитьУровень(Лог.Уровень()); - - ПользовательХранилища = ПараметрыДоступаКХранилищу.ПользовательХранилища; - ПарольХранилища = ПараметрыДоступаКХранилищу.ПарольХранилища; - - Попытка - - ПараметрыЗапуска = Конфигуратор.ПолучитьПараметрыЗапуска(); - ПараметрыЗапуска.Добавить("/ConfigurationRepositoryUpdateCfg"); - ПараметрыЗапуска.Добавить("/ConfigurationRepositoryF """+ПутьКХранилищу+""""); - - ПараметрыЗапуска.Добавить("/ConfigurationRepositoryN """+ПользовательХранилища+""""); - - Если Не ПустаяСтрока(ПарольХранилища) Тогда - ПараметрыЗапуска.Добавить("/ConfigurationRepositoryP """+ПарольХранилища+""""); - КонецЕсли; - - ПараметрыЗапуска.Добавить("-v "+НомерВерсии); - - ПараметрыЗапуска.Добавить("-force"); - - ВыполнитьКомандуКонфигуратора(Конфигуратор, ПараметрыЗапуска); - - //Конфигуратор.ОбновитьКонфигурациюБазыДанныхИзХранилищаНаВерсию(ПутьКХранилищу, ПользовательХранилища, ПарольХранилища, НомерВерсии); - - Исключение - - ТекстОшибки = Конфигуратор.ВыводКоманды(); - ВызватьИсключение ТекстОшибки; - - КонецПопытки; - - Если Не (Новый Файл(КаталогПлоскойВыгрузки).Существует()) Тогда - СоздатьКаталог(КаталогПлоскойВыгрузки); - КонецЕсли; - - МассивФайлов = НайтиФайлы(КаталогПлоскойВыгрузки, ПолучитьМаскуВсеФайлы()); - Если МассивФайлов.Количество() <> 0 Тогда - ВызватьИсключение "В каталоге <"+КаталогПлоскойВыгрузки+"> не должно быть файлов"; - КонецЕсли; - ПараметрыЗапуска = Конфигуратор.ПолучитьПараметрыЗапуска(); - ПараметрДампаКонфигурации = СтрШаблон("/DumpConfigToFiles ""%1"" -format %2", КаталогПлоскойВыгрузки, ТРег(Формат)); - ПараметрыЗапуска.Добавить(ПараметрДампаКонфигурации); - - ВыполнитьКомандуКонфигуратора(Конфигуратор, ПараметрыЗапуска); - -КонецПроцедуры /////////////////////////////////////////////////////////////////////////////////////////////// // Вспомогательные функции @@ -1539,6 +1222,39 @@ КонецПроцедуры +Функция ПолучитьПутьКБазеДанныхХранилища(Знач ПутьКХранилищу) Экспорт + + ФайлПутиКХранилищу = Новый Файл(ПутьКХранилищу); + Если ФайлПутиКХранилищу.Существует() и ФайлПутиКХранилищу.ЭтоКаталог() Тогда + + ФайлБазыДанныхХранилища = ОбъединитьПути(ФайлПутиКХранилищу.ПолноеИмя, "1cv8ddb.1CD"); + + ИначеЕсли ФайлПутиКХранилищу.Существует() Тогда + + ФайлБазыДанныхХранилища = ФайлПутиКХранилищу.ПолноеИмя; + + Иначе + + ВызватьИсключение "Некорректный путь к хранилищу: " + ФайлПутиКХранилищу.ПолноеИмя; + + КонецЕсли; + + Возврат ФайлБазыДанныхХранилища; + +КонецФункции // ПолучитьПутьКБазеДанныхХранилища + +Процедура ПриСозданииОбъекта(СуществующийМенеджерПлагинов = Неопределено) + + Если СуществующийМенеджерПлагинов = Неопределено Тогда + Плагины = Новый МенеджерПлагинов; + Иначе + Плагины = СуществующийМенеджерПлагинов; + КонецЕсли; + + Плагины.АктивизироватьПлагины(ЭтотОбъект); + +КонецПроцедуры + Функция ДатаPOSIX(Знач Дата) Возврат "" + Год(Дата) + "-" + ФорматДвузначноеЧисло(Месяц(Дата)) + "-" + ФорматДвузначноеЧисло(День(Дата)) + " " @@ -1622,11 +1338,8 @@ СистемнаяИнформация = Новый СистемнаяИнформация; ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; -Лог = Логирование.ПолучитьЛог("oscript.app.gitsync"); - +Лог = Логирование.ПолучитьЛог("oscript.app.GitSync"); + ДоменПочтыДляGitПоУмолчанию = "localhost"; УдалятьВременныеФайлы = Ложь; -КоличествоЦикловОжиданияЛицензииПоУмолчанию = 1; -ТолькоИзменения = Ложь; МинимальнаяРазницаМеждуКоммитамиНовогоХранилища = 10; -ИспользоватьTool1CD = Истина; 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 6f2efac7..bebcea01 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" @@ -4,6 +4,7 @@ // Copyright EvilBeaver 2015 // //////////////////////////////////////////////////////////////////////////// +#Использовать logos Перем Лог; Перем мРаспаковщик; @@ -12,7 +13,7 @@ Лог.Информация("Синхронизация началась"); - Для Каждого Репо Из ПровайдерНастроек.Репозитарии Цикл + Для Каждого Репо Из ПровайдерНастроек["Репозитарии"] Цикл Попытка @@ -35,16 +36,16 @@ Процедура ВыполнитьСинхронизациюПоОдномуРепо(Знач Репо, Знач ОбработчикСинхронизации) - Лог.Информация("Синхронизация для '"+Репо.Имя+"'"); + Лог.Информация("Синхронизация для '"+Репо["Имя"]+"'"); ОбработчикСинхронизации.ПриНеобходимостиСинхронизации(Репо); КонецПроцедуры Процедура ВыполнитьСинхронизациюПриНеобходимости(Знач Репо, Знач ОбработчикСинхронизации) - Лог.Информация("Проверяю необходимость синхронизации: " + Репо.Имя); + Лог.Информация("Проверяю необходимость синхронизации: " + Репо["Имя"]); Если Не НеобходимоСинхронизироватьХранилище(Репо, ОбработчикСинхронизации) Тогда - Лог.Информация("Синхронизация для '"+Репо.Имя+"' не требуется"); + Лог.Информация("Синхронизация для '"+Репо["Имя"]+"' не требуется"); Возврат; КонецЕсли; diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\321\202\320\265\320\275\320\270\320\265\320\232\320\276\320\275\321\204\320\270\320\263\320\260JSON\320\237\320\260\320\272\320\265\321\202\320\275\320\276\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/\320\247\321\202\320\265\320\275\320\270\320\265\320\232\320\276\320\275\321\204\320\270\320\263\320\260JSON\320\237\320\260\320\272\320\265\321\202\320\275\320\276\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 85a892f8..534b8faf 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\321\202\320\265\320\275\320\270\320\265\320\232\320\276\320\275\321\204\320\270\320\263\320\260JSON\320\237\320\260\320\272\320\265\321\202\320\275\320\276\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/\320\247\321\202\320\265\320\275\320\270\320\265\320\232\320\276\320\275\321\204\320\270\320\263\320\260JSON\320\237\320\260\320\272\320\265\321\202\320\275\320\276\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" @@ -2,29 +2,18 @@ #Использовать json Перем мНастройки; -Перем СоответствиеКлючамИПараметра; +Перем СоответствиеПозиционныхПараметров; -Процедура ПриСозданииОбъекта(ВходящиеСоответствиеКлючамИПараметра) - - СоответствиеКлючамИПараметра = ВходящиеСоответствиеКлючамИПараметра; +Процедура ПриСозданииОбъекта(ВходящиеСоответствиеПозиционныхПараметров) + + СоответствиеПозиционныхПараметров = ВходящиеСоответствиеПозиционныхПараметров; КонецПроцедуры - -Функция ПрочитатьФайл(Знач ИмяФайла) - ФайлСуществующий = Новый Файл(ИмяФайла); - Если Не ФайлСуществующий.Существует() Тогда - ВызватьИсключение "Неверная структура файла настроек / файл пустой";; - КонецЕсли; - - Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8); - Рез = Чтение.Прочитать(); - Чтение.Закрыть(); - Возврат Рез; -КонецФункции // ПрочитатьФайл() + Функция ПрочитатьНастройкиИзФайла(Знач ФайлНастроек) Экспорт - мНастройки = Новый Структура; + мНастройки = Новый Соответствие; JsonСтрока = ПрочитатьФайл(ФайлНастроек); @@ -35,12 +24,12 @@ ГлобальныеНастройки = ВсеНастройки["global"]; Для Каждого КлючИЗначение Из ГлобальныеНастройки Цикл - Ключ = СоответствиеКлючамИПараметра[КлючИЗначение.Ключ]; - - Если НЕ Ключ = Неопределено Тогда - мНастройки.Вставить(Ключ, КлючИЗначение.Значение); - КонецЕсли; + Если КлючИЗначение.Ключ = "flags" Тогда + ОбработатьВФлаги(мНастройки, КлючИЗначение.Значение) + Иначе + мНастройки.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЕсли КонецЦикла; мНастройки.Вставить("Репозитарии", Новый Массив); @@ -57,20 +46,31 @@ КонецФункции -Процедура ПрочитатьНастройкиРепозитория(Знач СтруктураНастроекРепозитория ) +Процедура ПрочитатьНастройкиРепозитория(Знач СтруктураНастроекРепозитория) - Репо = Новый Структура; + Репо = Новый Соответствие; - мНастройки.Репозитарии.Добавить(Репо); + мНастройки["Репозитарии"].Добавить(Репо); Для Каждого КлючИЗначение Из СтруктураНастроекРепозитория Цикл + Ключ = КлючИЗначение.Ключ; + + ПозиционныйКлюч = СоответствиеПозиционныхПараметров[Ключ]; + + Если Не ПозиционныйКлюч = Неопределено Тогда + Ключ = ПозиционныйКлюч; + КонеЦЕсли; - Ключ = СоответствиеКлючамИПараметра[КлючИЗначение.Ключ]; + Если Ключ = "flags" Тогда - Если НЕ Ключ = Неопределено Тогда - Репо.Вставить(Ключ, КлючИЗначение.Значение); - КонецЕсли; + ОбработатьВФлаги(Репо, КлючИЗначение.Значение) + + Иначе + Репо.Вставить(Ключ,КлючИЗначение.Значение); + + КонецЕсли; + КонецЦикла; Для Каждого ГлобальнаяНастройка Из мНастройки Цикл @@ -80,12 +80,8 @@ Если ГлобальнаяНастройка.Ключ = "Репозитарии" Тогда Продолжить КонецЕсли; - - ЕстьСвояНастройка = Репо.Свойство(Ключ); - - Если НЕ ЕстьСвояНастройка - ИЛИ ЕстьСвояНастройка и ПустаяСтрока(Репо[Ключ]) Тогда - + + Если Репо[Ключ] = Неопределено Тогда Репо.Вставить(Ключ, ГлобальнаяНастройка.Значение); КонецЕсли; @@ -93,6 +89,24 @@ КонецПроцедуры -Функция СтрокаНекорректнаяСтруктураНастроек() - Возврат "Некорректная структура файла настроек"; -КонецФункции +Процедура ОбработатьВФлаги(СооответсвиеВставки, Знач НаборФлагов ) + + Для Каждого КлючИЗначение Из НаборФлагов Цикл + + СооответсвиеВставки.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + + КонецЦикла + +КонецПроцедуры + +Функция ПрочитатьФайл(Знач ИмяФайла) + ФайлСуществующий = Новый Файл(ИмяФайла); + Если Не ФайлСуществующий.Существует() Тогда + ВызватьИсключение "Неверная структура файла настроек / файл пустой";; + КонецЕсли; + + Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8); + Рез = Чтение.Прочитать(); + Чтение.Закрыть(); + Возврат Рез; +КонецФункции // ПрочитатьФайл() \ No newline at end of file diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" index d4309f11..f3801db4 100644 --- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" @@ -18,17 +18,19 @@ /////////////////////////////////////////////////////////////////// -Процедура ЗарегистрироватьКоманды(Знач Парсер) Экспорт +Процедура ЗарегистрироватьКоманды(Парсер) Экспорт КомандыИРеализация = Новый Соответствие; РегистраторКоманд.ПриРегистрацииКомандПриложения(КомандыИРеализация); - + Для Каждого КлючИЗначение Из КомандыИРеализация Цикл ДобавитьКоманду(КлючИЗначение.Ключ, КлючИЗначение.Значение, Парсер); КонецЦикла; + ДополнительныеПараметры.Плагины.ПослеРегистрацииКомандПриложения(Парсер); + КонецПроцедуры // ЗарегистрироватьКоманды Процедура РегистраторКоманд(Знач ОбъектРегистратор) Экспорт @@ -39,6 +41,10 @@ ДополнительныеПараметры.Вставить("Лог", Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы())); ДополнительныеПараметры.Вставить("УдалятьВременныеФайлы", Ложь); + Плагины = Новый МенеджерПлагинов; + Плагины.ЗагрузитьУстановленныеПлагины(); + ДополнительныеПараметры.Вставить("Плагины", Плагины); + КонецПроцедуры // РегистраторКоманд Функция ПолучитьКоманду(Знач ИмяКоманды) Экспорт @@ -56,12 +62,21 @@ Функция ВыполнитьКоманду(Знач ИмяКоманды, Знач ПараметрыКоманды) Экспорт + ДополнительныеПараметры.Плагины.УстановитьАктивныеПлагины(ПараметрыКоманды); + + ДополнительныеПараметры.Плагины.ПередВыполнениемКоманды(ИмяКоманды, ПараметрыКоманды, ДополнительныеПараметры); + + ДополнительныеПараметры.Плагины.ПриПолученииПараметров(ПараметрыКоманды, ДополнительныеПараметры); + УстановитьРежимОтладкиПриНеобходимости(ПараметрыКоманды); УстановитьРежимУдаленияВременныхФайлов(ПараметрыКоманды); УстановитьБазовыйКаталогВременныхФайлов(ПараметрыКоманды); Команда = ПолучитьКоманду(ИмяКоманды); КодВозврата = Команда.ВыполнитьКоманду(ПараметрыКоманды, ДополнительныеПараметры); + + ДополнительныеПараметры.Плагины.ПослеВыполненияКоманды(ИмяКоманды, ПараметрыКоманды, ДополнительныеПараметры); + УдалитьВременныеФайлыПриНеобходимости(); Возврат КодВозврата; @@ -81,11 +96,13 @@ КонецПроцедуры // ПоказатьСправкуПоКомандам -Процедура ДобавитьКоманду(Знач ИмяКоманды, Знач КлассРеализации, Знач Парсер) +Процедура ДобавитьКоманду(Знач ИмяКоманды, Знач КлассРеализации, Парсер) РеализацияКоманды = Новый(КлассРеализации); РеализацияКоманды.ЗарегистрироватьКоманду(ИмяКоманды, Парсер); ИсполнителиКоманд.Вставить(ИмяКоманды, РеализацияКоманды); + ДополнительныеПараметры.Плагины.ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации, Парсер); + КонецПроцедуры @@ -141,13 +158,14 @@ Если ЗначениеЗаполнено(ПараметрыКоманды["-tempdir"]) Тогда БазовыйКаталог = ПараметрыКоманды["-tempdir"]; - Если Не (Новый Файл(БазовыйКаталог).Существует()) Тогда + ФайлБазовыйКаталог = Новый Файл(БазовыйКаталог); + Если Не (ФайлБазовыйКаталог.Существует()) Тогда - СоздатьКаталог(БазовыйКаталог); + СоздатьКаталог(ФайлБазовыйКаталог.ПолноеИмя); КонецЕсли; - ВременныеФайлы.БазовыйКаталог = БазовыйКаталог; + ВременныеФайлы.БазовыйКаталог = ФайлБазовыйКаталог.ПолноеИмя; КонецЕсли; diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" index 790fae6e..9e150c45 100644 --- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -29,7 +29,7 @@ Функция ПолучитьРаспаковщик(ПараметрыРаспаковщика) Экспорт - Распаковщик = Новый МенеджерСинхронизации(); + Распаковщик = Новый МенеджерСинхронизации(ПараметрыРаспаковщика.Плагины); Распаковщик.УстановитьРежимУдаленияВременныхФайлов(ПараметрыРаспаковщика.УдалятьВременныеФайлы); Возврат Распаковщик; @@ -70,38 +70,6 @@ КонецПроцедуры // НаполнитьКаталогРабочейКопииСлужебнымиДанными -Процедура ВыполнитьЭкспортИсходников(Знач Распаковщик, - Знач ПутьКХранилищу, - Знач ЛокальныйКаталогГит, - Знач НачальнаяВерсия = 0, - Знач КонечнаяВерсия = 0, - Знач Формат = Неопределено, - Знач КоличествоКоммитовДоPush = 0, - Знач URLРепозитория = Неопределено, - Знач Лимит = 0, - Знач ПрерватьВыполнениеБезКомментарияКВерсии, - Знач ИмяВетки = Неопределено, - Знач АвтоматическаяУстановкаТэговПоВерсиям = Ложь, - Знач ПроверитьАвторовХранилища = Ложь, - Знач ПараметрыДоступаКХранилищу = Неопределено) Экспорт - - ФайлБазыДанныхХранилища = ПолучитьПутьКБазеДанныхХранилища(ПутьКХранилищу); - Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(ЛокальныйКаталогГит, - ПутьКХранилищу, - НачальнаяВерсия, - КонечнаяВерсия, - Формат, - КоличествоКоммитовДоPush, - URLРепозитория, - Лимит, - ПрерватьВыполнениеБезКомментарияКВерсии, - ИмяВетки, - АвтоматическаяУстановкаТэговПоВерсиям, - ПроверитьАвторовХранилища, - ПараметрыДоступаКХранилищу); - -КонецПроцедуры // ВыполнитьЭкспортИсходников - Функция ТребуетсяСинхронизироватьХранилище(Знач ФайлХранилища, Знач ЛокальныйКаталогГит, Знач ПараметрыРаспаковщика) Экспорт Распаковщик = ПолучитьРаспаковщик(ПараметрыРаспаковщика); diff --git a/tests/fixtures/config.json b/tests/fixtures/config.json index d4148652..3794266f 100644 --- a/tests/fixtures/config.json +++ b/tests/fixtures/config.json @@ -3,9 +3,21 @@ { "global": { - "email-domain": "server.com", - "v8-version": "1cv8.exe", - "git-executable": "git" + "-email": "server.com", + "-v8version": "1cv8.exe", + "-plugins": + [ + "pull", + "push", + "vendorUpload", + "smart-tags", + "increment" + ], + "flags": + { + "-limit": 5, + "--storage-user": "Администратор" + } }, "repositories" : [ { @@ -13,30 +25,39 @@ "git-local-path": "путь1", "git-remote": "адрес1", "v8-storage-dir": "каталог1", - "process-fatform-modules": "on", - "push-every-n-commits": 5, - "auto-set-tags": "on", - "stop-if-empty-comment": "on", - "check-authors": "on" - //"email-domain", - //"v8-version", - //"git-executable", + "-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", - "process-fatform-modules": "on", - "push-every-n-commits": 5, - "auto-set-tags": "on", - "stop-if-empty-comment": "on", - "check-authors": "on" - //"email-domain", - //"v8-version", - //"git-executable", - - } + "-plugins": + [ + "pull", + "push", + "vendorUpload", + "smart-tags", + "increment" + ] + , + "flags": { + "-limit": 5, + "--storage-user": "Администратор" + } + } ] } } diff --git a/tests/git-sync-test.os b/tests/git-sync-test.os index 976fa45d..f1c6542d 100644 --- a/tests/git-sync-test.os +++ b/tests/git-sync-test.os @@ -14,10 +14,11 @@ Процедура Инициализация() Распаковщик = Новый МенеджерСинхронизации(); + Распаковщик.УстановитьКоличествоЦикловОжиданияЛицензииПоУмолчанию(1); Лог = Логирование.ПолучитьЛог("oscript.app.gitsync"); Лог.УстановитьУровень(УровниЛога.Отладка); ЛогGitRunner = Логирование.ПолучитьЛог("oscript.lib.gitrunner"); - ЛогGitRunner.УстановитьУровень(Лог.Уровень()); + //ЛогGitRunner.УстановитьУровень(Лог.Уровень()); КонецПроцедуры @@ -28,8 +29,7 @@ ВсеТесты = Новый Массив; ВсеТесты.Добавить("Тест_ДолженВыполнитьПолнуюВыгрузку"); - ВсеТесты.Добавить("Тест_ДолженВыгрузитьМодули"); - ВсеТесты.Добавить("Тест_ДолженРазложитьМодули1СПоПапкамСогласноИерархииМетаданных"); + ВсеТесты.Добавить("Тест_ДолженПереместитьВКаталогРабочейКопии"); ВсеТесты.Добавить("Тест_ДолженПрочитатьТаблицуВерсийИзХранилища1С"); ВсеТесты.Добавить("Тест_ДолженПрочитатьФайлПользователейИзХранилища1С"); ВсеТесты.Добавить("Тест_ДолженПодготовитьРепозитарийКСинхронизацииСХранилищем"); @@ -41,8 +41,6 @@ ВсеТесты.Добавить("ТестДолжен_ПроверитьОтсутствиеФайлаAUTHORS"); ВсеТесты.Добавить("ТестДолжен_ПроверитьДанныеВФайлеAUTHORS"); ВсеТесты.Добавить("ТестДолжен_ПроверитьНеполнотуВФайлеAUTHORS"); - ВсеТесты.Добавить("ТестДолжен_ВыполнитьGitPush"); - ВсеТесты.Добавить("ТестДолжен_ВыполнитьGitPull"); Возврат ВсеТесты; @@ -101,9 +99,9 @@ МассивФайлов = НайтиФайлы(КаталогВыгрузки, ПолучитьМаскуВсеФайлы()); Утверждения.Проверить(МассивФайлов.Количество() = 0, "КаталогВыгрузки должен быть пуст"); - ПутьКФайлуКонфигурации = ПолучитьФайлКонфигурацииИзМакета(); + ПутьКХранилищу = ПодготовитьВременноеХранилище(); - Распаковщик.РазобратьФайлКонфигурации(ПутьКФайлуКонфигурации, КаталогВыгрузки, РежимВыгрузкиФайлов.Плоский); + Распаковщик.ВыгрузитьВерсиюХранилищаКонфигурацииВИсходники(КаталогВыгрузки, ПутьКХранилищу, 1, РежимВыгрузкиФайлов.Плоский); ФайлПереименований = Новый Файл(ОбъединитьПути(КаталогВыгрузки, "renames.txt")); ФайлКорняМетаданных = Новый Файл(ОбъединитьПути(КаталогВыгрузки, "Configuration.xml")); @@ -113,30 +111,29 @@ КонецПроцедуры -Процедура Тест_ДолженВыгрузитьМодули() Экспорт +Процедура Тест_ДолженПереместитьВКаталогРабочейКопии() Экспорт - КаталогПлоскойВыгрузки = ВременныеФайлы.СоздатьКаталог(); - Распаковщик.ВыгрузитьМодулиКонфигурации(ПолучитьФайлКонфигурацииИзМакета(), КаталогПлоскойВыгрузки, РежимВыгрузкиФайлов.Плоский); + КаталогРабочейКопии = ВременныеФайлы.СоздатьКаталог(); + ПутьКХранилищу = ПодготовитьВременноеХранилище(); + Формат = РежимВыгрузкиФайлов.Плоский; + Конфигуратор = Распаковщик.ПолучитьМенеджерКонфигуратора(); + Конфигуратор.ИспользоватьВерсиюПлатформы("8.3"); - МассивФайлов = НайтиФайлы(КаталогПлоскойВыгрузки,"*.*"); + Распаковщик.ЗагрузитьВерсиюХранилищаВКонфигурацию(Конфигуратор, КаталогРабочейКопии, ПутьКХранилищу, 1); - Утверждения.ПроверитьИстину(МассивФайлов.Количество() > 0, "в каталоге выгрузки модулей 1С <"+КаталогПлоскойВыгрузки+"> должны быть файлы"); -КонецПроцедуры - -Процедура Тест_ДолженРазложитьМодули1СПоПапкамСогласноИерархииМетаданных() Экспорт - - КаталогПлоскойВыгрузки = ВременныеФайлы.СоздатьКаталог(); - Распаковщик.ВыгрузитьМодулиКонфигурации(ПолучитьФайлКонфигурацииИзМакета(), КаталогПлоскойВыгрузки, РежимВыгрузкиФайлов.Плоский); + КаталогВыгрузки = ВременныеФайлы.СоздатьКаталог(); - КаталогИерархическойВыгрузки = ВременныеФайлы.СоздатьКаталог(); + Распаковщик.ВыгрузитьКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки, Формат); - Распаковщик.РазложитьМодули1СПоПапкамСогласноИерархииМетаданных(КаталогПлоскойВыгрузки, КаталогИерархическойВыгрузки, РежимВыгрузкиФайлов.Плоский); + Распаковщик.ОчиститьКаталогРабочейКопии(КаталогРабочейКопии); + + Распаковщик.ПереместитьВКаталогРабочейКопии(КаталогРабочейКопии, КаталогВыгрузки, Формат); - ФайлПереименований = Новый Файл(ОбъединитьПути(КаталогИерархическойВыгрузки,"renames.txt")); + ФайлПереименований = Новый Файл(ОбъединитьПути(КаталогРабочейКопии,"renames.txt")); Утверждения.ПроверитьИстину(ФайлПереименований.Существует(), "Не удалось разложим модули 1С по иерархии - не существует файл <"+ФайлПереименований.ПолноеИмя+">"); - МассивФайлов = НайтиФайлы(КаталогИерархическойВыгрузки,"*.*"); - Утверждения.ПроверитьИстину(МассивФайлов.Количество() > 0, "в каталоге разложения модулей 1С <"+КаталогИерархическойВыгрузки+"> должны быть файлы"); + МассивФайлов = НайтиФайлы(КаталогРабочейКопии,"*.*"); + Утверждения.ПроверитьИстину(МассивФайлов.Количество() > 0, "в каталоге разложения модулей 1С <"+КаталогРабочейКопии+"> должны быть файлы"); КонецПроцедуры @@ -202,9 +199,11 @@ Процедура Тест_ДолженПрочитатьФайлВерсийСИменамиПользователейИзХранилища1С() Экспорт + КаталогРабочейКопии = ВременныеФайлы.СоздатьКаталог(); + ПутьКФайлуХранилища1С = ПутьКВременномуФайлуХранилища1С(); - ТаблицаИсторииХранилища = Распаковщик.ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ПутьКФайлуХранилища1С); + ТаблицаИсторииХранилища = Распаковщик.ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ПутьКФайлуХранилища1С,КаталогРабочейКопии); Утверждения.ПроверитьРавенство(ТаблицаИсторииХранилища.Количество(), 8, "ТаблицаИсторииХранилища.Количество()"); @@ -263,7 +262,7 @@ ПутьКФайлуХранилища1С = ПолучитьПутьКВременномуФайлуХранилища1С(); - ТаблицаИсторииХранилища = Распаковщик.ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ПутьКФайлуХранилища1С); + ТаблицаИсторииХранилища = Распаковщик.ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ПутьКФайлуХранилища1С, КаталогРепозитория); Распаковщик.ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(ТаблицаИсторииХранилища, КаталогРепозитория); // проверка алиасов по таблице истории хранилища @@ -296,7 +295,7 @@ ФайлАвторов.ЗаписатьСтроку("Администратор=Администратор "); ФайлАвторов.Закрыть(); - ТаблицаИсторииХранилища = Распаковщик.ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ПутьКФайлуХранилища1С); + ТаблицаИсторииХранилища = Распаковщик.ПрочитатьИзХранилищаИсториюКоммитовСАвторами(ПутьКФайлуХранилища1С, КаталогРепозитория); Распаковщик.ДополнитьТаблицуХранилищаИнформациейОСигнатуреПользователяВГит(ТаблицаИсторииХранилища, КаталогРепозитория); Для Каждого Стр Из ТаблицаИсторииХранилища Цикл @@ -346,6 +345,7 @@ СоздатьКаталог(КаталогИсходников); РезультатИнициализацииГитЧисло = ИнициализироватьТестовоеХранилищеГит(КаталогРепо); + Утверждения.ПроверитьИстину(РезультатИнициализацииГитЧисло=0, "Инициализация git-хранилища в каталоге: "+КаталогРепо); СоздатьФайлАвторовГит_ДляТестов(КаталогИсходников); @@ -387,10 +387,10 @@ ГитПодготовлен = ИнициализироватьТестовоеХранилищеГит(КаталогВыгрузки); Утверждения.ПроверитьРавенство(ГитПодготовлен, 0, "Код возврата git init должен быть равен нулю"); - - ПутьКФайлуКонфигурации = ПолучитьФайлКонфигурацииИзМакета(); - Распаковщик.РазобратьФайлКонфигурации(ПутьКФайлуКонфигурации, КаталогВыгрузки, РежимВыгрузкиФайлов.Плоский); + ПутьКХранилищу = ПодготовитьВременноеХранилище(); + + Распаковщик.ВыгрузитьВерсиюХранилищаКонфигурацииВИсходники(КаталогВыгрузки, ПутьКХранилищу, 1, РежимВыгрузкиФайлов.Плоский); МассивФайлов = НайтиФайлы(КаталогВыгрузки, ПолучитьМаскуВсеФайлы()); Утверждения.Проверить(МассивФайлов.Количество() > 0, "в каталоге разложения модулей 1С <"+КаталогВыгрузки+"> должны быть файлы"); @@ -428,36 +428,16 @@ КонецПроцедуры -Процедура ТестДолжен_ВыполнитьGitPush() Экспорт - - ВременныйРепо = ВыполнитьКлонированиеТестовогоРепо(); +Функция ПодготовитьВременноеХранилище() - СоздатьФайлАвторовГит_ДляТестов(ВременныйРепо.ЛокальныйРепозиторий); - Утверждения.ПроверитьИстину(Новый Файл(ОбъединитьПути(ВременныйРепо.ЛокальныйРепозиторий,"AUTHORS")).Существует()); + ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); - Распаковщик.ВыполнитьКоммитГит(ВременныйРепо.ЛокальныйРепозиторий, "test commit", "Администратор "); + КопироватьФайл(ПутьКВременномуФайлуХранилища1С(), ОбъединитьПути(ВременныйКаталог, "1cv8ddb.1CD")); - КодВозврата = Распаковщик.ВыполнитьGitPush(ВременныйРепо.ЛокальныйРепозиторий, ВременныйРепо.URLРепозитария, ВременныйРепо.ИмяВетки); - Утверждения.ПроверитьРавенство(КодВозврата, 0, "Git должен завершиться с кодом 0"); - -КонецПроцедуры + Возврат ВременныйКаталог; -Процедура ТестДолжен_ВыполнитьGitPull() Экспорт - - ВременныйРепо = ВыполнитьКлонированиеТестовогоРепо(); - - СоздатьФайлАвторовГит_ДляТестов(ВременныйРепо.ЛокальныйРепозиторий); - Утверждения.ПроверитьИстину(Новый Файл(ОбъединитьПути(ВременныйРепо.ЛокальныйРепозиторий,"AUTHORS")).Существует()); +КонецФункции // ПодготовитьВременноеХранилище() - Распаковщик.ВыполнитьКоммитГит(ВременныйРепо.ЛокальныйРепозиторий, "test commit", "Администратор "); - - КодВозврата = Распаковщик.ВыполнитьGitPush(ВременныйРепо.ЛокальныйРепозиторий, ВременныйРепо.URLРепозитария, ВременныйРепо.ИмяВетки); - Утверждения.ПроверитьРавенство(КодВозврата, 0, "Git должен завершиться с кодом 0"); - - КодВозврата = Распаковщик.ВыполнитьGitPull(ВременныйРепо.ЛокальныйРепозиторий, ВременныйРепо.URLРепозитария, ВременныйРепо.ИмяВетки); - Утверждения.ПроверитьРавенство(КодВозврата, 0, "Git должен завершиться с кодом 0"); - -КонецПроцедуры Функция ВыполнитьКлонированиеТестовогоРепо() diff --git a/tests/multi-controller-xml.os b/tests/multi-controller.os similarity index 73% rename from tests/multi-controller-xml.os rename to tests/multi-controller.os index fc7ffddd..3832e723 100644 --- a/tests/multi-controller-xml.os +++ b/tests/multi-controller.os @@ -60,28 +60,25 @@ ПрочитатьТестовыеНастройки(); // глобальные настройки - Утверждения.ПроверитьРавенство("server.com", мНастройки.ДоменПочтыДляGit); - Утверждения.ПроверитьРавенство("1cv8.exe" , мНастройки.ПутьКПлатформе83); - Утверждения.ПроверитьРавенство("git" , мНастройки.ПутьGit); + Утверждения.ПроверитьРавенство("server.com", мНастройки["-email"]); + Утверждения.ПроверитьРавенство("1cv8.exe" , мНастройки["v8version"]); // репозитарии - Утверждения.ПроверитьРавенство(2, мНастройки.Репозитарии.Количество()); - - Утверждения.ПроверитьРавенство("test", мНастройки.Репозитарии[0].Имя); - Утверждения.ПроверитьРавенство("путь1", мНастройки.Репозитарии[0].КаталогВыгрузки); - Утверждения.ПроверитьРавенство("адрес1", мНастройки.Репозитарии[0].GitURL); - Утверждения.ПроверитьРавенство("каталог1", мНастройки.Репозитарии[0].КаталогХранилища1С); - Утверждения.ПроверитьРавенство(мНастройки.ПутьGit, мНастройки.Репозитарии[0].ПутьGit); - Утверждения.ПроверитьРавенство(мНастройки.ПутьКПлатформе83, мНастройки.Репозитарии[0].ПутьКПлатформе83); - Утверждения.ПроверитьРавенство(мНастройки.ДоменПочтыДляGit, мНастройки.Репозитарии[0].ДоменПочтыДляGit); - - Утверждения.ПроверитьРавенство("test2", мНастройки.Репозитарии[1].Имя); - Утверждения.ПроверитьРавенство("путь2", мНастройки.Репозитарии[1].КаталогВыгрузки); - Утверждения.ПроверитьРавенство("адрес2", мНастройки.Репозитарии[1].GitURL); - Утверждения.ПроверитьРавенство("каталог2", мНастройки.Репозитарии[1].КаталогХранилища1С); - Утверждения.ПроверитьРавенство(мНастройки.ПутьGit, мНастройки.Репозитарии[1].ПутьGit); - Утверждения.ПроверитьРавенство(мНастройки.ПутьКПлатформе83, мНастройки.Репозитарии[1].ПутьКПлатформе83); - Утверждения.ПроверитьРавенство("gmail.com", мНастройки.Репозитарии[1].ДоменПочтыДляGit); + Утверждения.ПроверитьРавенство(2, мНастройки["Репозитарии"].Количество()); + + Утверждения.ПроверитьРавенство("test", мНастройки["Репозитарии"][0]["Имя"]); + Утверждения.ПроверитьРавенство("путь1", мНастройки["Репозитарии"][0]["ЛокальныйКаталогГит"]); + Утверждения.ПроверитьРавенство("адрес1", мНастройки["Репозитарии"][0]["URLРепозитория"]); + Утверждения.ПроверитьРавенство("каталог1", мНастройки["Репозитарии"][0]["ПутьКХранилищу"]); + Утверждения.ПроверитьРавенство(мНастройки["v8version"], мНастройки["Репозитарии"][0]["v8version"]); + Утверждения.ПроверитьРавенство(мНастройки["-email"], мНастройки["Репозитарии"][0]["-email"]); + + Утверждения.ПроверитьРавенство("test2", мНастройки["Репозитарии"][1]["Имя"]); + Утверждения.ПроверитьРавенство("путь2", мНастройки["Репозитарии"][1]["ЛокальныйКаталогГит"]); + Утверждения.ПроверитьРавенство("адрес2", мНастройки["Репозитарии"][1]["URLРепозитория"]); + Утверждения.ПроверитьРавенство("каталог2", мНастройки["Репозитарии"][1]["ПутьКХранилищу"]); + Утверждения.ПроверитьРавенство(мНастройки["v8version"], мНастройки["Репозитарии"][1]["v8version"]); + Утверждения.ПроверитьРавенство("gmail.com", мНастройки["Репозитарии"][1]["-email"]); КонецПроцедуры @@ -90,28 +87,25 @@ ПрочитатьТестовыеНастройкиJSON(); // глобальные настройки - Утверждения.ПроверитьРавенство("server.com", мНастройки.ДоменПочтыДляGit); - Утверждения.ПроверитьРавенство("1cv8.exe" , мНастройки.ПутьКПлатформе83); - Утверждения.ПроверитьРавенство("git" , мНастройки.ПутьGit); + Утверждения.ПроверитьРавенство("server.com", мНастройки["-email"]); + Утверждения.ПроверитьРавенство("1cv8.exe" , мНастройки["-v8version"]); // репозитарии - Утверждения.ПроверитьРавенство(2, мНастройки.Репозитарии.Количество()); - - Утверждения.ПроверитьРавенство("test", мНастройки.Репозитарии[0].Имя); - Утверждения.ПроверитьРавенство("путь1", мНастройки.Репозитарии[0].КаталогВыгрузки); - Утверждения.ПроверитьРавенство("адрес1", мНастройки.Репозитарии[0].GitURL); - Утверждения.ПроверитьРавенство("каталог1", мНастройки.Репозитарии[0].КаталогХранилища1С); - Утверждения.ПроверитьРавенство(мНастройки.ПутьGit, мНастройки.Репозитарии[0].ПутьGit); - Утверждения.ПроверитьРавенство(мНастройки.ПутьКПлатформе83, мНастройки.Репозитарии[0].ПутьКПлатформе83); - Утверждения.ПроверитьРавенство(мНастройки.ДоменПочтыДляGit, мНастройки.Репозитарии[0].ДоменПочтыДляGit); - - Утверждения.ПроверитьРавенство("test2", мНастройки.Репозитарии[1].Имя); - Утверждения.ПроверитьРавенство("путь2", мНастройки.Репозитарии[1].КаталогВыгрузки); - Утверждения.ПроверитьРавенство("адрес2", мНастройки.Репозитарии[1].GitURL); - Утверждения.ПроверитьРавенство("каталог2", мНастройки.Репозитарии[1].КаталогХранилища1С); - Утверждения.ПроверитьРавенство(мНастройки.ПутьGit, мНастройки.Репозитарии[1].ПутьGit); - Утверждения.ПроверитьРавенство(мНастройки.ПутьКПлатформе83, мНастройки.Репозитарии[1].ПутьКПлатформе83); - Утверждения.ПроверитьРавенство("server.com", мНастройки.Репозитарии[1].ДоменПочтыДляGit); + Утверждения.ПроверитьРавенство(2, мНастройки["Репозитарии"].Количество()); + + Утверждения.ПроверитьРавенство("test", мНастройки["Репозитарии"][0]["Имя"]); + Утверждения.ПроверитьРавенство("путь1", мНастройки["Репозитарии"][0]["ЛокальныйКаталогГит"]); + Утверждения.ПроверитьРавенство("адрес1", мНастройки["Репозитарии"][0]["URLРепозитория"]); + Утверждения.ПроверитьРавенство("каталог1", мНастройки["Репозитарии"][0]["ПутьКХранилищу"]); + Утверждения.ПроверитьРавенство(мНастройки["-v8version"], мНастройки["Репозитарии"][0]["-v8version"]); + Утверждения.ПроверитьРавенство(мНастройки["-email"], мНастройки["Репозитарии"][0]["-email"]); + + Утверждения.ПроверитьРавенство("test2", мНастройки["Репозитарии"][1]["Имя"]); + Утверждения.ПроверитьРавенство("путь2", мНастройки["Репозитарии"][1]["ЛокальныйКаталогГит"]); + Утверждения.ПроверитьРавенство("адрес2", мНастройки["Репозитарии"][1]["URLРепозитория"]); + Утверждения.ПроверитьРавенство("каталог2", мНастройки["Репозитарии"][1]["ПутьКХранилищу"]); + Утверждения.ПроверитьРавенство(мНастройки["-v8version"], мНастройки["Репозитарии"][1]["-v8version"]); + Утверждения.ПроверитьРавенство("server.com", мНастройки["Репозитарии"][1]["-email"]); КонецПроцедуры @@ -133,17 +127,16 @@ Утверждения.ПроверитьИстину(Новый Файл(ОбъединитьПути(КаталогИсходников, Распаковщик.ИмяФайлаВерсииХранилища())).Существует()); Настройки = ПрочитатьТестовыеНастройки(); - Настройки.Репозитарии.Удалить(1); - Настройки.Репозитарии[0].КаталогВыгрузки = КаталогИсходников; - Настройки.Репозитарии[0].КаталогХранилища1С = КаталогРепо; - Настройки.Репозитарии[0].ПутьGit = "git"; + Настройки["Репозитарии"].Удалить(1); + Настройки["Репозитарии"][0]["ЛокальныйКаталогГит"] = КаталогИсходников; + Настройки["Репозитарии"][0]["ПутьКХранилищу"] = КаталогРепо; мПараметрыВызоваПакетногоСинхронизатора = Неопределено; ПакетныйСинхронизатор = Новый ПакетнаяСинхронизация; ПакетныйСинхронизатор.СинхронизироватьХранилища(Настройки, ЭтотОбъект); Утверждения.ПроверитьНеравенство(Неопределено, мПараметрыВызоваПакетногоСинхронизатора); - Утверждения.ПроверитьРавенство("test", мПараметрыВызоваПакетногоСинхронизатора.Имя); + Утверждения.ПроверитьРавенство("test", мПараметрыВызоваПакетногоСинхронизатора["Имя"]); КонецПроцедуры @@ -166,17 +159,17 @@ Утверждения.ПроверитьИстину(Новый Файл(ОбъединитьПути(КаталогИсходников, Распаковщик.ИмяФайлаВерсииХранилища())).Существует()); Настройки = ПрочитатьТестовыеНастройкиJSON(); - Настройки.Репозитарии.Удалить(1); - Настройки.Репозитарии[0].КаталогВыгрузки = КаталогИсходников; - Настройки.Репозитарии[0].КаталогХранилища1С = КаталогРепо; - Настройки.Репозитарии[0].ПутьGit = "git"; + Настройки["Репозитарии"].Удалить(1); + Настройки["Репозитарии"][0]["ЛокальныйКаталогГит"] = КаталогИсходников; + Настройки["Репозитарии"][0]["ПутьКХранилищу"] = КаталогРепо; + Настройки["Репозитарии"][0]["git-executable"] = "git"; мПараметрыВызоваПакетногоСинхронизатора = Неопределено; ПакетныйСинхронизатор = Новый ПакетнаяСинхронизация; ПакетныйСинхронизатор.СинхронизироватьХранилища(Настройки, ЭтотОбъект); Утверждения.ПроверитьНеравенство(Неопределено, мПараметрыВызоваПакетногоСинхронизатора); - Утверждения.ПроверитьРавенство("test", мПараметрыВызоваПакетногоСинхронизатора.Имя); + Утверждения.ПроверитьРавенство("test", мПараметрыВызоваПакетногоСинхронизатора["Имя"]); КонецПроцедуры diff --git a/tests/test-export_with_min_max_versions.os b/tests/test-export_with_min_max_versions.os deleted file mode 100644 index 28ad170c..00000000 --- a/tests/test-export_with_min_max_versions.os +++ /dev/null @@ -1,164 +0,0 @@ -#Использовать asserts -#Использовать tempfiles -#Использовать logos -#Использовать strings -#Использовать 1commands - -#Использовать ".." - -Перем юТест; -Перем Распаковщик; -Перем Лог; -Перем ЭтоWindows; - -Процедура Инициализация() - - Распаковщик = Новый МенеджерСинхронизации(); - Лог = Логирование.ПолучитьЛог("oscript.app.gitsync"); - Лог.УстановитьУровень(УровниЛога.Информация); - -КонецПроцедуры - -Функция ПолучитьСписокТестов(Знач Контекст) Экспорт - - юТест = Контекст; - - ВсеТесты = Новый Массив; - - ВсеТесты.Добавить("Тест_ДолженЭкспортироватьНачинаяСВерсии3"); - ВсеТесты.Добавить("Тест_ДолженЭкспортироватьМаксимумВерсию5"); - ВсеТесты.Добавить("Тест_ДолженЭкспортироватьВерсииС3По7"); - ВсеТесты.Добавить("Тест_ДолженЭкспортироватьНеБолее2"); - ВсеТесты.Добавить("Тест_ДолженЭкспортироватьПо2НоНеВыше5"); - - Возврат ВсеТесты; - -КонецФункции - -Процедура ПослеЗапускаТеста() Экспорт - ВременныеФайлы.Удалить(); -КонецПроцедуры - -////////////////////////////////////////////////////////////////////////////// -// Реализация тестов - -Процедура Тест_ДолженЭкспортироватьНачинаяСВерсии3() Экспорт - КоличествоКоммитов = ВыполнитьСинхронизацию(3); - Утверждения.ПроверитьРавенство(КоличествоКоммитов, 6, "Количество коммитов в git-хранилище"); -КонецПроцедуры - -Процедура Тест_ДолженЭкспортироватьМаксимумВерсию5() Экспорт - КоличествоКоммитов = ВыполнитьСинхронизацию(0, 5); - Утверждения.ПроверитьРавенство(КоличествоКоммитов, 5, "Количество коммитов в git-хранилище"); -КонецПроцедуры - -Процедура Тест_ДолженЭкспортироватьВерсииС3По7() Экспорт - КоличествоКоммитов = ВыполнитьСинхронизацию(3, 7); - Утверждения.ПроверитьРавенство(КоличествоКоммитов, 5, "Количество коммитов в git-хранилище"); -КонецПроцедуры - -Процедура Тест_ДолженЭкспортироватьНеБолее2() Экспорт - КоличествоКоммитов = ВыполнитьСинхронизацию(0, 0, 2); - Утверждения.ПроверитьРавенство(КоличествоКоммитов, 2, "Количество коммитов в git-хранилище"); -КонецПроцедуры - -Процедура Тест_ДолженЭкспортироватьПо2НоНеВыше5() Экспорт - КоличествоКоммитов = ВыполнитьСинхронизацию(0, 5, 2); - Утверждения.ПроверитьРавенство(КоличествоКоммитов, 5, "Количество коммитов в git-хранилище"); -КонецПроцедуры - -////////////////////////////////////////////////////////////////////////////// - -Функция ВыполнитьСинхронизацию(МинВерсия=0, МаксВерсия=0, Лимит=0) - - ПутьКФайлуХранилища1С = ПутьКВременномуФайлуХранилища1С(); - - КаталогРепо = ВременныеФайлы.СоздатьКаталог(); - КаталогИсходников = ОбъединитьПути(КаталогРепо, "src"); - СоздатьКаталог(КаталогИсходников); - - РезультатИнициализацииГитЧисло = ИнициализироватьТестовоеХранилищеГит(КаталогРепо); - Утверждения.ПроверитьИстину(РезультатИнициализацииГитЧисло=0, "Инициализация git-хранилища в каталоге: "+КаталогРепо); - - СоздатьФайлАвторовГит_ДляТестов(КаталогИсходников); - ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"AUTHORS")); - Распаковщик.ЗаписатьФайлВерсийГит(КаталогИсходников,0); - ПроверитьСуществованиеФайлаКаталога(ОбъединитьПути(КаталогИсходников,"VERSION")); - - Распаковщик.СинхронизироватьХранилищеКонфигурацийСГит(КаталогИсходников, ПутьКФайлуХранилища1С, МинВерсия, МаксВерсия,,,, Лимит); - - ИмяФайлаЛогаГит = ВременныеФайлы.НовоеИмяФайла("txt"); - - Батник = Новый КомандныйФайл; - Батник.ДобавитьКоманду(СтрШаблон("cd %1 %2",?(ЭтоWindows, "/d", ""), ОбернутьВКавычки(КаталогИсходников))); - Батник.ДобавитьКоманду("git log --pretty=oneline >"+ОбернутьВКавычки(ИмяФайлаЛогаГит)); - - КодВозврата = Батник.Исполнить(); - Утверждения.ПроверитьРавенство(0, КодВозврата, "Получение краткого лога хранилища git"); - - ЛогГит = Новый ЧтениеТекста; - ЛогГит.Открыть(ИмяФайлаЛогаГит); - КоличествоКоммитов = 0; - Пока ЛогГит.ПрочитатьСтроку() <> Неопределено Цикл - КоличествоКоммитов = КоличествоКоммитов + 1; - КонецЦикла; - ЛогГит.Закрыть(); - - Распаковщик.УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаЛогаГит); - Распаковщик.УдалитьВременныеФайлыПриНеобходимости(Батник.Закрыть()); - - Возврат КоличествоКоммитов; - -КонецФункции - -Функция ОбернутьВКавычки(Знач Строка); - Возврат """" + Строка + """"; -КонецФункции - -Функция ИнициализироватьТестовоеХранилищеГит(Знач КаталогРепозитория, Знач КакЧистое = Ложь) - - КодВозврата = Неопределено; - ЗапуститьПриложение("git init" + ?(КакЧистое, " --bare", ""), КаталогРепозитория, Истина, КодВозврата); - - Возврат КодВозврата; - -КонецФункции - -Функция ПутьКВременномуФайлуХранилища1С() - - Возврат ОбъединитьПути(КаталогFixtures(), "ТестовыйФайлХранилища1С.1CD"); - -КонецФункции - -Процедура СоздатьФайлАвторовГит_ДляТестов(Знач Каталог) - - ФайлАвторов = Новый ЗаписьТекста; - ФайлАвторов.Открыть(ОбъединитьПути(Каталог, "AUTHORS"), "utf-8"); - ФайлАвторов.ЗаписатьСтроку("Администратор=Администратор "); - ФайлАвторов.ЗаписатьСтроку("Отладка=Отладка "); - ФайлАвторов.Закрыть(); - -КонецПроцедуры - -Процедура ПроверитьСуществованиеФайлаКаталога(парамПуть, допСообщениеОшибки = "") - - Если Не ЗначениеЗаполнено(парамПуть) Тогда - ВызватьИсключение "Не указан путь <"+допСообщениеОшибки+">"; - КонецЕсли; - - лфайл = Новый Файл(парамПуть); - Если Не лфайл.Существует() Тогда - ВызватьИсключение "Не существует файл <"+допСообщениеОшибки+">"; - КонецЕсли; - -КонецПроцедуры - -Функция КаталогFixtures() - Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures"); -КонецФункции - -////////////////////////////////////////////////////////////////////////////// -СистемнаяИнформация = Новый СистемнаяИнформация; -ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; - -Инициализация(); \ No newline at end of file