├── 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С/`
--------------------------------------------------------------------------------