├── bin ├── .gitkeep └── tempExtension.cfe ├── docs ├── clone.md ├── usage.md ├── plugins.md ├── setversion.md ├── README.md ├── sync.md └── init.md ├── src ├── core │ ├── Модули │ │ ├── .gitkeep │ │ └── ПараметрыСистемы.os │ └── Классы │ │ ├── internal │ │ ├── Классы │ │ │ ├── ПодключениеЗапакованныхПлагинов.os │ │ │ ├── СоздательНабораПлагиновСинхронизации.os │ │ │ ├── ИнтерфейсПлагинов.os │ │ │ ├── ЗагрузчикПлагинов.os │ │ │ ├── ПодключениеПлагиновКаталога.os │ │ │ ├── УстановщикПлагинов.os │ │ │ ├── ПараметрыПодписчиков.os │ │ │ ├── ПлагинСинхронизации.os │ │ │ └── РепозиторийСинхронизации.os │ │ ├── bindata │ │ │ └── Классы │ │ │ │ ├── МенеджерЗапакованныхФайловGitsync.os │ │ │ │ ├── clone_Gitsync.os │ │ │ │ ├── usage_Gitsync.os │ │ │ │ ├── plugins_Gitsync.os │ │ │ │ ├── setversion_Gitsync.os │ │ │ │ ├── README_Gitsync.os │ │ │ │ ├── ЗагрузчикЗапакованныхФайловGitsync.os │ │ │ │ └── tempExtension_Gitsync.os │ │ └── files │ │ │ └── Модули │ │ │ └── РаботаСФайлами.os │ │ └── МенеджерПлагинов.os └── cmd │ ├── Классы │ ├── КомандаPluginHelp.os │ ├── КомандаPlugins.os │ ├── КомандаPluginsInit.os │ ├── КомандаPluginInstall.os │ ├── КомандаPluginsClear.os │ ├── КомандаPluginList.os │ ├── КомандаPluginDisable.os │ ├── КомандаSetVersion.os │ ├── КомандаPluginEnable.os │ ├── КомандаSync.os │ ├── КомандаClone.os │ ├── КомандаInit.os │ └── КомандаAll.os │ └── gitsync.os ├── tasks ├── oscript.cfg ├── coverage.os ├── build.os ├── get-plugins.os └── pack.os ├── tests ├── fixtures │ ├── extension_storage │ │ ├── data │ │ │ ├── ver │ │ │ ├── objects │ │ │ │ ├── 15 │ │ │ │ │ └── af5e8f18aea8397ae287ef2f0f237eca7ba410 │ │ │ │ ├── 51 │ │ │ │ │ └── ddb08f4a5453469fb93b1cdc90304d747357b7 │ │ │ │ ├── 90 │ │ │ │ │ └── 5786cba6e9271268f277226315b61c46427718 │ │ │ │ ├── 09 │ │ │ │ │ └── 0694564fb2cc20d4ee82dff29581aea6ebceb2 │ │ │ │ ├── 3e │ │ │ │ │ └── 09dd8ca40ee4c38920ec37b53860a6335d9749 │ │ │ │ └── fd │ │ │ │ │ └── 94de288b43ff531cadf282f9664dd70031a9cb │ │ │ └── pack │ │ │ │ ├── pack-c262dc49d0c6254821c6af2f1aaced0d0d28d2b3.ind │ │ │ │ └── pack-c262dc49d0c6254821c6af2f1aaced0d0d28d2b3.pck │ │ ├── ver │ │ └── 1cv8ddb.1CD │ ├── ТестовыйФайлКонфигурации.cf │ ├── ТестовыйФайлХранилища1С.1CD │ ├── ТестовыйФайлКонфигурации_8_2_17.cf │ ├── ext.yaml │ ├── config.xml │ ├── default.yaml │ ├── config.yaml │ └── config.json └── МенеджерПлагинов_test.os ├── templates ├── oscript.cfg └── temp.cfe ├── .github ├── PULL_REQUEST_TEMPLATE.md ├── workflows │ ├── qa.yml │ ├── testing.yml │ └── release.yml ├── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md └── ISSUE_TEMPLATE.md ├── sonarlint.json ├── create-new-plugin.md ├── features ├── cmd │ ├── step_definitions │ │ ├── testsata │ │ │ └── test_plugin │ │ │ │ └── packagedef │ │ ├── sync.os │ │ ├── v8path.os │ │ ├── ibconnection.os │ │ ├── test.plugin.os │ │ ├── extention.os │ │ ├── init.os │ │ ├── clone.os │ │ ├── plugins-path.os │ │ ├── check.core.os │ │ ├── sync.core.os │ │ └── all.os │ ├── version.feature │ ├── fixtures │ │ └── default.yaml │ ├── extention.feature │ ├── v8path.feature │ ├── plugins-path.feature │ ├── setversion.feature │ ├── plugins.feature │ ├── all.feature │ ├── clone.feature │ ├── ibconnection.feature │ ├── init.feature │ └── sync.feature ├── core │ ├── step_definitions │ │ ├── testsata │ │ │ └── test_plugin │ │ │ │ └── packagedef │ │ ├── sync.os │ │ ├── test.plugin.os │ │ ├── init.os │ │ ├── clone.os │ │ ├── check.core.os │ │ └── sync.core.os │ ├── check.core.feature │ ├── sync.core.feature │ └── sync.batch.feature ├── opm │ └── opm-build.feature └── ПростыеКоманды.feature ├── .gitignore ├── sonar-project.properties ├── travis-ci.sh ├── .vscode └── launch.json ├── packagedef └── Jenkinsfile /bin/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/clone.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/usage.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/plugins.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/setversion.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/core/Модули/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/oscript.cfg: -------------------------------------------------------------------------------- 1 | lib.system=../oscript_modules 2 | -------------------------------------------------------------------------------- /tests/fixtures/extension_storage/data/ver: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/fixtures/extension_storage/ver: -------------------------------------------------------------------------------- 1 | {0,2,8,3,14,1533,"Designer"} -------------------------------------------------------------------------------- /tests/fixtures/extension_storage/data/objects/15/af5e8f18aea8397ae287ef2f0f237eca7ba410: -------------------------------------------------------------------------------- 1 | {0,0} -------------------------------------------------------------------------------- /templates/oscript.cfg: -------------------------------------------------------------------------------- 1 | lib.system=../../oscript_modules 2 | lib.additional=../../oscript_modules -------------------------------------------------------------------------------- /templates/temp.cfe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitsync/HEAD/templates/temp.cfe -------------------------------------------------------------------------------- /bin/tempExtension.cfe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitsync/HEAD/bin/tempExtension.cfe -------------------------------------------------------------------------------- /tests/fixtures/ТестовыйФайлКонфигурации.cf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitsync/HEAD/tests/fixtures/ТестовыйФайлКонфигурации.cf -------------------------------------------------------------------------------- /tests/fixtures/ТестовыйФайлХранилища1С.1CD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitsync/HEAD/tests/fixtures/ТестовыйФайлХранилища1С.1CD -------------------------------------------------------------------------------- /tests/fixtures/extension_storage/1cv8ddb.1CD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitsync/HEAD/tests/fixtures/extension_storage/1cv8ddb.1CD -------------------------------------------------------------------------------- /tests/fixtures/ТестовыйФайлКонфигурации_8_2_17.cf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitsync/HEAD/tests/fixtures/ТестовыйФайлКонфигурации_8_2_17.cf -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | реализация # 2 | 3 | сделанные изменения: 4 | 5 | - 6 | - 7 | 8 | @oscript-library/Collaborators - пожалуйста, проверьте изменения и прокомментируйте их 9 | -------------------------------------------------------------------------------- /sonarlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/silverbulleters/sonarqube-inject-vsc/master/schemas/sonarlint.json", 3 | "serverId": "SB", 4 | "projectKey": "opensource-cli" 5 | } -------------------------------------------------------------------------------- /tests/fixtures/extension_storage/data/objects/09/0694564fb2cc20d4ee82dff29581aea6ebceb2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitsync/HEAD/tests/fixtures/extension_storage/data/objects/09/0694564fb2cc20d4ee82dff29581aea6ebceb2 -------------------------------------------------------------------------------- /tests/fixtures/extension_storage/data/objects/3e/09dd8ca40ee4c38920ec37b53860a6335d9749: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitsync/HEAD/tests/fixtures/extension_storage/data/objects/3e/09dd8ca40ee4c38920ec37b53860a6335d9749 -------------------------------------------------------------------------------- /tests/fixtures/extension_storage/data/objects/51/ddb08f4a5453469fb93b1cdc90304d747357b7: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitsync/HEAD/tests/fixtures/extension_storage/data/objects/51/ddb08f4a5453469fb93b1cdc90304d747357b7 -------------------------------------------------------------------------------- /tests/fixtures/extension_storage/data/objects/90/5786cba6e9271268f277226315b61c46427718: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitsync/HEAD/tests/fixtures/extension_storage/data/objects/90/5786cba6e9271268f277226315b61c46427718 -------------------------------------------------------------------------------- /tests/fixtures/extension_storage/data/objects/fd/94de288b43ff531cadf282f9664dd70031a9cb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitsync/HEAD/tests/fixtures/extension_storage/data/objects/fd/94de288b43ff531cadf282f9664dd70031a9cb -------------------------------------------------------------------------------- /tests/fixtures/extension_storage/data/pack/pack-c262dc49d0c6254821c6af2f1aaced0d0d28d2b3.ind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitsync/HEAD/tests/fixtures/extension_storage/data/pack/pack-c262dc49d0c6254821c6af2f1aaced0d0d28d2b3.ind -------------------------------------------------------------------------------- /tests/fixtures/extension_storage/data/pack/pack-c262dc49d0c6254821c6af2f1aaced0d0d28d2b3.pck: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitsync/HEAD/tests/fixtures/extension_storage/data/pack/pack-c262dc49d0c6254821c6af2f1aaced0d0d28d2b3.pck -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | Описание публичного интерфейса библиотеки `gitsync` 2 | ========= 3 | 4 | 5 | 6 | 7 | 8 | 9 | > Документация в разработке 10 | 11 | -------------------------------------------------------------------------------- /src/core/Классы/internal/Классы/ПодключениеЗапакованныхПлагинов.os: -------------------------------------------------------------------------------- 1 | // ИСПОЛЬЗУЕТСЯ ТОЛЬКО ДЛЯ СБОРКИ В EXE 2 | // 3 | Функция ИндексПлагинов() Экспорт 4 | 5 | ИндексПлагинов = Новый Массив; 6 | 7 | Возврат ИндексПлагинов; 8 | 9 | КонецФункции -------------------------------------------------------------------------------- /create-new-plugin.md: -------------------------------------------------------------------------------- 1 | Описание создания своего плагина для `gitsync` 2 | =============== 3 | 4 | 5 | 6 | 7 | 8 | 9 | > Документация в разработке 10 | 11 | -------------------------------------------------------------------------------- /features/cmd/step_definitions/testsata/test_plugin/packagedef: -------------------------------------------------------------------------------- 1 | 2 | Описание.Имя("test_plugin") 3 | .Версия("0.0.1") 4 | .ВерсияСреды("1.0.18") 5 | .ЗависитОт("logos", "1.0.1") 6 | .ВключитьФайл("src") 7 | .ОпределяетКласс("Плагин_ТестовыйПлагин","src/Классы/testPlugin.os"); 8 | -------------------------------------------------------------------------------- /features/core/step_definitions/testsata/test_plugin/packagedef: -------------------------------------------------------------------------------- 1 | 2 | Описание.Имя("test_plugin") 3 | .Версия("0.0.1") 4 | .ВерсияСреды("1.0.18") 5 | .ЗависитОт("logos", "1.0.1") 6 | .ВключитьФайл("src") 7 | .ОпределяетКласс("Плагин_ТестовыйПлагин","src/Классы/testPlugin.os"); 8 | -------------------------------------------------------------------------------- /tests/fixtures/ext.yaml: -------------------------------------------------------------------------------- 1 | name: Расширение1 2 | extention: test 3 | path: <КаталогХранилищаРасширения> 4 | dir: <ПутьКаталогаИсходниковРасширения> 5 | storage-user: Администратор 6 | storage-pwd: '' 7 | git-path: git 8 | temp-dir: "" 9 | v8version: 8.3 10 | domain-email: localhost 11 | lic-try-count: 5 -------------------------------------------------------------------------------- /.github/workflows/qa.yml: -------------------------------------------------------------------------------- 1 | name: Контроль качества 2 | 3 | on: 4 | push: 5 | pull_request: 6 | workflow_dispatch: 7 | 8 | jobs: 9 | sonar: 10 | uses: autumn-library/workflows/.github/workflows/sonar.yml@main 11 | with: 12 | github_repository: oscript-library/gitsync 13 | secrets: 14 | SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }} 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Добавление новой функциональности 3 | about: предложение новой идеи или функциональности к разработке 4 | 5 | --- 6 | 7 | **Существует проблема** 8 | Описание существующей проблемы [...] 9 | 10 | **Хотелось бы иметь следующую функциональность** 11 | Вариант реализации [...] 12 | 13 | **Дополнительный контекст** 14 | Любая дополнительная информация 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | bin/*.exe 2 | tests/*.xml 3 | 4 | exec*.log 5 | 6 | bdd-*.xml 7 | 8 | .enabled-plugins 9 | coverage/* 10 | 11 | *.ospx 12 | oscript_modules/ 13 | tests/fixtures/gitsync-plugins/* 14 | embedded_plugins/*.ospx 15 | src/cmd/oscript.cfg 16 | 17 | *.1CD. 18 | *.cfl 19 | *.1CL 20 | 1cv8dtmp.1CD 21 | # tests/fixtures/extension_storage/data/ 22 | # tests/fixtures/extension_storage/cache/ 23 | # tests/fixtures/extension_storage/ver 24 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | > Заполните шаблон обсуждения GIT (GitHub, GitLab, Vanessa Hub) 2 | 3 | ```Gherkin 4 | Функционал: <Необходимый эффект> 5 | Как <роль пользователя> 6 | Я хочу <Необходимый функционал> 7 | 8 | Контекст: 9 | Дано <версия инструментария> 10 | И <полная версия 1С> 11 | и <конфигурация запуска> 12 | 13 | Сценарий: <ожидамое поведение> 14 | Допустим <Пример данных> 15 | Когда <Что-то нажимается или вызывается> 16 | Тогда <Что-то происходит> 17 | ``` 18 | 19 | > Прикладывайте файлы скриншотов 20 | -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаPluginHelp.os: -------------------------------------------------------------------------------- 1 | 2 | Перем Лог; 3 | 4 | Процедура ОписаниеКоманды(Команда) Экспорт 5 | 6 | Команда.Опция("a all", Ложь, "Вывод справки для всех установленных плагинов"); 7 | Команда.Аргумент("PLUGIN", "", "Имя установленного плагина").ТМассивСтрок(); 8 | 9 | Команда.Спек = "(-a | --all) | PLUGIN..."; 10 | 11 | // Команда.УстановитьДействиеПередВыполнением(ПараметрыПриложения); 12 | // Команда.УстановитьДействиеПослеВыполнения(ПараметрыПриложения); 13 | 14 | КонецПроцедуры 15 | 16 | Процедура ВыполнитьКоманду(Знач Команда) Экспорт 17 | 18 | ВызватьИсключение "Команда Help не реализована"; 19 | 20 | КонецПроцедуры 21 | 22 | Лог = ПараметрыПриложения.Лог(); -------------------------------------------------------------------------------- /src/core/Классы/internal/bindata/Классы/МенеджерЗапакованныхФайловGitsync.os: -------------------------------------------------------------------------------- 1 | Функция ПолучитьИндексФайлов() Экспорт 2 | 3 | ИндексФайлов = Новый Соответствие; 4 | ИндексФайлов.Вставить("tempExtension.cfe", "tempExtension_Gitsync"); 5 | ИндексФайлов.Вставить("clone.md", "clone_Gitsync"); 6 | ИндексФайлов.Вставить("init.md", "init_Gitsync"); 7 | ИндексФайлов.Вставить("plugins.md", "plugins_Gitsync"); 8 | ИндексФайлов.Вставить("README.md", "README_Gitsync"); 9 | ИндексФайлов.Вставить("setversion.md", "setversion_Gitsync"); 10 | ИндексФайлов.Вставить("sync.md", "sync_Gitsync"); 11 | ИндексФайлов.Вставить("usage.md", "usage_Gitsync"); 12 | 13 | Возврат ИндексФайлов; 14 | 15 | КонецФункции 16 | -------------------------------------------------------------------------------- /sonar-project.properties: -------------------------------------------------------------------------------- 1 | # must be unique in a given SonarQube instance 2 | sonar.projectKey=gitsync 3 | 4 | # this is the name displayed in the SonarQube UI 5 | sonar.projectName=1S storage and git sync for OScript 6 | 7 | # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. 8 | # Since SonarQube 4.2, this property is optional if sonar.modules is set. 9 | # If not set, SonarQube starts looking for source code from the directory containing 10 | # the sonar-project.properties file. 11 | 12 | sonar.sources=./src 13 | 14 | # Encoding of the source code. Default is default system encoding 15 | sonar.sourceEncoding=UTF-8 16 | 17 | sonar.coverageReportPaths=coverage/genericCoverage.xml 18 | -------------------------------------------------------------------------------- /features/cmd/version.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Инициализация каталога исходников конфигурации 4 | Как Пользователь 5 | Я хочу получать версию продукта gitsync 6 | Чтобы понимать актуальность продукта 7 | 8 | Контекст: Тестовый каталог 9 | Когда Я очищаю параметры команды "gitsync" в контексте 10 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 11 | 12 | Сценарий: Получение версии продукта 13 | Когда Я добавляю параметр "--version" для команды "gitsync" 14 | Когда Я выполняю команду "gitsync" 15 | Тогда Вывод команды "gitsync" содержит "." 16 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 17 | И Код возврата команды "gitsync" равен 0 18 | -------------------------------------------------------------------------------- /travis-ci.sh: -------------------------------------------------------------------------------- 1 | 2 | 3 | GITNAME="${GIT_NAME:-"ci"}" 4 | GITEMAIL="${GIT_EMAIL:-"ci@me"}" 5 | 6 | set -e 7 | 8 | git config --global user.name $GITNAME 9 | git config --global user.email $GITEMAIL 10 | 11 | echo "Устанавливаю версию OScript <$OSCRIPT_VERSION>" 12 | curl http://oscript.io/downloads/$OSCRIPT_VERSION/deb > oscript.deb 13 | dpkg -i oscript.deb 14 | rm -f oscript.deb 15 | echo "===================================" 16 | echo "Установка зависимостей тестирования" 17 | opm install 1testrunner; 18 | opm install 1bdd; 19 | opm install coverage; 20 | 21 | opm install; 22 | 23 | # cat /usr/bin/opm 24 | echo "===================================" 25 | 26 | echo "Запуск тестирования пакета" 27 | oscript ./tasks/coverage.os; 28 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Используйте IntelliSense, чтобы узнать о возможных атрибутах. 3 | // Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов. 4 | // Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Отладка 1Script", 9 | "type": "oscript", 10 | "request": "launch", 11 | "program": "${file}", 12 | "args": [], 13 | "cwd": "${workspaceRoot}", 14 | "runtimeExecutable": "/usr/bin/oscript", 15 | "debugPort": 2801, 16 | "protocol": "internal" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /features/core/check.core.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Проверка функционал библиотеки 4 | Как Разработчик 5 | Я хочу быть уверенный Все внутренние проверки прошли 6 | Чтобы не выпускать не работающих Функционал 7 | 8 | Контекст: Временный контекст 9 | Допустим Я создаю новый объект МенеджерСинхронизации 10 | 11 | Сценарий: Проверка интерфейса МенеджераПодписок 12 | 13 | Когда Я создаю новый МенеджерПодписок 14 | И Я создаю новый ИнтерфейсПлагинов 15 | Тогда МенеджераПодписок реализует ИнтерфейсаПлагинов 16 | 17 | Сценарий: Проверка интерфейса ТестовыйПлагин 18 | 19 | Когда Я создаю новый ТестовыйПлагин 20 | И Я создаю новый ИнтерфейсПлагинов 21 | Тогда ТестовыйПлагин реализует ИнтерфейсаПлагинов -------------------------------------------------------------------------------- /features/cmd/step_definitions/sync.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | Перем БДД; //контекст фреймворка 1bdd 4 | 5 | 6 | // Метод выдает список шагов, реализованных в данном файле-шагов 7 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 8 | БДД = КонтекстФреймворкаBDD; 9 | 10 | ВсеШаги = Новый Массив; 11 | 12 | Возврат ВсеШаги; 13 | КонецФункции 14 | 15 | // Реализация шагов 16 | 17 | // Процедура выполняется перед запуском каждого сценария 18 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 19 | 20 | 21 | 22 | КонецПроцедуры 23 | 24 | // Процедура выполняется после завершения каждого сценария 25 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 26 | 27 | КонецПроцедуры 28 | 29 | -------------------------------------------------------------------------------- /tests/fixtures/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | server.com 4 | 1cv8.exe 5 | git 6 | 7 | 8 | 9 | путь1 10 | адрес1 11 | каталог1 12 | 13 | 14 | 15 | 16 | 17 | путь2 18 | адрес2 19 | каталог2 20 | gmail.com 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /features/core/step_definitions/sync.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | Перем БДД; //контекст фреймворка 1bdd 4 | 5 | 6 | // Метод выдает список шагов, реализованных в данном файле-шагов 7 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 8 | БДД = КонтекстФреймворкаBDD; 9 | 10 | ВсеШаги = Новый Массив; 11 | 12 | Возврат ВсеШаги; 13 | КонецФункции 14 | 15 | // Реализация шагов 16 | 17 | // Процедура выполняется перед запуском каждого сценария 18 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 19 | 20 | 21 | 22 | КонецПроцедуры 23 | 24 | // Процедура выполняется после завершения каждого сценария 25 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 26 | 27 | КонецПроцедуры 28 | 29 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Сообщение об ошибке 3 | about: если вы выявили ошибку - сообщите нам об этом 4 | 5 | --- 6 | 7 | **Описание ошибки** 8 | что конкретно происходит 9 | 10 | **Сценарий воспроизведения** 11 | Шаги по воспроизведению: 12 | 1. Открыть '...' 13 | 2. Нажать '....' 14 | 3. Запустить '....' 15 | 4. Где ошибка 16 | 17 | **Ожидаемое поведение если бы ошибки не было** 18 | '....' 19 | 20 | **Скриншоты** 21 | если применимо приложите скриншот 22 | 23 | **Окружение:** 24 | - Версия операционной системы: [например Ubuntu 18.04] 25 | - Редакция 1С платформы [например 8.3.12.1542] 26 | - Версия Gitsync [например 3.0.1] 27 | - Версия OScript [например 1.0.20] 28 | 29 | **Дополнительный контекст** 30 | 31 | Типовая или не типовая конфигурация ? Включен ли режим защиты от опасных действий и т.д. 32 | -------------------------------------------------------------------------------- /src/core/Классы/internal/bindata/Классы/clone_Gitsync.os: -------------------------------------------------------------------------------- 1 | 2 | /////////////////////////////////////////// 3 | // ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ // 4 | /////////////////////////////////////////// 5 | // 6 | // ФАЙЛ: 7 | // 8 | 9 | // Возвращает версию запакованного файла 10 | // 11 | Функция Версия() Экспорт 12 | Возврат "1.0.0"; 13 | КонецФункции 14 | 15 | // Возвращает имя запакованного файла 16 | // 17 | Функция ИмяФайла() Экспорт 18 | Возврат "clone.md"; 19 | КонецФункции 20 | 21 | // Возвращает хеш строку запакованного файла 22 | // 23 | Функция Хеш() Экспорт 24 | Возврат "D41D8CD98F00B204E9800998ECF8427E"; 25 | КонецФункции 26 | 27 | // Возвращает запакованные данные файла 28 | // 29 | Функция ДвоичныеДанные() Экспорт 30 | ЗапакованныеДанные = ""; 31 | Возврат ЗапакованныеДанные; 32 | КонецФункции 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/core/Классы/internal/bindata/Классы/usage_Gitsync.os: -------------------------------------------------------------------------------- 1 | 2 | /////////////////////////////////////////// 3 | // ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ // 4 | /////////////////////////////////////////// 5 | // 6 | // ФАЙЛ: 7 | // 8 | 9 | // Возвращает версию запакованного файла 10 | // 11 | Функция Версия() Экспорт 12 | Возврат "1.0.0"; 13 | КонецФункции 14 | 15 | // Возвращает имя запакованного файла 16 | // 17 | Функция ИмяФайла() Экспорт 18 | Возврат "usage.md"; 19 | КонецФункции 20 | 21 | // Возвращает хеш строку запакованного файла 22 | // 23 | Функция Хеш() Экспорт 24 | Возврат "D41D8CD98F00B204E9800998ECF8427E"; 25 | КонецФункции 26 | 27 | // Возвращает запакованные данные файла 28 | // 29 | Функция ДвоичныеДанные() Экспорт 30 | ЗапакованныеДанные = ""; 31 | Возврат ЗапакованныеДанные; 32 | КонецФункции 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/core/Классы/internal/bindata/Классы/plugins_Gitsync.os: -------------------------------------------------------------------------------- 1 | 2 | /////////////////////////////////////////// 3 | // ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ // 4 | /////////////////////////////////////////// 5 | // 6 | // ФАЙЛ: 7 | // 8 | 9 | // Возвращает версию запакованного файла 10 | // 11 | Функция Версия() Экспорт 12 | Возврат "1.0.0"; 13 | КонецФункции 14 | 15 | // Возвращает имя запакованного файла 16 | // 17 | Функция ИмяФайла() Экспорт 18 | Возврат "plugins.md"; 19 | КонецФункции 20 | 21 | // Возвращает хеш строку запакованного файла 22 | // 23 | Функция Хеш() Экспорт 24 | Возврат "D41D8CD98F00B204E9800998ECF8427E"; 25 | КонецФункции 26 | 27 | // Возвращает запакованные данные файла 28 | // 29 | Функция ДвоичныеДанные() Экспорт 30 | ЗапакованныеДанные = ""; 31 | Возврат ЗапакованныеДанные; 32 | КонецФункции 33 | 34 | 35 | -------------------------------------------------------------------------------- /features/cmd/fixtures/default.yaml: -------------------------------------------------------------------------------- 1 | globals: 2 | storage-user: Администратор 3 | storage-pwd: '' 4 | git-path: git 5 | v8version: 8.3 6 | domain-email: localhost 7 | lic-try-count: 5 8 | plugins: 9 | enable: 10 | - test 11 | - test2 12 | disable: 13 | - test3 14 | repositories: 15 | - name: ТестовыйРепозиторий 16 | # disable: false 17 | path: <КаталогХранилища1С_1> 18 | dir: <ПутьКаталогаИсходников_1> 19 | plugins: 20 | more: 21 | - test3 22 | plugins-config: 23 | 24 | - name: ТестовыйРепозиторий2 25 | # disable: true 26 | path: <КаталогХранилища1С_2> 27 | dir: <ПутьКаталогаИсходников_2> 28 | storage-user: Администратор 29 | storage-pwd: '' 30 | git-path: git 31 | temp-dir: "" 32 | v8version: 8.3 33 | domain-email: localhost 34 | lic-try-count: 5 -------------------------------------------------------------------------------- /src/core/Классы/internal/bindata/Классы/setversion_Gitsync.os: -------------------------------------------------------------------------------- 1 | 2 | /////////////////////////////////////////// 3 | // ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ // 4 | /////////////////////////////////////////// 5 | // 6 | // ФАЙЛ: 7 | // 8 | 9 | // Возвращает версию запакованного файла 10 | // 11 | Функция Версия() Экспорт 12 | Возврат "1.0.0"; 13 | КонецФункции 14 | 15 | // Возвращает имя запакованного файла 16 | // 17 | Функция ИмяФайла() Экспорт 18 | Возврат "setversion.md"; 19 | КонецФункции 20 | 21 | // Возвращает хеш строку запакованного файла 22 | // 23 | Функция Хеш() Экспорт 24 | Возврат "D41D8CD98F00B204E9800998ECF8427E"; 25 | КонецФункции 26 | 27 | // Возвращает запакованные данные файла 28 | // 29 | Функция ДвоичныеДанные() Экспорт 30 | ЗапакованныеДанные = ""; 31 | Возврат ЗапакованныеДанные; 32 | КонецФункции 33 | 34 | 35 | -------------------------------------------------------------------------------- /tests/fixtures/default.yaml: -------------------------------------------------------------------------------- 1 | globals: 2 | storage-user: Администратор 3 | storage-pwd: '' 4 | git-path: git 5 | v8version: 8.3 6 | domain-email: localhost 7 | lic-try-count: 5 8 | plugins: 9 | enable: 10 | - test 11 | - test2 12 | disable: 13 | - test3 14 | repositories: 15 | - name: ТестовыйРепозиторий 16 | # disable: false 17 | path: <КаталогХранилища1С_1> 18 | dir: <ПутьКаталогаИсходников_1> 19 | plugins: 20 | more: 21 | - test3 22 | plugins-config: 23 | URL: http 24 | 25 | - name: ТестовыйРепозиторий2 26 | # disable: true 27 | path: <КаталогХранилища1С_2> 28 | dir: <ПутьКаталогаИсходников_2> 29 | storage-user: Администратор 30 | storage-pwd: '' 31 | git-path: git 32 | temp-dir: "" 33 | v8version: 8.3 34 | domain-email: localhost 35 | lic-try-count: 5 -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаPlugins.os: -------------------------------------------------------------------------------- 1 | 2 | Процедура ОписаниеКоманды(Команда) Экспорт 3 | 4 | Команда.ДобавитьПодкоманду("list ls", "Вывод списка плагинов", Новый КомандаPluginList); 5 | Команда.ДобавитьПодкоманду("install i", "Установка новых плагинов", Новый КомандаPluginInstall); 6 | Команда.ДобавитьПодкоманду("enable e", "Активизация установленных плагинов", Новый КомандаPluginEnable); 7 | Команда.ДобавитьПодкоманду("disable d", "Деактивизация установленных плагинов", Новый КомандаPluginDisable); 8 | Команда.ДобавитьПодкоманду("clear c", "Очистка установленных плагинов", Новый КомандаPluginsClear); 9 | Команда.ДобавитьПодкоманду("help h", "Вывод справки по выбранным плагинам", Новый КомандаPluginHelp); 10 | Команда.ДобавитьПодкоманду("init", "Инициализация предустановленных плагинов", Новый КомандаPluginsInit); 11 | 12 | КонецПроцедуры 13 | 14 | Процедура ВыполнитьКоманду(Знач Команда) Экспорт 15 | 16 | Команда.ВывестиСправку(); 17 | 18 | КонецПроцедуры 19 | -------------------------------------------------------------------------------- /tests/fixtures/config.yaml: -------------------------------------------------------------------------------- 1 | globals: 2 | storage-user: Администратор 3 | storage-pwd: '' 4 | git-path: git 5 | temp-dir: '' 6 | v8version: 8.3 7 | domain-email: localhost 8 | lic-try-count: 5 9 | plugins: 10 | enable: 11 | - test 12 | - test2 13 | disable: 14 | - test3 15 | plugins-config: 16 | git-url: git-url 17 | push: true 18 | pull: true 19 | repositories: 20 | - 21 | name: '<ТестовыйРепозиторий>' 22 | path: '<КаталогХранилища1С_1>' 23 | dir: '<ПутьКаталогаИсходников_1>' 24 | plugins: 25 | more: 26 | - test3 27 | plugins-config: 28 | git-url: git-url 29 | push: true 30 | pull: true 31 | - 32 | name: '<ТестовыйРепозиторий2>' 33 | path: '<КаталогХранилища1С_2>' 34 | dir: '<ПутьКаталогаИсходников_2>' 35 | storage-user: Администратор 36 | storage-pwd: '' 37 | git-path: git 38 | temp-dir: '' 39 | v8version: 8.3 40 | domain-email: localhost 41 | lic-try-count: 5 42 | -------------------------------------------------------------------------------- /.github/workflows/testing.yml: -------------------------------------------------------------------------------- 1 | # MIT License 2 | # Copyright (C) 2020 Tymko Oleg and contributors 3 | # All rights reserved. 4 | 5 | name: Тестирование 6 | # Любой пуш и pr в проекте 7 | on: [push, pull_request] 8 | 9 | jobs: 10 | build: 11 | runs-on: ${{ matrix.os }} 12 | strategy: 13 | fail-fast: false 14 | matrix: 15 | os: [ubuntu-latest] 16 | oscript_version: ['1.9.0'] 17 | 18 | steps: 19 | # Загрузка проекта 20 | - name: Актуализация 21 | uses: actions/checkout@v2 22 | 23 | # Установка OneScript конкретной версии 24 | - name: Установка OneScript 25 | uses: otymko/setup-onescript@v1.0 26 | env: 27 | ACTIONS_ALLOW_UNSECURE_COMMANDS: true 28 | with: 29 | version: ${{ matrix.oscript_version }} 30 | 31 | # Установка зависимостей пакета 32 | - name: Установка зависимостей 33 | run: | 34 | opm install opm 35 | opm install -l --dev 36 | 37 | # Задача тестирования, в результате ожидается успешное выполнение 38 | - name: Тестирование 39 | run: oscript ./tasks/test.os true 40 | -------------------------------------------------------------------------------- /src/core/Классы/internal/bindata/Классы/README_Gitsync.os: -------------------------------------------------------------------------------- 1 | 2 | /////////////////////////////////////////// 3 | // ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ // 4 | /////////////////////////////////////////// 5 | // 6 | // ФАЙЛ: 7 | // 8 | 9 | // Возвращает версию запакованного файла 10 | // 11 | Функция Версия() Экспорт 12 | Возврат "1.0.0"; 13 | КонецФункции 14 | 15 | // Возвращает имя запакованного файла 16 | // 17 | Функция ИмяФайла() Экспорт 18 | Возврат "README.md"; 19 | КонецФункции 20 | 21 | // Возвращает хеш строку запакованного файла 22 | // 23 | Функция Хеш() Экспорт 24 | Возврат "D716283B8EAD871D80805B7FAB76784C"; 25 | КонецФункции 26 | 27 | // Возвращает запакованные данные файла 28 | // 29 | Функция ДвоичныеДанные() Экспорт 30 | ЗапакованныеДанные = "0J7Qv9C40YHQsNC90LjQtSDQv9GD0LHQu9C40YfQvdC+0LPQviDQuNC90YLQtdGA0YTQtdC50YHQsCDQsdC40LHQu9C40L7RgtC10LrQuCBgZ2l0c3luY2AKPT09PT09PT09Cgo8IS0tIFRPQyBpbnNlcnRBbmNob3I6dHJ1ZSAtLT4KCgo8IS0tIC9UT0MgLS0+Cgo+INCU0L7QutGD0LzQtdC90YLQsNGG0LjRjyDQsiDRgNCw0LfRgNCw0LHQvtGC0LrQtQoKPCEtLSBUT0RPOiDQn9C+0LTQs9C+0YLQvtCy0LjRgtGMINC00L7QutGD0LzQtdC90YLQsNGG0LjRjiAtLT4="; 31 | Возврат ЗапакованныеДанные; 32 | КонецФункции 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/core/Классы/internal/Классы/СоздательНабораПлагиновСинхронизации.os: -------------------------------------------------------------------------------- 1 | #Использовать logos 2 | 3 | Перем НаборИменКлассовПлагинов; 4 | Перем ДоступныйИнтерфейсПлагинов; 5 | Перем Лог; 6 | 7 | Функция Создать() Экспорт 8 | 9 | НаборПлагинов = Новый Соответствие(); 10 | 11 | Для каждого ИмяКлассаПлагина Из НаборИменКлассовПлагинов Цикл 12 | 13 | Лог.Отладка("Добавляю плагин <%1> в индекс плагинов", ИмяКлассаПлагина); 14 | 15 | Попытка 16 | НовыйПлагин = Новый ПлагинСинхронизации(ИмяКлассаПлагина, ДоступныйИнтерфейсПлагинов); 17 | Исключение 18 | Лог.Отладка("Ошибка добавления плагина в индекс плагинов. По причине: <%1>", ОписаниеОшибки()); 19 | Продолжить; 20 | КонецПопытки; 21 | 22 | НаборПлагинов.Вставить(НовыйПлагин.Имя(), НовыйПлагин); 23 | 24 | КонецЦикла; 25 | 26 | Возврат НаборПлагинов; 27 | 28 | КонецФункции 29 | 30 | Процедура ДобавитьПлагин(Знач ИмяКласса) Экспорт 31 | 32 | НаборИменКлассовПлагинов.Добавить(ИмяКласса); 33 | 34 | КонецПроцедуры 35 | 36 | НаборИменКлассовПлагинов = Новый Массив(); 37 | ДоступныйИнтерфейсПлагинов = Новый ИнтерфейсПлагинов().Интерфейс(); 38 | Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync.plugins.loader"); 39 | -------------------------------------------------------------------------------- /features/opm/opm-build.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Проверка сборки продукта 4 | Как Пользователь 5 | Я хочу автоматически проверять сборку моего продукта 6 | Чтобы гарантировать возможность установку моего продукта у пользователей 7 | 8 | Контекст: Отключение отладки в логах 9 | Допустим Я выключаю отладку лога с именем "oscript.lib.gitsync" 10 | И Я очищаю параметры команды "opm" в контексте 11 | 12 | Сценарий: Выполнение команды без параметров 13 | Когда Я добавляю параметр "build ." для команды "opm" 14 | И Я выполняю команду "opm" 15 | Тогда Вывод команды "opm" содержит "Сборка пакета завершена" 16 | И Вывод команды "opm" не содержит "Внешнее исключение" 17 | И Код возврата команды "opm" равен 0 18 | 19 | Сценарий: Сборка независимого приложения 20 | Когда Я добавляю параметр "build" для команды "opm" 21 | И Я добавляю параметр "--mf ./build_packagedef" для команды "opm" 22 | И Я добавляю параметр "." для команды "opm" 23 | И Я выполняю команду "opm" 24 | Тогда Вывод команды "opm" содержит "Сборка пакета завершена" 25 | И Вывод команды "opm" не содержит "Внешнее исключение" 26 | И Код возврата команды "opm" равен 0 -------------------------------------------------------------------------------- /tasks/coverage.os: -------------------------------------------------------------------------------- 1 | #Использовать coverage 2 | #Использовать 1commands 3 | #Использовать fs 4 | 5 | Если АргументыКоманднойСтроки.Количество() = 0 Тогда 6 | ТолькоЮнитТесты = Ложь; 7 | Иначе 8 | ТолькоЮнитТесты = Булево(АргументыКоманднойСтроки[0]); 9 | КонецЕсли; 10 | 11 | ФС.ОбеспечитьПустойКаталог("coverage"); 12 | ПутьКСтат = "coverage/stat.json"; 13 | 14 | Команда = Новый Команда; 15 | Команда.УстановитьКоманду("oscript"); 16 | Команда.ДобавитьПараметр("-encoding=utf-8"); 17 | Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); 18 | Команда.ДобавитьПараметр("tasks/test.os"); 19 | Если ТолькоЮнитТесты Тогда 20 | Команда.ДобавитьПараметр("true"); 21 | КонецЕсли; 22 | 23 | Команда.ПоказыватьВыводНемедленно(Истина); 24 | 25 | КодВозврата = Команда.Исполнить(); 26 | 27 | Файл_Стат = Новый Файл(ПутьКСтат); 28 | 29 | ИмяПакета = "gitsync"; 30 | 31 | ПроцессорГенерации = Новый ГенераторОтчетаПокрытия(); 32 | 33 | ПроцессорГенерации.ОтносительныеПути() 34 | .ИмяФайлаСтатистики("stat*.json") 35 | .ФайлСтатистики(Файл_Стат.ПолноеИмя) 36 | .GenericCoverage() 37 | .Cobertura() 38 | .Clover(ИмяПакета) 39 | .Сформировать(); 40 | 41 | ЗавершитьРаботу(КодВозврата); -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаPluginsInit.os: -------------------------------------------------------------------------------- 1 | 2 | Перем Лог; 3 | 4 | Процедура ОписаниеКоманды(Команда) Экспорт 5 | 6 | Лог.Отладка("Пустое заполнение команды "); 7 | 8 | КонецПроцедуры 9 | 10 | Процедура ВыполнитьКоманду(Знач Команда) Экспорт 11 | 12 | КаталогПриложения = ПараметрыПриложения.КаталогПриложения(); 13 | 14 | КаталогВстроенныхПлагинов = ОбъединитьПути(КаталогПриложения, "embedded_plugins"); 15 | 16 | МассивФайловПлагинов = НайтиФайлы(КаталогВстроенныхПлагинов, "*.ospx"); 17 | 18 | ОбщиеПараметры = ПараметрыПриложения.Параметры(); 19 | МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов(); 20 | 21 | Лог.Информация("Начата инициализация предустановленных плагинов"); 22 | Лог.Отладка("Каталог поиска предустановленных плагинов: <%1>", КаталогВстроенныхПлагинов); 23 | Лог.Отладка("Количество пакетов плагинов к установке: <%1>", МассивФайловПлагинов.Количество()); 24 | 25 | Для каждого ФайлПакетаПлагинов Из МассивФайловПлагинов Цикл 26 | 27 | Лог.Отладка("Устанавливаю пакет плагинов из файла: <%1>", ФайлПакетаПлагинов.ПолноеИмя); 28 | МенеджерПлагинов.УстановитьФайлПлагин(ФайлПакетаПлагинов.ПолноеИмя); 29 | 30 | КонецЦикла; 31 | 32 | Лог.Информация("Инициализация предустановленных плагинов завершена"); 33 | 34 | КонецПроцедуры 35 | 36 | Лог = ПараметрыПриложения.Лог(); -------------------------------------------------------------------------------- /features/cmd/step_definitions/v8path.os: -------------------------------------------------------------------------------- 1 | #Использовать v8find 2 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 3 | 4 | Перем БДД; //контекст фреймворка 1bdd 5 | 6 | // Метод выдает список шагов, реализованных в данном файле-шагов 7 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 8 | БДД = КонтекстФреймворкаBDD; 9 | 10 | ВсеШаги = Новый Массив; 11 | 12 | ВсеШаги.Добавить("ЯИщюПлатформуИСохранюНайденныйПуть"); 13 | 14 | Возврат ВсеШаги; 15 | КонецФункции 16 | 17 | // Реализация шагов 18 | 19 | // Процедура выполняется перед запуском каждого сценария 20 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 21 | 22 | КонецПроцедуры 23 | 24 | // Процедура выполняется после завершения каждого сценария 25 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 26 | 27 | КонецПроцедуры 28 | 29 | 30 | //Я ищю платформу и сохраню найденный путь "ПутьКПлатформе1С" 31 | Процедура ЯИщюПлатформуИСохранюНайденныйПуть(Знач ИмяПеременной) Экспорт 32 | 33 | ПутьКПлатформе1С = Платформа1С.ПутьКПредприятию("8.3"); 34 | 35 | Если Не ЗначениеЗаполнено(ПутьКПлатформе1С) Тогда 36 | ВызватьИсключение "Не найден путь к платформе 1С"; 37 | КонецЕсли; 38 | 39 | БДД.СохранитьВКонтекст(ИмяПеременной, ПутьКПлатформе1С); 40 | 41 | КонецПроцедуры 42 | 43 | Функция ОбернутьВКавычки(Знач Строка); 44 | Возврат """" + Строка + """"; 45 | КонецФункции -------------------------------------------------------------------------------- /packagedef: -------------------------------------------------------------------------------- 1 | 2 | Описание.Имя("gitsync") 3 | .Версия("3.6.1") 4 | .ВерсияСреды("1.9.0") 5 | .ЗависитОт("logos", "1.2.1") 6 | .ЗависитОт("tempfiles", "1.1.1") 7 | .ЗависитОт("v8runner", "1.9.1") 8 | .ЗависитОт("gitrunner", "1.7.1") 9 | .ЗависитОт("strings", "0.4.1") 10 | .ЗависитОт("1commands", "1.4.0") 11 | .ЗависитОт("json", "1.1.1") 12 | .ЗависитОт("fs", "1.0.0") 13 | .ЗависитОт("delegate", "0.2.0") 14 | .ЗависитОт("v8storage", "0.9.4") 15 | .ЗависитОт("reflector", "0.4.0") 16 | .ЗависитОт("opm", "0.15.3") 17 | .ЗависитОт("cli", "0.10.2") 18 | .ЗависитОт("cli-selector", "0.3.0") 19 | .ЗависитОт("configor", "0.7.0") 20 | .РазработкаЗависитОт("1bdd") 21 | .РазработкаЗависитОт("1testrunner") 22 | .РазработкаЗависитОт("asserts") 23 | .РазработкаЗависитОт("coverage") 24 | .РазработкаЗависитОт("1commands") 25 | .РазработкаЗависитОт("fs") 26 | .ВключитьФайл("src") 27 | .ВключитьФайл("docs") 28 | .ВключитьФайл("embedded_plugins") 29 | .ВключитьФайл("oscript_modules") 30 | .ВключитьФайл("readme.md") 31 | .ВключитьФайл("templates/temp.cfe") 32 | .ОпределяетКласс("МенеджерПлагинов", "src/core/Классы/МенеджерПлагинов.os") 33 | .ОпределяетКласс("МенеджерСинхронизации", "src/core/Классы/МенеджерСинхронизации.os") 34 | .ОпределяетКласс("ПакетнаяСинхронизация", "src/core/Классы/ПакетнаяСинхронизация.os") 35 | .ИсполняемыйФайл("src/cmd/gitsync.os"); 36 | -------------------------------------------------------------------------------- /features/cmd/step_definitions/ibconnection.os: -------------------------------------------------------------------------------- 1 | #Использовать v8runner 2 | #Использовать tempfiles 3 | 4 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 5 | 6 | 7 | Перем БДД; //контекст фреймворка 1bdd 8 | 9 | 10 | // Метод выдает список шагов, реализованных в данном файле-шагов 11 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 12 | БДД = КонтекстФреймворкаBDD; 13 | 14 | ВсеШаги = Новый Массив; 15 | 16 | ВсеШаги.Добавить("ЯСоздаюВременнуюБазуИСохраняюВПеременную"); 17 | 18 | Возврат ВсеШаги; 19 | КонецФункции 20 | 21 | // Реализация шагов 22 | 23 | 24 | // Процедура выполняется перед запуском каждого сценария 25 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 26 | 27 | 28 | 29 | КонецПроцедуры 30 | 31 | // Процедура выполняется после завершения каждого сценария 32 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 33 | 34 | КонецПроцедуры 35 | 36 | 37 | //Я создаю временную базу и сохраняю в переменную "ВременнаяБаза" 38 | Процедура ЯСоздаюВременнуюБазуИСохраняюВПеременную(Знач ИмяПеременной) Экспорт 39 | 40 | ПутьКВременнойБазе = ВременныеФайлы.СоздатьКаталог(); 41 | 42 | УправлениеКонфигуратором = Новый УправлениеКонфигуратором; 43 | УправлениеКонфигуратором.СоздатьФайловуюБазу(ПутьКВременнойБазе); 44 | 45 | БДД.СохранитьВКонтекст(ИмяПеременной, СтрШаблон("/F%1",ПутьКВременнойБазе)); 46 | 47 | КонецПроцедуры 48 | -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаPluginInstall.os: -------------------------------------------------------------------------------- 1 | #Использовать "../../core" 2 | 3 | Перем Лог; 4 | 5 | Процедура ОписаниеКоманды(Команда) Экспорт 6 | 7 | Команда.Опция("f file", Новый Массив, "Путь к плагину ( *.ospx)") 8 | .ТМассивСтрок() 9 | .ВОкружении("GITSYNC_INSTALL_PATH"); 10 | Команда.Аргумент("NAME", Новый Массив, "Имя пакета вида <ИмяПакета>@1.0.0>") 11 | .ТМассивСтрок() 12 | .ВОкружении("GITSYNC_INSTALL_PACKAGES"); 13 | 14 | Команда.Спек = "(-f... | NAME...)"; 15 | 16 | КонецПроцедуры 17 | 18 | Процедура ВыполнитьКоманду(Знач Команда) Экспорт 19 | 20 | Если ПараметрыПриложения.ЭтоСборкаEXE() Тогда 21 | 22 | Лог.Информация("Установка новых плагинов для собранного приложения в exe не доступна"); 23 | 24 | Возврат; 25 | 26 | КонецЕсли; 27 | 28 | 29 | ПакетыКУстановке = Команда.ЗначениеАргумента("NAME"); 30 | МассивФайловПлагинов = Команда.ЗначениеОпции("file"); 31 | 32 | МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов(); 33 | 34 | Для каждого ПутьКПлагину Из МассивФайловПлагинов Цикл 35 | 36 | Лог.Отладка("Устанавливаю плагин из файла: <%1>", ПутьКПлагину); 37 | МенеджерПлагинов.УстановитьФайлПлагин(ПутьКПлагину); 38 | 39 | КонецЦикла; 40 | 41 | Для каждого ИмяПакета Из ПакетыКУстановке Цикл 42 | 43 | МенеджерПлагинов.УстановитьПлагинПоИмени(ИмяПакета); 44 | 45 | КонецЦикла; 46 | 47 | КонецПроцедуры 48 | 49 | Лог = ПараметрыПриложения.Лог(); -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | 2 | pipeline { 3 | agent none 4 | options { 5 | buildDiscarder(logRotator(numToKeepStr: '7')) 6 | skipDefaultCheckout() 7 | } 8 | 9 | stages { 10 | stage('Тестирование кода пакета WIN') { 11 | 12 | agent { label 'windows' } 13 | 14 | steps { 15 | checkout scm 16 | 17 | script { 18 | if( fileExists ('tasks/test.os') ){ 19 | bat 'chcp 65001 > nul && oscript tasks/test.os' 20 | 21 | junit allowEmptyResults: true, testResults: 'tests.xml' 22 | junit allowEmptyResults: true, testResults: 'bdd-log.xml' 23 | } 24 | else 25 | echo 'no testing task' 26 | 27 | def scannerHome = tool 'sonar-scanner'; 28 | withSonarQubeEnv('silverbulleters') { 29 | sh "${scannerHome}/bin/sonar-scanner" 30 | } 31 | } 32 | 33 | } 34 | 35 | } 36 | 37 | /* stage('Тестирование кода пакета LINUX') { 38 | 39 | agent { label 'master' } 40 | 41 | steps { 42 | echo 'under development' 43 | } 44 | 45 | } 46 | */ 47 | 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /tasks/build.os: -------------------------------------------------------------------------------- 1 | #Использовать gitrunner 2 | #Использовать tempfiles 3 | 4 | Перем Лог; 5 | Перем КаталогПроекта; 6 | 7 | Процедура СобратьПакет(Знач ВыходнойКаталог, Знач ПутьКМанифестуСборки) 8 | 9 | КомандаOpm = Новый Команда; 10 | // КомандаOpm.УстановитьРабочийКаталог(Каталог); 11 | КомандаOpm.УстановитьКоманду("opm"); 12 | КомандаOpm.ДобавитьПараметр("build"); 13 | КомандаOpm.ДобавитьПараметр("-m"); 14 | КомандаOpm.ДобавитьПараметр(ПутьКМанифестуСборки); 15 | КомандаOpm.ДобавитьПараметр("-o"); 16 | КомандаOpm.ДобавитьПараметр(ВыходнойКаталог); 17 | КомандаOpm.ДобавитьПараметр(КаталогПроекта); 18 | КомандаOpm.ПоказыватьВыводНемедленно(Истина); 19 | 20 | КодВозврата = КомандаOpm.Исполнить(); 21 | 22 | Если КодВозврата <> 0 Тогда 23 | ВызватьИсключение КомандаOpm.ПолучитьВывод(); 24 | КонецЕсли; 25 | 26 | КонецПроцедуры 27 | 28 | Процедура ПолезнаяРабота() 29 | 30 | // КаталогСборки = ВременныеФайлы.СоздатьКаталог(); 31 | // КаталогУстановки = ВременныеФайлы.СоздатьКаталог(); 32 | 33 | ПутьКМанифестуСборки = ОбъединитьПути(КаталогПроекта, "build_packagedef"); 34 | 35 | СобратьПакет(КаталогПроекта, ПутьКМанифестуСборки); 36 | 37 | Лог.Информация("Пакет собран в каталог <%1>", КаталогПроекта); 38 | 39 | КонецПроцедуры 40 | 41 | КаталогПроекта = ОбъединитьПути(ТекущийСценарий().Каталог, ".."); 42 | Лог = Логирование.ПолучитьЛог("task.install-opm"); 43 | // Лог.УстановитьУровень(УровниЛОга.отладка); 44 | 45 | ПолезнаяРабота(); 46 | -------------------------------------------------------------------------------- /src/core/Классы/internal/files/Модули/РаботаСФайлами.os: -------------------------------------------------------------------------------- 1 | #Использовать json 2 | 3 | Функция ПрочитатьФайл(Знач ПутьКФайлу) Экспорт 4 | 5 | ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8", , , Ложь); 6 | ТекстФайла = ЧтениеТекста.Прочитать(); 7 | ЧтениеТекста.Закрыть(); 8 | 9 | Возврат ТекстФайла; 10 | 11 | КонецФункции 12 | 13 | Процедура ЗаписатьФайл(Знач ПутьКФайлу, Знач ТекстФайла) Экспорт 14 | 15 | ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу); 16 | ЗаписьТекста.Записать(ТекстФайла); 17 | ЗаписьТекста.Закрыть(); 18 | 19 | КонецПроцедуры 20 | 21 | Функция ОБъектВJson(Знач Объект, ПараметрыЗаписи = Неопределено) Экспорт 22 | 23 | Если ПараметрыЗаписи = Неопределено Тогда 24 | ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", ,,,,,, Истина); 25 | КонецЕсли; 26 | 27 | ЗаписьJSON = Новый ЗаписьJSON; 28 | ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи); 29 | ЗаписатьJSON(ЗаписьJSON, Объект); 30 | 31 | Возврат ЗаписьJSON.Закрыть(); 32 | 33 | КонецФункции 34 | 35 | Функция ОбъектИзJson(ТекстJSON, ЧитатьВСтруктуру = Ложь, ФорматДаты = Неопределено) Экспорт 36 | 37 | Если ФорматДаты = Неопределено Тогда 38 | ФорматДаты = ФорматДатыJSON.ISO; 39 | КонецЕсли; 40 | ЧтениеJSON = Новый ЧтениеJSON; 41 | ЧтениеJSON.УстановитьСтроку(ТекстJSON); 42 | 43 | Объект = ПрочитатьJSON(ЧтениеJSON, 44 | НЕ ЧитатьВСтруктуру,, 45 | ФорматДаты); 46 | ЧтениеJSON.Закрыть(); 47 | Возврат Объект; 48 | 49 | КонецФункции -------------------------------------------------------------------------------- /features/ПростыеКоманды.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Выполнение команды продукта 4 | 5 | Как разработчик 6 | Я хочу иметь возможность выполнять команды продукта 7 | Чтобы выполнять коллективную разработку приложения для OneScript 8 | 9 | Контекст: 10 | Допустим Я очищаю параметры команды "oscript" в контексте 11 | И я включаю отладку лога с именем "oscript.app.gitsync" 12 | # И я включаю отладку лога с именем "bdd" 13 | 14 | Сценарий: Получение версии продукта 15 | Когда Я выполняю команду "oscript" с параметрами "src/gitsync.os version" 16 | Тогда Я сообщаю вывод команды "oscript" 17 | Тогда я вижу в консоли строку подобно "(\d+\.){2}\d+" 18 | И Вывод команды "oscript" не содержит "GitSync v" 19 | И Код возврата команды "oscript" равен 0 20 | 21 | Сценарий: Получение помощи продукта 22 | Когда Я выполняю команду "oscript" с параметрами "src/gitsync.os help" 23 | Тогда я вижу в консоли строку подобно "GitSync\s+v(\d+\.){2}\d+" 24 | Тогда Вывод команды "oscript" содержит 25 | """ 26 | Возможные команды: 27 | """ 28 | И Код возврата команды "oscript" равен 0 29 | 30 | Сценарий: Вызов исполняемого файла без параметров 31 | Когда Я выполняю команду "oscript" с параметрами "src/gitsync.os" 32 | Тогда я вижу в консоли строку подобно "GitSync\s+v(\d+\.){2}\d+" 33 | Тогда Вывод команды "oscript" содержит 34 | """ 35 | ОШИБКА - Некорректные аргументы командной строки 36 | Возможные команды: 37 | """ 38 | И Код возврата команды "oscript" равен 5 39 | -------------------------------------------------------------------------------- /tests/fixtures/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "globals": { 3 | "storage-user": "Администратор", 4 | "storage-pwd": "", 5 | "git-path": "git", 6 | "temp-dir": "", 7 | "v8version": 8.3, 8 | "domain-email": "localhost", 9 | "lic-try-count": 5, 10 | "plugins": { 11 | "enable": [ 12 | "test", 13 | "test2" 14 | ], 15 | "disable": [ 16 | "test3" 17 | ] 18 | }, 19 | "plugins-config": { 20 | "git-url": "git-url", 21 | "push": true, 22 | "pull": true 23 | } 24 | }, 25 | "repositories": [ 26 | { 27 | "name": "<ТестовыйРепозиторий>", 28 | "path": "<КаталогХранилища1С_1>", 29 | "dir": "<ПутьКаталогаИсходников_1>", 30 | "plugins": { 31 | "more": [ 32 | "test3" 33 | ] 34 | }, 35 | "plugins-config": { 36 | "git-url": "git-url", 37 | "push": true, 38 | "pull": true 39 | } 40 | }, 41 | { 42 | "name": "<ТестовыйРепозиторий2>", 43 | "path": "<КаталогХранилища1С_2>", 44 | "dir": "<ПутьКаталогаИсходников_2>", 45 | "storage-user": "Администратор", 46 | "storage-pwd": "", 47 | "git-path": "git", 48 | "temp-dir": "", 49 | "v8version": 8.3, 50 | "domain-email": "localhost", 51 | "lic-try-count": 5 52 | } 53 | ] 54 | } -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаPluginsClear.os: -------------------------------------------------------------------------------- 1 | #Использовать "../../core" 2 | #Использовать fs 3 | 4 | Перем Лог; 5 | Перем КаталогиПредустановленныхПлагинов; 6 | 7 | Процедура ОписаниеКоманды(Команда) Экспорт 8 | 9 | Команда.Опция("a all", Ложь, "удаляет в том числе предустановленные плагины"); 10 | 11 | КонецПроцедуры 12 | 13 | Процедура ВыполнитьКоманду(Знач Команда) Экспорт 14 | 15 | Если ПараметрыПриложения.ЭтоСборкаEXE() Тогда 16 | 17 | Лог.Информация("Очистка плагинов для собранного приложения в exe не доступна"); 18 | 19 | Возврат; 20 | 21 | КонецЕсли; 22 | 23 | УдалитьПредустановленныеПлагины = Команда.ЗначениеОпции("-a"); 24 | 25 | КаталогПлагинов = ПараметрыПриложения.КаталогПлагинов(); 26 | 27 | Если УдалитьПредустановленныеПлагины Тогда 28 | ФС.ОбеспечитьПустойКаталог(КаталогПлагинов); 29 | Иначе 30 | 31 | МассивКаталогов = НайтиФайлы(КаталогПлагинов, ПолучитьМаскуВсеФайлы()); 32 | 33 | Для каждого ФайлКаталога Из МассивКаталогов Цикл 34 | 35 | Если НЕ ФайлКаталога.ЭтоКаталог() Тогда 36 | Продолжить; 37 | КонецЕсли; 38 | 39 | Если ЭтоКаталогПредустановленныхПлагинов(ФайлКаталога.ИмяБезРасширения) Тогда 40 | Продолжить; 41 | КонецЕсли; 42 | 43 | УдалитьФайлы(ФайлКаталога.ПолноеИмя); 44 | 45 | КонецЦикла; 46 | 47 | КонецЕсли; 48 | 49 | КонецПроцедуры 50 | 51 | Функция ЭтоКаталогПредустановленныхПлагинов(Знач ИмяБезРасширения) 52 | 53 | ИмяБезРасширения = НРег(ИмяБезРасширения); 54 | 55 | Возврат Не КаталогиПредустановленныхПлагинов.Найти(ИмяБезРасширения) = Неопределено; 56 | 57 | КонецФункции 58 | 59 | КаталогиПредустановленныхПлагинов = ПараметрыПриложения.ПредустановленныеПлагины(); 60 | -------------------------------------------------------------------------------- /src/core/Классы/internal/Классы/ИнтерфейсПлагинов.os: -------------------------------------------------------------------------------- 1 | #Использовать reflector 2 | 3 | Перем ОбъектИнтерфейс; // Объект.ИнтерфейсОбъекта - ссылка на класс <ИнтерфейсОбъекта> 4 | 5 | #Область Экспортные_методы 6 | 7 | // Возвращает подготовленный ИнтерфейсОбъекта 8 | // 9 | // Возвращаемое значение: 10 | // Объект.ИнтерфейсОбъекта - ссылка на класс <ИнтерфейсОбъекта> 11 | // 12 | Функция Интерфейс() Экспорт 13 | Возврат ОбъектИнтерфейс; 14 | КонецФункции 15 | 16 | // Выполняет проверку объекта на реализацию интерфейса 17 | // 18 | // Параметры: 19 | // ОбъектПроверки - Произвольный - произвольный объект для проверки 20 | // ВыдатьИсключение - Булево - признак необходимости выдать исключение 21 | // 22 | // Возвращаемое значение: 23 | // Булево - признак реализации интерфейса 24 | // 25 | Функция Реализует(ОбъектПроверки, ВыдатьИсключение = Ложь) Экспорт 26 | 27 | Рефлектор = Новый РефлекторОбъекта(ОбъектПроверки); 28 | Возврат Рефлектор.РеализуетИнтерфейс(ОбъектИнтерфейс, ВыдатьИсключение); 29 | 30 | КонецФункции 31 | 32 | #КонецОбласти 33 | 34 | #Область Вспомогательные_процедуры_и_функции 35 | 36 | Функция ПолучитьДоступныйИнтерфейсПлагинов() 37 | 38 | ДоступныйИнтерфейсПлагинов = Новый ИнтерфейсОбъекта(); 39 | 40 | МенеджерПодписок = Новый МенеджерПодписок; 41 | 42 | ДоступныйИнтерфейсПлагинов.ИзОбъектаИсключая(МенеджерПодписок, "УстановитьПодписчиков ВыполнитьПодпискуНаСобытие ПрисвоитьЗначенияПараметраПроцедуры ПриСозданииОбъекта"); 43 | 44 | Возврат ДоступныйИнтерфейсПлагинов; 45 | 46 | КонецФункции 47 | 48 | Процедура ПриСозданииОбъекта() 49 | ОбъектИнтерфейс = ПолучитьДоступныйИнтерфейсПлагинов(); 50 | КонецПроцедуры 51 | 52 | #КонецОбласти 53 | -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаPluginList.os: -------------------------------------------------------------------------------- 1 | #Использовать "../../core" 2 | 3 | Перем Лог; 4 | 5 | Процедура ОписаниеКоманды(Команда) Экспорт 6 | 7 | Команда.Опция("q quiet", Ложь, "вывод только названий плагинов"); 8 | Команда.Опция("a all", Ложь, "выводит все установленные плагины"); 9 | 10 | // Команда.Спек = "[-q | --quiet] ((-a | --all) | [NAME])"; 11 | 12 | КонецПроцедуры 13 | 14 | Процедура ВыполнитьКоманду(Знач Команда) Экспорт 15 | 16 | ВывестиВсеПлагины = Команда.ЗначениеОпции("all"); 17 | ВыводТолькоНазваний = Команда.ЗначениеОпции("quiet"); 18 | 19 | МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов(); 20 | ВсеПлагины = МенеджерПлагинов.ПолучитьИндексПлагинов(); 21 | 22 | Если НЕ ВыводТолькоНазваний Тогда 23 | Сообщить(СтрШаблон("Каталог плагинов: <%1>", ПараметрыПриложения.КаталогПлагинов())); 24 | Сообщить("Список плагинов: "); 25 | КонецЕсли; 26 | 27 | Для каждого КлючЗначение Из ВсеПлагины Цикл 28 | 29 | Плагин = КлючЗначение.Значение; 30 | 31 | Если НЕ ВывестиВсеПлагины Тогда 32 | Если НЕ Плагин.Включен() Тогда 33 | Продолжить; 34 | КонецЕсли; 35 | КонецЕсли; 36 | 37 | Если ВыводТолькоНазваний Тогда 38 | 39 | Сообщить(Плагин.Имя()); 40 | 41 | Иначе 42 | 43 | ВывестиОписаниеПлагина(Плагин); 44 | 45 | КонецЕсли; 46 | 47 | КонецЦикла; 48 | 49 | КонецПроцедуры 50 | 51 | Процедура ВывестиОписаниеПлагина(КлассПлагина); 52 | 53 | ШаблонНаименования = "%4 [%3] - %1 - %2"; 54 | ТекстВключен = ?(КлассПлагина.Включен(), " [on]", "[off]"); 55 | 56 | Сообщить(СтрШаблон(ШаблонНаименования, КлассПлагина.Имя(), КлассПлагина.Описание(), КлассПлагина.Версия(), ТекстВключен)); 57 | 58 | КонецПроцедуры 59 | 60 | Лог = ПараметрыПриложения.Лог(); -------------------------------------------------------------------------------- /features/cmd/step_definitions/test.plugin.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | #Использовать tempfiles 3 | 4 | Перем БДД; //контекст фреймворка 1bdd 5 | 6 | // Метод выдает список шагов, реализованных в данном файле-шагов 7 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 8 | БДД = КонтекстФреймворкаBDD; 9 | 10 | ВсеШаги = Новый Массив; 11 | 12 | ВсеШаги.Добавить("КоличествоКоммитовДолжноБыть"); 13 | 14 | Возврат ВсеШаги; 15 | КонецФункции 16 | 17 | // Реализация шагов 18 | 19 | // Процедура выполняется перед запуском каждого сценария 20 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 21 | 22 | КонецПроцедуры 23 | 24 | // Процедура выполняется после завершения каждого сценария 25 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 26 | // ВременныеФайлы.Удалить(); 27 | КонецПроцедуры 28 | 29 | //Количество коммитов должно быть "5" 30 | Процедура КоличествоКоммитовДолжноБыть(Знач ЧислоПроверки) Экспорт 31 | 32 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 33 | ПутьКаталогаИсходников = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников"); 34 | ГитРепозиторий.УстановитьРабочийКаталог(ПутьКаталогаИсходников); 35 | 36 | ПараметрыКоманды = Новый Массив; 37 | ПараметрыКоманды.Добавить("log"); 38 | ПараметрыКоманды.Добавить("--pretty=oneline"); 39 | ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); 40 | Вывод = ГитРепозиторий.ПолучитьВыводКоманды(); 41 | 42 | МассивСтрок = СтрРазделить(Вывод, Символы.ПС); 43 | 44 | КоличествоКоммитов = МассивСтрок.Количество(); 45 | 46 | Утверждения.ПроверитьРавенство(Число(ЧислоПроверки), КоличествоКоммитов, "Количество коммитов должно быть равно"); 47 | 48 | КонецПроцедуры 49 | -------------------------------------------------------------------------------- /features/core/step_definitions/test.plugin.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | #Использовать tempfiles 3 | 4 | Перем БДД; //контекст фреймворка 1bdd 5 | 6 | // Метод выдает список шагов, реализованных в данном файле-шагов 7 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 8 | БДД = КонтекстФреймворкаBDD; 9 | 10 | ВсеШаги = Новый Массив; 11 | 12 | ВсеШаги.Добавить("КоличествоКоммитовДолжноБыть"); 13 | 14 | Возврат ВсеШаги; 15 | КонецФункции 16 | 17 | // Реализация шагов 18 | 19 | // Процедура выполняется перед запуском каждого сценария 20 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 21 | 22 | КонецПроцедуры 23 | 24 | // Процедура выполняется после завершения каждого сценария 25 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 26 | // ВременныеФайлы.Удалить(); 27 | КонецПроцедуры 28 | 29 | //Количество коммитов должно быть "5" 30 | Процедура КоличествоКоммитовДолжноБыть(Знач ЧислоПроверки) Экспорт 31 | 32 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 33 | ПутьКаталогаИсходников = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников"); 34 | ГитРепозиторий.УстановитьРабочийКаталог(ПутьКаталогаИсходников); 35 | 36 | ПараметрыКоманды = Новый Массив; 37 | ПараметрыКоманды.Добавить("log"); 38 | ПараметрыКоманды.Добавить("--pretty=oneline"); 39 | ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); 40 | Вывод = ГитРепозиторий.ПолучитьВыводКоманды(); 41 | 42 | МассивСтрок = СтрРазделить(Вывод, Символы.ПС); 43 | 44 | КоличествоКоммитов = МассивСтрок.Количество(); 45 | 46 | Утверждения.ПроверитьРавенство(Число(ЧислоПроверки), КоличествоКоммитов, "Количество коммитов должно быть равно"); 47 | 48 | КонецПроцедуры 49 | -------------------------------------------------------------------------------- /features/cmd/extention.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Проверка работы с хранилищем расширения 4 | Как Пользователь 5 | Я хочу выполнить клонирование существующего репозитория гит 6 | Чтобы выполнять автоматическую выгрузку конфигураций из хранилища 7 | 8 | Контекст: Тестовый контекст 9 | Когда Я очищаю параметры команды "gitsync" в контексте 10 | И Я создаю новый объект ГитРепозиторий 11 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 12 | И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С" 13 | И я скопировал каталог тестового хранилища конфигурации расширения в каталог из переменной "КаталогХранилища1С" 14 | И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" 15 | И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" 16 | И Я создаю тестовой файл AUTHORS 17 | И Я записываю "0" в файл VERSION 18 | 19 | Сценарий: Простая синхронизация хранилища с git-репозиторием 20 | Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" 21 | И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" 22 | И Я добавляю параметр "-v" для команды "gitsync" 23 | И Я добавляю параметр "sync" для команды "gitsync" 24 | И Я добавляю параметр "-e test" для команды "gitsync" 25 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" 26 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" 27 | Когда Я выполняю команду "gitsync" 28 | Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" 29 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 30 | И Код возврата команды "gitsync" равен 0 -------------------------------------------------------------------------------- /features/cmd/step_definitions/extention.os: -------------------------------------------------------------------------------- 1 | #Использовать fs 2 | 3 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 4 | 5 | Перем БДД; //контекст фреймворка 1bdd 6 | 7 | 8 | // Метод выдает список шагов, реализованных в данном файле-шагов 9 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 10 | БДД = КонтекстФреймворкаBDD; 11 | 12 | ВсеШаги = Новый Массив; 13 | 14 | ВсеШаги.Добавить("ЯСкопировалКаталогТестовогоХранилищаКонфигурацииРасширенияВКаталогИзПеременной"); 15 | 16 | Возврат ВсеШаги; 17 | КонецФункции 18 | 19 | // Реализация шагов 20 | 21 | // Процедура выполняется перед запуском каждого сценария 22 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 23 | 24 | 25 | 26 | КонецПроцедуры 27 | 28 | // Процедура выполняется после завершения каждого сценария 29 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 30 | 31 | 32 | КонецПроцедуры 33 | 34 | 35 | //я скопировал каталог тестового хранилища конфигурации расширения в каталог из переменной "КаталогХранилища1С" 36 | Процедура ЯСкопировалКаталогТестовогоХранилищаКонфигурацииРасширенияВКаталогИзПеременной(Знач ИмяПеременной) Экспорт 37 | КаталогХранилища1С = БДД.ПолучитьИзКонтекста(ИмяПеременной); 38 | ФС.КопироватьСодержимоеКаталога(ПутьКВременномуФайлуХранилища1С(), КаталогХранилища1С); 39 | // КопироватьФайл(ПутьКВременномуФайлуХранилища1С(), ОбъединитьПути(КаталогХранилища1С, "1cv8ddb.1CD")); 40 | КонецПроцедуры 41 | 42 | Функция ПутьКВременномуФайлуХранилища1С() 43 | 44 | Возврат ОбъединитьПути(КаталогFixtures(), "extension_storage"); 45 | 46 | КонецФункции 47 | 48 | Функция КаталогFixtures() 49 | Возврат ОбъединитьПути(КаталогГитсинк(), "tests", "fixtures"); 50 | КонецФункции 51 | 52 | Функция КаталогГитсинк() 53 | Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..", "..", ".."); 54 | КонецФункции 55 | -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаPluginDisable.os: -------------------------------------------------------------------------------- 1 | #Использовать "../../core" 2 | #Использовать cli-selector 3 | 4 | Процедура ОписаниеКоманды(Команда) Экспорт 5 | 6 | Команда.Опция("a all", Ложь, "Отключить все включенные плагины") 7 | .ВОкружении("GITSYNC_DISABLE_ALL_PLUGINS"); 8 | 9 | Команда.Аргумент("PLUGIN", "", "Имя плагина") 10 | .ТМассивСтрок() 11 | .ВОкружении("GITSYNC_PLUGINS"); 12 | 13 | Команда.Спек = "[-a | --all] | [PLUGIN...]"; 14 | 15 | КонецПроцедуры 16 | 17 | Процедура ВыполнитьКоманду(Знач Команда) Экспорт 18 | 19 | ИменаПлагинов = Команда.ЗначениеАргумента("PLUGIN"); 20 | ВсеВключенные = Команда.ЗначениеОпции("all"); 21 | 22 | МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов(); 23 | 24 | Лог = ПараметрыПриложения.Лог(); 25 | Лог.Отладка("Отключение всех плагинов <%1>", ВсеВключенные); 26 | 27 | Если ВсеВключенные Тогда 28 | 29 | МенеджерПлагинов.ОтключитьВсеПлагины(); 30 | 31 | Иначе 32 | 33 | Если НЕ ЗначениеЗаполнено(ИменаПлагинов) Тогда 34 | ВсеПлагины = МенеджерПлагинов.ПолучитьИндексПлагинов(); 35 | ВыборВКонсоли = Новый ВыборВКонсоли("Выберите плагины к отключению:"); 36 | Для каждого Плагин Из ВсеПлагины Цикл 37 | Если Плагин.Значение.Включен() Тогда 38 | Представление = Плагин.Ключ; 39 | Иначе 40 | Представление = СтроковыеФункции.ДополнитьСтроку(Плагин.Ключ, 15, " ", "Справа") + " - отключен"; 41 | КонецЕсли; 42 | ВыборВКонсоли.ДобавитьЗначениеВыбора(Плагин.Ключ, Представление, , Плагин.Значение.Включен()); 43 | КонецЦикла; 44 | ИменаПлагинов = ВыборВКонсоли.Выбрать(); 45 | КонецЕсли; 46 | 47 | МенеджерПлагинов.ОтключитьПлагины(ИменаПлагинов); 48 | 49 | Если ЗначениеЗаполнено(ИменаПлагинов) Тогда 50 | Сообщить("Выключены плагины: " + СтрСоединить(ИменаПлагинов, ", ")); 51 | КонецЕсли; 52 | 53 | КонецЕсли; 54 | 55 | ПараметрыПриложения.ЗаписатьВключенныеПлагины(); 56 | 57 | КонецПроцедуры 58 | -------------------------------------------------------------------------------- /features/cmd/v8path.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Передача полного пути к платформе 1С 4 | Как Пользователь 5 | Я хочу иметь возможность указать не стандартный путь к платформе 1С 6 | Чтобы иметь возможность запускать синхронизацию с использованием платформы 1С установленной в произвольном каталоге 7 | 8 | Контекст: Тестовый контекст 9 | Когда Я очищаю параметры команды "gitsync" в контексте 10 | И Я создаю новый объект ГитРепозиторий 11 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 12 | И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С" 13 | И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" 14 | И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" 15 | И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" 16 | И Я ищю платформу и сохраню найденный путь "ПутьКПлатформе1С" 17 | И Я создаю тестовой файл AUTHORS 18 | И Я записываю "0" в файл VERSION 19 | 20 | Сценарий: Простая синхронизация хранилища с git-репозиторием 21 | Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" 22 | И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" 23 | И Я добавляю параметр "--v8-path" для команды "gitsync" из переменной "ПутьКПлатформе1С" 24 | И Я добавляю параметр "-v" для команды "gitsync" 25 | И Я добавляю параметр "sync" для команды "gitsync" 26 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" 27 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" 28 | Когда Я выполняю команду "gitsync" 29 | Тогда Вывод команды "gitsync" содержит "Используется путь к платформе 1С" 30 | И Вывод команды "gitsync" содержит "Завершена синхронизации с git" 31 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 32 | И Код возврата команды "gitsync" равен 0 -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаSetVersion.os: -------------------------------------------------------------------------------- 1 | 2 | Процедура ОписаниеКоманды(Команда) Экспорт 3 | 4 | Команда.Опция("c commit", Ложь, "закоммитить изменения в git").Флаг(); 5 | 6 | Команда.Аргумент("VERSION", "", "Номер версии для записи в файл.").ТСтрока(); 7 | Команда.Аргумент("WORKDIR", "", "Каталог исходников внутри локальной копии git-репозитория.") 8 | .ТСтрока() 9 | .ВОкружении("GITSYNC_WORKDIR") 10 | .Обязательный(Ложь) 11 | .ПоУмолчанию(ТекущийКаталог()); 12 | 13 | ПараметрыПриложения.ВыполнитьПодпискуПриРегистрацииКомандыПриложения(Команда); 14 | 15 | КонецПроцедуры 16 | 17 | Процедура ВыполнитьКоманду(Знач Команда) Экспорт 18 | 19 | Лог = ПараметрыПриложения.Лог(); 20 | 21 | НомерВерсии = Команда.ЗначениеАргумента("VERSION"); 22 | КаталогРабочейКопии = Команда.ЗначениеАргумента("WORKDIR"); 23 | 24 | ВызватьКоммит = Команда.ЗначениеОпции("commit"); 25 | 26 | ОбщиеПараметры = ПараметрыПриложения.Параметры(); 27 | МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов(); 28 | 29 | ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов(); 30 | 31 | Распаковщик = Новый МенеджерСинхронизации(); 32 | Распаковщик.ВерсияПлатформы(ОбщиеПараметры.ВерсияПлатформы) 33 | .ПутьКПлатформе(ОбщиеПараметры.ПутьКПлатформе) 34 | .ДоменПочтыПоУмолчанию(ОбщиеПараметры.ДоменПочты) 35 | .ИсполняемыйФайлГит(ОбщиеПараметры.ПутьКГит) 36 | .ПодпискиНаСобытия(ИндексПлагинов) 37 | .ПараметрыПодписокНаСобытия(Команда.ПараметрыКоманды()) 38 | .УровеньЛога(ПараметрыПриложения.УровеньЛога()); 39 | 40 | ФайлВерсий = Новый Файл(ОбъединитьПути(КаталогРабочейКопии, "VERSION")); 41 | Распаковщик.ЗаписатьФайлВерсийГит(ФайлВерсий.Путь, НомерВерсии); 42 | 43 | Если ВызватьКоммит Тогда 44 | ГитРепозиторий = Распаковщик.ПолучитьГитРепозиторий(КаталогРабочейКопии); 45 | ГитРепозиторий.ДобавитьФайлВИндекс(ФайлВерсий.ПолноеИмя); 46 | ГитРепозиторий.Закоммитить("Изменена версия в файле VERSION"); 47 | КонецЕсли; 48 | 49 | Лог.Информация("Версия установлена"); 50 | 51 | КонецПроцедуры // ВыполнитьКоманду 52 | -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаPluginEnable.os: -------------------------------------------------------------------------------- 1 | #Использовать "../../core" 2 | #Использовать cli-selector 3 | 4 | Перем Лог; 5 | 6 | Процедура ОписаниеКоманды(Команда) Экспорт 7 | 8 | Команда.Опция("a all", Ложь, "включить все установленные плагинов") 9 | .ВОкружении("GITSYNC_ENABLE_ALL_PLUGINS"); 10 | 11 | Команда.Аргумент("PLUGIN", "", "Имя установленного плагина") 12 | .ТМассивСтрок() 13 | .ВОкружении("GITSYNC_PLUGINS"); 14 | 15 | Команда.Спек = "[-a | --all] | [PLUGIN...]"; 16 | 17 | КонецПроцедуры 18 | 19 | Процедура ВыполнитьКоманду(Знач Команда) Экспорт 20 | 21 | ИменаПлагинов = Команда.ЗначениеАргумента("PLUGIN"); 22 | ВсеУстановленные = Команда.ЗначениеОпции("all"); 23 | 24 | МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов(); 25 | 26 | Если ВсеУстановленные Тогда 27 | МенеджерПлагинов.ВключитьВсеПлагины(); 28 | Иначе 29 | 30 | ВсеПлагины = МенеджерПлагинов.ПолучитьИндексПлагинов(); 31 | 32 | Если НЕ ЗначениеЗаполнено(ИменаПлагинов) Тогда 33 | ВыборВКонсоли = Новый ВыборВКонсоли("Выберите плагины к включению:"); 34 | Для каждого Плагин Из ВсеПлагины Цикл 35 | Если Плагин.Значение.Включен() Тогда 36 | Представление = СтроковыеФункции.ДополнитьСтроку(Плагин.Ключ, 15, " ", "Справа") + " - включен"; 37 | Иначе 38 | Представление = Плагин.Ключ; 39 | КонецЕсли; 40 | ВыборВКонсоли.ДобавитьЗначениеВыбора(Плагин.Ключ, Представление, , НЕ Плагин.Значение.Включен()); 41 | КонецЦикла; 42 | ИменаПлагинов = ВыборВКонсоли.Выбрать(); 43 | КонецЕсли; 44 | 45 | Для каждого Плагин Из ИменаПлагинов Цикл 46 | 47 | ИмяПлагина = СокрЛ(Плагин); 48 | НашлиПлагин = ВсеПлагины[ИмяПлагина]; 49 | 50 | Если НашлиПлагин = Неопределено Тогда 51 | Сообщить(СтрШаблон("Нашли не установленный плагин: %1", Плагин)); 52 | Продолжить; 53 | КонецЕсли; 54 | 55 | НашлиПлагин.Включить(); 56 | 57 | Сообщить("Включен плагин: "+ ИмяПлагина); 58 | 59 | КонецЦикла; 60 | 61 | КонецЕсли; 62 | 63 | ПараметрыПриложения.ЗаписатьВключенныеПлагины(); 64 | 65 | КонецПроцедуры 66 | 67 | Лог = ПараметрыПриложения.Лог(); -------------------------------------------------------------------------------- /features/cmd/step_definitions/init.os: -------------------------------------------------------------------------------- 1 | #Использовать asserts 2 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 3 | 4 | Перем БДД; //контекст фреймворка 1bdd 5 | 6 | // Метод выдает список шагов, реализованных в данном файле-шагов 7 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 8 | БДД = КонтекстФреймворкаBDD; 9 | 10 | ВсеШаги = Новый Массив; 11 | 12 | ВсеШаги.Добавить("ЯИнициализируюПустойРепозиторийВКаталогИзПеременной"); 13 | ВсеШаги.Добавить("ЯСоздаюКаталогSrcВременныйВКаталогеИзПеременнойИСохраняюЕгоВКонтекстВПеременной"); 14 | 15 | Возврат ВсеШаги; 16 | КонецФункции 17 | 18 | // Реализация шагов 19 | 20 | // Процедура выполняется перед запуском каждого сценария 21 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 22 | 23 | 24 | 25 | КонецПроцедуры 26 | 27 | // Процедура выполняется после завершения каждого сценария 28 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 29 | 30 | КонецПроцедуры 31 | 32 | //Я инициализирую пустой репозиторий в каталог из переменной "ПутьКаталогаИсходников" 33 | Процедура ЯИнициализируюПустойРепозиторийВКаталогИзПеременной(Знач ПутьКаталогаИсходников) Экспорт 34 | 35 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 36 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников"); 37 | ГитРепозиторий.УстановитьРабочийКаталог(ВременныйКаталог); 38 | ПараметрыКоманды = Новый Массив; 39 | ПараметрыКоманды.Добавить("init"); 40 | ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); 41 | 42 | КонецПроцедуры 43 | 44 | //Я создаю каталог src временный в каталоге из переменной "ПутьКаталогаИсходников" и сохраняю его в контекст в переменной "КаталогSRC" 45 | Процедура ЯСоздаюКаталогSrcВременныйВКаталогеИзПеременнойИСохраняюЕгоВКонтекстВПеременной(Знач ПутьКаталогаИсходников, Знач КаталогSRC) Экспорт 46 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников"); 47 | КаталогSRC = ОбъединитьПути(ВременныйКаталог, "src"); 48 | СоздатьКаталог(КаталогSRC); 49 | БДД.СохранитьВКонтекст("КаталогSRC", КаталогSRC); 50 | 51 | КонецПроцедуры 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /features/core/step_definitions/init.os: -------------------------------------------------------------------------------- 1 | #Использовать asserts 2 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 3 | 4 | Перем БДД; //контекст фреймворка 1bdd 5 | 6 | // Метод выдает список шагов, реализованных в данном файле-шагов 7 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 8 | БДД = КонтекстФреймворкаBDD; 9 | 10 | ВсеШаги = Новый Массив; 11 | 12 | ВсеШаги.Добавить("ЯИнициализируюПустойРепозиторийВКаталогИзПеременной"); 13 | ВсеШаги.Добавить("ЯСоздаюКаталогSrcВременныйВКаталогеИзПеременнойИСохраняюЕгоВКонтекстВПеременной"); 14 | 15 | Возврат ВсеШаги; 16 | КонецФункции 17 | 18 | // Реализация шагов 19 | 20 | // Процедура выполняется перед запуском каждого сценария 21 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 22 | 23 | 24 | 25 | КонецПроцедуры 26 | 27 | // Процедура выполняется после завершения каждого сценария 28 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 29 | 30 | КонецПроцедуры 31 | 32 | //Я инициализирую пустой репозиторий в каталог из переменной "ПутьКаталогаИсходников" 33 | Процедура ЯИнициализируюПустойРепозиторийВКаталогИзПеременной(Знач ПутьКаталогаИсходников) Экспорт 34 | 35 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 36 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников"); 37 | ГитРепозиторий.УстановитьРабочийКаталог(ВременныйКаталог); 38 | ПараметрыКоманды = Новый Массив; 39 | ПараметрыКоманды.Добавить("init"); 40 | ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); 41 | 42 | КонецПроцедуры 43 | 44 | //Я создаю каталог src временный в каталоге из переменной "ПутьКаталогаИсходников" и сохраняю его в контекст в переменной "КаталогSRC" 45 | Процедура ЯСоздаюКаталогSrcВременныйВКаталогеИзПеременнойИСохраняюЕгоВКонтекстВПеременной(Знач ПутьКаталогаИсходников, Знач КаталогSRC) Экспорт 46 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников"); 47 | КаталогSRC = ОбъединитьПути(ВременныйКаталог, "src"); 48 | СоздатьКаталог(КаталогSRC); 49 | БДД.СохранитьВКонтекст("КаталогSRC", КаталогSRC); 50 | 51 | КонецПроцедуры 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /src/core/Классы/internal/bindata/Классы/ЗагрузчикЗапакованныхФайловGitsync.os: -------------------------------------------------------------------------------- 1 | #Использовать tempfiles 2 | 3 | #Область ПрограммныйИнтерфейс 4 | 5 | Функция ПолучитьПутьКФайлу(Знач ИмяФайла) Экспорт 6 | 7 | Возврат ПолучитьВременныйПутьКФайлу(ИмяФайла); 8 | 9 | КонецФункции 10 | 11 | Функция ПолучитьВременныйПутьКФайлу(Знач ИмяФайла) Экспорт 12 | 13 | МенеджерЗапакованныхФайлов = Новый МенеджерЗапакованныхФайловGitsync; 14 | ИндексФайлов = МенеджерЗапакованныхФайлов.ПолучитьИндексФайлов(); 15 | 16 | ИмяКлассаФайла = ИндексФайлов[ИмяФайла]; 17 | 18 | Если ИмяКлассаФайла = Неопределено Тогда 19 | ВызватьИсключение СтрШаблон("Не удалось найти двоичные данные для файла <%1>", ИмяФайла); 20 | КонецЕсли; 21 | 22 | ФайлРаспаковки = Новый Файл(ИмяФайла); 23 | 24 | КлассФайла = Новый (ИмяКлассаФайла); 25 | 26 | ПутьКФайлу = ВременныеФайлы.НовоеИмяФайла(ФайлРаспаковки.Расширение); 27 | 28 | РаспаковатьДанные(ПутьКФайлу, КлассФайла); 29 | 30 | Возврат ПутьКФайлу; 31 | 32 | КонецФункции 33 | 34 | Функция ПолучитьХешФайла(Знач ИмяФайла) Экспорт 35 | 36 | МенеджерЗапакованныхФайлов = Новый МенеджерЗапакованныхФайловGitsync; 37 | ИндексФайлов = МенеджерЗапакованныхФайлов.ПолучитьИндексФайлов(); 38 | 39 | ИмяКлассаФайла = ИндексФайлов[ИмяФайла]; 40 | 41 | Если ИмяКлассаФайла = Неопределено Тогда 42 | ВызватьИсключение СтрШаблон("Не удалось найти двоичные данные для файла <%1>", ИмяФайла); 43 | КонецЕсли; 44 | 45 | ФайлРаспаковки = Новый Файл(ИмяФайла); 46 | 47 | КлассФайла = Новый (ИмяКлассаФайла); 48 | 49 | Возврат КлассФайла.Хеш() 50 | 51 | КонецФункции 52 | 53 | #КонецОбласти 54 | 55 | #Область Упакованные_файлы 56 | 57 | Процедура РаспаковатьДанные(Знач ПутьКФайлу, КлассФайла) 58 | 59 | ДвоичныеДанные = Base64Значение(КлассФайла.ДвоичныеДанные()); 60 | 61 | ОбеспечитьКаталог(ПутьКФайлу); 62 | 63 | ДвоичныеДанные.Записать(ПутьКФайлу); 64 | 65 | КонецПроцедуры 66 | 67 | Процедура ОбеспечитьКаталог(ПутьККаталогу) 68 | 69 | ВременныйКаталог = Новый Файл(ПутьККаталогу); 70 | 71 | Если ВременныйКаталог.Существует() Тогда 72 | Возврат; 73 | КонецЕсли; 74 | 75 | СоздатьКаталог(ВременныйКаталог.Путь); 76 | 77 | КонецПроцедуры 78 | 79 | #КонецОбласти 80 | -------------------------------------------------------------------------------- /src/core/Модули/ПараметрыСистемы.os: -------------------------------------------------------------------------------- 1 | /////////////////////////////////////////////////////////////////// 2 | // 3 | // Служебный модуль с набором служебных параметров приложения 4 | // 5 | // Структура модуля реализована в соответствии с рекомендациями 6 | // oscript-app-template (C) EvilBeaver 7 | // 8 | /////////////////////////////////////////////////////////////////// 9 | 10 | // ИмяПродукта 11 | // Возвращает имя продукта 12 | // 13 | // Возвращаемое значение: 14 | // Строка - Значение имени продукта 15 | // 16 | Функция ИмяПродукта() Экспорт 17 | 18 | Возврат "GitSync"; 19 | 20 | КонецФункции // ИмяПродукта 21 | 22 | // Возвращает идентификатор лога приложения 23 | // 24 | // Возвращаемое значение: 25 | // Строка - Значение идентификатора лога приложения 26 | // 27 | Функция ИмяЛогаСистемы() Экспорт 28 | 29 | Возврат "oscript.app." + ИмяПродукта(); 30 | 31 | КонецФункции // ИмяЛогаСистемы 32 | 33 | // ВерсияПродукта 34 | // Возвращает текущую версию продукта 35 | // 36 | // Возвращаемое значение: 37 | // Строка - Значение текущей версии продукта 38 | // 39 | Функция ВерсияПродукта() Экспорт 40 | 41 | Возврат "3.6.1"; 42 | 43 | КонецФункции // ВерсияПродукта() 44 | 45 | Процедура ПриРегистрацииКомандПриложения(Знач КлассыРеализацииКоманд) Экспорт 46 | 47 | КлассыРеализацииКоманд["help"] = "КомандаСправкаПоПараметрам"; 48 | КлассыРеализацииКоманд[ИмяКомандыВерсия()] = "КомандаVersion"; 49 | КлассыРеализацииКоманд["clone"] = "КомандаClone"; 50 | КлассыРеализацииКоманд["init"] = "КомандаInit"; 51 | КлассыРеализацииКоманд["set-version"] = "КомандаSetVersion"; 52 | КлассыРеализацииКоманд["all"] = "КомандаAll"; 53 | КлассыРеализацииКоманд["export"] = "КомандаExport"; 54 | КлассыРеализацииКоманд["sync"] = "КомандаSync"; 55 | 56 | КонецПроцедуры // ПриРегистрацииКомандПриложения 57 | 58 | Функция ИмяКомандыПоУмолчанию() Экспорт 59 | 60 | Возврат "sync"; 61 | 62 | КонецФункции // ИмяКомандыПоУмолчанию 63 | 64 | // Возвращает имя команды версия (ключ командной строки) 65 | // 66 | // Возвращаемое значение: 67 | // Строка - имя команды 68 | // 69 | Функция ИмяКомандыВерсия() Экспорт 70 | 71 | Возврат "version"; 72 | 73 | КонецФункции // ИмяКомандыВерсия 74 | -------------------------------------------------------------------------------- /features/core/sync.core.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Синхронизация хранилища конфигурации 1С и гит (команды sync) 4 | Как Пользователь 5 | Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища 6 | Чтобы автоматизировать свою работы с хранилищем с git 7 | 8 | Контекст: Тестовый контекст синхронизации 9 | Когда Я создаю новый объект ГитРепозиторий 10 | И Я создаю новый объект МенеджерСинхронизации 11 | И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С" 12 | И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" 13 | И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" 14 | И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" 15 | И Я создаю тестовой файл AUTHORS 16 | И Я записываю "0" в файл VERSION 17 | И Я включаю отладку лога с именем "oscript.app.gitsync.plugins.loader" 18 | И Я включаю отладку лога с именем "oscript.app.gitsync.plugins.event-subscriptions" 19 | 20 | Сценарий: Простая синхронизация хранилища с git-репозиторием 21 | Допустим Я устанавливаю авторизацию в хранилище пользователя "Администратор" с паролем "" 22 | И Я устанавливаю версию платформы "8.3" 23 | Когда Я выполняю выполняют синхронизацию 24 | Тогда Вывод лога содержит "Завершена синхронизации с git" 25 | 26 | Сценарий: Cинхронизация хранилища с git-репозиторием c плагинами 27 | Допустим Я устанавливаю авторизацию в хранилище пользователя "Администратор" с паролем "" 28 | И Я устанавливаю версию платформы "8.3" 29 | И Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов" 30 | И Я создаю новый МенеджерПлагинов 31 | И Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина" 32 | И Я устанавливаю файл плагина из переменной "ПутьКФайлуПлагина" 33 | И Я загружаю плагины из каталога в переменной "КаталогПлагинов" 34 | И Я подключаю плагины в МенеджерСинхронизации 35 | Когда Я выполняю выполняют синхронизацию 36 | Тогда Вывод лога содержит "Завершена синхронизации с git" 37 | И Вывод лога содержит "Вызвано событие <ПриАктивизации> для плагина " 38 | -------------------------------------------------------------------------------- /features/cmd/step_definitions/clone.os: -------------------------------------------------------------------------------- 1 | #Использовать tempfiles 2 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 3 | 4 | Перем БДД; //контекст фреймворка 1bdd 5 | 6 | 7 | // Метод выдает список шагов, реализованных в данном файле-шагов 8 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 9 | БДД = КонтекстФреймворкаBDD; 10 | 11 | ВсеШаги = Новый Массив; 12 | 13 | ВсеШаги.Добавить("ЯНаполняюBareРепозиторийИзПеременнойТестовымиДанными"); 14 | 15 | Возврат ВсеШаги; 16 | КонецФункции 17 | 18 | // Реализация шагов 19 | 20 | // Процедура выполняется перед запуском каждого сценария 21 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 22 | 23 | 24 | КонецПроцедуры 25 | 26 | // Процедура выполняется после завершения каждого сценария 27 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 28 | 29 | КонецПроцедуры 30 | 31 | 32 | //Я наполняю bare репозиторий из переменной "URLРепозитория" тестовыми данными 33 | Процедура ЯНаполняюBareРепозиторийИзПеременнойТестовымиДанными(Знач ПеременнаяURLРепозитория) Экспорт 34 | 35 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 36 | URLРепозитория = БДД.ПолучитьИзКонтекста(ПеременнаяURLРепозитория); 37 | 38 | ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); 39 | 40 | ГитРепозиторий.УстановитьРабочийКаталог(ВременныйКаталог); 41 | ГитРепозиторий.Инициализировать(); 42 | readme = ОбъединитьПути(ВременныйКаталог, "README.md"); 43 | ЗаписьТекста = Новый ЗаписьТекста(readme); 44 | ЗаписьТекста.ЗаписатьСтроку("TESTING"); 45 | ЗаписьТекста.Закрыть(); 46 | 47 | ПараметрыКоманды = Новый Массив; 48 | ПараметрыКоманды.Добавить("add"); 49 | ПараметрыКоманды.Добавить("--all"); 50 | ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); 51 | ГитРепозиторий.Закоммитить("init"); 52 | 53 | НастройкаОтправить = Новый НастройкаКомандыОтправить; 54 | НастройкаОтправить.УстановитьURLРепозиторияОтправки(URLРепозитория); 55 | НастройкаОтправить.ОтображатьПрогресс(); 56 | НастройкаОтправить.ПерезаписатьИсторию(); 57 | НастройкаОтправить.Отслеживать(); 58 | НастройкаОтправить.ПолнаяОтправка(); 59 | 60 | ГитРепозиторий.УстановитьНастройкуКомандыОтправить(НастройкаОтправить); 61 | 62 | ГитРепозиторий.Отправить(); 63 | 64 | ВременныеФайлы.БезопасноУдалитьФайл(ВременныйКаталог); 65 | 66 | КонецПроцедуры 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /features/core/step_definitions/clone.os: -------------------------------------------------------------------------------- 1 | #Использовать tempfiles 2 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 3 | 4 | Перем БДД; //контекст фреймворка 1bdd 5 | 6 | 7 | // Метод выдает список шагов, реализованных в данном файле-шагов 8 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 9 | БДД = КонтекстФреймворкаBDD; 10 | 11 | ВсеШаги = Новый Массив; 12 | 13 | ВсеШаги.Добавить("ЯНаполняюBareРепозиторийИзПеременнойТестовымиДанными"); 14 | 15 | Возврат ВсеШаги; 16 | КонецФункции 17 | 18 | // Реализация шагов 19 | 20 | // Процедура выполняется перед запуском каждого сценария 21 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 22 | 23 | 24 | 25 | КонецПроцедуры 26 | 27 | // Процедура выполняется после завершения каждого сценария 28 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 29 | 30 | КонецПроцедуры 31 | 32 | 33 | //Я наполняю bare репозиторий из переменной "URLРепозитория" тестовыми данными 34 | Процедура ЯНаполняюBareРепозиторийИзПеременнойТестовымиДанными(Знач ПеременнаяURLРепозитория) Экспорт 35 | 36 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 37 | URLРепозитория = БДД.ПолучитьИзКонтекста(ПеременнаяURLРепозитория); 38 | 39 | ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); 40 | 41 | ГитРепозиторий.УстановитьРабочийКаталог(ВременныйКаталог); 42 | ГитРепозиторий.Инициализировать(); 43 | readme = ОбъединитьПути(ВременныйКаталог, "README.md"); 44 | ЗаписьТекста = Новый ЗаписьТекста(readme); 45 | ЗаписьТекста.ЗаписатьСтроку("TESTING"); 46 | ЗаписьТекста.Закрыть(); 47 | 48 | ПараметрыКоманды = Новый Массив; 49 | ПараметрыКоманды.Добавить("add"); 50 | ПараметрыКоманды.Добавить("--all"); 51 | ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); 52 | ГитРепозиторий.Закоммитить("init"); 53 | 54 | НастройкаОтправить = Новый НастройкаКомандыОтправить; 55 | НастройкаОтправить.УстановитьURLРепозиторияОтправки(URLРепозитория); 56 | НастройкаОтправить.ОтображатьПрогресс(); 57 | НастройкаОтправить.ПерезаписатьИсторию(); 58 | НастройкаОтправить.Отслеживать(); 59 | НастройкаОтправить.ПолнаяОтправка(); 60 | 61 | ГитРепозиторий.УстановитьНастройкуКомандыОтправить(НастройкаОтправить); 62 | 63 | ГитРепозиторий.Отправить(); 64 | 65 | ВременныеФайлы.БезопасноУдалитьФайл(ВременныйКаталог); 66 | 67 | КонецПроцедуры 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | # MIT License 2 | # Copyright (C) 2020 Tymko Oleg and contributors 3 | # All rights reserved. 4 | 5 | name: Подготовка релиза и публикация в хабе 6 | # Только события создания и изменения релиза 7 | on: 8 | release: 9 | types: [published] 10 | jobs: 11 | build: 12 | runs-on: ${{ matrix.os }} 13 | strategy: 14 | fail-fast: false 15 | matrix: 16 | os: [ubuntu-latest] 17 | oscript_version: ['1.9.0'] 18 | package_mask: ["gitsync-*.ospx"] 19 | package_exe_mask: ["gitsync.exe"] 20 | steps: 21 | # Загрузка проекта 22 | - name: Актуализация 23 | uses: actions/checkout@v2 24 | 25 | # Установка OneScript конкретной версии 26 | - name: Установка OneScript 27 | uses: otymko/setup-onescript@v1.0 28 | env: 29 | ACTIONS_ALLOW_UNSECURE_COMMANDS: true 30 | with: 31 | version: ${{ matrix.oscript_version }} 32 | 33 | # Установка зависимостей пакета 34 | - name: Установка зависимостей 35 | run: | 36 | opm install opm 37 | opm install 38 | 39 | - name: Сборка пакета 40 | run: opm run build 41 | 42 | - name: Заливка артифактов 43 | uses: actions/upload-artifact@v2 44 | with: 45 | name: gitsync.ospx.zip 46 | path: ./${{ matrix.package_mask }} 47 | 48 | - name: Заливка в релиз 49 | uses: AButler/upload-release-assets@v1.0 50 | with: 51 | files: ./${{ matrix.package_mask }} 52 | repo-token: ${{ secrets.GITHUB_TOKEN }} 53 | 54 | - name: Публикация в hub.oscript.io 55 | shell: bash 56 | run: opm push -f ./${{ matrix.package_mask }} --token ${{ env.TOKEN }} -c stable 57 | env: 58 | TOKEN: ${{ secrets.OSHUB_TOKEN }} 59 | 60 | - name: Сборка пакета exe 61 | run: | 62 | opm run pack 63 | opm run make 64 | 65 | - name: Заливка артифактов 66 | uses: actions/upload-artifact@v2 67 | with: 68 | name: gitsync.exe.zip 69 | path: ./bin/${{ matrix.package_exe_mask }} 70 | 71 | - name: Заливка в релиз exe 72 | uses: AButler/upload-release-assets@v1.0 73 | with: 74 | files: ./bin/${{ matrix.package_exe_mask }} 75 | repo-token: ${{ secrets.GITHUB_TOKEN }} 76 | -------------------------------------------------------------------------------- /features/cmd/step_definitions/plugins-path.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | #Использовать fs 3 | 4 | Перем БДД; //контекст фреймворка 1bdd 5 | 6 | // Метод выдает список шагов, реализованных в данном файле-шагов 7 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 8 | БДД = КонтекстФреймворкаBDD; 9 | 10 | ВсеШаги = Новый Массив; 11 | 12 | ВсеШаги.Добавить("ВКаталогеЕстьФайлыПлагинов"); 13 | ВсеШаги.Добавить("ЯСоздаюКаталогПриложенияВРабочемКаталоге"); 14 | 15 | Возврат ВсеШаги; 16 | КонецФункции 17 | 18 | // Реализация шагов 19 | 20 | // Процедура выполняется перед запуском каждого сценария 21 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 22 | 23 | КонецПроцедуры 24 | 25 | // Процедура выполняется после завершения каждого сценария 26 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 27 | 28 | КонецПроцедуры 29 | 30 | 31 | //В каталоге "КаталогПлагинов" есть файлы плагинов 32 | Процедура ВКаталогеЕстьФайлыПлагинов(Знач ИмяКаталогПлагинов) Экспорт 33 | 34 | КаталогПлагинов = БДД.ПолучитьИзКонтекста(ИмяКаталогПлагинов); 35 | 36 | ФайлТестовогоПлагина= ОбъединитьПути(КаталогПлагинов, "test_plugin"); 37 | 38 | МассивФайлов = НайтиФайлы(КаталогПлагинов, ПолучитьМаскуВсеФайлы()); 39 | 40 | Если МассивФайлов.Количество() = 0 Тогда 41 | ВызватьИсключение "Файлы в каталоге плагинов не найдены"; 42 | КонецЕсли; 43 | 44 | СообщитьСписокФайловВКаталоге(КаталогПлагинов); 45 | 46 | Если НЕ ФС.КаталогСуществует(ФайлТестовогоПлагина) Тогда 47 | ВызватьИсключение "Каталог тестового плагина не найден"; 48 | КонецЕсли; 49 | 50 | // По умолчанию создается файл "plugins.json", но может быть и "gitsync-plugins.json" 51 | Если НЕ ФС.ФайлСуществует(ОбъединитьПути(КаталогПлагинов, "gitsync-plugins.json")) 52 | И НЕ ФС.ФайлСуществует(ОбъединитьПути(КаталогПлагинов, "plugins.json")) Тогда 53 | ВызватьИсключение "Файл настройки плагинов не найден"; 54 | КонецЕсли; 55 | 56 | 57 | КонецПроцедуры 58 | 59 | //Я создаю каталог приложения в рабочем каталоге 60 | Процедура ЯСоздаюКаталогПриложенияВРабочемКаталоге() Экспорт 61 | 62 | РабочийКаталог = ТекущийКаталог(); 63 | 64 | ФС.ОбеспечитьПустойКаталог(".gitsync"); 65 | 66 | КонецПроцедуры 67 | 68 | 69 | Процедура СообщитьСписокФайловВКаталоге(ПутьККаталогу) 70 | 71 | МассивФайлов = НайтиФайлы(ПутьККаталогу, ПолучитьМаскуВсеФайлы()); 72 | 73 | Для каждого Файл Из МассивФайлов Цикл 74 | Сообщить(Файл.ПолноеИмя); 75 | КонецЦикла; 76 | 77 | КонецПроцедуры 78 | -------------------------------------------------------------------------------- /src/core/Классы/internal/Классы/ЗагрузчикПлагинов.os: -------------------------------------------------------------------------------- 1 | #Использовать logos 2 | 3 | Перем НаборПлагиновСинхронизации; // Соответствие 4 | Перем Лог; // Объект - Логирование 5 | Перем ДоступныйИнтерфейсПлагинов; // Объект.ИнтерфейсОбъекта - интерфейс плагинов 6 | Перем КаталогПлагинов; // Строка - каталог пакетов плагинов 7 | 8 | #Область Экспортные_методы 9 | 10 | // Устанавливает каталог плагинов 11 | // 12 | // Параметры: 13 | // ПутьККаталогу - Строка - полный путь к каталогу плагинов 14 | // 15 | Процедура УстановитьКаталогПлагинов(Знач ПутьККаталогу) Экспорт 16 | КаталогПлагинов = ПутьККаталогу; 17 | КонецПроцедуры 18 | 19 | // Выполняет загрузки плагинов в индекс 20 | // 21 | Процедура ЗагрузитьПлагины() Экспорт 22 | 23 | ПодключениеПлагиновКаталога = Новый ПодключениеПлагиновКаталога; 24 | МассивПлагинов = ПодключениеПлагиновКаталога.ПодключитьПлагиныКаталога(КаталогПлагинов); 25 | Лог.Отладка("Количество плагинов <%1> каталога <%2>", МассивПлагинов.Количество(), КаталогПлагинов); 26 | 27 | СоздательНабораПлагиновСинхронизации = Новый СоздательНабораПлагиновСинхронизации; 28 | 29 | Для каждого ИмяКлассаПлагина Из МассивПлагинов Цикл 30 | 31 | СоздательНабораПлагиновСинхронизации.ДобавитьПлагин(ИмяКлассаПлагина); 32 | 33 | КонецЦикла; 34 | 35 | ПодключениеЗапакованныхПлагинов = Новый ПодключениеЗапакованныхПлагинов; 36 | МассивПлагинов = ПодключениеЗапакованныхПлагинов.ИндексПлагинов(); 37 | Лог.Отладка("Количество встроенных плагинов <%1>", МассивПлагинов.Количество()); 38 | 39 | Для каждого ИмяКлассаПлагина Из МассивПлагинов Цикл 40 | 41 | СоздательНабораПлагиновСинхронизации.ДобавитьПлагин(ИмяКлассаПлагина); 42 | 43 | КонецЦикла; 44 | 45 | НаборПлагиновСинхронизации = СоздательНабораПлагиновСинхронизации.Создать(); 46 | 47 | КонецПроцедуры 48 | 49 | // Возвращает загруженный индекс плагинов 50 | // 51 | // Возвращаемое значение: 52 | // Соответствие - набор плагинов 53 | // * ключ - Строка - имя плагина 54 | // * значение - Объект - ссылка на произвольный объект 55 | // 56 | Функция ИндексПлагинов() Экспорт 57 | Возврат НаборПлагиновСинхронизации; 58 | КонецФункции 59 | 60 | #КонецОбласти 61 | 62 | #Область Вспомогательные_процедуры_и_функции 63 | 64 | Процедура ПриСозданииОбъекта(Знач ВходящийКаталогПлагинов = Неопределено) 65 | 66 | КаталогПлагинов = ВходящийКаталогПлагинов; 67 | НаборПлагиновСинхронизации = Новый Соответствие(); 68 | Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync.plugins.loader"); 69 | 70 | КонецПроцедуры 71 | 72 | #КонецОбласти 73 | -------------------------------------------------------------------------------- /features/cmd/step_definitions/check.core.os: -------------------------------------------------------------------------------- 1 | #Использовать "../../../src/core/" 2 | 3 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 4 | 5 | Перем БДД; //контекст фреймворка 1bdd 6 | 7 | // Метод выдает список шагов, реализованных в данном файле-шагов 8 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 9 | БДД = КонтекстФреймворкаBDD; 10 | 11 | ВсеШаги = Новый Массив; 12 | 13 | ВсеШаги.Добавить("ЯСоздаюНовыйМенеджерподписок"); 14 | ВсеШаги.Добавить("ЯСоздаюНовыйИнтерфейсплагинов"); 15 | ВсеШаги.Добавить("МенеджераподписокРеализуетИнтерфейсаплагинов"); 16 | ВсеШаги.Добавить("ЯСоздаюНовыйТестовыйплагин"); 17 | ВсеШаги.Добавить("ТестовыйплагинРеализуетИнтерфейсаплагинов"); 18 | 19 | Возврат ВсеШаги; 20 | КонецФункции 21 | 22 | // Реализация шагов 23 | 24 | // Процедура выполняется перед запуском каждого сценария 25 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 26 | 27 | КонецПроцедуры 28 | 29 | // Процедура выполняется после завершения каждого сценария 30 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 31 | 32 | КонецПроцедуры 33 | 34 | //Я создаю новый МенеджерПодписок 35 | Процедура ЯСоздаюНовыйМенеджерподписок() Экспорт 36 | 37 | МенеджерПодписок = Новый МенеджерПодписок(Новый Соответствие); 38 | БДД.СохранитьВКонтекст("МенеджераПодписок", МенеджерПодписок); 39 | 40 | КонецПроцедуры 41 | 42 | //Я создаю новый ИнтерфейсПлагинов 43 | Процедура ЯСоздаюНовыйИнтерфейсплагинов() Экспорт 44 | 45 | ИнтерфейсПлагинов = Новый ИнтерфейсПлагинов; 46 | БДД.СохранитьВКонтекст("ИнтерфейсПлагинов", ИнтерфейсПлагинов); 47 | 48 | КонецПроцедуры 49 | 50 | //МенеджераПодписок реализует ИнтерфейсаПлагинов 51 | Процедура МенеджераподписокРеализуетИнтерфейсаплагинов() Экспорт 52 | 53 | МенеджераПодписок = БДД.ПолучитьИзКонтекста("МенеджераПодписок"); 54 | ИнтерфейсПлагинов = БДД.ПолучитьИзКонтекста("ИнтерфейсПлагинов"); 55 | 56 | ИнтерфейсПлагинов.Реализует(МенеджераПодписок, Истина); 57 | 58 | КонецПроцедуры 59 | 60 | //Я создаю новый ТестовыйПлагин 61 | Процедура ЯСоздаюНовыйТестовыйплагин() Экспорт 62 | ПутьКПлагину = ОбъединитьПути(ТекущийСценарий().Каталог, "testsata/test_plugin/src/Классы", "testPlugin.os"); 63 | ПодключитьСценарий(ПутьКПлагину, "ТестовыйПлагин"); 64 | 65 | БДД.СохранитьВКонтекст("ТестовыйПлагин", Новый ТестовыйПлагин); 66 | КонецПроцедуры 67 | 68 | //ТестовыйПлагин реализует ИнтерфейсаПлагинов 69 | Процедура ТестовыйплагинРеализуетИнтерфейсаплагинов() Экспорт 70 | ИнтерфейсПлагинов = БДД.ПолучитьИзКонтекста("ИнтерфейсПлагинов"); 71 | ТестовыйПлагин = БДД.ПолучитьИзКонтекста("ТестовыйПлагин"); 72 | 73 | ИнтерфейсПлагинов.Реализует(ТестовыйПлагин, Истина); 74 | КонецПроцедуры 75 | -------------------------------------------------------------------------------- /features/core/step_definitions/check.core.os: -------------------------------------------------------------------------------- 1 | #Использовать "../../../src/core/" 2 | 3 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 4 | 5 | Перем БДД; //контекст фреймворка 1bdd 6 | 7 | // Метод выдает список шагов, реализованных в данном файле-шагов 8 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 9 | БДД = КонтекстФреймворкаBDD; 10 | 11 | ВсеШаги = Новый Массив; 12 | 13 | ВсеШаги.Добавить("ЯСоздаюНовыйМенеджерподписок"); 14 | ВсеШаги.Добавить("ЯСоздаюНовыйИнтерфейсплагинов"); 15 | ВсеШаги.Добавить("МенеджераподписокРеализуетИнтерфейсаплагинов"); 16 | ВсеШаги.Добавить("ЯСоздаюНовыйТестовыйплагин"); 17 | ВсеШаги.Добавить("ТестовыйплагинРеализуетИнтерфейсаплагинов"); 18 | 19 | Возврат ВсеШаги; 20 | КонецФункции 21 | 22 | // Реализация шагов 23 | 24 | // Процедура выполняется перед запуском каждого сценария 25 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 26 | 27 | КонецПроцедуры 28 | 29 | // Процедура выполняется после завершения каждого сценария 30 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 31 | 32 | КонецПроцедуры 33 | 34 | //Я создаю новый МенеджерПодписок 35 | Процедура ЯСоздаюНовыйМенеджерподписок() Экспорт 36 | 37 | МенеджерПодписок = Новый МенеджерПодписок(Новый Соответствие); 38 | БДД.СохранитьВКонтекст("МенеджераПодписок", МенеджерПодписок); 39 | 40 | КонецПроцедуры 41 | 42 | //Я создаю новый ИнтерфейсПлагинов 43 | Процедура ЯСоздаюНовыйИнтерфейсплагинов() Экспорт 44 | 45 | ИнтерфейсПлагинов = Новый ИнтерфейсПлагинов; 46 | БДД.СохранитьВКонтекст("ИнтерфейсПлагинов", ИнтерфейсПлагинов); 47 | 48 | КонецПроцедуры 49 | 50 | //МенеджераПодписок реализует ИнтерфейсаПлагинов 51 | Процедура МенеджераподписокРеализуетИнтерфейсаплагинов() Экспорт 52 | 53 | МенеджераПодписок = БДД.ПолучитьИзКонтекста("МенеджераПодписок"); 54 | ИнтерфейсПлагинов = БДД.ПолучитьИзКонтекста("ИнтерфейсПлагинов"); 55 | 56 | ИнтерфейсПлагинов.Реализует(МенеджераПодписок, Истина); 57 | 58 | КонецПроцедуры 59 | 60 | //Я создаю новый ТестовыйПлагин 61 | Процедура ЯСоздаюНовыйТестовыйплагин() Экспорт 62 | ПутьКПлагину = ОбъединитьПути(ТекущийСценарий().Каталог, "testsata/test_plugin/src/Классы", "testPlugin.os"); 63 | ПодключитьСценарий(ПутьКПлагину, "ТестовыйПлагин"); 64 | 65 | БДД.СохранитьВКонтекст("ТестовыйПлагин", Новый ТестовыйПлагин); 66 | КонецПроцедуры 67 | 68 | //ТестовыйПлагин реализует ИнтерфейсаПлагинов 69 | Процедура ТестовыйплагинРеализуетИнтерфейсаплагинов() Экспорт 70 | ИнтерфейсПлагинов = БДД.ПолучитьИзКонтекста("ИнтерфейсПлагинов"); 71 | ТестовыйПлагин = БДД.ПолучитьИзКонтекста("ТестовыйПлагин"); 72 | 73 | ИнтерфейсПлагинов.Реализует(ТестовыйПлагин, Истина); 74 | КонецПроцедуры 75 | -------------------------------------------------------------------------------- /src/core/Классы/internal/Классы/ПодключениеПлагиновКаталога.os: -------------------------------------------------------------------------------- 1 | #Использовать logos 2 | 3 | Перем МассивПодключенныхПлагинов; 4 | Перем Лог; 5 | 6 | Функция ПодключитьПлагиныКаталога(Знач КаталогПлагинов) Экспорт 7 | 8 | МассивПодключенныхПлагинов = Новый Массив(); 9 | 10 | Если НРег(Лев(ТекущийСценарий().Источник, 10)) = "oscript://" Тогда 11 | Возврат МассивПодключенныхПлагинов; 12 | КонецЕсли; 13 | 14 | Лог.Отладка("Подключение плагинов из каталога <%1>", КаталогПлагинов); 15 | КаталогиПлагинов = НайтиФайлы(КаталогПлагинов, ПолучитьМаскуВсеФайлы(), Ложь); 16 | 17 | Для каждого Каталоги Из КаталогиПлагинов Цикл 18 | 19 | Если Не Каталоги.ЭтоКаталог() Тогда 20 | Продолжить; 21 | КонецЕсли; 22 | 23 | ЗагрузитьПлагин(Каталоги.ПолноеИмя); 24 | 25 | КонецЦикла; 26 | 27 | Возврат МассивПодключенныхПлагинов; 28 | 29 | КонецФункции 30 | 31 | Процедура ЗагрузитьПлагин(Знач Путь) 32 | 33 | Лог.Отладка("Загружаю плагины из каталога <%1>", Путь); 34 | 35 | ФайлМанифеста = Новый Файл(ОбъединитьПути(Путь, "lib.config")); 36 | 37 | Если ФайлМанифеста.Существует() Тогда 38 | Лог.Отладка("Обрабатываем по манифесту"); 39 | ДобавитьКлассыПлагинов(ФайлМанифеста.ПолноеИмя, Путь); 40 | Иначе 41 | Лог.Отладка("Плагины из каталога <%1> не могут быть загружены - не найден файл ", Путь); 42 | КонецЕсли; 43 | 44 | КонецПроцедуры 45 | 46 | Процедура ДобавитьКлассыПлагинов(Знач Файл, Знач Путь) 47 | 48 | Чтение = Новый ЧтениеXML; 49 | Чтение.ОткрытьФайл(Файл); 50 | Чтение.ПерейтиКСодержимому(); 51 | 52 | Если Чтение.ЛокальноеИмя <> "package-def" Тогда 53 | Чтение.Закрыть(); 54 | Возврат; 55 | КонецЕсли; 56 | 57 | Пока Чтение.Прочитать() Цикл 58 | 59 | Если Чтение.ТипУзла = ТипУзлаXML.Комментарий Тогда 60 | 61 | Продолжить; 62 | 63 | КонецЕсли; 64 | 65 | Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда 66 | 67 | Если Чтение.ЛокальноеИмя = "class" Тогда 68 | ФайлКласса = Новый Файл(ОбъединитьПути(Путь, Чтение.ЗначениеАтрибута("file"))); 69 | Если ФайлКласса.Существует() 70 | И ФайлКласса.ЭтоФайл() Тогда 71 | Идентификатор = Чтение.ЗначениеАтрибута("name"); 72 | Если Не ПустаяСтрока(Идентификатор) Тогда 73 | ПодключитьСценарий(ФайлКласса.ПолноеИмя, Идентификатор); 74 | МассивПодключенныхПлагинов.Добавить(Идентификатор); 75 | КонецЕсли; 76 | Иначе 77 | ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте"; 78 | КонецЕсли; 79 | 80 | Чтение.Прочитать(); // в конец элемента 81 | 82 | КонецЕсли; 83 | 84 | КонецЕсли; 85 | 86 | КонецЦикла; 87 | 88 | Чтение.Закрыть(); 89 | 90 | КонецПроцедуры 91 | 92 | Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync.plugins.loader"); 93 | МассивПодключенныхПлагинов = Новый Массив(); -------------------------------------------------------------------------------- /features/cmd/plugins-path.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Передача полного пути к платформе 1С 4 | Как Пользователь 5 | Я хочу иметь возможность указать каталог плагинов приложения 6 | Чтобы иметь возможность запускать синхронизацию с указанием каталога плагинов 7 | 8 | Контекст: Тестовый контекст 9 | Когда Я очищаю параметры команды "gitsync" в контексте 10 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 11 | И Я создаю временный каталог и сохраняю его в переменной "РабочийКаталог" 12 | И Я устанавливаю рабочей каталог из переменной "РабочийКаталог" 13 | 14 | Сценарий: Переменные среды 15 | Допустим Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина" 16 | И Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов" 17 | И Я устанавливаю переменную окружения "GITSYNC_PLUGINS_PATH" из переменной "КаталогПлагинов" 18 | И Я добавляю параметр "plugins" для команды "gitsync" 19 | И Я добавляю параметр "install" для команды "gitsync" 20 | И Я добавляю параметр "-f" для команды "gitsync" из переменной "ПутьКФайлуПлагина" 21 | Когда Я выполняю команду "gitsync" 22 | И Я очищаю параметры команды "gitsync" в контексте 23 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 24 | И Я добавляю параметр "plugins" для команды "gitsync" 25 | И Я добавляю параметр "enable" для команды "gitsync" 26 | И Я добавляю параметр "test_plugin" для команды "gitsync" 27 | Когда Я выполняю команду "gitsync" 28 | Тогда Вывод команды "gitsync" не содержит "Внешнее исключение" 29 | И Код возврата команды "gitsync" равен 0 30 | И В каталоге "КаталогПлагинов" есть файлы плагинов 31 | И Я очищаю значение переменных окружения 32 | |GITSYNC_PLUGINS_PATH| 33 | 34 | Сценарий: Каталог приложения 35 | Допустим Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина" 36 | И Я создаю каталог приложения в рабочем каталоге 37 | И Я добавляю параметр "plugins" для команды "gitsync" 38 | И Я добавляю параметр "install" для команды "gitsync" 39 | И Я добавляю параметр "-f" для команды "gitsync" из переменной "ПутьКФайлуПлагина" 40 | Когда Я выполняю команду "gitsync" 41 | И Я очищаю параметры команды "gitsync" в контексте 42 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 43 | И Я добавляю параметр "plugins" для команды "gitsync" 44 | И Я добавляю параметр "enable" для команды "gitsync" 45 | И Я добавляю параметр "test_plugin" для команды "gitsync" 46 | Когда Я выполняю команду "gitsync" 47 | Тогда Вывод команды "gitsync" не содержит "Внешнее исключение" 48 | И Код возврата команды "gitsync" равен 0 49 | И В каталоге "КаталогПлагинов" есть файлы плагинов 50 | 51 | -------------------------------------------------------------------------------- /tasks/get-plugins.os: -------------------------------------------------------------------------------- 1 | #Использовать gitrunner 2 | #Использовать tempfiles 3 | #Использовать fs 4 | 5 | Перем Лог; 6 | 7 | Процедура ПолучитьИсходники(Знач URLРепозитория, Знач Ветка, Знач Каталог) 8 | 9 | ГитРепозиторий = Новый ГитРепозиторий; 10 | 11 | ГитРепозиторий.УстановитьРабочийКаталог(Каталог); 12 | 13 | ГитРепозиторий.КлонироватьРепозиторий(URLРепозитория, Каталог); 14 | ГитРепозиторий.ПерейтиВВетку(Ветка); 15 | 16 | КонецПроцедуры 17 | 18 | Процедура СобратьПакет(Знач Каталог) 19 | 20 | Лог.Информация("Каталог сборки <%1>", Каталог); 21 | 22 | Лог.Информация("Сборка пакета библиотеки плагинов"); 23 | // Лог.Информация(" - путь к файлу манифеста сборки пакета <%1>", ПутьКМанифестуСборки); 24 | КомандаOpm = Новый Команда; 25 | КомандаOpm.УстановитьРабочийКаталог(Каталог); 26 | КомандаOpm.УстановитьКоманду("opm"); 27 | КомандаOpm.ДобавитьПараметр("build"); 28 | КомандаOpm.ДобавитьПараметр(Каталог); 29 | КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm"); 30 | 31 | КодВозврата = КомандаOpm.Исполнить(); 32 | 33 | Если КодВозврата <> 0 Тогда 34 | ВызватьИсключение КомандаOpm.ПолучитьВывод(); 35 | КонецЕсли; 36 | 37 | МассивФайлов = НайтиФайлы(Каталог, "*.ospx"); 38 | 39 | Если МассивФайлов.Количество() = 0 Тогда 40 | ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка создания пакета плагинов", "Не найден собранный файл плагина");; 41 | КонецЕсли; 42 | 43 | ФайлПлагина = МассивФайлов[0].ПолноеИмя; 44 | 45 | КаталогПроекта = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "embedded_plugins"); 46 | 47 | ФС.ОбеспечитьКаталог(КаталогПроекта); 48 | 49 | УдалитьФайлы(КаталогПроекта, "gitsync-plugins*.ospx"); 50 | 51 | ФайлПриемник = ОбъединитьПути(КаталогПроекта, МассивФайлов[0].Имя); 52 | 53 | КопироватьФайл(ФайлПлагина, ФайлПриемник); 54 | 55 | КонецПроцедуры 56 | 57 | Процедура ПолезнаяРабота(ИмяВетки) 58 | 59 | URLРепозитория = "https://github.com/khorevaa/gitsync-plugins.git"; 60 | КаталогСборки = ВременныеФайлы.СоздатьКаталог(); 61 | 62 | Лог.Информация("Установка плагинов из 63 | | репозиторий <%1> 64 | | ветки <%2>", URLРепозитория, ИмяВетки); 65 | 66 | ПолучитьИсходники(URLРепозитория, ИмяВетки, КаталогСборки); 67 | СобратьПакет(КаталогСборки); 68 | 69 | // При удалении временного каталога файлов исходников выводится ошибка 70 | // о невозможности удаления подкаталога Git и из-за этого не проходит тест 71 | Попытка 72 | УдалитьФайлы(КаталогСборки); 73 | Исключение 74 | ТекстОшибки = "Попытка удаления временного каталога "+КаталогСборки+" закончилась неудачей"; 75 | Лог.Предупреждение(ТекстОшибки); 76 | КонецПопытки; 77 | 78 | КонецПроцедуры 79 | 80 | Лог = Логирование.ПолучитьЛог("task.install-opm"); 81 | 82 | Если АргументыКоманднойСтроки.Количество() = 0 Тогда 83 | ИмяВетки = "master"; 84 | Иначе 85 | ИмяВетки = АргументыКоманднойСтроки[0]; 86 | КонецЕсли; 87 | 88 | ПолезнаяРабота(ИмяВетки); 89 | 90 | 91 | -------------------------------------------------------------------------------- /features/cmd/setversion.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Установка версии в файл версий (команды set-version) 4 | Как Пользователь 5 | Я хочу выполнять автоматическую установку последней синхронизированной версии с хранилищем 1С 6 | Чтобы автоматизировать свою работы с хранилищем с git 7 | 8 | Контекст: Тестовый контекст set-version 9 | Когда Я очищаю параметры команды "gitsync" в контексте 10 | И Я создаю новый объект ГитРепозиторий 11 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 12 | И Я создаю временный каталог и сохраняю его в контекст 13 | 14 | И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С" 15 | И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" 16 | И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" 17 | 18 | И Я сохраняю значение временного каталога в переменной "ПутьКаталогаИсходников" 19 | И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" 20 | И Я создаю тестовой файл AUTHORS 21 | И Я записываю "0" в файл VERSION 22 | 23 | Сценарий: Установка версии без коммита 24 | Допустим Я добавляю параметр "-v" для команды "gitsync" 25 | И Я добавляю параметр "set-version" для команды "gitsync" 26 | И Я добавляю параметр "1" для команды "gitsync" 27 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" 28 | Когда Я выполняю команду "gitsync" 29 | Тогда Вывод команды "gitsync" содержит "Версия установлена" 30 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 31 | И Код возврата команды "gitsync" равен 0 32 | 33 | Сценарий: Установка версии с коммитом 34 | Допустим Я добавляю параметр "-v" для команды "gitsync" 35 | И Я добавляю параметр "set-version" для команды "gitsync" 36 | И Я добавляю параметр "-c" для команды "gitsync" 37 | И Я добавляю параметр "1" для команды "gitsync" 38 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" 39 | Когда Я выполняю команду "gitsync" 40 | Тогда Вывод команды "gitsync" содержит "Версия установлена" 41 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 42 | И Код возврата команды "gitsync" равен 0 43 | 44 | Сценарий: Установка версии с использованием переменных окружения 45 | Допустим Я добавляю параметр "-v" для команды "gitsync" 46 | И Я добавляю параметр "set-version" для команды "gitsync" 47 | И Я добавляю параметр "1" для команды "gitsync" 48 | И Я устанавливаю переменную окружения "GITSYNC_WORKDIR" из переменной "ПутьКаталогаИсходников" 49 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" 50 | Когда Я выполняю команду "gitsync" 51 | Тогда Вывод команды "gitsync" содержит "Версия установлена" 52 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 53 | И Код возврата команды "gitsync" равен 0 54 | И Я очищаю значение переменных окружения 55 | |GITSYNC_WORKDIR| -------------------------------------------------------------------------------- /src/core/Классы/internal/Классы/УстановщикПлагинов.os: -------------------------------------------------------------------------------- 1 | #Использовать opm 2 | #Использовать logos 3 | 4 | Перем Лог; // Объект - логирование операций 5 | Перем ВнутреннийМенеджерУстановкиПакетов; // Объект.МенеджерУстановкиПакетов - для установки пакетов 6 | Перем КаталогПлагинов; // СТрока - каталог установки пакетов 7 | Перем КаталогЗависимостей; // Строка - каталог установки зависимостей пакетов 8 | 9 | #Область Экспортные_методы 10 | 11 | // Устанавливает каталог, в который будут установлены пакеты плагинов 12 | // 13 | // Параметры: 14 | // НовыйКаталогПлагинов - Строка - полный путь к каталогу установки пакетов плагинов 15 | // 16 | Процедура УстановитьКаталогПлагинов(Знач НовыйКаталогПлагинов) Экспорт 17 | 18 | КаталогПлагинов = НовыйКаталогПлагинов; 19 | ВнутреннийМенеджерУстановкиПакетов = Неопределено; 20 | 21 | КонецПроцедуры 22 | 23 | // Устанавливает каталог, в который будут установлены зависимости пакетов плагинов 24 | // 25 | // Параметры: 26 | // НовыйКаталогЗависимостей - Строка - полный путь к каталогу установки зависимостей пакетов плагинов 27 | // 28 | Процедура УстановитьКаталогЗависимостей(Знач НовыйКаталогЗависимостей) Экспорт 29 | 30 | КаталогЗависимостей = НовыйКаталогЗависимостей; 31 | ВнутреннийМенеджерУстановкиПакетов = Неопределено; 32 | 33 | КонецПроцедуры 34 | 35 | // Производит установке пакета плагина по файлу 36 | // 37 | // Параметры: 38 | // ПутьКФайлуПлагина - Строка - путь к файлу пакета плагинов 39 | // 40 | Процедура УстановитьФайлПлагина(Знач ПутьКФайлуПлагина) Экспорт 41 | 42 | ФайлПлагина = Новый Файл(ПутьКФайлуПлагина); 43 | 44 | Если Не ФайлПлагина.Существует() Тогда 45 | Лог.КритичнаяОшибка("Плагин не установлен. Файл <%1> плагина не найден", ПутьКФайлуПлагина); 46 | ВызватьИсключение ""; 47 | КонецЕсли; 48 | 49 | УстановщикПлагинов = ПолучитьМенеджерУстановкиПакетов(); 50 | УстановщикПлагинов.УстановитьПакетИзАрхива(ПутьКФайлуПлагина); 51 | 52 | КонецПроцедуры 53 | 54 | // Производит установку пакета плагина по имени с хаба 55 | // 56 | // Параметры: 57 | // ИмяПлагина - Строка - имя пакета плагинов на хабе 58 | // 59 | Процедура УстановитьПлагинПоИмени(Знач ИмяПлагина) Экспорт 60 | 61 | УстановщикПлагинов = ПолучитьМенеджерУстановкиПакетов(); 62 | УстановщикПлагинов.УстановитьПакет(ИмяПлагина); 63 | 64 | КонецПроцедуры 65 | 66 | #КонецОбласти 67 | 68 | #Область Вспомогательные_процедуры_и_функции 69 | 70 | Функция ПолучитьМенеджерУстановкиПакетов() 71 | 72 | Если ВнутреннийМенеджерУстановкиПакетов = Неопределено Тогда 73 | ВнутреннийМенеджерУстановкиПакетов = Новый МенеджерУстановкиПакетов("Локально", 74 | КаталогПлагинов, 75 | КаталогЗависимостей); 76 | 77 | КонецЕсли; 78 | 79 | Возврат ВнутреннийМенеджерУстановкиПакетов; 80 | 81 | КонецФункции 82 | 83 | Процедура ПриСозданииОбъекта() 84 | 85 | ДополнительныйКаталогБиблиотек = ПолучитьЗначениеСистемнойНастройки("lib.additional"); 86 | 87 | Если ЗначениеЗаполнено(ДополнительныйКаталогБиблиотек) Тогда 88 | КаталогЗависимостей = ДополнительныйКаталогБиблиотек; 89 | Иначе 90 | КаталогЗависимостей = ПолучитьЗначениеСистемнойНастройки("lib.system"); 91 | КонецЕсли; 92 | 93 | КонецПроцедуры 94 | 95 | #КонецОбласти 96 | 97 | Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync.plugins.installer"); -------------------------------------------------------------------------------- /features/cmd/plugins.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Работа c менеджером плагинов (команды plugins) 4 | Как Пользователь 5 | Я хочу выполнять автоматическую устоановка и загрузку плагинов к gitsync 6 | Чтобы автоматизировать свою работу с хранилищем с git 7 | 8 | Контекст: Тестовый контекст 9 | Когда Я очищаю параметры команды "gitsync" в контексте 10 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 11 | И Я создаю временный каталог и сохраняю его в переменной "РабочийКаталог" 12 | И Я устанавливаю рабочей каталог из переменной "РабочийКаталог" 13 | И Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина" 14 | И Я добавляю параметр "plugins" для команды "gitsync" 15 | И Я добавляю параметр "install" для команды "gitsync" 16 | И Я добавляю параметр "-f" для команды "gitsync" из переменной "ПутьКФайлуПлагина" 17 | И Я выполняю команду "gitsync" 18 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 19 | И Код возврата команды "gitsync" равен 0 20 | И Я очищаю параметры команды "gitsync" в контексте 21 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 22 | 23 | Сценарий: Вывод списка 24 | Допустим Я добавляю параметр "plugins" для команды "gitsync" 25 | И Я добавляю параметр "list" для команды "gitsync" 26 | Когда Я выполняю команду "gitsync" 27 | Тогда Вывод команды "gitsync" содержит "Список плагинов" 28 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 29 | И Код возврата команды "gitsync" равен 0 30 | 31 | Сценарий: Вывод списка всех установленных 32 | Допустим Я добавляю параметр "plugins" для команды "gitsync" 33 | И Я добавляю параметр "list" для команды "gitsync" 34 | И Я добавляю параметр "-a" для команды "gitsync" 35 | Когда Я выполняю команду "gitsync" 36 | Тогда Вывод команды "gitsync" содержит "Список плагинов" 37 | И Вывод команды "gitsync" содержит "test_plugin" 38 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 39 | И Код возврата команды "gitsync" равен 0 40 | 41 | Сценарий: Вывод списка всех установленных только названий 42 | Допустим Я добавляю параметр "plugins" для команды "gitsync" 43 | И Я добавляю параметр "list" для команды "gitsync" 44 | И Я добавляю параметр "-qa" для команды "gitsync" 45 | Когда Я выполняю команду "gitsync" 46 | Тогда Вывод команды "gitsync" не содержит "Список плагинов" 47 | И Вывод команды "gitsync" содержит "test_plugin" 48 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 49 | И Код возврата команды "gitsync" равен 0 50 | 51 | Сценарий: Включение плагина 52 | Допустим Я добавляю параметр "plugins" для команды "gitsync" 53 | И Я добавляю параметр "enable" для команды "gitsync" 54 | И Я добавляю параметр "test_plugin" для команды "gitsync" 55 | Когда Я выполняю команду "gitsync" 56 | Тогда Вывод команды "gitsync" содержит "Включен плагин" 57 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 58 | И Код возврата команды "gitsync" равен 0 59 | 60 | Сценарий: Выключение плагина 61 | Допустим Я добавляю параметр "plugins" для команды "gitsync" 62 | И Я добавляю параметр "disable" для команды "gitsync" 63 | И Я добавляю параметр "test_plugin" для команды "gitsync" 64 | Когда Я выполняю команду "gitsync" 65 | Тогда Вывод команды "gitsync" не содержит "Нашли не установленный плагин" 66 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 67 | И Код возврата команды "gitsync" равен 0 68 | -------------------------------------------------------------------------------- /tests/МенеджерПлагинов_test.os: -------------------------------------------------------------------------------- 1 | #использовать "../src/core/" 2 | #Использовать asserts 3 | #Использовать logos 4 | 5 | Перем юТест; 6 | Перем Лог; 7 | 8 | Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт 9 | 10 | юТест = Тестирование; 11 | 12 | ИменаТестов = Новый Массив; 13 | 14 | ИменаТестов.Добавить("ТестДолжен_ПроверитьИндексПлагинов"); 15 | ИменаТестов.Добавить("ТестДолжен_ПроверитьВключениеПлагинов"); 16 | ИменаТестов.Добавить("ТестДолжен_ПроверитьВыключениеПлагинов"); 17 | 18 | Возврат ИменаТестов; 19 | 20 | КонецФункции 21 | 22 | Процедура ТестДолжен_ПроверитьИндексПлагинов() Экспорт 23 | 24 | КаталогПлагинов = ВременныеФайлы.СоздатьКаталог(); 25 | 26 | МенеджерПлагинов = Новый МенеджерПлагинов(КаталогПлагинов); 27 | МенеджерПлагинов.УстановитьФайлПлагин(ОбъединитьПути(КаталогПроекта(), "tests", "test_plugin-0.0.1.ospx")); 28 | МенеджерПлагинов.ЗагрузитьПлагины(); 29 | 30 | ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов(); 31 | Ожидаем.Что(ИндексПлагинов.Количество(), "Количество плагинов должно быть равны").Равно(1); 32 | ВременныеФайлы.УдалитьФайл(КаталогПлагинов); 33 | 34 | КонецПроцедуры 35 | 36 | Процедура ТестДолжен_ПроверитьВключениеПлагинов() Экспорт 37 | 38 | КаталогПлагинов = ВременныеФайлы.СоздатьКаталог(); 39 | 40 | МенеджерПлагинов = Новый МенеджерПлагинов(КаталогПлагинов); 41 | МенеджерПлагинов.УстановитьФайлПлагин(ОбъединитьПути(КаталогПроекта(), "tests", "test_plugin-0.0.1.ospx")); 42 | МенеджерПлагинов.ЗагрузитьПлагины(); 43 | 44 | ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов(); 45 | Ожидаем.Что(ИндексПлагинов.Количество(), "Количество плагинов должно быть равны").Равно(1); 46 | 47 | МенеджерПлагинов.ВключитьПлагин("test_plugin"); 48 | 49 | Ожидаем.Что(ИндексПлагинов["test_plugin"].Включен(), "Плагин должен быть включен").ЭтоИстина(); 50 | 51 | ВременныеФайлы.УдалитьФайл(КаталогПлагинов); 52 | 53 | КонецПроцедуры 54 | 55 | Процедура ТестДолжен_ПроверитьВыключениеПлагинов() Экспорт 56 | 57 | КаталогПлагинов = ВременныеФайлы.СоздатьКаталог(); 58 | 59 | МенеджерПлагинов = Новый МенеджерПлагинов(КаталогПлагинов); 60 | МенеджерПлагинов.УстановитьФайлПлагин(ОбъединитьПути(КаталогПроекта(), "tests", "test_plugin-0.0.1.ospx")); 61 | МенеджерПлагинов.ЗагрузитьПлагины(); 62 | 63 | ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов(); 64 | Ожидаем.Что(ИндексПлагинов.Количество(), "Количество плагинов должно быть равны").Равно(1); 65 | 66 | МенеджерПлагинов.ВключитьПлагин("test_plugin"); 67 | 68 | Ожидаем.Что(ИндексПлагинов["test_plugin"].Включен(), "Плагин должен быть включен").ЭтоИстина(); 69 | 70 | МассивПлагинов = Новый Массив(); 71 | МассивПлагинов.Добавить("test_plugin"); 72 | 73 | МенеджерПлагинов.ОтключитьПлагины(МассивПлагинов); 74 | 75 | Ожидаем.Что(ИндексПлагинов["test_plugin"].Включен(), "Плагин должен быть выключен").ЭтоЛожь(); 76 | 77 | ВременныеФайлы.УдалитьФайл(КаталогПлагинов); 78 | 79 | КонецПроцедуры 80 | 81 | Функция КаталогПлагинов() 82 | 83 | КаталогТестов = ТекущийСценарий().Каталог; 84 | 85 | КаталогПлагинов = ОбъединитьПути(КаталогТестов, "fixtures", "КаталогПлагинов"); 86 | Файл = Новый Файл(КаталогПлагинов); 87 | Возврат Файл.ПолноеИмя; 88 | 89 | КонецФункции 90 | 91 | Функция КаталогПроекта() 92 | 93 | ПутьККаталогуПроекта = ОбъединитьПути(ТекущийСценарий().Каталог, ".."); 94 | Файл = Новый Файл(ПутьККаталогуПроекта); 95 | Возврат Файл.ПолноеИмя; 96 | 97 | КонецФункции 98 | 99 | Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync"); 100 | // Лог.УстановитьУровень(УровниЛога.Отладка); -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаSync.os: -------------------------------------------------------------------------------- 1 | 2 | Перем Лог; 3 | 4 | Процедура ОписаниеКоманды(Команда) Экспорт 5 | 6 | Команда.Опция("u storage-user", "", "пользователь хранилища конфигурации") 7 | .ТСтрока() 8 | .ВОкружении("GITSYNC_STORAGE_USER") 9 | .ПоУмолчанию("Администратор"); 10 | 11 | Команда.Опция("p storage-pwd", "", "пароль пользователя хранилища конфигурации") 12 | .ТСтрока() 13 | .ВОкружении("GITSYNC_STORAGE_PASSWORD GITSYNC_STORAGE_PWD"); 14 | 15 | Команда.Опция("e ext extension", "", "имя расширения для работы с хранилищем расширения") 16 | .ТСтрока() 17 | .ВОкружении("GITSYNC_EXTENSION"); 18 | 19 | Команда.Опция("d das disable-auto-src", Ложь, "Отключить автопоиск папки src") 20 | .ВОкружении("GITSYNC_DISABLE_AUTO_SRC"); 21 | 22 | Команда.Аргумент("PATH", "", "Путь к хранилищу конфигурации 1С.") 23 | .ТСтрока() 24 | .ВОкружении("GITSYNC_STORAGE_PATH"); 25 | Команда.Аргумент("WORKDIR", "", "Каталог исходников внутри локальной копии git-репозитория.") 26 | .ТСтрока() 27 | .ВОкружении("GITSYNC_WORKDIR") 28 | .Обязательный(Ложь) 29 | .ПоУмолчанию(ТекущийКаталог()); 30 | 31 | ПараметрыПриложения.ВыполнитьПодпискуПриРегистрацииКомандыПриложения(Команда); 32 | 33 | КонецПроцедуры 34 | 35 | Процедура ВыполнитьКоманду(Знач Команда) Экспорт 36 | 37 | Лог.Информация("Начало выполнение команды "); 38 | 39 | ПутьКХранилищу = Команда.ЗначениеАргумента("PATH"); 40 | КаталогРабочейКопии = Команда.ЗначениеАргумента("WORKDIR"); 41 | 42 | ПользовательХранилища = Команда.ЗначениеОпции("storage-user"); 43 | ПарольПользователяХранилища = Команда.ЗначениеОпции("storage-pwd"); 44 | ИмяРасширения = Команда.ЗначениеОпции("extension"); 45 | 46 | ПользовательИБ = Команда.ЗначениеОпции("ib-user"); 47 | ПарольПользователяИБ = Команда.ЗначениеОпции("ib-pwd"); 48 | СтрокаСоединенияИБ = Команда.ЗначениеОпции("ib-connection"); 49 | 50 | ФайлКаталогРабочейКопии = Новый Файл(КаталогРабочейКопии); 51 | КаталогРабочейКопии = ФайлКаталогРабочейКопии.ПолноеИмя; 52 | 53 | Лог.Отладка("ПутьКХранилищу = " + ПутьКХранилищу); 54 | Лог.Отладка("КаталогРабочейКопии = " + КаталогРабочейКопии); 55 | 56 | КаталогИсходников = КаталогРабочейКопии; 57 | 58 | АвтодополнениеПути = НЕ Команда.ЗначениеОпции("disable-auto-src"); 59 | Если АвтодополнениеПути Тогда 60 | МассивФайлов = НайтиФайлы(КаталогРабочейКопии, "src"); 61 | Если МассивФайлов.Количество() > 0 Тогда 62 | КаталогИсходников = МассивФайлов[0].ПолноеИмя; 63 | КонецЕсли; 64 | КонецЕсли; 65 | 66 | ОбщиеПараметры = ПараметрыПриложения.Параметры(); 67 | МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов(); 68 | 69 | ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов(); 70 | 71 | Распаковщик = Новый МенеджерСинхронизации(); 72 | Распаковщик.ВерсияПлатформы(ОбщиеПараметры.ВерсияПлатформы) 73 | .ПутьКПлатформе(ОбщиеПараметры.ПутьКПлатформе) 74 | .ДоменПочтыПоУмолчанию(ОбщиеПараметры.ДоменПочты) 75 | .ИсполняемыйФайлГит(ОбщиеПараметры.ПутьКГит) 76 | .УстановитьКонтекст(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ) 77 | .ПодпискиНаСобытия(ИндексПлагинов) 78 | .ПараметрыПодписокНаСобытия(Команда.ПараметрыКоманды()) 79 | .УровеньЛога(ПараметрыПриложения.УровеньЛога()) 80 | .ИмяРасширения(ИмяРасширения) 81 | .АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища) 82 | .РежимУдаленияВременныхФайлов(Истина) 83 | .Синхронизировать(КаталогИсходников, ПутьКХранилищу); 84 | 85 | Лог.Информация("Завершено выполнение команды "); 86 | 87 | КонецПроцедуры 88 | 89 | Лог = ПараметрыПриложения.Лог(); -------------------------------------------------------------------------------- /features/cmd/all.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Проверка работы команды all 4 | Как Пользователь 5 | Я хочу выполнить клонирование существующего репозитория гит 6 | Чтобы выполнять автоматическую выгрузку конфигураций из хранилища 7 | 8 | Структура сценария: <Сценарий> 9 | Дано Я очищаю параметры команды "gitsync" в контексте 10 | И Я создаю новый объект ГитРепозиторий 11 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 12 | 13 | # Подготовка хранилища 1 14 | И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С_1" 15 | И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С_1" 16 | И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников_1" 17 | И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников_1" 18 | И Я создаю тестовой файл AUTHORS в каталоге из переменной "ПутьКаталогаИсходников_1" 19 | И Я записываю "0" в файл VERSION в каталоге из переменной "ПутьКаталогаИсходников_1" 20 | 21 | # Подготовка хранилища 2 22 | И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С_2" 23 | И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С_2" 24 | И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников_2" 25 | И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников_2" 26 | И Я создаю тестовой файл AUTHORS в каталоге из переменной "ПутьКаталогаИсходников_2" 27 | И Я записываю "0" в файл VERSION в каталоге из переменной "ПутьКаталогаИсходников_2" 28 | 29 | # Подготовка хранилища 2 30 | И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилищаРасширения" 31 | И я скопировал каталог тестового хранилища конфигурации расширения в каталог из переменной "КаталогХранилищаРасширения" 32 | И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходниковРасширения" 33 | И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходниковРасширения" 34 | И Я создаю тестовой файл AUTHORS в каталоге из переменной "ПутьКаталогаИсходниковРасширения" 35 | И Я записываю "0" в файл VERSION в каталоге из переменной "ПутьКаталогаИсходниковРасширения" 36 | 37 | И Я создаю файл настройки из файла <ПутьКФайлуШаблона> и сохраняю в переменную "FILE" 38 | 39 | Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" 40 | И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" 41 | # И Я добавляю параметр "-v" для команды "gitsync" 42 | И Я добавляю параметр "all" для команды "gitsync" 43 | И Я добавляю параметр <ДопПараметрыЗапуска> для команды "gitsync" 44 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "FILE" 45 | Когда Я выполняю команду "gitsync" 46 | Тогда Вывод команды "gitsync" содержит <Результат> 47 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 48 | И Код возврата команды "gitsync" равен 0 49 | 50 | Примеры: 51 | | Сценарий | ПутьКФайлуШаблона | ДопПараметрыЗапуска | Результат | 52 | | Выполнение синхронизации по имени | tests/fixtures/default.yaml | --name ТестовыйРепозиторий | Наименование: <ТестовыйРепозиторий> | 53 | | Выполнение синхронизации с несколькими хранилищами | tests/fixtures/default.yaml | | Завершено выполнение команды | 54 | | Выполнение синхронизации расширениями | tests/fixtures/ext.yaml | | Завершено выполнение команды | 55 | -------------------------------------------------------------------------------- /features/cmd/clone.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Клонирование существующего репозитория гит (команда clone) 4 | Как Пользователь 5 | Я хочу выполнить клонирование существующего репозитория гит 6 | Чтобы выполнять автоматическую выгрузку конфигураций из хранилища 7 | 8 | Контекст: Тестовый контекст 9 | Когда Я очищаю параметры команды "gitsync" в контексте 10 | И Я создаю новый объект ГитРепозиторий 11 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 12 | И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С" 13 | И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" 14 | И Я создаю временный каталог и сохраняю его в переменной "URLРепозитория" 15 | И Я инициализирую bare репозиторий в каталоге из переменной "URLРепозитория" 16 | И Я наполняю bare репозиторий из переменной "URLРепозитория" тестовыми данными 17 | И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" 18 | И я включаю отладку лога с именем "oscript.app.gitsync" 19 | 20 | Сценарий: Клонирование репозитория гит и наполнение его служебными данными 21 | Допустим Я добавляю параметр "-v" для команды "gitsync" 22 | И Я добавляю параметр "clone" для команды "gitsync" 23 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" 24 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" 25 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" 26 | Когда Я выполняю команду "gitsync" 27 | Тогда Вывод команды "gitsync" содержит "Клонирование завершено" 28 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 29 | И Код возврата команды "gitsync" равен 0 30 | И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "AUTHORS" 31 | И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "VERSION" 32 | 33 | Сценарий: Клонирование репозитория с использованием текущего рабочего каталога 34 | Допустим Я добавляю параметр "-v" для команды "gitsync" 35 | И Я добавляю параметр "clone" для команды "gitsync" 36 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" 37 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" 38 | И Я устанавливаю рабочей каталог из переменной "ПутьКаталогаИсходников" 39 | Когда Я выполняю команду "gitsync" 40 | Тогда Вывод команды "gitsync" содержит "Клонирование завершено" 41 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 42 | И Код возврата команды "gitsync" равен 0 43 | И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "AUTHORS" 44 | И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "VERSION" 45 | 46 | Сценарий: Клонирование репозитория с использованием переменных окружения 47 | Допустим Я добавляю параметр "-v" для команды "gitsync" 48 | И Я добавляю параметр "clone" для команды "gitsync" 49 | И Я устанавливаю переменную окружения "GITSYNC_REPO_URL" из переменной "URLРепозитория" 50 | И Я устанавливаю переменную окружения "GITSYNC_STORAGE_PATH" из переменной "КаталогХранилища1С" 51 | И Я устанавливаю переменную окружения "GITSYNC_WORKDIR" из переменной "ПутьКаталогаИсходников" 52 | Когда Я выполняю команду "gitsync" 53 | Тогда Вывод команды "gitsync" содержит "Клонирование завершено" 54 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 55 | И Код возврата команды "gitsync" равен 0 56 | И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "AUTHORS" 57 | И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "VERSION" 58 | И Я очищаю значение переменных окружения 59 | |GITSYNC_STORAGE_PATH| 60 | |GITSYNC_WORKDIR| -------------------------------------------------------------------------------- /src/core/Классы/internal/Классы/ПараметрыПодписчиков.os: -------------------------------------------------------------------------------- 1 | #Использовать logos 2 | 3 | Перем ИндексПараметров; 4 | Перем Лог; 5 | 6 | #Область Экспортные_методы 7 | 8 | // Получает и возвращает значение из индекса параметров 9 | // 10 | // Параметры: 11 | // СтрокаИмениПараметра - Строка - имя параметра 12 | // допустимо указание нескольких имен к параметру через пробел (например, "config --config -c c") 13 | // ЗначениеПоУмолчанию - Произвольный - возвращаемое значение в случае отсутствия параметра после получения из индекса 14 | // 15 | // Возвращаемое значение: 16 | // Строка, Число, Булево, Массив, Соответствие, Неопределено - значение параметра 17 | // 18 | Функция Параметр(Знач СтрокаИмениПараметра, Знач ЗначениеПоУмолчанию = Неопределено) Экспорт 19 | 20 | МассивИменПараметра = СтрРазделить(СтрокаИмениПараметра, " ", Ложь); 21 | 22 | Для каждого ИмяПараметра Из МассивИменПараметра Цикл 23 | 24 | ПолученноеЗначение = ПолучитьЗначение(ИмяПараметра); 25 | 26 | Если Не ПолученноеЗначение = Неопределено Тогда 27 | Возврат ПреобразоватьКТипу(ПолученноеЗначение, ТипЗнч(ЗначениеПоУмолчанию)); 28 | КонецЕсли; 29 | 30 | КонецЦикла; 31 | 32 | Возврат ЗначениеПоУмолчанию; 33 | 34 | КонецФункции 35 | 36 | // Возвращает используемый индекс параметров 37 | // 38 | // Возвращаемое значение: 39 | // Соответствие - соответствие ключей и значение параметров 40 | // 41 | Функция ПолучитьПараметры() Экспорт 42 | 43 | Возврат ИндексПараметров; 44 | 45 | КонецФункции 46 | 47 | #КонецОбласти 48 | 49 | #Область Вспомогательные_процедуры_и_функции 50 | 51 | Функция ПреобразоватьКТипу(Знач ВходящееЗначение, Знач НужныйТип) 52 | 53 | Значение = ВходящееЗначение; 54 | 55 | Если ТипЗнч(ВходящееЗначение) = НужныйТип Тогда 56 | Возврат ВходящееЗначение; 57 | КонецЕсли; 58 | 59 | Если Тип("Число") = НужныйТип Тогда 60 | Значение = Число(ВходящееЗначение); 61 | ИначеЕсли Тип("Строка") = НужныйТип Тогда 62 | Значение = Строка(ВходящееЗначение); 63 | ИначеЕсли Тип("Булево") = НужныйТип Тогда 64 | Значение = Булево(ВходящееЗначение); 65 | ИначеЕсли Тип("Дата") = НужныйТип Тогда 66 | Значение = Дата(ВходящееЗначение); 67 | КонецЕсли; 68 | 69 | Возврат Значение; 70 | 71 | КонецФункции 72 | 73 | Функция ПолучитьЗначение(Знач ИмяПараметра) 74 | 75 | ПолученноеЗначение = ПолучитьЗначениеИзИндекса(ИмяПараметра); 76 | 77 | Если Не ПолученноеЗначение = Неопределено Тогда 78 | Возврат ПолученноеЗначение; 79 | КонецЕсли; 80 | 81 | ОчиститьОтТире(ИмяПараметра); 82 | 83 | ПолученноеЗначение = ПолучитьЗначениеИзИндекса(ИмяПараметра); 84 | 85 | Если Не ПолученноеЗначение = Неопределено Тогда 86 | Возврат ПолученноеЗначение; 87 | КонецЕсли; 88 | 89 | ДополнитьТире(ИмяПараметра); 90 | 91 | ПолученноеЗначение = ПолучитьЗначениеИзИндекса(ИмяПараметра); 92 | 93 | Возврат ПолученноеЗначение; 94 | 95 | КонецФункции 96 | 97 | Процедура ОчиститьОтТире(ИмяПараметра) 98 | 99 | НачальныйСимвол = 2; 100 | 101 | Пока СтрНачинаетсяС(ИмяПараметра, "-") Цикл 102 | ИмяПараметра = Сред(ИмяПараметра, НачальныйСимвол); 103 | КонецЦикла; 104 | 105 | КонецПроцедуры 106 | 107 | Процедура ДополнитьТире(ИмяПараметра) 108 | 109 | Если СтрДлина(ИмяПараметра) = 1 Тогда 110 | 111 | ИмяПараметра = СтрШаблон("-%1", ИмяПараметра); 112 | 113 | ИначеЕсли ВРег(ИмяПараметра) = ИмяПараметра Тогда 114 | // Это аргумент ничего не надо добавлять 115 | Иначе 116 | 117 | ИмяПараметра = СтрШаблон("--%1", ИмяПараметра); 118 | 119 | КонецЕсли; 120 | 121 | КонецПроцедуры 122 | 123 | Функция ПолучитьЗначениеИзИндекса(Знач ИмяПараметра) 124 | 125 | Возврат ИндексПараметров[ИмяПараметра]; 126 | 127 | КонецФункции 128 | 129 | Процедура ПриСозданииОбъекта(ВходящийИндексПараметров) 130 | 131 | ИндексПараметров = ВходящийИндексПараметров; 132 | Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync.plugins.params"); 133 | 134 | КонецПроцедуры 135 | 136 | #КонецОбласти -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаClone.os: -------------------------------------------------------------------------------- 1 | Перем Лог; 2 | 3 | Процедура ОписаниеКоманды(Команда) Экспорт 4 | 5 | Команда.Опция("u storage-user", "", "пользователь хранилища конфигурации") 6 | .ТСтрока() 7 | .ВОкружении("GITSYNC_STORAGE_USER") 8 | .ПоУмолчанию("Администратор"); 9 | Команда.Опция("p storage-pwd", "", "пароль пользователя хранилища конфигурации") 10 | .ТСтрока() 11 | .ВОкружении("GITSYNC_STORAGE_PASSWORD GITSYNC_STORAGE_PWD"); 12 | 13 | Команда.Опция("e ext extension", "", "имя расширения для работы с хранилищем расширения") 14 | .ТСтрока() 15 | .ВОкружении("GITSYNC_EXTENSION"); 16 | 17 | Команда.Аргумент("PATH", "", "Путь к хранилищу конфигурации 1С.") 18 | .ТСтрока() 19 | .ВОкружении("GITSYNC_STORAGE_PATH"); 20 | Команда.Аргумент("URL", "", "Адрес удаленного репозитория GIT.") 21 | .ТСтрока() 22 | .ВОкружении("GITSYNC_REPO_URL"); 23 | Команда.Аргумент("WORKDIR", "", "Каталог исходников внутри локальной копии git-репозитория.") 24 | .ТСтрока() 25 | .ВОкружении("GITSYNC_WORKDIR") 26 | .Обязательный(Ложь) 27 | .ПоУмолчанию(ТекущийКаталог()); 28 | 29 | ПараметрыПриложения.ВыполнитьПодпискуПриРегистрацииКомандыПриложения(Команда); 30 | 31 | КонецПроцедуры 32 | 33 | Процедура ВыполнитьКоманду(Знач Команда) Экспорт 34 | 35 | ПутьКХранилищу = Команда.ЗначениеАргумента("PATH"); 36 | КаталогРабочейКопии = Команда.ЗначениеАргумента("WORKDIR"); 37 | URLРепозитория = Команда.ЗначениеАргумента("URL"); 38 | 39 | ПользовательХранилища = Команда.ЗначениеОпции("storage-user"); 40 | ПарольПользователяХранилища = Команда.ЗначениеОпции("storage-pwd"); 41 | ИмяРасширения = Команда.ЗначениеОпции("extension"); 42 | 43 | ПользовательИБ = Команда.ЗначениеОпции("ib-user"); 44 | ПарольПользователяИБ = Команда.ЗначениеОпции("ib-pwd"); 45 | СтрокаСоединенияИБ = Команда.ЗначениеОпции("ib-connection"); 46 | 47 | Лог.Отладка("КаталогРабочейКопии: %1", КаталогРабочейКопии); 48 | 49 | Если ПустаяСтрока(URLРепозитория) Тогда 50 | 51 | ВызватьИсключение "Не указан URL репозитория"; 52 | 53 | КонецЕсли; 54 | 55 | КлонироватьРепозитарий(КаталогРабочейКопии, URLРепозитория); 56 | 57 | МассивФайлов = НайтиФайлы(КаталогРабочейКопии, "src"); 58 | КаталогИсходников = КаталогРабочейКопии; 59 | Если МассивФайлов.Количество() > 0 Тогда 60 | КаталогИсходников = МассивФайлов[0].ПолноеИмя; 61 | КонецЕсли; 62 | 63 | ОбщиеПараметры = ПараметрыПриложения.Параметры(); 64 | МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов(); 65 | 66 | ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов(); 67 | 68 | Распаковщик = Новый МенеджерСинхронизации(); 69 | Распаковщик.ВерсияПлатформы(ОбщиеПараметры.ВерсияПлатформы) 70 | .ПутьКПлатформе(ОбщиеПараметры.ПутьКПлатформе) 71 | .ДоменПочтыПоУмолчанию(ОбщиеПараметры.ДоменПочты) 72 | .ИсполняемыйФайлГит(ОбщиеПараметры.ПутьКГит) 73 | .УстановитьКонтекст(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ) 74 | .ИмяРасширения(ИмяРасширения) 75 | .ПодпискиНаСобытия(ИндексПлагинов) 76 | .ПараметрыПодписокНаСобытия(Команда.ПараметрыКоманды()) 77 | .УровеньЛога(ПараметрыПриложения.УровеньЛога()) 78 | .АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища); 79 | 80 | Распаковщик.НаполнитьКаталогРабочейКопииСлужебнымиДанными(КаталогИсходников, ПутьКХранилищу); 81 | 82 | Лог.Информация("Клонирование завершено"); 83 | 84 | КонецПроцедуры // ВыполнитьКоманду 85 | 86 | // Выполняет клонирование удаленного репо 87 | // 88 | Процедура КлонироватьРепозитарий(Знач КаталогЛокальнойКопии, Знач URLРепозитария) 89 | 90 | Лог.Отладка("Каталог локальной копии: <%1>", КаталогЛокальнойКопии); 91 | Лог.Отладка("URL репозитория: <%1>", URLРепозитария); 92 | 93 | ГитРепозиторий = Новый ГитРепозиторий; 94 | 95 | ОбщиеПараметры = ПараметрыПриложения.Параметры(); 96 | 97 | Если ЗначениеЗаполнено(ОбщиеПараметры.ПутьКГит) Тогда 98 | ГитРепозиторий.УстановитьПутьКГит(ОбщиеПараметры.ПутьКГит); 99 | КонецЕсли; 100 | 101 | ГитРепозиторий.УстановитьРабочийКаталог(КаталогЛокальнойКопии); 102 | ГитРепозиторий.КлонироватьРепозиторий(URLРепозитария, КаталогЛокальнойКопии); 103 | 104 | КонецПроцедуры 105 | 106 | Лог = ПараметрыПриложения.Лог(); -------------------------------------------------------------------------------- /tasks/pack.os: -------------------------------------------------------------------------------- 1 | Перем ИндексКлассов; 2 | Перем КаталогBin; 3 | Перем КаталогКлассов; 4 | Перем ПрефиксКлассов; 5 | Перем ИмяМенеджераФайлов; 6 | 7 | Процедура ВыполнитьЗапаковку() 8 | 9 | ТекущийКаталогЗадачи = ТекущийСценарий().Каталог; 10 | 11 | КаталогПроекта = Новый Файл(ОбъединитьПути(ТекущийКаталогЗадачи, "..")).ПолноеИмя; 12 | 13 | ПрефиксКлассов = "Gitsync"; 14 | 15 | КаталогКлассов = ОбъединитьПути(КаталогПроекта, "src", "core", ОбъединитьПути("Классы","internal","bindata","Классы")); 16 | 17 | КаталогBin = ОбъединитьПути(КаталогПроекта, "bin"); 18 | 19 | ИмяМенеджераФайлов = СтрШаблон("МенеджерЗапакованныхФайлов%1.os", ПрефиксКлассов); 20 | 21 | ИндексКлассов = Новый Соответствие; 22 | ОбработатьКаталог(КаталогBin, "*.cfe"); 23 | ОбработатьКаталог(ОбъединитьПути(КаталогПроекта, "docs"), "*.md"); 24 | 25 | ЗаписатьКлассИндексаЗапаковки(ИндексКлассов); 26 | 27 | КонецПроцедуры 28 | 29 | Процедура ЗаписатьКлассИндексаЗапаковки(ИндексКлассов) 30 | 31 | ТекстБлока = "Функция ПолучитьИндексФайлов() Экспорт 32 | | 33 | | ИндексФайлов = Новый Соответствие; 34 | |"; 35 | 36 | ШаблонДобавленияВИндекс = " ИндексФайлов.Вставить(""%1"", ""%2"");"; 37 | 38 | Для каждого ДанныеКласса Из ИндексКлассов Цикл 39 | 40 | ТекстБлока = ТекстБлока + СтрШаблон(ШаблонДобавленияВИндекс, ДанныеКласса.Ключ, ДанныеКласса.Значение) + Символы.ПС; 41 | 42 | КонецЦикла; 43 | 44 | ТекстБлока = ТекстБлока + " 45 | | Возврат ИндексФайлов; 46 | | 47 | |КонецФункции"; 48 | 49 | ФайлКлассаМенеджерЗапакованныхФайлов = ОбъединитьПути(КаталогКлассов, ИмяМенеджераФайлов); 50 | 51 | ЗаписьТекста = Новый ЗаписьТекста(ФайлКлассаМенеджерЗапакованныхФайлов); 52 | ЗаписьТекста.ЗаписатьСтроку(ТекстБлока); 53 | ЗаписьТекста.Закрыть(); 54 | 55 | Сообщить("Данные запакованы в классы"); 56 | 57 | КонецПроцедуры 58 | 59 | Процедура ОбработатьКаталог(Знач КаталогОбработки, Знач МаскаПоискаФайлов) 60 | 61 | МассивНайденныхФайлов = НайтиФайлы(КаталогОбработки, МаскаПоискаФайлов); 62 | 63 | Для каждого НайденныйФайл Из МассивНайденныхФайлов Цикл 64 | 65 | Если НайденныйФайл.ЭтоКаталог() Тогда 66 | Продолжить; 67 | КонецЕсли; 68 | 69 | ИмяФайла = СтрЗаменить(НайденныйФайл.ИмяБезРасширения, ".", "_"); 70 | ПолныйПутьКФайлу = НайденныйФайл.ПолноеИмя; 71 | 72 | ИмяКлассаФайла = СтрШаблон("%1_%2", ИмяФайла, ПрефиксКлассов); 73 | 74 | ПутьКФайлуКласса = ОбъединитьПути(КаталогКлассов, ИмяКлассаФайла + ".os"); 75 | ДанныеФайла = ПолучитBase64Строка(ПолныйПутьКФайлу); 76 | ХешСтрока = ПолучитьХешСтроку(ПолныйПутьКФайлу); 77 | 78 | ЗаписатьКласс(ПутьКФайлуКласса, НайденныйФайл.Имя, "1.0.0", ХешСтрока, ДанныеФайла); 79 | 80 | ИндексКлассов.Вставить(НайденныйФайл.Имя, ИмяКлассаФайла); 81 | 82 | КонецЦикла; 83 | 84 | 85 | КонецПроцедуры 86 | 87 | Функция ПолучитьХешСтроку(ПутьКФайлу) 88 | 89 | ХешФайла = Новый ХешированиеДанных(ХешФункция.MD5); 90 | ХешФайла.ДобавитьФайл(ПутьКФайлу); 91 | 92 | Возврат ХешФайла.ХешСуммаСтрокой; 93 | 94 | КонецФункции 95 | 96 | Процедура ЗаписатьКласс(ПутьКФайлуКласса, ИмяФайла, ВерсияФайла, ХешСтрока, ДанныеФайла) 97 | 98 | ШаблонТекст = " 99 | |/////////////////////////////////////////// 100 | |// ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ // 101 | |/////////////////////////////////////////// 102 | |// 103 | |// ФАЙЛ: <%1> 104 | |// 105 | | 106 | |// Возвращает версию запакованного файла 107 | |// 108 | |Функция Версия() Экспорт 109 | | Возврат ""%2""; 110 | |КонецФункции 111 | | 112 | |// Возвращает имя запакованного файла 113 | |// 114 | |Функция ИмяФайла() Экспорт 115 | | Возврат ""%1""; 116 | |КонецФункции 117 | | 118 | |// Возвращает хеш строку запакованного файла 119 | |// 120 | |Функция Хеш() Экспорт 121 | | Возврат ""%3""; 122 | |КонецФункции 123 | | 124 | |// Возвращает запакованные данные файла 125 | |// 126 | |Функция ДвоичныеДанные() Экспорт 127 | | ЗапакованныеДанные = ""%4""; 128 | | Возврат ЗапакованныеДанные; 129 | |КонецФункции 130 | | 131 | |"; 132 | 133 | ТекстКласса = СтрШаблон(ШаблонТекст, ИмяФайла, ВерсияФайла, ХешСтрока, ДанныеФайла); 134 | 135 | ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлуКласса); 136 | ЗаписьТекста.ЗаписатьСтроку(ТекстКласса); 137 | ЗаписьТекста.Закрыть(); 138 | 139 | КонецПроцедуры 140 | 141 | Функция ПолучитBase64Строка(ПутьКФайлу) 142 | 143 | ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлу); 144 | Строка = Base64Строка(ДвоичныеДанныеФайла); 145 | Возврат Строка; 146 | 147 | КонецФункции 148 | 149 | ВыполнитьЗапаковку(); -------------------------------------------------------------------------------- /features/cmd/ibconnection.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Синхронизация в конкретной информационной базе 4 | Как Пользователь 5 | Я хочу иметь возможность указать не стандартный путь к платформе 1С 6 | Чтобы иметь возможность запускать синхронизацию с указание конкретной информационной базы 7 | 8 | Контекст: Тестовый контекст 9 | Когда Я очищаю параметры команды "gitsync" в контексте 10 | И Я создаю новый объект ГитРепозиторий 11 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 12 | И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С" 13 | И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" 14 | И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" 15 | И Я создаю временную базу и сохраняю в переменную "ВременнаяБаза" 16 | 17 | Сценарий: Простая синхронизация хранилища с git-репозиторием 18 | Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" 19 | И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" 20 | И Я создаю тестовой файл AUTHORS 21 | И Я записываю "0" в файл VERSION 22 | И Я добавляю параметр "-v" для команды "gitsync" 23 | И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" 24 | И Я добавляю параметр "--ib-connection" для команды "gitsync" из переменной "ВременнаяБаза" 25 | И Я добавляю параметр "sync" для команды "gitsync" 26 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" 27 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" 28 | Когда Я выполняю команду "gitsync" 29 | Тогда Вывод команды "gitsync" содержит "Для синхронизации используется база" 30 | И Вывод команды "gitsync" содержит "Завершена синхронизации с git" 31 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 32 | И Код возврата команды "gitsync" равен 0 33 | 34 | Сценарий: Клонирование репозитория гит и наполнение его служебными данными 35 | Допустим Я создаю временный каталог и сохраняю его в переменной "URLРепозитория" 36 | И Я инициализирую bare репозиторий в каталоге из переменной "URLРепозитория" 37 | И Я наполняю bare репозиторий из переменной "URLРепозитория" тестовыми данными 38 | И Я добавляю параметр "-v" для команды "gitsync" 39 | И Я добавляю параметр "--ib-connection" для команды "gitsync" из переменной "ВременнаяБаза" 40 | И Я добавляю параметр "clone" для команды "gitsync" 41 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" 42 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" 43 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" 44 | Когда Я выполняю команду "gitsync" 45 | Тогда Вывод команды "gitsync" содержит "Клонирование завершено" 46 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 47 | И Код возврата команды "gitsync" равен 0 48 | И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "AUTHORS" 49 | И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "VERSION" 50 | И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "README.md" 51 | 52 | Сценарий: Инициализация каталога исходников в пустом каталоге внутри git-репозитория 53 | Допустим Я инициализирую пустой репозиторий в каталог из переменной "ПутьКаталогаИсходников" 54 | И Я создаю каталог src временный в каталоге из переменной "ПутьКаталогаИсходников" и сохраняю его в контекст в переменной "КаталогSRC" 55 | И Я добавляю параметр "--ib-connection" для команды "gitsync" из переменной "ВременнаяБаза" 56 | И Я добавляю параметр "init" для команды "gitsync" 57 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" 58 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогSRC" 59 | Когда Я выполняю команду "gitsync" 60 | Тогда Вывод команды "gitsync" содержит "Инициализация завершена" 61 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 62 | И Код возврата команды "gitsync" равен 0 63 | И В каталоге из переменной "КаталогSRC" создается файл или каталог "AUTHORS" 64 | И В каталоге из переменной "КаталогSRC" создается файл или каталог "VERSION" 65 | И В каталоге из переменной "КаталогSRC" не создается файл или каталог ".git" -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаInit.os: -------------------------------------------------------------------------------- 1 | 2 | 3 | Процедура ОписаниеКоманды(Команда) Экспорт 4 | 5 | Команда.Опция("u storage-user", "", "пользователь хранилища конфигурации") 6 | .ТСтрока() 7 | .ВОкружении("GITSYNC_STORAGE_USER") 8 | .ПоУмолчанию("Администратор"); 9 | 10 | Команда.Опция("p storage-pwd", "", "пароль пользователя хранилища конфигурации") 11 | .ТСтрока() 12 | .ВОкружении("GITSYNC_STORAGE_PASSWORD GITSYNC_STORAGE_PWD"); 13 | 14 | Команда.Опция("e ext extension", "", "имя расширения для работы с хранилищем расширения") 15 | .ТСтрока() 16 | .ВОкружении("GITSYNC_EXTENSION"); 17 | 18 | Команда.Аргумент("PATH", "", "Путь к хранилищу конфигурации 1С.") 19 | .ТСтрока() 20 | .ВОкружении("GITSYNC_STORAGE_PATH"); 21 | 22 | Команда.Аргумент("WORKDIR", "", "Адрес локального репозитория GIT. 23 | | Каталог исходников внутри локальной копии git-репозитория. По умолчанию текущий каталог") 24 | .ВОкружении("GITSYNC_WORKDIR") 25 | .Обязательный(Ложь) 26 | .ПоУмолчанию(ТекущийКаталог()); 27 | 28 | ПараметрыПриложения.ВыполнитьПодпискуПриРегистрацииКомандыПриложения(Команда); 29 | 30 | КонецПроцедуры 31 | 32 | Процедура ВыполнитьКоманду(Знач Команда) Экспорт 33 | 34 | Лог = ПараметрыПриложения.Лог(); 35 | 36 | ПутьКХранилищу = Команда.ЗначениеАргумента("PATH"); 37 | КаталогРабочейКопии = Команда.ЗначениеАргумента("WORKDIR"); 38 | ПользовательХранилища = Команда.ЗначениеОпции("storage-user"); 39 | ПарольПользователяХранилища = Команда.ЗначениеОпции("storage-pwd"); 40 | ИмяРасширения = Команда.ЗначениеОпции("extension"); 41 | 42 | ПользовательИБ = Команда.ЗначениеОпции("ib-user"); 43 | ПарольПользователяИБ = Команда.ЗначениеОпции("ib-pwd"); 44 | СтрокаСоединенияИБ = Команда.ЗначениеОпции("ib-connection"); 45 | 46 | // инициализировать с нуля 47 | ФайлКаталогРабочейКопии = Новый Файл(КаталогРабочейКопии); 48 | Если Не ФайлКаталогРабочейКопии.Существует() Тогда 49 | СоздатьКаталог(КаталогРабочейКопии); 50 | КонецЕсли; 51 | 52 | ЭтоКаталогГит = ПроверитьНаличиеРепозитарияГит(КаталогРабочейКопии); 53 | Если Не ЭтоКаталогГит Тогда 54 | 55 | ИнициализироватьРепозитарий(КаталогРабочейКопии); 56 | 57 | КонецЕсли; 58 | 59 | МассивФайлов = НайтиФайлы(КаталогРабочейКопии, "src"); 60 | КаталогИсходников = КаталогРабочейКопии; 61 | Если МассивФайлов.Количество() > 0 Тогда 62 | КаталогИсходников = МассивФайлов[0].ПолноеИмя; 63 | КонецЕсли; 64 | 65 | ОбщиеПараметры = ПараметрыПриложения.Параметры(); 66 | МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов(); 67 | 68 | ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов(); 69 | 70 | Распаковщик = Новый МенеджерСинхронизации(); 71 | Распаковщик.ВерсияПлатформы(ОбщиеПараметры.ВерсияПлатформы) 72 | .ПутьКПлатформе(ОбщиеПараметры.ПутьКПлатформе) 73 | .ДоменПочтыПоУмолчанию(ОбщиеПараметры.ДоменПочты) 74 | .ИсполняемыйФайлГит(ОбщиеПараметры.ПутьКГит) 75 | .УстановитьКонтекст(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ) 76 | .ПодпискиНаСобытия(ИндексПлагинов) 77 | .ПараметрыПодписокНаСобытия(Команда.ПараметрыКоманды()) 78 | .ИмяРасширения(ИмяРасширения) 79 | .УровеньЛога(ПараметрыПриложения.УровеньЛога()) 80 | .АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища); 81 | 82 | Распаковщик.НаполнитьКаталогРабочейКопииСлужебнымиДанными(КаталогИсходников, ПутьКХранилищу); 83 | 84 | Лог.Информация("Инициализация завершена"); 85 | 86 | КонецПроцедуры // ВыполнитьКоманду 87 | 88 | // Выполняет инициализацию репо 89 | // 90 | Процедура ИнициализироватьРепозитарий(Знач КаталогЛокальнойКопии) 91 | 92 | ГитРепозиторий = Новый ГитРепозиторий; 93 | ГитРепозиторий.УстановитьРабочийКаталог(КаталогЛокальнойКопии); 94 | ГитРепозиторий.Инициализировать(); 95 | 96 | КонецПроцедуры 97 | 98 | // Возвращает Истина, если каталог является каталогом или подкаталогом гит-репозитория, иначе возвращается Ложь. 99 | // 100 | Функция ПроверитьНаличиеРепозитарияГит(Знач КаталогЛокальнойКопии) 101 | 102 | ГитРепозиторий = Новый ГитРепозиторий; 103 | ГитРепозиторий.УстановитьРабочийКаталог(КаталогЛокальнойКопии); 104 | ГитРепозиторий.УстановитьТихийРежимРаботы(); 105 | 106 | ПараметрыЗапуска = Новый Массив; 107 | ПараметрыЗапуска.Добавить("rev-parse"); 108 | ПараметрыЗапуска.Добавить("--git-dir"); 109 | 110 | ГитРепозиторий.ВыполнитьКоманду(ПараметрыЗапуска); 111 | 112 | КодВозврата = ГитРепозиторий.ПолучитьКодВозврата(); 113 | 114 | Возврат КодВозврата = 0; 115 | 116 | КонецФункции -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаAll.os: -------------------------------------------------------------------------------- 1 | #Использовать configor 2 | 3 | Перем Лог; 4 | 5 | Процедура ОписаниеКоманды(Команда) Экспорт 6 | 7 | Команда.Опция("t timer", 0, "таймер повторения синхронизации, сек") 8 | .ТЧисло() 9 | .ВОкружении("GITSYNC_ALL_TIMER"); 10 | 11 | Команда.Опция("thread", 1, "количество потоков выполнения") 12 | .ТЧисло() 13 | .ВОкружении("GITSYNC_ALL_THREAD"); 14 | 15 | Команда.Опция("n name", "", "имя настройки пакетной синхронизации") 16 | .ТСтрока(); 17 | 18 | Команда.Опция("u storage-user", "", "пользователь хранилища конфигурации") 19 | .ТСтрока() 20 | .ВОкружении("GITSYNC_STORAGE_USER"); 21 | 22 | Команда.Опция("p storage-pwd", "", "пароль пользователя хранилища конфигурации") 23 | .ТСтрока() 24 | .ВОкружении("GITSYNC_STORAGE_PASSWORD GITSYNC_STORAGE_PWD"); 25 | 26 | Команда.Аргумент("CONFIG", "", "путь к файлу настройки пакетной синхронизации") 27 | .ТСтрока() 28 | .ВОкружении("GITSYNC_ALL_CONFIG") 29 | .Обязательный(Ложь) 30 | .ПоУмолчанию(ОбъединитьПути(ТекущийКаталог(), ПараметрыПриложения.ИмяФайлаНастройкиПакетнойСинхронизации())); 31 | 32 | ПараметрыПриложения.ВыполнитьПодпискуПриРегистрацииКомандыПриложения(Команда); 33 | 34 | КонецПроцедуры 35 | 36 | Процедура ВыполнитьКоманду(Знач Команда) Экспорт 37 | 38 | Лог.Информация("Начало выполнение команды "); 39 | 40 | ПутьКФайлуНастроек = Команда.ЗначениеАргумента("CONFIG"); 41 | 42 | ПользовательХранилища = Команда.ЗначениеОпции("storage-user"); 43 | ПарольПользователяХранилища = Команда.ЗначениеОпции("storage-pwd"); 44 | 45 | ИмяНастройкиСинхронизации = Команда.ЗначениеОпции("name"); 46 | КоличествоПотоковСинхронизации = Команда.ЗначениеОпции("thread"); 47 | 48 | ИнтервалПовторенияСинхронизации = Команда.ЗначениеОпции("timer"); 49 | 50 | ПользовательИБ = Команда.ЗначениеОпции("ib-user"); 51 | ПарольПользователяИБ = Команда.ЗначениеОпции("ib-pwd"); 52 | СтрокаСоединенияИБ = Команда.ЗначениеОпции("ib-connection"); 53 | 54 | ФайлНастроек = Новый Файл(ПутьКФайлуНастроек); 55 | Если Не ФайлНастроек.Существует() Тогда 56 | ВызватьИсключение СтрШаблон("Файл настроек <%1> не найден", ФайлНастроек.ПолноеИмя); 57 | КонецЕсли; 58 | 59 | ОбщиеПараметры = ПараметрыПриложения.Параметры(); 60 | 61 | ПараметрыФайлаНастроек = ПрочитатьФайлНастроек(ПутьКФайлуНастроек); 62 | 63 | Если ПараметрыФайлаНастроек.Количество() = 0 Тогда 64 | ВызватьИсключение "Файл настроек не содержит данных"; 65 | КонецЕсли; 66 | 67 | ПакетнаяСинхронизация = Новый ПакетнаяСинхронизация(); 68 | ПакетнаяСинхронизация 69 | .ТаймерПовторения(ИнтервалПовторенияСинхронизации) 70 | .КаталогПлагинов(ПараметрыПриложения.КаталогПлагинов()) 71 | .ВерсияПлатформы(ОбщиеПараметры.ВерсияПлатформы) 72 | .ДоменПочтыПоУмолчанию(ОбщиеПараметры.ДоменПочты) 73 | .ИсполняемыйФайлГит(ОбщиеПараметры.ПутьКГит) 74 | .ПутьКПлатформе(ОбщиеПараметры.ПутьКПлатформе) 75 | .РежимУдаленияВременныхФайлов(Истина) 76 | .АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища) 77 | ; 78 | 79 | ПакетнаяСинхронизация.ПрочитатьНастройки(ПараметрыФайлаНастроек); 80 | 81 | Если ЗначениеЗаполнено(ИмяНастройкиСинхронизации) Тогда 82 | ПакетнаяСинхронизация.ВыполнитьСинхронизациюПоНастройке(ИмяНастройкиСинхронизации, 83 | СтрокаСоединенияИБ, 84 | ПользовательИБ, 85 | ПарольПользователяИБ); 86 | Иначе 87 | ПакетнаяСинхронизация.ВыполнитьСинхронизацию(КоличествоПотоковСинхронизации, 88 | СтрокаСоединенияИБ, 89 | ПользовательИБ, 90 | ПарольПользователяИБ); 91 | КонецЕсли; 92 | 93 | Лог.Информация("Завершено выполнение команды "); 94 | 95 | КонецПроцедуры 96 | 97 | Функция ПрочитатьФайлНастроек(Знач ПутьКФайлуНастроек) 98 | 99 | Лог.Отладка("Чтение файла настроек начато"); 100 | 101 | ТекстФайла = РаботаСФайлами.ПрочитатьФайл(ПутьКФайлуНастроек); 102 | 103 | Лог.Отладка("Чтение файла настроек завершено"); 104 | 105 | ПрочитанныйПараметры = РаботаСФайлами.ОбъектИзJson(ТекстФайла); 106 | 107 | ЭтоОдинРепозиторий = ПрочитанныйПараметры.Получить("repositories") = Неопределено 108 | И ПрочитанныйПараметры.Получить("Репозитории") = Неопределено; 109 | 110 | Параметры = ПрочитанныйПараметры; 111 | 112 | Если ЭтоОдинРепозиторий Тогда 113 | 114 | Параметры = Новый Соответствие(); 115 | МассивРепозиториев = Новый Массив; 116 | МассивРепозиториев.Добавить(ПрочитанныйПараметры); 117 | 118 | Параметры.Вставить("repositories", МассивРепозиториев); 119 | 120 | КонецЕсли; 121 | 122 | Возврат Параметры; 123 | 124 | КонецФункции 125 | 126 | 127 | Лог = ПараметрыПриложения.Лог(); -------------------------------------------------------------------------------- /features/cmd/step_definitions/sync.core.os: -------------------------------------------------------------------------------- 1 | #Использовать tempfiles 2 | #Использовать 1commands 3 | #Использовать fs 4 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 5 | 6 | Перем БДД; //контекст фреймворка 1bdd 7 | 8 | // Метод выдает список шагов, реализованных в данном файле-шагов 9 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 10 | БДД = КонтекстФреймворкаBDD; 11 | 12 | ВсеШаги = Новый Массив; 13 | 14 | ВсеШаги.Добавить("ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной"); 15 | ВсеШаги.Добавить("ЯСоздаюНовыйМенеджерПлагинов"); 16 | ВсеШаги.Добавить("ЯСобираюТестовыйПлагинИСохраняюВКонтекст"); 17 | ВсеШаги.Добавить("ЯУстанавливаюФайлПлагинаИзПеременной"); 18 | ВсеШаги.Добавить("ЯЗагружаюПлагиныИзКаталогаВПеременной"); 19 | ВсеШаги.Добавить("ЯПодключаюПлагиныВМенеджерсинхронизации"); 20 | 21 | Возврат ВсеШаги; 22 | КонецФункции 23 | 24 | // Реализация шагов 25 | 26 | // Процедура выполняется перед запуском каждого сценария 27 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 28 | 29 | 30 | 31 | КонецПроцедуры 32 | 33 | // Процедура выполняется после завершения каждого сценария 34 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 35 | 36 | КонецПроцедуры 37 | 38 | //Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов" 39 | Процедура ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной(Знач ИмяПеременной) Экспорт 40 | 41 | ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); 42 | 43 | БДД.СохранитьВКонтекст(ИмяПеременной, ВременныйКаталог); 44 | 45 | КонецПроцедуры 46 | 47 | //Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина" 48 | Процедура ЯСобираюТестовыйПлагинИСохраняюВКонтекст(Знач ИмяПеременной) Экспорт 49 | 50 | ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); 51 | 52 | ФС.КопироватьСодержимоеКаталога(КаталогТестовогоПлагина(), ВременныйКаталог); 53 | 54 | Команда = Новый Команда; 55 | Команда.УстановитьКоманду("opm"); 56 | Команда.ДобавитьПараметр("build"); 57 | Команда.ДобавитьПараметр("--out"); 58 | Команда.ДобавитьПараметр(ВременныйКаталог); 59 | Команда.ДобавитьПараметр(ВременныйКаталог); 60 | КодВозврата = Команда.Исполнить(); 61 | 62 | Если НЕ КодВозврата = 0 Тогда 63 | ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка создания тестового плагина", Команда.ПолучитьВывод()); 64 | КонецЕсли; 65 | 66 | Сообщить(Команда.ПолучитьВывод()); 67 | 68 | МассивФайлов = НайтиФайлы(ВременныйКаталог, "*.ospx"); 69 | 70 | Если МассивФайлов.Количество() = 0 Тогда 71 | ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка создания тестового плагина", "Не найден собранный файл плагина"); 72 | КонецЕсли; 73 | 74 | ФайлПлагина = МассивФайлов[0].ПолноеИмя; 75 | 76 | БДД.СохранитьВКонтекст(ИмяПеременной, ФайлПлагина); 77 | 78 | КонецПроцедуры 79 | 80 | //Я создаю новый МенеджерПлагинов 81 | Процедура ЯСоздаюНовыйМенеджерПлагинов() Экспорт 82 | МенеджерПлагинов = Новый МенеджерПлагинов; 83 | 84 | БДД.СохранитьВКонтекст("МенеджерПлагинов", МенеджерПлагинов); 85 | КонецПроцедуры 86 | 87 | //Я загружаю плагины из каталога в переменной "КаталогПлагинов" 88 | Процедура ЯЗагружаюПлагиныИзКаталогаВПеременной(Знач ИмяПеременнойКаталога) Экспорт 89 | 90 | МенеджерПлагинов = БДД.ПолучитьИзКонтекста("МенеджерПлагинов"); 91 | КаталогПлагинов = БДД.ПолучитьИзКонтекста(ИмяПеременнойКаталога); 92 | 93 | МенеджерПлагинов.УстановитьКаталогПлагинов(КаталогПлагинов); 94 | МенеджерПлагинов.ЗагрузитьПлагины(); 95 | 96 | МенеджерПлагинов.ВключитьПлагин("test_plugin"); 97 | 98 | КонецПроцедуры 99 | 100 | //Я подключаю плагины в МенеджерСинхронизации 101 | Процедура ЯПодключаюПлагиныВМенеджерсинхронизации() Экспорт 102 | 103 | МенеджерПлагинов = БДД.ПолучитьИзКонтекста("МенеджерПлагинов"); 104 | 105 | ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов(); 106 | 107 | МенеджерСинхронизации = БДД.ПолучитьИзКонтекста("МенеджерСинхронизации"); 108 | МенеджерСинхронизации.ПодпискиНаСобытия(ИндексПлагинов); 109 | МенеджерСинхронизации.ПараметрыПодписокНаСобытия(Новый Соответствие); 110 | 111 | КонецПроцедуры 112 | 113 | //Я устанавливаю файл плагина из переменной "ПутьКФайлуПлагина" 114 | Процедура ЯУстанавливаюФайлПлагинаИзПеременной(Знач ПутьКФайлуПлагина) Экспорт 115 | 116 | КаталогПлагинов = БДД.ПолучитьИзКонтекста("КаталогПлагинов"); 117 | ФайлПлагина = БДД.ПолучитьИзКонтекста(ПутьКФайлуПлагина); 118 | МенеджерПлагинов = БДД.ПолучитьИзКонтекста("МенеджерПлагинов"); 119 | МенеджерПлагинов.УстановитьКаталогПлагинов(КаталогПлагинов); 120 | МенеджерПлагинов.УстановитьФайлПлагин(ФайлПлагина); 121 | 122 | 123 | КонецПроцедуры 124 | 125 | Функция КаталогТестовогоПлагина() 126 | Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "testsata", "test_plugin"); 127 | КонецФункции 128 | 129 | 130 | -------------------------------------------------------------------------------- /features/core/step_definitions/sync.core.os: -------------------------------------------------------------------------------- 1 | #Использовать tempfiles 2 | #Использовать 1commands 3 | #Использовать fs 4 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 5 | 6 | Перем БДД; //контекст фреймворка 1bdd 7 | 8 | // Метод выдает список шагов, реализованных в данном файле-шагов 9 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 10 | БДД = КонтекстФреймворкаBDD; 11 | 12 | ВсеШаги = Новый Массив; 13 | 14 | ВсеШаги.Добавить("ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной"); 15 | ВсеШаги.Добавить("ЯСоздаюНовыйМенеджерПлагинов"); 16 | ВсеШаги.Добавить("ЯСобираюТестовыйПлагинИСохраняюВКонтекст"); 17 | ВсеШаги.Добавить("ЯУстанавливаюФайлПлагинаИзПеременной"); 18 | ВсеШаги.Добавить("ЯЗагружаюПлагиныИзКаталогаВПеременной"); 19 | ВсеШаги.Добавить("ЯПодключаюПлагиныВМенеджерсинхронизации"); 20 | 21 | Возврат ВсеШаги; 22 | КонецФункции 23 | 24 | // Реализация шагов 25 | 26 | // Процедура выполняется перед запуском каждого сценария 27 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 28 | 29 | 30 | 31 | КонецПроцедуры 32 | 33 | // Процедура выполняется после завершения каждого сценария 34 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 35 | 36 | КонецПроцедуры 37 | 38 | //Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов" 39 | Процедура ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной(Знач ИмяПеременной) Экспорт 40 | 41 | ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); 42 | 43 | БДД.СохранитьВКонтекст(ИмяПеременной, ВременныйКаталог); 44 | 45 | КонецПроцедуры 46 | 47 | //Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина" 48 | Процедура ЯСобираюТестовыйПлагинИСохраняюВКонтекст(Знач ИмяПеременной) Экспорт 49 | 50 | ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); 51 | 52 | ФС.КопироватьСодержимоеКаталога(КаталогТестовогоПлагина(), ВременныйКаталог); 53 | 54 | Команда = Новый Команда; 55 | Команда = Новый Команда; 56 | Команда.УстановитьКоманду("opm"); 57 | Команда.ДобавитьПараметр("build"); 58 | Команда.ДобавитьПараметр("--out"); 59 | Команда.ДобавитьПараметр(ВременныйКаталог); 60 | Команда.ДобавитьПараметр(ВременныйКаталог); 61 | КодВозврата = Команда.Исполнить(); 62 | 63 | Если НЕ КодВозврата = 0 Тогда 64 | ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка создания тестового плагина", Команда.ПолучитьВывод()); 65 | КонецЕсли; 66 | 67 | Сообщить(Команда.ПолучитьВывод()); 68 | 69 | МассивФайлов = НайтиФайлы(ВременныйКаталог, "*.ospx"); 70 | 71 | Если МассивФайлов.Количество() = 0 Тогда 72 | ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка создания тестового плагина", "Не найден собранный файл плагина"); 73 | КонецЕсли; 74 | 75 | ФайлПлагина = МассивФайлов[0].ПолноеИмя; 76 | 77 | БДД.СохранитьВКонтекст(ИмяПеременной, ФайлПлагина); 78 | 79 | КонецПроцедуры 80 | 81 | //Я создаю новый МенеджерПлагинов 82 | Процедура ЯСоздаюНовыйМенеджерПлагинов() Экспорт 83 | МенеджерПлагинов = Новый МенеджерПлагинов; 84 | 85 | БДД.СохранитьВКонтекст("МенеджерПлагинов", МенеджерПлагинов); 86 | КонецПроцедуры 87 | 88 | //Я загружаю плагины из каталога в переменной "КаталогПлагинов" 89 | Процедура ЯЗагружаюПлагиныИзКаталогаВПеременной(Знач ИмяПеременнойКаталога) Экспорт 90 | 91 | МенеджерПлагинов = БДД.ПолучитьИзКонтекста("МенеджерПлагинов"); 92 | КаталогПлагинов = БДД.ПолучитьИзКонтекста(ИмяПеременнойКаталога); 93 | 94 | МенеджерПлагинов.УстановитьКаталогПлагинов(КаталогПлагинов); 95 | МенеджерПлагинов.ЗагрузитьПлагины(); 96 | 97 | МенеджерПлагинов.ВключитьПлагин("test_plugin"); 98 | 99 | КонецПроцедуры 100 | 101 | //Я подключаю плагины в МенеджерСинхронизации 102 | Процедура ЯПодключаюПлагиныВМенеджерсинхронизации() Экспорт 103 | 104 | МенеджерПлагинов = БДД.ПолучитьИзКонтекста("МенеджерПлагинов"); 105 | 106 | ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов(); 107 | 108 | МенеджерСинхронизации = БДД.ПолучитьИзКонтекста("МенеджерСинхронизации"); 109 | МенеджерСинхронизации.ПодпискиНаСобытия(ИндексПлагинов); 110 | МенеджерСинхронизации.ПараметрыПодписокНаСобытия(Новый Соответствие); 111 | 112 | КонецПроцедуры 113 | 114 | //Я устанавливаю файл плагина из переменной "ПутьКФайлуПлагина" 115 | Процедура ЯУстанавливаюФайлПлагинаИзПеременной(Знач ПутьКФайлуПлагина) Экспорт 116 | 117 | КаталогПлагинов = БДД.ПолучитьИзКонтекста("КаталогПлагинов"); 118 | ФайлПлагина = БДД.ПолучитьИзКонтекста(ПутьКФайлуПлагина); 119 | МенеджерПлагинов = БДД.ПолучитьИзКонтекста("МенеджерПлагинов"); 120 | МенеджерПлагинов.УстановитьКаталогПлагинов(КаталогПлагинов); 121 | МенеджерПлагинов.УстановитьФайлПлагин(ФайлПлагина); 122 | 123 | 124 | КонецПроцедуры 125 | 126 | Функция КаталогТестовогоПлагина() 127 | Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "testsata", "test_plugin"); 128 | КонецФункции 129 | 130 | 131 | -------------------------------------------------------------------------------- /features/cmd/init.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Инициализация каталога исходников конфигурации (команда init) 4 | Как Пользователь 5 | Я хочу создать каталог исходников конфигурации 1С в git-репозитории 6 | Чтобы выполнять автоматическую выгрузку конфигураций из хранилища 7 | 8 | Контекст: Тестовый контекст 9 | Когда Я очищаю параметры команды "gitsync" в контексте 10 | И Я создаю новый объект ГитРепозиторий 11 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 12 | И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С" 13 | И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" 14 | И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" 15 | И Я включаю отладку лога с именем "oscript.app.gitsync" 16 | 17 | Сценарий: Инициализация каталога исходников в пустом каталоге внутри git-репозитория 18 | Допустим Я инициализирую пустой репозиторий в каталог из переменной "ПутьКаталогаИсходников" 19 | И Я создаю каталог src временный в каталоге из переменной "ПутьКаталогаИсходников" и сохраняю его в контекст в переменной "КаталогSRC" 20 | И Я добавляю параметр "init" для команды "gitsync" 21 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" 22 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогSRC" 23 | Когда Я выполняю команду "gitsync" 24 | Тогда Вывод команды "gitsync" содержит "Инициализация завершена" 25 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 26 | И Код возврата команды "gitsync" равен 0 27 | И В каталоге из переменной "КаталогSRC" создается файл или каталог "AUTHORS" 28 | И В каталоге из переменной "КаталогSRC" создается файл или каталог "VERSION" 29 | И В каталоге из переменной "КаталогSRC" не создается файл или каталог ".git" 30 | 31 | Сценарий: Инициализация каталога исходников в пустом каталоге внутри git-репозитория с использованием текущего рабочего каталога 32 | Допустим Я инициализирую пустой репозиторий в каталог из переменной "ПутьКаталогаИсходников" 33 | И Я создаю каталог src временный в каталоге из переменной "ПутьКаталогаИсходников" и сохраняю его в контекст в переменной "КаталогSRC" 34 | И Я добавляю параметр "init" для команды "gitsync" 35 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" 36 | И Я устанавливаю рабочей каталог из переменной "КаталогSRC" 37 | Когда Я выполняю команду "gitsync" 38 | Тогда Вывод команды "gitsync" содержит "Инициализация завершена" 39 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 40 | И Код возврата команды "gitsync" равен 0 41 | И В каталоге из переменной "КаталогSRC" создается файл или каталог "AUTHORS" 42 | И В каталоге из переменной "КаталогSRC" создается файл или каталог "VERSION" 43 | И В каталоге из переменной "КаталогSRC" не создается файл или каталог ".git" 44 | 45 | Сценарий: Инициализация каталога исходников, не находящегося внутри git-репозитория 46 | Допустим Я добавляю параметр "init" для команды "gitsync" 47 | Когда Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" 48 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" 49 | И Я выполняю команду "gitsync" 50 | Тогда Вывод команды "gitsync" содержит "Инициализация завершена" 51 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 52 | И Код возврата команды "gitsync" равен 0 53 | И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог ".git" 54 | 55 | Сценарий: Инициализация каталога исходников в пустом каталоге внутри git-репозитория с использованием переменных окружения 56 | Допустим Я инициализирую пустой репозиторий в каталог из переменной "ПутьКаталогаИсходников" 57 | И Я создаю каталог src временный в каталоге из переменной "ПутьКаталогаИсходников" и сохраняю его в контекст в переменной "КаталогSRC" 58 | И Я добавляю параметр "-v" для команды "gitsync" 59 | И Я добавляю параметр "init" для команды "gitsync" 60 | И Я устанавливаю переменную окружения "GITSYNC_STORAGE_PATH" из переменной "КаталогХранилища1С" 61 | И Я устанавливаю переменную окружения "GITSYNC_WORKDIR" из переменной "КаталогSRC" 62 | Когда Я выполняю команду "gitsync" 63 | Тогда Вывод команды "gitsync" содержит "Инициализация завершена" 64 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 65 | И Код возврата команды "gitsync" равен 0 66 | И В каталоге из переменной "КаталогSRC" создается файл или каталог "AUTHORS" 67 | И В каталоге из переменной "КаталогSRC" создается файл или каталог "VERSION" 68 | И В каталоге из переменной "КаталогSRC" не создается файл или каталог ".git" 69 | И Я очищаю значение переменных окружения 70 | |GITSYNC_STORAGE_PATH| 71 | |GITSYNC_WORKDIR| -------------------------------------------------------------------------------- /features/core/sync.batch.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Пакетная синхронизация хранилищ конфигурации 1С и гит 4 | Как Пользователь 5 | Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища 6 | Чтобы автоматизировать свою работы с хранилищем с git 7 | 8 | Контекст: Тестовый контекст синхронизации 9 | Когда Я создаю новый объект ГитРепозиторий 10 | И Я создаю новый объект ПакетнаяСинхронизация 11 | # Подготовка хранилища 1 12 | И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С_1" 13 | И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С_1" 14 | И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников_1" 15 | И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников_1" 16 | И Я создаю тестовой файл AUTHORS в каталоге из переменной "ПутьКаталогаИсходников_1" 17 | И Я записываю "0" в файл VERSION в каталоге из переменной "ПутьКаталогаИсходников_1" 18 | 19 | # Подготовка хранилища 2 20 | И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С_2" 21 | И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С_2" 22 | И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников_2" 23 | И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников_2" 24 | И Я создаю тестовой файл AUTHORS в каталоге из переменной "ПутьКаталогаИсходников_2" 25 | И Я записываю "0" в файл VERSION в каталоге из переменной "ПутьКаталогаИсходников_2" 26 | 27 | И Я создаю временный каталог и сохраняю его в переменной "КаталогПроекта" 28 | И Я добавляю файл "example.yaml" в каталог проекта с содержанием 29 | """ 30 | globals: 31 | storage-user: Администратор 32 | storage-pwd: '' 33 | git-path: git 34 | temp-dir: "" 35 | v8version: 8.3 36 | domain-email: localhost 37 | lic-try-count: 5 38 | plugins: 39 | enable: 40 | - test 41 | - test2 42 | disable: 43 | - test3 44 | plugins-config: 45 | git-url: git-url 46 | push: true 47 | pull: true 48 | repositories: 49 | - name: ТестовыйРепозиторий 50 | # disable: false 51 | path: <КаталогХранилища1С_1> 52 | dir: <ПутьКаталогаИсходников_1> 53 | plugins: 54 | more: 55 | - test3 56 | plugins-config: 57 | git-url: git-url 58 | push: true 59 | pull: true 60 | - name: ТестовыйРепозиторий2 61 | # disable: true 62 | path: <КаталогХранилища1С_2> 63 | dir: <ПутьКаталогаИсходников_2> 64 | storage-user: Администратор 65 | storage-pwd: '' 66 | git-path: git 67 | temp-dir: "" 68 | v8version: 8.3 69 | domain-email: localhost 70 | lic-try-count: 5 71 | 72 | """ 73 | 74 | И Я заменяю "<КаталогХранилища1С_1>" значением из переменной "КаталогХранилища1С_1" в файле "example.yaml" 75 | И Я заменяю "<ПутьКаталогаИсходников_1>" значением из переменной "ПутьКаталогаИсходников_1" в файле "example.yaml" 76 | И Я заменяю "<КаталогХранилища1С_2>" значением из переменной "КаталогХранилища1С_2" в файле "example.yaml" 77 | И Я заменяю "<ПутьКаталогаИсходников_2>" значением из переменной "ПутьКаталогаИсходников_2" в файле "example.yaml" 78 | И Я устанавливаю файл настройки "example.yaml" в ПакетнаяСинхронизация 79 | # И Я включаю отладку лога с именем "oscript.lib.gitsync.batch" 80 | # И Я включаю отладку лога с именем "oscript.lib.configor" 81 | # И Я включаю отладку лога с именем "oscript.lib.configor.yaml" 82 | # И Я включаю отладку лога с именем "oscript.lib.configor.constructor" 83 | 84 | #Сценарий: Простая синхронизация хранилища с git-репозиторием 85 | # Допустим Я устанавливаю авторизацию "Администратор" с паролем "" в ПакетнаяСинхронизация 86 | # И Я устанавливаю версию платформы "8.3" в ПакетнаяСинхронизация 87 | # Когда Я выполняю выполняют пакетную синхронизацию 88 | # Тогда Вывод лога содержит "Завершена синхронизации с git" 89 | 90 | # Сценарий: Cинхронизация хранилища с git-репозиторием c плагинами 91 | # Допустим Я устанавливаю авторизацию в хранилище пользователя "Администратор" с паролем "" 92 | # И Я устанавливаю версию платформы "8.3" 93 | # И Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов" 94 | # И Я создаю новый МенеджерПлагинов 95 | # И Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина" 96 | # И Я устанавливаю файл плагина из переменной "ПутьКФайлуПлагина" 97 | # И Я загружаю плагины из каталога в переменной "КаталогПлагинов" 98 | # И Я подключаю плагины в МенеджерСинхронизации 99 | # Когда Я выполняю выполняют синхронизацию 100 | # Тогда Вывод лога содержит "Завершена синхронизации с git" 101 | # И Вывод лога содержит "Вызвано событие <ПриАктивизации> для плагина " 102 | -------------------------------------------------------------------------------- /src/core/Классы/МенеджерПлагинов.os: -------------------------------------------------------------------------------- 1 | #Использовать fs 2 | #Использовать json 3 | #Использовать logos 4 | #Использовать "./internal" 5 | 6 | Перем ИндексПлагинов; 7 | Перем КаталогПлагинов; 8 | 9 | #Область Экспортные_методы 10 | 11 | // Возвращает индекс плагинов 12 | // 13 | // Возвращаемое значение: 14 | // Соответствие - набор плагинов 15 | // * ключ - Строка - имя плагина 16 | // * значение - Объект - ссылка на произвольный объект 17 | // 18 | Функция ПолучитьИндексПлагинов() Экспорт 19 | Возврат ИндексПлагинов; 20 | КонецФункции 21 | 22 | // Выполняет загрузку плагинов из каталога 23 | // 24 | Процедура ЗагрузитьПлагины() Экспорт 25 | 26 | ТекущийЗагрузчикПлагинов = Новый ЗагрузчикПлагинов(КаталогПлагинов); 27 | ТекущийЗагрузчикПлагинов.ЗагрузитьПлагины(); 28 | ИндексПлагинов = ТекущийЗагрузчикПлагинов.ИндексПлагинов(); 29 | 30 | КонецПроцедуры 31 | 32 | // Создает и возвращает новый МенеджерПодписок для текущего индекса плагинов 33 | // 34 | // Возвращаемое значение: 35 | // Объект.МенеджерПодписок - ссылка на новый объект класса <МенеджерПодписок> 36 | // 37 | Функция НовыйМенеджерПодписок() Экспорт 38 | 39 | Возврат Новый МенеджерПодписок(ИндексПлагинов); 40 | 41 | КонецФункции 42 | 43 | // Производит отключение массива плагинов 44 | // 45 | // Параметры: 46 | // МассивПлагинов - Массив - Элементы типа Строка, имена плагинов 47 | // 48 | Процедура ОтключитьПлагины(МассивПлагинов) Экспорт 49 | 50 | Для каждого ОтключаемыйПлагин Из МассивПлагинов Цикл 51 | 52 | Плагин = ИндексПлагинов[ОтключаемыйПлагин]; 53 | 54 | Если Плагин = Неопределено Тогда 55 | Продолжить; 56 | КонецЕсли; 57 | 58 | Плагин.Отключить(); 59 | 60 | КонецЦикла; 61 | 62 | КонецПроцедуры 63 | 64 | // Включает набор плагинов 65 | // 66 | // Параметры: 67 | // МассивПлагинов - Массив, Соответствие - набор наименований плагинов 68 | // 69 | Процедура ВключитьПлагины(МассивПлагинов) Экспорт 70 | 71 | Для каждого ВключаемыеПлагин Из МассивПлагинов Цикл 72 | 73 | Если ТипЗнч(ВключаемыеПлагин) = Тип("Строка") Тогда 74 | ВключитьПлагин(ВключаемыеПлагин); 75 | Иначе 76 | ВключитьПлагин(ВключаемыеПлагин.Ключ); 77 | КонецЕсли; 78 | 79 | КонецЦикла; 80 | 81 | КонецПроцедуры 82 | 83 | // Включает плагин к использованию 84 | // 85 | // Параметры: 86 | // ИмяПлагина - Строка - имя плагина для включения 87 | // 88 | Процедура ВключитьПлагин(Знач ИмяПлагина) Экспорт 89 | 90 | Плагин = ИндексПлагинов[ИмяПлагина]; 91 | 92 | Если Плагин = Неопределено Тогда 93 | Возврат; 94 | КонецЕсли; 95 | 96 | Плагин.Включить(); 97 | 98 | КонецПроцедуры 99 | 100 | Процедура ВключитьВсеПлагины() Экспорт 101 | 102 | Для каждого КлючЗначение Из ИндексПлагинов Цикл 103 | 104 | Плагин = КлючЗначение.Значение; 105 | Плагин.Включить(); 106 | 107 | КонецЦикла; 108 | 109 | КонецПроцедуры 110 | 111 | Процедура ОтключитьВсеПлагины() Экспорт 112 | 113 | Для каждого КлючЗначение Из ИндексПлагинов Цикл 114 | 115 | Плагин = КлючЗначение.Значение; 116 | Плагин.Отключить(); 117 | 118 | КонецЦикла; 119 | 120 | КонецПроцедуры 121 | 122 | // Устанавливает каталог установки и чтения плагинов 123 | // 124 | // Параметры: 125 | // ПутьККаталогу - Строка - полный путь к каталогу хранения плагинов 126 | // 127 | Процедура УстановитьКаталогПлагинов(Знач ПутьККаталогу) Экспорт 128 | КаталогПлагинов = ПутьККаталогу; 129 | КонецПроцедуры 130 | 131 | // Производит установку пакета плагинов из файла 132 | // 133 | // Параметры: 134 | // ПутьКФайлуПакета - Строка - полный путь к файлу пакета плагина 135 | // 136 | Процедура УстановитьФайлПлагин(Знач ПутьКФайлуПакета) Экспорт 137 | 138 | Установщик = Новый УстановщикПлагинов(); 139 | Установщик.УстановитьКаталогПлагинов(КаталогПлагинов); 140 | Установщик.УстановитьФайлПлагина(ПутьКФайлуПакета); 141 | 142 | КонецПроцедуры 143 | 144 | // Производит установку пакета плагинов по имени 145 | // 146 | // Параметры: 147 | // ИмяПлагина - Строка - имя пакета плагинов на хабе 148 | // 149 | Процедура УстановитьПлагинПоИмени(Знач ИмяПлагина) Экспорт 150 | 151 | Установщик = Новый УстановщикПлагинов(); 152 | Установщик.УстановитьКаталогПлагинов(КаталогПлагинов); 153 | Установщик.УстановитьПлагинПоИмени(ИмяПлагина); 154 | 155 | КонецПроцедуры 156 | 157 | // Устанавливает режим отладки для индекса плагинов 158 | // 159 | Процедура УстановитьРежимОтладки() Экспорт 160 | 161 | Для каждого КлючЗначение Из ИндексПлагинов Цикл 162 | 163 | Плагин = КлючЗначение.Значение; 164 | Плагин.ВключитьОтладку(); 165 | 166 | КонецЦикла; 167 | 168 | КонецПроцедуры 169 | 170 | #КонецОбласти 171 | 172 | #Область Вспомогательные_процедуры_и_функции 173 | 174 | 175 | Процедура ПриСозданииОбъекта(Знач ЗначениеКаталогПлагинов = Неопределено) 176 | 177 | ИндексПлагинов = Новый Соответствие; 178 | 179 | Если ЗначениеЗаполнено(ЗначениеКаталогПлагинов) Тогда 180 | КаталогПлагинов = ЗначениеКаталогПлагинов; 181 | КонецЕсли; 182 | 183 | КонецПроцедуры 184 | 185 | #КонецОбласти 186 | -------------------------------------------------------------------------------- /src/cmd/gitsync.os: -------------------------------------------------------------------------------- 1 | /////////////////////////////////////////////////////////////////// 2 | // 3 | #Использовать cli 4 | #Использовать tempfiles 5 | #Использовать "../core" 6 | #Использовать "." 7 | 8 | Перем Лог; 9 | Перем Плагины; 10 | Перем ВерсияПлатформы; 11 | Перем ВыводДополнительнойИнформации; 12 | Перем ВременныйКаталогРаботы; 13 | Перем ДоменПочты; 14 | /////////////////////////////////////////////////////////////////////////////// 15 | 16 | Процедура ВыполнитьПриложение() 17 | 18 | Приложение = Новый КонсольноеПриложение(ПараметрыПриложения.ИмяПриложения(), 19 | "Приложение для синхронизации Хранилища 1С с git", 20 | ЭтотОбъект); 21 | Приложение.Версия("version", ПараметрыПриложения.Версия()); 22 | Приложение.Опция("v8version", "8.3", "маска версии платформы 1С (8.3, 8.3.5, 8.3.6.2299 и т.п.)") 23 | .ВОкружении("GITSYNC_V8VERSION"); 24 | Приложение.Опция("v8-path", "", "путь к исполняемому файлу платформы 1С (Например, /opt/1C/v8.3/x86_64/1cv8)") 25 | .ВОкружении("GITSYNC_V8_PATH"); 26 | 27 | Приложение.Опция("v verbose", Ложь, "вывод отладочной информации в процессе выполнения") 28 | .Флаговый() 29 | .ВОкружении("GITSYNC_VERBOSE"); 30 | 31 | Приложение.Опция("U ib-user ib-usr db-user", "", "пользователь информационной базы") 32 | .ТСтрока() 33 | .ВОкружении("GITSYNC_IB_USR GITSYNC_IB_USER GITSYNC_DB_USER"); 34 | 35 | Приложение.Опция("P ib-pwd db-pwd", "", "пароль пользователя информационной базы") 36 | .ТСтрока() 37 | .ВОкружении("GITSYNC_IB_PASSWORD GITSYNC_IB_PWD GITSYNC_DB_PSW"); 38 | 39 | Приложение.Опция("C ib-connection ibconnection", "", "путь подключения к информационной базе") 40 | .ТСтрока() 41 | .ВОкружении("GITSYNC_IB_CONNECTION GITSYNC_IBCONNECTION"); 42 | 43 | // Приложение.Опция("p plugins", "", "плагины к загрузке и исполнению (дополнительное ограничение)") 44 | // .ТМассивСтрок() 45 | // .ВОкружении("GITSYNC_RUN_PLUGINS"); 46 | 47 | Приложение.Опция("t tempdir", "", "путь к каталогу временных файлов") 48 | .ВОкружении("GITSYNC_TEMP GITSYNC_TEMPDIR"); 49 | 50 | Приложение.Опция("git-path", "", "путь к исполняемому файлу git") 51 | .ВОкружении("GITSYNC_GIT_PATH GIT_PATH"); 52 | 53 | Приложение.Опция("domain-email", "localhost", "домен почты для пользователей git") 54 | .ВОкружении("GITSYNC_EMAIL GITSYNC_DOMAIN_EMAIL"); 55 | 56 | Приложение.ДобавитьКоманду("usage u", "Выводит примеры использования", 57 | Новый КомандаUsage); 58 | Приложение.ДобавитьКоманду("init i", "Инициализация структуры нового хранилища git. Подготовка к синхронизации", 59 | Новый КомандаInit); 60 | Приложение.ДобавитьКоманду("sync s", "Выполняет синхронизацию хранилища 1С с git-репозиторием", 61 | Новый КомандаSync); 62 | Приложение.ДобавитьКоманду("clone c", "Клонирует существующий репозиторий и создает служебные файлы", 63 | Новый КомандаClone); 64 | Приложение.ДобавитьКоманду("all a", "Запускает синхронизацию по нескольким репозиториям", 65 | Новый КомандаAll); 66 | Приложение.ДобавитьКоманду("set-version sv", "Устанавливает необходимую версию в файл VERSION", 67 | Новый КомандаSetVersion); 68 | Приложение.ДобавитьКоманду("plugins p", "Управление плагинами gitsync", 69 | Новый КомандаPlugins); 70 | 71 | // Приложение.УстановитьДействиеПередВыполнением(ЭтотОбъект, "ПередВыполнениемКоманды"); // TODO: Расскоментировать при исправлении ошибки в cli 72 | 73 | Приложение.Запустить(АргументыКоманднойСтроки); 74 | 75 | КонецПроцедуры // ВыполнениеКоманды() 76 | 77 | Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт 78 | 79 | КомандаПриложения.ВывестиСправку(); 80 | 81 | КонецПроцедуры 82 | 83 | Процедура ПередВыполнениемКоманды(Знач Команда) Экспорт 84 | 85 | ВерсияПлатформы = Команда.ЗначениеОпции("v8version"); 86 | ПутьКПлатформе = Команда.ЗначениеОпции("v8-path"); 87 | ВыводДополнительнойИнформации = Команда.ЗначениеОпции("verbose"); 88 | ПутьКГит = Команда.ЗначениеОпции("git-path"); 89 | ВременныйКаталогРаботы = Команда.ЗначениеОпции("tempdir"); 90 | ДоменПочты = Команда.ЗначениеОпции("domain-email"); 91 | 92 | ПараметрыПриложения.УстановитьРежимОтладкиПриНеобходимости(ВыводДополнительнойИнформации); 93 | 94 | Лог.Отладка("Устанавливаю общие параметры"); 95 | ПараметрыПриложения.УстановитьВерсиюПлатформы(ВерсияПлатформы); 96 | ПараметрыПриложения.УстановитьПутьКПлатформе(ПутьКПлатформе); 97 | ПараметрыПриложения.УстановитьПутьКГит(ПутьКГит); 98 | ПараметрыПриложения.УстановитьДоменПочты(ДоменПочты); 99 | ПараметрыПриложения.УстановитьВременныйКаталог(ВременныйКаталогРаботы); 100 | 101 | КонецПроцедуры 102 | 103 | /////////////////////////////////////////////////////// 104 | 105 | Лог = ПараметрыПриложения.Лог(); 106 | ПараметрыПриложения.ПодготовитьПлагины(); 107 | 108 | Попытка 109 | 110 | ВыполнитьПриложение(); 111 | 112 | Исключение 113 | 114 | Лог.КритичнаяОшибка(ОписаниеОшибки()); 115 | ВременныеФайлы.Удалить(); 116 | 117 | ЗавершитьРаботу(1); 118 | 119 | КонецПопытки; 120 | -------------------------------------------------------------------------------- /docs/sync.md: -------------------------------------------------------------------------------- 1 | # Подробное описание использования команды 2 | 3 | sync (синоним s) - Выполняет синхронизацию хранилища 1С с git-репозиторием 4 | 5 | > Подробную справку по опциям и аргументам см. `gitsync sync --help` 6 | 7 | ### Справка по использованию команды: 8 | ``` 9 | Команда: sync, s 10 | Выполняет синхронизацию хранилища 1С с git-репозиторием 11 | 12 | Строка запуска: gitsync sync [ОПЦИИ] PATH [WORKDIR] 13 | 14 | Аргументы: 15 | PATH Путь к хранилищу конфигурации 1С. (env $GITSYNC_STORAGE_PATH) 16 | WORKDIR Каталог исходников внутри локальной копии git-репозитория. (env $GITSYNC_WORKDIR) 17 | 18 | Опции: 19 | -u, --storage-user пользователь хранилища конфигурации (env $GITSYNC_STORAGE_USER) (по умолчанию Администратор) 20 | -p, --storage-pwd пароль пользователя хранилища конфигурации (env $GITSYNC_STORAGE_PASSWORD, $GITSYNC_STORAGE_PWD) 21 | -e, --ext имя расширения для работы с хранилищем расширения(env $GITSYNC_EXTENSION) 22 | 23 | ``` 24 | ### Глобальные переменные окружения 25 | | Имя | Описание | 26 | |---------------------|--------------------------------------------------------| 27 | | `GITSYNC_V8VERSION` | маска версии платформы (8.3, 8.3.5, 8.3.6.2299 и т.п.) | 28 | | `GITSYNC_VERBOSE` | вывод отладочной информации в процессе выполнения | 29 | | `GITSYNC_TEMP` | путь к каталогу временных файлов | 30 | | `GITSYNC_EMAIL` | домен почты для пользователей git | 31 | 32 | ### Переменные окружения команды 33 | 34 | | Имя | Описание | 35 | |----------------------------|--------------------------------------------| 36 | | `GITSYNC_WORKDIR` | рабочий каталог для команды | 37 | | `GITSYNC_STORAGE_PATH` | путь к хранилищу конфигурации 1С. | 38 | | `GITSYNC_STORAGE_USER` | пользователь хранилища конфигурации | 39 | | `GITSYNC_STORAGE_PASSWORD` | пароль пользователя хранилища конфигурации | 40 | | `GITSYNC_EXTENSION` | имя расширения | 41 | 42 | ### Значения по умолчанию 43 | 44 | | | | 45 | |--------------------|------------------------------| 46 | | WORKDIR | текущая рабочая директория | 47 | | -u, --storage-user | пользователь `Администратор` | 48 | 49 | ## Примеры, использования 50 | 51 | * Простое использование 52 | 53 | `gitsync sync C:/Хранилище_1С/ C:/GIT/src` 54 | 55 | Данная команда выполнить синхронизацию хранилища 1С по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/GIT/src` 56 | 57 | * Простое использование для выгрузки расширения конфигурации 58 | 59 | `gitsync sync --ext ИМЯ_Расширения C:/Хранилище_1С/ C:/GIT/src` 60 | 61 | Данная команда выполняет синхронизацию хранилища расширения 1С с именем `ИМЯ_Расширения` по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/GIT/src` 62 | 63 | * Инициализация в текущем рабочем каталоге, 64 | 65 | > переменная окружения **`GITSYNC_WORKDIR`** не должна быть задана 66 | 67 | ```sh 68 | cd C:/work_dir/ 69 | gitsync sync C:/Хранилище_1С/ 70 | ``` 71 | Данная команда выполнить синхронизацию хранилища 1С по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/work_dir` 72 | 73 | * Инициализация в с указанием пользователя и пароля. 74 | 75 | ```sh 76 | gitsync sync --storage-user Admin --storage-pwd=Secret C:/Хранилище_1С/ C:/work_dir/ 77 | ``` 78 | Данная команда выполнить синхронизацию хранилища 1С по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/work_dir` 79 | Используя для подключения к хранилищу 1С пользователя `Admin` и пароль `Secret` 80 | 81 | * Использование синонимов (короткая версия предыдущего примера) 82 | 83 | ```sh 84 | gitsync s -uAdmin -p=Secret C:/Хранилище_1С/ C:/work_dir/ 85 | ``` 86 | Данная команда выполнить синхронизацию хранилища 1С по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/work_dir` 87 | Используя для подключения к хранилищу 1С пользователя `Admin` и пароль `Secret` 88 | 89 | * Использование только переменных окружения 90 | 91 | linux: 92 | ```sh 93 | export GITSYNC_WORKDIR=./work_dir/ 94 | export GITSYNC_STORAGE_PATH=./Хранилище_1С/ 95 | 96 | export GITSYNC_STORAGE_USER=Admin 97 | export GITSYNC_STORAGE_PASSWORD=Secret 98 | export GITSYNC_V8VERSION=8.3.7 99 | export GITSYNC_VERBOSE=true #Можно использовать Да/Ложь/Нет/Истина 100 | export GITSYNC_TEMP=./temp/sync 101 | gitsync s 102 | ``` 103 | windows: 104 | ```cmd 105 | set GITSYNC_WORKDIR=./work_dir/ 106 | set GITSYNC_STORAGE_PATH=./Хранилище_1С/ 107 | 108 | set GITSYNC_STORAGE_USER=Admin 109 | set GITSYNC_STORAGE_PASSWORD=Secret 110 | set GITSYNC_V8VERSION=8.3.7 111 | set GITSYNC_VERBOSE=true #Можно использовать Да/Ложь/Нет/Истина 112 | set GITSYNC_TEMP=./temp/sync 113 | 114 | gitsync s 115 | ``` 116 | Данная команда выполнить синхронизацию хранилища 1С по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/work_dir` 117 | Используя для подключения к хранилищу 1С пользователя `Admin` и пароль `Secret` 118 | -------------------------------------------------------------------------------- /features/cmd/sync.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Синхронизация хранилища конфигурации 1С и гит (команды sync) 4 | Как Пользователь 5 | Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища 6 | Чтобы автоматизировать свою работы с хранилищем с git 7 | 8 | Контекст: Тестовый контекст 9 | Когда Я очищаю параметры команды "gitsync" в контексте 10 | И Я создаю новый объект ГитРепозиторий 11 | И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке 12 | И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С" 13 | И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" 14 | И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" 15 | И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" 16 | И Я создаю тестовой файл AUTHORS 17 | И Я записываю "0" в файл VERSION 18 | 19 | Сценарий: Простая синхронизация хранилища с git-репозиторием 20 | Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" 21 | И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" 22 | И Я добавляю параметр "-v" для команды "gitsync" 23 | И Я добавляю параметр "sync" для команды "gitsync" 24 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" 25 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" 26 | Когда Я выполняю команду "gitsync" 27 | Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" 28 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 29 | И Код возврата команды "gitsync" равен 0 30 | 31 | Сценарий: Синхронизация хранилища с git-репозиторием с использованием текущего рабочего каталога 32 | Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" 33 | И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" 34 | И Я добавляю параметр "-v" для команды "gitsync" 35 | И Я добавляю параметр "sync" для команды "gitsync" 36 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" 37 | И Я устанавливаю рабочей каталог из переменной "ПутьКаталогаИсходников" 38 | Когда Я выполняю команду "gitsync" 39 | Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" 40 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 41 | И Код возврата команды "gitsync" равен 0 42 | 43 | Сценарий: Синхронизация хранилища с git-репозиторием с ошибкой авторизации 44 | Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" 45 | И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" 46 | И Я добавляю параметр "-v" для команды "gitsync" 47 | И Я добавляю параметр "sync" для команды "gitsync" 48 | И Я добавляю параметр "-u Админ" для команды "gitsync" 49 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" 50 | И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" 51 | Когда Я выполняю команду "gitsync" 52 | Тогда Вывод команды "gitsync" содержит "Ошибка аутентификации в хранилище конфигурации!" 53 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 54 | И Код возврата команды "gitsync" равен 1 55 | 56 | Сценарий: Синхронизация хранилища с git-репозиторием с использованием переменных окружения 57 | Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" 58 | И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" 59 | И Я добавляю параметр "-v" для команды "gitsync" 60 | И Я добавляю параметр "sync" для команды "gitsync" 61 | И Я устанавливаю переменную окружения "GITSYNC_STORAGE_PATH" из переменной "КаталогХранилища1С" 62 | И Я устанавливаю переменную окружения "GITSYNC_WORKDIR" из переменной "ПутьКаталогаИсходников" 63 | Когда Я выполняю команду "gitsync" 64 | Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" 65 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 66 | И Код возврата команды "gitsync" равен 0 67 | И Я очищаю значение переменных окружения 68 | |GITSYNC_STORAGE_PATH| 69 | |GITSYNC_WORKDIR| 70 | 71 | Сценарий: Синхронизация хранилища с git-репозиторием с использованием пути к git 72 | Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" 73 | И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" 74 | И Я добавляю параметр "--git-path git" для команды "gitsync" 75 | И Я добавляю параметр "-v" для команды "gitsync" 76 | И Я добавляю параметр "sync" для команды "gitsync" 77 | И Я устанавливаю переменную окружения "GITSYNC_STORAGE_PATH" из переменной "КаталогХранилища1С" 78 | И Я устанавливаю переменную окружения "GITSYNC_WORKDIR" из переменной "ПутьКаталогаИсходников" 79 | Когда Я выполняю команду "gitsync" 80 | Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" 81 | И Вывод команды "gitsync" не содержит "Внешнее исключение" 82 | И Код возврата команды "gitsync" равен 0 83 | И Я очищаю значение переменных окружения 84 | |GITSYNC_STORAGE_PATH| 85 | |GITSYNC_WORKDIR| -------------------------------------------------------------------------------- /src/core/Классы/internal/Классы/ПлагинСинхронизации.os: -------------------------------------------------------------------------------- 1 | #Использовать reflector 2 | #Использовать delegate 3 | 4 | Перем ИмяПлагина; // Строка - Имя плагина 5 | Перем ВерсияПлагина; // Строка - текущая версия плагина 6 | Перем ОписаниеПлагина; // Строка - дополнительное описание плагина 7 | Перем ОписаниеСправки; // Строка - описание справки плагина 8 | Перем ПриоритетПлагина; // Число - приоритет выполнения плагина 9 | Перем РеализованныеМетоды; // Структура - набор реализованних методов 10 | Перем ПлагинВключен; // Булево, признак того что плагин включен 11 | Перем ИндексДелегатов; // Соответствие - кеш вызванных делегатов 12 | Перем КлассПлагина; // Объект - ссылка на плагин 13 | Перем ИмяКлассаПлагина; // Строка имя класса плагина 14 | Перем Лог; // Объект ллогирования 15 | 16 | #Область Экспортные_методы 17 | 18 | // Возвращает имя плагина 19 | // 20 | // Возвращаемое значение: 21 | // Строка - текущее имя плагина 22 | // 23 | Функция Имя() Экспорт 24 | Возврат ИмяПлагина; 25 | КонецФункции 26 | 27 | // Возвращает версию плагина 28 | // 29 | // Возвращаемое значение: 30 | // Строка - текущая версия плагина 31 | // 32 | Функция Версия() Экспорт 33 | Возврат ВерсияПлагина; 34 | КонецФункции 35 | 36 | // Возвращает описание плагина 37 | // 38 | // Возвращаемое значение: 39 | // Строка - описание плагина 40 | // 41 | Функция Описание() Экспорт 42 | Возврат ОписаниеПлагина; 43 | КонецФункции 44 | 45 | // Возвращает форматированную справку плагина 46 | // 47 | // Возвращаемое значение: 48 | // Строка - форматированная справка плагина 49 | // 50 | Функция Справка() Экспорт 51 | Возврат ОписаниеСправки; 52 | КонецФункции 53 | 54 | // Возвращает приоритет выполнения плагина 55 | // 56 | // Возвращаемое значение: 57 | // Число - текущий приоритет плагина 58 | // 59 | Функция Приоритет() Экспорт 60 | Возврат ПриоритетПлагина; 61 | КонецФункции 62 | 63 | // Выключает выполнение плагина 64 | // 65 | Процедура Отключить() Экспорт 66 | ПлагинВключен = Ложь; 67 | КонецПроцедуры 68 | 69 | // Включает выполнение плагина 70 | // 71 | Процедура Включить() Экспорт 72 | ПлагинВключен = Истина; 73 | КонецПроцедуры 74 | 75 | // Возращает признак выполнения плагина 76 | // 77 | // Возвращаемое значение: 78 | // Булево - признак выполнения плагина 79 | // 80 | Функция Включен() Экспорт 81 | Возврат ПлагинВключен; 82 | КонецФункции 83 | 84 | // Включает отладочный режим для плагина 85 | // 86 | Процедура ВключитьОтладку() Экспорт 87 | 88 | Лог.УстановитьУровень(УровниЛога.Отладка); 89 | 90 | КонецПроцедуры 91 | 92 | // Выполняет метод подписки на плагине 93 | // 94 | // Параметры: 95 | // ИмяМетода - Строка - имя метода на плагине 96 | // НаборПараметров - Массив - Набор параметров для передачи на метод 97 | // 98 | Процедура ВыполнитьПодписку(Знач ИмяМетода, НаборПараметров) Экспорт 99 | 100 | Если Не ПлагинВключен Тогда 101 | Возврат; 102 | КонецЕсли; 103 | 104 | Если Не МетодРеализован(ИмяМетода) Тогда 105 | Возврат; 106 | КонецЕсли; 107 | 108 | ВыполнитьДелегата(ИмяМетода, НаборПараметров); 109 | 110 | КонецПроцедуры 111 | 112 | #КонецОбласти 113 | 114 | #Область Вспомогательные_процедуры_и_функции 115 | 116 | Функция МетодРеализован(Знач ИмяМетода) 117 | 118 | СтатусМетода = РеализованныеМетоды[ИмяМетода]; 119 | 120 | Возврат СтатусМетода; 121 | 122 | КонецФункции 123 | 124 | Процедура ВыполнитьДелегата(Знач ИмяМетода, НаборПараметров) 125 | 126 | Если КлассПлагина = Неопределено Тогда 127 | СоздатьКлассПлагина(); 128 | КонецЕсли; 129 | 130 | ДелегатМетода = ПолучитьДелегата(ИмяМетода); 131 | 132 | ДелегатМетода.Исполнить(НаборПараметров); 133 | 134 | КонецПроцедуры 135 | 136 | Функция ПолучитьДелегата(Знач ИмяМетода) 137 | 138 | ДелегатМетода = ИндексДелегатов[ИмяМетода]; 139 | 140 | Если ДелегатМетода = Неопределено Тогда 141 | ДелегатМетода = Делегаты.Создать(КлассПлагина, ИмяМетода); 142 | ИндексДелегатов.Вставить(ИмяМетода, ДелегатМетода); 143 | КонецЕсли; 144 | 145 | Возврат ДелегатМетода; 146 | 147 | КонецФункции 148 | 149 | Функция ПолучитьКлассПлагина() 150 | Возврат Новый (ИмяКлассаПлагина); 151 | КонецФункции 152 | 153 | Процедура СоздатьКлассПлагина() 154 | КлассПлагина = ПолучитьКлассПлагина(); 155 | КонецПроцедуры 156 | 157 | Процедура ПриСозданииОбъекта(Знач ВходящееИмяКлассаПлагина, ИнтерфейсМетодовПлагинов) 158 | 159 | ИмяКлассаПлагина = ВходящееИмяКлассаПлагина; 160 | 161 | КлассПлагина = ПолучитьКлассПлагина(); 162 | 163 | ИнтерфейсПлагина = Новый ИнтерфейсОбъекта(); 164 | ИнтерфейсПлагина.Ф("Версия"); 165 | ИнтерфейсПлагина.Ф("Имя"); 166 | ИнтерфейсПлагина.Ф("Описание"); 167 | ИнтерфейсПлагина.Ф("Справка"); 168 | ИнтерфейсПлагина.Ф("ИмяЛога"); 169 | ИнтерфейсПлагина.Ф("Приоритет"); 170 | 171 | Рефлектор = Новый РефлекторОбъекта(КлассПлагина); 172 | ЭтоПлагин = Рефлектор.РеализуетИнтерфейс(ИнтерфейсПлагина); 173 | 174 | Если Не ЭтоПлагин Тогда 175 | ВызватьИсключение СтрШаблон("Переданный класс <%1> не реализует интерфейс плагина", ИмяКлассаПлагина); 176 | КонецЕсли; 177 | 178 | ИмяПлагина = КлассПлагина.Имя(); 179 | ВерсияПлагина = КлассПлагина.Версия(); 180 | ОписаниеПлагина = КлассПлагина.Описание(); 181 | ПриоритетПлагина = КлассПлагина.Приоритет(); 182 | 183 | Лог = Логирование.ПолучитьЛог(КлассПлагина.ИмяЛога()); 184 | ПлагинВключен = Ложь; 185 | ИндексДелегатов = Новый Соответствие; 186 | 187 | РеализованныеМетоды = Рефлектор.РеализованныеМетодыИнтерфейса(ИнтерфейсМетодовПлагинов); 188 | 189 | КонецПроцедуры 190 | 191 | #КонецОбласти 192 | -------------------------------------------------------------------------------- /src/core/Классы/internal/bindata/Классы/tempExtension_Gitsync.os: -------------------------------------------------------------------------------- 1 | 2 | /////////////////////////////////////////// 3 | // ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ // 4 | /////////////////////////////////////////// 5 | // 6 | // ФАЙЛ: 7 | // 8 | 9 | // Возвращает версию запакованного файла 10 | // 11 | Функция Версия() Экспорт 12 | Возврат "1.0.0"; 13 | КонецФункции 14 | 15 | // Возвращает имя запакованного файла 16 | // 17 | Функция ИмяФайла() Экспорт 18 | Возврат "tempExtension.cfe"; 19 | КонецФункции 20 | 21 | // Возвращает хеш строку запакованного файла 22 | // 23 | Функция Хеш() Экспорт 24 | Возврат "6B3A3B869213E02BE3C63E74A4117049"; 25 | КонецФункции 26 | 27 | // Возвращает запакованные данные файла 28 | // 29 | Функция ДвоичныеДанные() Экспорт 30 | ЗапакованныеДанные = "////fwACAAADAAAAAAAAAA0KMDAwMDAwMjQgMDAwMDAyMDAgN2ZmZmZmZmYgDQovAgAArgIAAP///3+ACQAA/wkAAP///38eDAAAaQwAAP///38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0KMDAwMDAwNjAgMDAwMDAwNjAgN2ZmZmZmZmYgDQqgmg3OP0MCAKCaDc4/QwIAAAAAAGIANQBhAGEAMAA3ADYAYwAtAGMAMQA4ADcALQA0ADQAZAAwAC0AYQBmADgANQAtADkAYwAwADIANABkADQAMQBkADMAYwA5AAAAAAANCjAwMDAwNmIzIDAwMDAwNmIzIDdmZmZmZmZmIA0KvVhNbiW5Dd4PMJdwto+AKFEitc1FBiIlHSBAVgMDyS7HyBGyGWCAYJAruE+SK+Sr56rX7cl0TwduxN0o+NmUxCL5/cj//ue/fsy377/70esYSVtQsCmJzERjW6UeKcsUniX6860doT1m5RSThu8g5inUpQilJKnXxXmHHnF8POp99/T4nG7pJhpScjKKXRJJRKPeZ6ZU9trd+kilPd+eXv7+8o8Pf/3wt5efP/zl5aeXX15+fvmJn153evrTn58+F4GlTze+6a3PHcN9Uxs6SGwMMs1Mc9el5qVptFu5cV1FWnby6E5yvFmffdOM1HPeJrWlW77pbtoKCyk37DarkJVSaSiPYlU9c2C38Mmb1yTNsyBsFPKZMkWTMnvt1XViN27sIXF/fTyKZRpJKu1qO9eVRa0gLBr+zRXIaDHCeJMzXmaJ5LV8WwtG2BxNDLWjvDmTsG2ylfHotXlwGq3tW37+/ruzNkcjnj/7TOcX/cbj+rphThpbGA1LnaSZUc+K124tj7qkidav2+nrgo7EX/9fc/T85rtveNQ3C7JUOD1yPF7i/5zAhbqnP6BsmmxPYCA8Fkm2Tl60UNJRh4qv1fnG9xn5dgnkrwsrjyIdGd/zPrNeErXsLrTqBi8N8IxhoCmz+TTmGIvPdU9/fMJ3R/7/43J+3/L8vuXlfcvlfcvr+5a39y3X9y239y3vb5cfO+SPosI/PJ0Avg9Yfp3RrqU56LzHCJJVwMeCE2ZZvWob3sXOcUxhPbRn4hblkMlK3ptj8GvysdLodV6he4l1Q3o1zyO00SihH0NV2yN0b+hSkG1BAhqBBBgfZ406cuap/cIR+7xr+KxjQok6k3sWgtCvtbj0BHE+Q6t2yFyhCGiN8EYCVoJWoHzeR4WInKFZIN4qEO9ejKTCKNiEKiaWLEOzM68ztKRZq0ynKgzG2S1DkBTGgqPN2MuzxxWqO+/RB3nW9vAU9a2nOEO7z7khwSmQoVQId4f00uw9NraGBPoVuqokGTAAayPXANuNyUwdlclzDwiwPUIVbgZSnJr+TgukucTsSnsyFH6BUoePTAV5TW0d2Vy7yrJsEGdKW4TEK0wG45CRvaAA6jOuClQzMYgnlbZgL+DFyAw8CVZeLjAOaV4V0BnzMBM0YlSSnht5lU5sMAVt4NDYZyh8SchA54EDJIBXJmtoseKo3DYDE1eu1qqmkhepChzJYhi84oPqnG3Z2K527Xo6wPVFB8hfZRHu+41dBQOYqOSGPhXZOHopXI7ONnMrFuU8OmCSUu+LuDj23A7vOGsiOL2UcspdH+MXAQOo3UgDRCCNEaqwmQoAuHpUGL8zFGek3rbjd/WACpzU2IADzk+iyhhN/0gSRwV2zFwH6mQ5XxU4UJAsCTrOvPsR1x4SfHpfjF/o9EJ9ZLS5gB865oIOYnH2NfrUrxNgmJ56ZwRGyS2BB4DiL0MnNZ5wwOipHia/pUW9YiTWVIxxQc1NrlBd+IDJMt18sRdo5zfYiwsXyYlpt+SvoZ+DDkfVNRwzVjCvIqiD81wEJ4sfN3UU/OKZzaMed5HtSFM84S4CkoQrPwZSOJcH05Y27LDwqCmwCLzD2UyfsOe+SrBqV31gl7NPrTDxfuhCBR4iKmVP3urue6QrAXh916PFua/8ZUawPBjLcWzO6WBakCxYilhwFPizjkeu3vDrgVHnJr+zKyYUxceGpQLrXw49binMBgCpH0jLYARcq7LVmUH3nvsVGlvQAFBSwY3lGpe0307uayhI1pKiUdAPFCuhu1a5U+lHEzbuKZIfqDiBsUozqANTGvcRywG6B6v1XaR22d19fHIZPFExBvBoindD28FojJsaXhNy3SYbt52ynfp8jEaxpQtsUiBPQCDew0BVZGBKX+E5rccUzbVmdzuK1kAXG5wlkIHIuBNFQW3uEvQJsHHPkp7APZGBf9yJCcQAjasVIuPNa/FfY1q3lm4Z4Ot63L4KFAZCCtkL0AOmaqxPsi/JOSU0E01B9gr8jYW2hlsMG2DCdk3rRvqmw6jJAtHX5VAOOAQvY80BSKSlb7KvjCV1Gq0h4LHUYHsMFGO5V9aaYGfWf1cfbd5eklBJh6AFONjrcW/NxrgxhLv4J/mvhmsvgMNFQda9InDh4gwcewUfowP1yj9mgQCDrOtRTENNukP+VkwHbzaTwW/yX83Y8qF/uehxKwZPNt3UU/AqRdEt/XX14TBaXgJlLfBlUiGJY8B0AHUFQMM0xmv1z79HKAAI1epRDq5QhpOqmIqElIbnMld9k9L9lPvF8/zhfwANCjAwMDAwMDYwIDAwMDAwMDYwIDdmZmZmZmZmIA0KoJoNzj9DAgCgmg3OP0MCAAAAAABjADEAOAA2ADEAOABjADgALQBhADgAMAA5AC0ANAA2ADgAOAAtADkAMgA3AGQALQA3ADYANgAyAGEANQBlADQANgA0ADcANQAAAAAADQowMDAwMDA3ZCAwMDAwMDIwMCA3ZmZmZmZmZiANCi2MwQlCMRBE74JN5JyF3XWzyS9nk68FCJ4+OXxsxDLUf7CFpBJbMIoMDMNjZt7bayG/3y34tX9CXygppZLAEk4gmhJMHGeIqmzhKCoxVO/arV/72tf2bPf2cL/1wM7TkGQ2zuU0PiSAUDYwPMyAIeNkXLQQeR7188VVj/UDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQowMDAwMDAyYyAwMDAwMDAyYyA3ZmZmZmZmZiANCqCaDc4/QwIAoJoNzj9DAgAAAAAAYwBvAG4AZgBpAGcAaQBuAGYAbwAAAAAADQowMDAwMDBmYyAwMDAwMDIwMCA3ZmZmZmZmZiANCo2OTW6CQABG9yRcgi0zcQZmhpkFixpFG7BYS0DYwQy1RZHKT1s1nqyLHqlXaGt6gCZv8SUvX/K+Pj7PCOja2cIMXAdHNkYAXXTtl6sCBc1z5DAJJeYOJEQhmD9yCoVEFlEEK1sKkGdPiyax3t5LM/LZ3KPWdGSfnE6eaL3P4ociQau9GUzGq24I42OvttkkvntNpqLiu3BY67rWF2F6PKh6qEkT9DfpTPDO3LjuX4bxnw4DHG6ffc8bVeqFBmbjdyqSXlS1y1177wLj58owlxzmHAlIGOdQWI6CDmNWTkvCiEMNMPJwMF4Uy3mIzSgMN22Jt0UwzNZF6l6+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; 31 | Возврат ЗапакованныеДанные; 32 | КонецФункции 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/core/Классы/internal/Классы/РепозиторийСинхронизации.os: -------------------------------------------------------------------------------- 1 | #Использовать logos 2 | 3 | Перем Наименование; 4 | Перем ПутьКХранилищу; 5 | Перем ПутьКРабочемуКаталогу; 6 | Перем ПутьИсполняемомуФайлуГит; 7 | Перем ПутьКВременномуКаталогу; 8 | Перем ВерсияПлатформы; 9 | Перем ДоменПочтыПоУмолчанию; 10 | Перем ПользовательХранилища; 11 | Перем ПарольПользователяХранилища; 12 | Перем УровеньЛогаСинхронизации; 13 | Перем КоличествоЦикловОжиданияЛицензии; 14 | Перем ИмяРасширения; 15 | Перем ИндексПодписчиков; 16 | Перем ПараметрыПодписчиков; 17 | 18 | Перем МенеджерСинхронизации; 19 | Перем КаталогПлагинов; 20 | 21 | Перем Лог; 22 | 23 | // Обертка над МенеджерСинхронизации.Синхронизировать 24 | // 25 | // СтрокаСоединенияИБ - Строка, необязательный, формат: /SServerName\BaseName или /F<Путь к ИБ> 26 | // ПользовательИБ - Строка, необязательный 27 | // ПарольПользователяИБ - Строка, необязательный 28 | Процедура Синхронизировать(Знач СтрокаСоединенияИБ = "", 29 | Знач ПользовательИБ = "", 30 | Знач ПарольПользователяИБ = "") Экспорт 31 | 32 | Лог.Информация("================================="); 33 | Лог.Информация("Начало синхронизации с хранилищем"); 34 | Лог.Информация("Наименование: <%1>", Наименование); 35 | Лог.Информация("Путь к хранилищу: <%1>", ПутьКХранилищу); 36 | Лог.Информация("Путь к рабочей копии: <%1>", ПутьКРабочемуКаталогу); 37 | 38 | ПроверитьВозможностьСинхронизации(); 39 | 40 | МенеджерСинхронизации = ПолучитьМенеджерСинхронизации(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ); 41 | 42 | Если МенеджерСинхронизации.ТребуетсяСинхронизироватьХранилищеСГит(ПутьКРабочемуКаталогу, ПутьКХранилищу) Тогда 43 | 44 | МенеджерСинхронизации.Синхронизировать(ПутьКРабочемуКаталогу, ПутьКХранилищу, 45 | СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ); 46 | 47 | Лог.Информация("Завершена синхронизации с хранилищем"); 48 | Лог.Информация("Наименование: <%1>", Наименование); 49 | Лог.Информация("Путь к хранилищу: <%1>", ПутьКХранилищу); 50 | Лог.Информация("Путь к рабочей копии: <%1>", ПутьКРабочемуКаталогу); 51 | 52 | Иначе 53 | Лог.Информация("--> Синхронизация не требуется <--"); 54 | КонецЕсли; 55 | Лог.Информация("================================="); 56 | 57 | КонецПроцедуры 58 | 59 | Процедура ПроверитьВозможностьСинхронизации() 60 | // TODO: Написать проверку какую? ) 61 | КонецПроцедуры 62 | 63 | Функция ПолучитьМенеджерСинхронизации(Знач СтрокаСоединенияИБ = "", 64 | Знач ПользовательИБ = "", 65 | Знач ПарольПользователяИБ = "") 66 | 67 | МенеджерСинхронизации = Новый МенеджерСинхронизации(); 68 | МенеджерСинхронизации.ВерсияПлатформы(ВерсияПлатформы) 69 | .ДоменПочтыПоУмолчанию(ДоменПочтыПоУмолчанию) 70 | .ИсполняемыйФайлГит(ПутьИсполняемомуФайлуГит) 71 | .ПодпискиНаСобытия(ИндексПодписчиков) 72 | .ПараметрыПодписокНаСобытия(ПараметрыПодписчиков) 73 | .ЦикловОжиданияЛицензии(КоличествоЦикловОжиданияЛицензии) 74 | .РежимУдаленияВременныхФайлов(Истина) 75 | .АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища); 76 | 77 | Если ЗначениеЗаполнено(СтрокаСоединенияИБ) Тогда 78 | МенеджерСинхронизации.УстановитьКонтекст(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ); 79 | КонецЕсли; 80 | 81 | Если ЗначениеЗаполнено(ИмяРасширения) Тогда 82 | МенеджерСинхронизации.ИмяРасширения(ИмяРасширения); 83 | КонецЕсли; 84 | 85 | Возврат МенеджерСинхронизации; 86 | 87 | КонецФункции 88 | 89 | // Устанавливает путь к каталогу плагинов 90 | // 91 | // Параметры: 92 | // НовыйКаталогПлагинов - Строка - путь к каталогу плагинов 93 | // 94 | // Возвращаемое значение: 95 | // Объект.МенеджерСинхронизации - ссылка на текущий объект класса <МенеджерСинхронизации> 96 | // 97 | Функция КаталогПлагинов(Знач НовыйКаталогПлагинов) Экспорт 98 | КаталогПлагинов = НовыйКаталогПлагинов; 99 | Возврат ЭтотОбъект; 100 | КонецФункции 101 | 102 | Процедура ПрочитатьПараметры(Знач ВходящиеПараметры) Экспорт 103 | 104 | Наименование = ВходящиеПараметры.Наименование; 105 | ПользовательХранилища = ВходящиеПараметры.ПользовательХранилища; 106 | ПарольПользователяХранилища = ВходящиеПараметры.ПарольПользователяХранилища; 107 | ВерсияПлатформы = ВходящиеПараметры.ВерсияПлатформы; 108 | ИмяРасширения = ВходящиеПараметры.ИмяРасширения; 109 | ПутьКХранилищу = ВходящиеПараметры.ПутьКХранилищу; 110 | ПутьКРабочемуКаталогу = ВходящиеПараметры.ПутьКРабочемуКаталогу; 111 | ПутьИсполняемомуФайлуГит = ВходящиеПараметры.ПутьИсполняемомуФайлуГит; 112 | ПутьКВременномуКаталогу = ВходящиеПараметры.ПутьКВременномуКаталогу; 113 | ДоменПочтыПоУмолчанию = ВходящиеПараметры.ДоменПочтыПоУмолчанию; 114 | КоличествоЦикловОжиданияЛицензии = ВходящиеПараметры.КоличествоЦикловОжиданияЛицензии; 115 | 116 | ПрочитатьПлагины(ВходящиеПараметры.Плагины); 117 | 118 | ПараметрыПодписчиков = ВходящиеПараметры.НастройкиПлагинов; 119 | 120 | КонецПроцедуры 121 | 122 | Процедура ПрочитатьПлагины(Знач НастройкаПлагинов) 123 | 124 | МенеджерПлагинов = Новый МенеджерПлагинов; 125 | МенеджерПлагинов.УстановитьКаталогПлагинов(КаталогПлагинов); 126 | МенеджерПлагинов.ЗагрузитьПлагины(); 127 | 128 | МенеджерПлагинов.ВключитьПлагины(НастройкаПлагинов.ВключенныеПлагины); 129 | МенеджерПлагинов.ВключитьПлагины(НастройкаПлагинов.ДополнительныеПлагины); 130 | МенеджерПлагинов.ОтключитьПлагины(НастройкаПлагинов.ОтключенныеПлагины); 131 | 132 | ИндексПодписчиков = МенеджерПлагинов.ПолучитьИндексПлагинов(); 133 | 134 | КонецПроцедуры 135 | 136 | Процедура ПриСозданииОбъекта() 137 | 138 | Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync.batch"); 139 | 140 | КонецПроцедуры 141 | -------------------------------------------------------------------------------- /features/cmd/step_definitions/all.os: -------------------------------------------------------------------------------- 1 | #Использовать tempfiles 2 | #Использовать yaml 3 | 4 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 5 | 6 | Перем БДД; //контекст фреймворка 1bdd 7 | 8 | // Метод выдает список шагов, реализованных в данном файле-шагов 9 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 10 | БДД = КонтекстФреймворкаBDD; 11 | 12 | ВсеШаги = Новый Массив; 13 | 14 | ВсеШаги.Добавить("ЯСоздаюТестовойФайлAuthorsВКаталогеИзПеременной"); 15 | ВсеШаги.Добавить("ЯЗаписываюВФайлVersionВКаталогеИзПеременной"); 16 | ВсеШаги.Добавить("ЯСоздаюФайлНастройкиИзФайлаИСохраняюВПеременную"); 17 | ВсеШаги.Добавить("ЯДобавляюПараметр__Параметрдлятаблицы____Параметрстрока__Gitsync"); 18 | 19 | Возврат ВсеШаги; 20 | КонецФункции 21 | 22 | // Реализация шагов 23 | 24 | // Процедура выполняется перед запуском каждого сценария 25 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 26 | 27 | КонецПроцедуры 28 | 29 | // Процедура выполняется после завершения каждого сценария 30 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 31 | 32 | КонецПроцедуры 33 | 34 | 35 | 36 | //Я создаю тестовой файл AUTHORS в каталоге из переменной "ПутьКаталогаИсходников_1" 37 | Процедура ЯСоздаюТестовойФайлAuthorsВКаталогеИзПеременной(Знач ИмяПеременной) Экспорт 38 | ПутьКаталогаИсходников = БДД.ПолучитьИзКонтекста(ИмяПеременной); 39 | ФайлАвторов = Новый ЗаписьТекста; 40 | ФайлАвторов.Открыть(ОбъединитьПути(ПутьКаталогаИсходников, "AUTHORS"), "utf-8"); 41 | ФайлАвторов.ЗаписатьСтроку("Администратор=Администратор "); 42 | ФайлАвторов.ЗаписатьСтроку("Отладка=Отладка "); 43 | ФайлАвторов.Закрыть(); 44 | КонецПроцедуры 45 | 46 | //Я записываю "0" в файл VERSION в каталоге из переменной "ПутьКаталогаИсходников_1" 47 | Процедура ЯЗаписываюВФайлVersionВКаталогеИзПеременной(Знач НомерВерсии, Знач ИмяПеременной) Экспорт 48 | 49 | ПутьКаталогаИсходников = БДД.ПолучитьИзКонтекста(ИмяПеременной); 50 | 51 | ПутьКФайлуВерсий = ОбъединитьПути(ПутьКаталогаИсходников,"VERSION"); 52 | Попытка 53 | Запись = Новый ЗаписьТекста(ПутьКФайлуВерсий, "utf-8"); 54 | Запись.ЗаписатьСтроку(""); 55 | Запись.ЗаписатьСтроку("" + НомерВерсии + ""); 56 | Запись.Закрыть(); 57 | Исключение 58 | Если Запись <> Неопределено Тогда 59 | ОсвободитьОбъект(Запись); 60 | КонецЕсли; 61 | ВызватьИсключение; 62 | КонецПопытки; 63 | КонецПроцедуры 64 | 65 | //Я создаю файл настройки из файла и сохраняю в переменную "FILE" 66 | Процедура ЯСоздаюФайлНастройкиИзФайлаИСохраняюВПеременную(Знач ПутьКФайлу, Знач ИмяПеременной) Экспорт 67 | 68 | 69 | ПутьКаталогаИсходников_1 = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников_1"); 70 | КаталогХранилища1С_1 = БДД.ПолучитьИзКонтекста("КаталогХранилища1С_1"); 71 | 72 | ПутьКаталогаИсходников_2 = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников_2"); 73 | КаталогХранилища1С_2 = БДД.ПолучитьИзКонтекста("КаталогХранилища1С_2"); 74 | 75 | ПутьКаталогаИсходниковРасширения = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходниковРасширения"); 76 | КаталогХранилищаРасширения = БДД.ПолучитьИзКонтекста("КаталогХранилищаРасширения"); 77 | 78 | 79 | ЧтениеТекста = Новый ЧтениеТекста(); 80 | ЧтениеТекста.Открыть(ПутьКФайлу, КодировкаТекста.UTF8); 81 | ТекстYaml = ЧтениеТекста.Прочитать(); 82 | ЧтениеТекста.Закрыть(); 83 | 84 | ТекстYaml = СтрЗаменить(ТекстYaml, "<ПутьКаталогаИсходников_1>", ПутьКаталогаИсходников_1); 85 | ТекстYaml = СтрЗаменить(ТекстYaml, "<КаталогХранилища1С_1>", КаталогХранилища1С_1); 86 | 87 | ТекстYaml = СтрЗаменить(ТекстYaml, "<ПутьКаталогаИсходников_2>", ПутьКаталогаИсходников_2); 88 | ТекстYaml = СтрЗаменить(ТекстYaml, "<КаталогХранилища1С_2>", КаталогХранилища1С_2); 89 | 90 | ТекстYaml = СтрЗаменить(ТекстYaml, "<ПутьКаталогаИсходниковРасширения>", ПутьКаталогаИсходниковРасширения); 91 | ТекстYaml = СтрЗаменить(ТекстYaml, "<КаталогХранилищаРасширения>", КаталогХранилищаРасширения); 92 | 93 | ВременныйФайл = ВременныеФайлы.СоздатьФайл(".yaml"); 94 | 95 | ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл); 96 | ЗаписьТекста.Записать(ТекстYaml); 97 | ЗаписьТекста.Закрыть(); 98 | 99 | 100 | ЧтениеТекста = Новый ЧтениеТекста(); 101 | ЧтениеТекста.Открыть(ВременныйФайл, КодировкаТекста.UTF8); 102 | ТекстYaml = ЧтениеТекста.Прочитать(); 103 | ЧтениеТекста.Закрыть(); 104 | 105 | ПарсерYAml = Новый ПарсерYaml(); 106 | Результа = ПарсерYAml.ПрочитатьYaml(ТекстYaml); 107 | 108 | ТекстJson = ОБъектВJson(Результа); 109 | 110 | ВременныйФайл = ВременныеФайлы.СоздатьФайл(".json"); 111 | ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл); 112 | ЗаписьТекста.Записать(ТекстJson); 113 | ЗаписьТекста.Закрыть(); 114 | 115 | БДД.СохранитьВКонтекст(ИмяПеременной, ВременныйФайл); 116 | 117 | КонецПроцедуры 118 | 119 | 120 | Функция ОБъектВJson(Знач Объект, ПараметрыЗаписи = Неопределено) Экспорт 121 | 122 | Если ПараметрыЗаписи = Неопределено Тогда 123 | ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", ,,,,,, Истина); 124 | КонецЕсли; 125 | 126 | ЗаписьJSON = Новый ЗаписьJSON; 127 | ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи); 128 | ЗаписатьJSON(ЗаписьJSON, Объект); 129 | 130 | Возврат ЗаписьJSON.Закрыть(); 131 | 132 | КонецФункции 133 | 134 | Функция ОбъектИзJson(ТекстJSON, ЧитатьВСтруктуру = Ложь, ФорматДаты = Неопределено) Экспорт 135 | 136 | Если ФорматДаты = Неопределено Тогда 137 | ФорматДаты = ФорматДатыJSON.ISO; 138 | КонецЕсли; 139 | ЧтениеJSON = Новый ЧтениеJSON; 140 | ЧтениеJSON.УстановитьСтроку(ТекстJSON); 141 | 142 | Объект = ПрочитатьJSON(ЧтениеJSON, 143 | НЕ ЧитатьВСтруктуру,, 144 | ФорматДаты); 145 | ЧтениеJSON.Закрыть(); 146 | Возврат Объект; 147 | 148 | КонецФункции 149 | -------------------------------------------------------------------------------- /docs/init.md: -------------------------------------------------------------------------------- 1 | # Подробное описание использования команды 2 | 3 | init (синоним i) - инициализация нового хранилища git и наполнение его данными из хранилища 1С 4 | 5 | > Подробную справку по опциям и аргументам см. `gitsync init --help` 6 | 7 | -------------- 8 | ### Справка по использованию команды: 9 | ``` 10 | Команда: init, i 11 | Инициализация структуры нового хранилища git. Подготовка к синхронизации 12 | 13 | Строка запуска: gitsync init [ОПЦИИ] PATH [WORKDIR] 14 | 15 | Аргументы: 16 | PATH Путь к хранилищу конфигурации 1С. (env $GITSYNC_STORAGE_PATH) 17 | WORKDIR Адрес локального репозитория GIT или каталог исходников внутри локальной копии git-репозитория. По умолчанию текущий каталог (env $GITSYNC_WORKDIR) 18 | 19 | Опции: 20 | -u, --storage-user пользователь хранилища конфигурации (env $GITSYNC_STORAGE_USER) (по умолчанию Администратор) 21 | -p, --storage-pwd пароль пользователя хранилища конфигурации (env $GITSYNC_STORAGE_PASSWORD, $GITSYNC_STORAGE_PWD) 22 | ``` 23 | -------------- 24 | ### Глобальные переменные окружения 25 | | Имя | Описание | 26 | |---------------------|--------------------------------------------------------| 27 | | `GITSYNC_V8VERSION` | маска версии платформы (8.3, 8.3.5, 8.3.6.2299 и т.п.) | 28 | | `GITSYNC_VERBOSE` | вывод отладочной информации в процессе выполнения | 29 | | `GITSYNC_TEMP` | путь к каталогу временных файлов | 30 | | `GITSYNC_EMAIL` | домен почты для пользователей git | 31 | 32 | -------------- 33 | ### Переменные окружения команды 34 | 35 | | Имя | Описание | 36 | |----------------------------|--------------------------------------------| 37 | | `GITSYNC_WORKDIR` | рабочий каталог для команды | 38 | | `GITSYNC_STORAGE_PATH` | путь к хранилищу конфигурации 1С. | 39 | | `GITSYNC_STORAGE_USER` | пользователь хранилища конфигурации | 40 | | `GITSYNC_STORAGE_PASSWORD` | пароль пользователя хранилища конфигурации | 41 | -------------- 42 | ### Значения по умолчанию: 43 | | | | 44 | |--------------------|------------------------------| 45 | | WORKDIR | текущая рабочая директория | 46 | | -u, --storage-user | пользователь `Администратор` | 47 | 48 | -------------- 49 | ## Примеры, использования 50 | *** 51 | * Простое использование 52 | 53 | `gitsync init C:/Хранилище_1С/ C:/GIT/src` 54 | 55 | Данная команда создаст новый репозиторий git в каталоге `C:/GIT/src` из хранилища 1С по пути `C:/Хранилище_1С/` 56 | *** 57 | * Указание конкретной версии платформы 58 | 59 | `gitsync --v8version=8.3.9 init C:/Хранилище_1С/ C:/GIT/src` 60 | 61 | Данная команда создаст новый репозиторий git в каталоге `C:/GIT/src` из хранилища 1С по пути `C:/Хранилище_1С/` 62 | Для работы будет использоваться платформа 8.3.9.xxxx 63 | *** 64 | * Указание вывода отладочных логов 65 | 66 | `gitsync --verbose init C:/Хранилище_1С/ C:/GIT/src` 67 | или 68 | `gitsync -v init C:/Хранилище_1С/ C:/GIT/src` 69 | 70 | Данная команда создаст новый репозиторий git в каталоге `C:/GIT/src` из хранилища 1С по пути `C:/Хранилище_1С/` 71 | После указания будет выводиться дополнительные отладочные логи с признаком `Отладка` 72 | *** 73 | * Указание каталога временных файлов при работе приложения 74 | 75 | `gitsync --tempdir=./temp_sync/ init C:/Хранилище_1С/ C:/GIT/src` 76 | или 77 | `gitsync -t ./temp_sync/ init C:/Хранилище_1С/ C:/GIT/src` 78 | 79 | Данная команда создаст новый репозиторий git в каталоге `C:/GIT/src` из хранилища 1С по пути `C:/Хранилище_1С/` 80 | Для работы будет использоваться каталог временных файлов `./temp_sync/` 81 | *** 82 | * Инициализация в текущем рабочем каталоге, 83 | 84 | > переменная окружения **`GITSYNC_WORKDIR`** не должна быть задана 85 | 86 | ```sh 87 | cd C:/work_dir/ 88 | gitsync init C:/Хранилище_1С/ 89 | ``` 90 | Данная команда создаст новый репозиторий git в каталоге `C:/work_dir/` из хранилища 1С по пути `C:/Хранилище_1С/` 91 | *** 92 | * Инициализация в с указанием пользователя и пароля. 93 | 94 | ```sh 95 | gitsync init --storage-user Admin --storage-pwd=Secret C:/Хранилище_1С/ C:/work_dir/ 96 | ``` 97 | Данная команда создаст новый репозиторий git в каталоге `C:/work_dir/` из хранилища 1С по пути `C:/Хранилище_1С/` 98 | *** 99 | * Использование синонимов (короткая версия предыдущего примера) 100 | 101 | ```sh 102 | gitsync i -uAdmin -p=Secret C:/Хранилище_1С/ C:/work_dir/ 103 | ``` 104 | Данная команда создаст новый репозиторий git в каталоге `C:/work_dir/` из хранилища 1С по пути `C:/Хранилище_1С/` 105 | *** 106 | * Использование только переменных окружения 107 | 108 | linux: 109 | ```sh 110 | export GITSYNC_WORKDIR=./work_dir/ 111 | export GITSYNC_STORAGE_PATH=./Хранилище_1С/ 112 | 113 | export GITSYNC_STORAGE_USER=Админ 114 | export GITSYNC_STORAGE_PASSWORD=Пароль 115 | export GITSYNC_V8VERSION=8.3.7 116 | export GITSYNC_VERBOSE=true #Можно использовать Да/Ложь/Нет/Истина 117 | export GITSYNC_TEMP=./temp/sync 118 | gitsync i 119 | ``` 120 | 121 | windows: 122 | ```cmd 123 | set GITSYNC_WORKDIR=./work_dir/ 124 | set GITSYNC_STORAGE_PATH=./Хранилище_1С/ 125 | 126 | set GITSYNC_STORAGE_USER=Админ 127 | set GITSYNC_STORAGE_PASSWORD=Пароль 128 | set GITSYNC_V8VERSION=8.3.7 129 | set GITSYNC_VERBOSE=true #Можно использовать Да/Ложь/Нет/Истина 130 | set GITSYNC_TEMP=./temp/sync 131 | 132 | gitsync i 133 | ``` 134 | Данная команда создаст новый репозиторий git в каталоге `C:/work_dir/` из хранилища 1С по пути `C:/Хранилище_1С/` --------------------------------------------------------------------------------