diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 36a8d6c4..535141d4 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -136,20 +136,8 @@ git checkout -b feature/issue-9999 * участвуйте, обосновывайте, приводите примеры * используйте ТРИЗ для построения непротиворечивых решений -### Enterprise-поддержка - -если вы бизнесмен или менеджер - -* обратитесь по адресу `b2b@silverbulleters.org` -* заключите контракт на Enterprise-поддержку с гарантией по SLA и c контролем NPS -* публикуйте любые запросы на доработку и консультацию - они будут выполнены или по ним будет выдан ответ в первом приоритете - * на данный момент за последние год мы поддерживаем следующие медианы: - * время реакции - 24 минуты, - * время решения - 23 часа - # Если ничего не понятно -* используйте [форум XDD](https://xdd.silverbulleters.org) для того, чтобы задать вопрос -* запишитесь на практические занятия по правильной разработке 1С +* используйте [Telegram](https://t.me/oscript_library) для того, чтобы задать вопрос -```(c) oscript-library - последнее обновление: 14.01.2019``` +```(c) oscript-library - последнее обновление: 26.08.2021``` diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index c8f5890a..e3320319 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -28,4 +28,4 @@ about: если вы выявили ошибку - сообщите нам об **Дополнительный контекст** -Типовая или не типовая конфиугарация ? Включен ли режим защиты от опасных действий и т.д. +Типовая или не типовая конфигурация ? Включен ли режим защиты от опасных действий и т.д. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index f60e9dc3..408d3888 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -12,11 +12,3 @@ about: предложение новой идеи или функциональ **Дополнительный контекст** Любая дополнительная информация - - diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml new file mode 100644 index 00000000..d26f7eb6 --- /dev/null +++ b/.github/workflows/qa.yml @@ -0,0 +1,14 @@ +name: Контроль качества + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + sonar: + uses: autumn-library/workflows/.github/workflows/sonar.yml@main + with: + github_repository: oscript-library/gitsync + secrets: + SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..625c9fdc --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,75 @@ +# MIT License +# Copyright (C) 2020 Tymko Oleg and contributors +# All rights reserved. + +name: Подготовка релиза и публикация в хабе +# Только события создания и изменения релиза +on: + release: + types: [published] +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + oscript_version: ['1.9.0'] + package_mask: ["gitsync-*.ospx"] + package_exe_mask: ["gitsync.exe"] + steps: + # Загрузка проекта + - name: Актуализация + uses: actions/checkout@v2 + + # Установка OneScript конкретной версии + - name: Установка OneScript + uses: otymko/setup-onescript@v1.0 + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + with: + version: ${{ matrix.oscript_version }} + + # Установка зависимостей пакета + - name: Установка зависимостей + run: | + opm install opm + opm install + + - name: Сборка пакета + run: opm run build + + - name: Заливка артифактов + uses: actions/upload-artifact@v2 + with: + name: gitsync.ospx.zip + path: ./${{ matrix.package_mask }} + + - name: Заливка в релиз + uses: AButler/upload-release-assets@v1.0 + with: + files: ./${{ matrix.package_mask }} + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Публикация в hub.oscript.io + shell: bash + run: opm push -f ./${{ matrix.package_mask }} --token ${{ env.TOKEN }} -c stable + env: + TOKEN: ${{ secrets.OSHUB_TOKEN }} + + - name: Сборка пакета exe + run: | + opm run pack + opm run make + + - name: Заливка артифактов + uses: actions/upload-artifact@v2 + with: + name: gitsync.exe.zip + path: ./bin/${{ matrix.package_exe_mask }} + + - name: Заливка в релиз exe + uses: AButler/upload-release-assets@v1.0 + with: + files: ./bin/${{ matrix.package_exe_mask }} + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml new file mode 100644 index 00000000..96308d44 --- /dev/null +++ b/.github/workflows/testing.yml @@ -0,0 +1,39 @@ +# MIT License +# Copyright (C) 2020 Tymko Oleg and contributors +# All rights reserved. + +name: Тестирование +# Любой пуш и pr в проекте +on: [push, pull_request] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + oscript_version: ['1.9.0'] + + steps: + # Загрузка проекта + - name: Актуализация + uses: actions/checkout@v2 + + # Установка OneScript конкретной версии + - name: Установка OneScript + uses: otymko/setup-onescript@v1.0 + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + with: + version: ${{ matrix.oscript_version }} + + # Установка зависимостей пакета + - name: Установка зависимостей + run: | + opm install opm + opm install -l --dev + + # Задача тестирования, в результате ожидается успешное выполнение + - name: Тестирование + run: oscript ./tasks/test.os true diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 47f4ecb7..00000000 --- a/.travis.yml +++ /dev/null @@ -1,54 +0,0 @@ -language: generic - -sudo: required - -notifications: - email: false - -services: - - docker - -install: - - docker pull harmit/ci-image - -env: - global: - - GIT_EMAIL=ci@mail - - GIT_NAME=ci - - CHANNEL=dev - - PACKAGE_NAME=gitsync - matrix: - - OSCRIPT_VERSION=1_0_20 - - OSCRIPT_VERSION=night-build -matrix: - allow_failures: - - env: OSCRIPT_VERSION=night-build - -script: -- docker version -- docker run -it -e OSCRIPT_VERSION=$OSCRIPT_VERSION -e GIT_EMAIL=$GIT_EMAIL -e GIT_NAME=$GIT_NAME -v $(pwd):/work_dir harmit/ci-image sh -c 'cd /work_dir; sh /work_dir/travis-ci.sh; exit' | tee /tmp/test.log -- grep 'Результат прогона тестов <Да>' /tmp/test.log -after_success: -# - bash <(curl -s https://codecov.io/bash) -- ./sonar-qube.sh - -cache: - directories: - - '$HOME/.m2/repository' - - '$HOME/.sonar/cache' -jobs: - include: - - stage: Сборка и публикация github & hub.oscript.io - script: skip - before_deploy: - - docker run -it -v $(pwd):/work_dir evilbeaver/onescript:1.0.19 sh -c 'cd /work_dir; opm build ./ ; exit' - deploy: - - provider: releases - api_key: "$GITHUB_OAUTH_TOKEN" - file_glob: true - file: $PACKAGE_NAME*.ospx - skip_cleanup: true - on: - branch: master - tags: true - diff --git a/Jenkinsfile b/Jenkinsfile index ddcd33c1..cbf0d4e3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -23,13 +23,18 @@ pipeline { } else echo 'no testing task' + + def scannerHome = tool 'sonar-scanner'; + withSonarQubeEnv('silverbulleters') { + sh "${scannerHome}/bin/sonar-scanner" + } } } } - stage('Тестирование кода пакета LINUX') { +/* stage('Тестирование кода пакета LINUX') { agent { label 'master' } @@ -38,57 +43,7 @@ pipeline { } } +*/ - stage('Сборка пакета') { - - agent { label 'windows' } - - steps { - checkout scm - - bat 'erase /Q *.ospx' - bat 'chcp 65001 > nul && call opm build .' - - stash includes: '*.ospx', name: 'package' - archiveArtifacts '*.ospx' - } - - } - - stage('Публикация в хабе') { - when { - branch 'master' - } - agent { label 'master' } - steps { - sh 'rm -f *.ospx' - unstash 'package' - - sh ''' - artifact=`ls -1 *.ospx` - basename=`echo $artifact | sed -r 's/(.+)-.*(.ospx)/\\1/'` - cp $artifact $basename.ospx - sudo rsync -rv *.ospx /var/www/hub.oscript.io/download/$basename/ - '''.stripIndent() - } - } - - stage('Публикация в нестабильном хабе') { - when { - branch 'develop' - } - agent { label 'master' } - steps { - sh 'rm -f *.ospx' - unstash 'package' - - sh ''' - artifact=`ls -1 *.ospx` - basename=`echo $artifact | sed -r 's/(.+)-.*(.ospx)/\\1/'` - cp $artifact $basename.ospx - sudo rsync -rv *.ospx /var/www/hub.oscript.io/dev-channel/$basename/ - '''.stripIndent() - } - } } } diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..a612ad98 --- /dev/null +++ b/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/build_packagedef b/build_packagedef index 25b322bf..3d1df3e1 100644 --- a/build_packagedef +++ b/build_packagedef @@ -20,7 +20,7 @@ КомандаOpm = Новый Команда; КомандаOpm.УстановитьКоманду("opm"); КомандаOpm.ДобавитьПараметр("run get-plugins"); - КомандаOpm.ДобавитьПараметр("develop"); + // КомандаOpm.ДобавитьПараметр("develop"); КомандаOpm.ДобавитьЛогВыводаКоманды("task.build"); @@ -45,8 +45,8 @@ КонецПроцедуры Описание.Имя("gitsync") - .Версия("3.0.0-rc.2") - .ВерсияСреды("1.0.21") + .Версия("3.6.1") + .ВерсияСреды("1.8.4") .ВключитьФайл("src") .ВключитьФайл("embedded_plugins") .ВключитьФайл("oscript_modules") @@ -55,4 +55,4 @@ .ОпределяетКласс("МенеджерПлагинов", "src/core/Классы/МенеджерПлагинов.os") .ОпределяетКласс("МенеджерСинхронизации", "src/core/Классы/МенеджерСинхронизации.os") .ОпределяетКласс("ПакетнаяСинхронизация", "src/core/Классы/ПакетнаяСинхронизация.os") - .ИсполняемыйФайл("src/cmd/gitsync.os"); \ No newline at end of file + .ИсполняемыйФайл("src/cmd/gitsync.os"); diff --git a/docs/sync.md b/docs/sync.md index 20f32bca..eff6b283 100644 --- a/docs/sync.md +++ b/docs/sync.md @@ -18,6 +18,7 @@ sync (синоним s) - Выполняет синхронизацию хран Опции: -u, --storage-user пользователь хранилища конфигурации (env $GITSYNC_STORAGE_USER) (по умолчанию Администратор) -p, --storage-pwd пароль пользователя хранилища конфигурации (env $GITSYNC_STORAGE_PASSWORD, $GITSYNC_STORAGE_PWD) + -e, --ext имя расширения для работы с хранилищем расширения(env $GITSYNC_EXTENSION) ``` ### Глобальные переменные окружения @@ -36,6 +37,7 @@ sync (синоним s) - Выполняет синхронизацию хран | `GITSYNC_STORAGE_PATH` | путь к хранилищу конфигурации 1С. | | `GITSYNC_STORAGE_USER` | пользователь хранилища конфигурации | | `GITSYNC_STORAGE_PASSWORD` | пароль пользователя хранилища конфигурации | +| `GITSYNC_EXTENSION` | имя расширения | ### Значения по умолчанию @@ -52,6 +54,12 @@ sync (синоним s) - Выполняет синхронизацию хран Данная команда выполнить синхронизацию хранилища 1С по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/GIT/src` +* Простое использование для выгрузки расширения конфигурации + + `gitsync sync --ext ИМЯ_Расширения C:/Хранилище_1С/ C:/GIT/src` + + Данная команда выполняет синхронизацию хранилища расширения 1С с именем `ИМЯ_Расширения` по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/GIT/src` + * Инициализация в текущем рабочем каталоге, > переменная окружения **`GITSYNC_WORKDIR`** не должна быть задана diff --git a/features/cmd/all.feature b/features/cmd/all.feature index f459136a..505fe454 100644 --- a/features/cmd/all.feature +++ b/features/cmd/all.feature @@ -49,7 +49,7 @@ Примеры: | Сценарий | ПутьКФайлуШаблона | ДопПараметрыЗапуска | Результат | - | Выполнение синхронизации по имени | tests/fixtures/default.yaml | --name ТестовыйРепозиторий | ИНФОРМАЦИЯ - Наименование: <ТестовыйРепозиторий> | - | Выполнение синхронизации с несколькими хранилищами | tests/fixtures/default.yaml | | ИНФОРМАЦИЯ - Завершено выполнение команды | - | Выполнение синхронизации расширениями | tests/fixtures/ext.yaml | | ИНФОРМАЦИЯ - Завершено выполнение команды | + | Выполнение синхронизации по имени | tests/fixtures/default.yaml | --name ТестовыйРепозиторий | Наименование: <ТестовыйРепозиторий> | + | Выполнение синхронизации с несколькими хранилищами | tests/fixtures/default.yaml | | Завершено выполнение команды | + | Выполнение синхронизации расширениями | tests/fixtures/ext.yaml | | Завершено выполнение команды | \ No newline at end of file diff --git a/features/cmd/clone.feature b/features/cmd/clone.feature index b46b6519..3aa3b792 100644 --- a/features/cmd/clone.feature +++ b/features/cmd/clone.feature @@ -24,7 +24,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Клонирование завершено" + Тогда Вывод команды "gitsync" содержит "Клонирование завершено" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "AUTHORS" @@ -37,7 +37,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" И Я устанавливаю рабочей каталог из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Клонирование завершено" + Тогда Вывод команды "gitsync" содержит "Клонирование завершено" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "AUTHORS" @@ -50,7 +50,7 @@ И Я устанавливаю переменную окружения "GITSYNC_STORAGE_PATH" из переменной "КаталогХранилища1С" И Я устанавливаю переменную окружения "GITSYNC_WORKDIR" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Клонирование завершено" + Тогда Вывод команды "gitsync" содержит "Клонирование завершено" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "AUTHORS" diff --git a/features/cmd/extention.feature b/features/cmd/extention.feature index a4258692..71d6ba85 100644 --- a/features/cmd/extention.feature +++ b/features/cmd/extention.feature @@ -25,6 +25,6 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 \ No newline at end of file diff --git a/features/cmd/ibconnection.feature b/features/cmd/ibconnection.feature index ff9c1d7a..4f0bd754 100644 --- a/features/cmd/ibconnection.feature +++ b/features/cmd/ibconnection.feature @@ -12,13 +12,13 @@ И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С" И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" - И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" И Я создаю временную базу и сохраняю в переменную "ВременнаяБаза" - И Я создаю тестовой файл AUTHORS - И Я записываю "0" в файл VERSION Сценарий: Простая синхронизация хранилища с git-репозиторием Допустим Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" + И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" + И Я создаю тестовой файл AUTHORS + И Я записываю "0" в файл VERSION И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" И Я добавляю параметр "--ib-connection" для команды "gitsync" из переменной "ВременнаяБаза" @@ -47,6 +47,7 @@ И Код возврата команды "gitsync" равен 0 И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "AUTHORS" И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "VERSION" + И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог "README.md" Сценарий: Инициализация каталога исходников в пустом каталоге внутри git-репозитория Допустим Я инициализирую пустой репозиторий в каталог из переменной "ПутьКаталогаИсходников" diff --git a/features/cmd/init.feature b/features/cmd/init.feature index c42a8ea9..d7c6a932 100644 --- a/features/cmd/init.feature +++ b/features/cmd/init.feature @@ -21,7 +21,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогSRC" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Инициализация завершена" + Тогда Вывод команды "gitsync" содержит "Инициализация завершена" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И В каталоге из переменной "КаталогSRC" создается файл или каталог "AUTHORS" @@ -35,7 +35,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я устанавливаю рабочей каталог из переменной "КаталогSRC" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Инициализация завершена" + Тогда Вывод команды "gitsync" содержит "Инициализация завершена" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И В каталоге из переменной "КаталогSRC" создается файл или каталог "AUTHORS" @@ -47,7 +47,7 @@ Когда Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Инициализация завершена" + Тогда Вывод команды "gitsync" содержит "Инициализация завершена" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И В каталоге из переменной "ПутьКаталогаИсходников" создается файл или каталог ".git" @@ -60,7 +60,7 @@ И Я устанавливаю переменную окружения "GITSYNC_STORAGE_PATH" из переменной "КаталогХранилища1С" И Я устанавливаю переменную окружения "GITSYNC_WORKDIR" из переменной "КаталогSRC" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Инициализация завершена" + Тогда Вывод команды "gitsync" содержит "Инициализация завершена" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И В каталоге из переменной "КаталогSRC" создается файл или каталог "AUTHORS" diff --git a/features/cmd/setversion.feature b/features/cmd/setversion.feature index 1d5c8b66..4d1da7f8 100644 --- a/features/cmd/setversion.feature +++ b/features/cmd/setversion.feature @@ -26,7 +26,7 @@ И Я добавляю параметр "1" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Версия установлена" + Тогда Вывод команды "gitsync" содержит "Версия установлена" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 @@ -37,7 +37,7 @@ И Я добавляю параметр "1" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Версия установлена" + Тогда Вывод команды "gitsync" содержит "Версия установлена" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 @@ -48,7 +48,7 @@ И Я устанавливаю переменную окружения "GITSYNC_WORKDIR" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Версия установлена" + Тогда Вывод команды "gitsync" содержит "Версия установлена" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Я очищаю значение переменных окружения diff --git a/features/cmd/step_definitions/plugins-path.os b/features/cmd/step_definitions/plugins-path.os index a7b3a828..90e32664 100644 --- a/features/cmd/step_definitions/plugins-path.os +++ b/features/cmd/step_definitions/plugins-path.os @@ -47,7 +47,9 @@ ВызватьИсключение "Каталог тестового плагина не найден"; КонецЕсли; - Если НЕ ФС.ФайлСуществует(ОбъединитьПути(КаталогПлагинов, "gitsync-plugins.json")) Тогда + // По умолчанию создается файл "plugins.json", но может быть и "gitsync-plugins.json" + Если НЕ ФС.ФайлСуществует(ОбъединитьПути(КаталогПлагинов, "gitsync-plugins.json")) + И НЕ ФС.ФайлСуществует(ОбъединитьПути(КаталогПлагинов, "plugins.json")) Тогда ВызватьИсключение "Файл настройки плагинов не найден"; КонецЕсли; diff --git a/features/cmd/step_definitions/shared.os b/features/cmd/step_definitions/shared.os index 30784c14..be60e6d9 100644 --- a/features/cmd/step_definitions/shared.os +++ b/features/cmd/step_definitions/shared.os @@ -8,6 +8,8 @@ Перем БДД; //контекст фреймворка 1bdd Перем Лог; +Перем ЭтоWindows; + // Метод выдает список шагов, реализованных в данном файле-шагов Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт БДД = КонтекстФреймворкаBDD; @@ -221,15 +223,10 @@ Если НЕ ЭтоExe Тогда - Команда.УстановитьКоманду("oscript"); - Команда.ДобавитьПараметр("-encoding=utf-8"); - + УстановитьДвижок(Команда); Команда.ДобавитьПараметр(ОбернутьВКавычки(ПутьГитсинк)); Иначе - СистемнаяИнформация = Новый СистемнаяИнформация; - ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; - Если ЭтоWindows Тогда Команда.УстановитьКоманду(ПутьГитсинк); // Нельзя оборачивать в кавычки Иначе @@ -370,7 +367,22 @@ Возврат "Команда-" + ИмяКоманды; КонецФункции +Функция ЭтоWindows() + Если ЭтоWindows = Неопределено Тогда + СистемнаяИнформация = Новый СистемнаяИнформация; + ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; + КонецЕсли; + Возврат ЭтоWindows; +КонецФункции +Процедура УстановитьДвижок(Команда) + Команда.УстановитьКоманду("oscript"); + Если Не ЭтоWindows() Тогда + Команда.ДобавитьПараметр("-encoding=utf-8"); + КонецЕсли; +КонецПроцедуры - -Лог = Логирование.ПолучитьЛог(ИмяЛога()); \ No newline at end of file +Лог = Логирование.ПолучитьЛог(ИмяЛога()); + +СистемнаяИнформация = Новый СистемнаяИнформация; +ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; diff --git "a/features/cmd/step_definitions/testsata/test_plugin/src/\320\232\320\273\320\260\321\201\321\201\321\213/testPlugin.os" "b/features/cmd/step_definitions/testsata/test_plugin/src/\320\232\320\273\320\260\321\201\321\201\321\213/testPlugin.os" index 9f99d014..2e64fe08 100644 --- "a/features/cmd/step_definitions/testsata/test_plugin/src/\320\232\320\273\320\260\321\201\321\201\321\213/testPlugin.os" +++ "b/features/cmd/step_definitions/testsata/test_plugin/src/\320\232\320\273\320\260\321\201\321\201\321\213/testPlugin.os" @@ -2,8 +2,6 @@ Перем Лог; -#Область Подписки_на_события - #Область Подписка_на_активизацию_плагинов // Вызывается при начале установке новых подписчиков diff --git a/features/cmd/sync.feature b/features/cmd/sync.feature index 54d190a2..cb99c8e9 100644 --- a/features/cmd/sync.feature +++ b/features/cmd/sync.feature @@ -24,7 +24,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 @@ -36,7 +36,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я устанавливаю рабочей каталог из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 @@ -61,7 +61,7 @@ И Я устанавливаю переменную окружения "GITSYNC_STORAGE_PATH" из переменной "КаталогХранилища1С" И Я устанавливаю переменную окружения "GITSYNC_WORKDIR" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Я очищаю значение переменных окружения @@ -77,7 +77,7 @@ И Я устанавливаю переменную окружения "GITSYNC_STORAGE_PATH" из переменной "КаталогХранилища1С" И Я устанавливаю переменную окружения "GITSYNC_WORKDIR" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Я очищаю значение переменных окружения diff --git a/features/cmd/v8path.feature b/features/cmd/v8path.feature index 67eb83c3..cdeeb1bc 100644 --- a/features/cmd/v8path.feature +++ b/features/cmd/v8path.feature @@ -26,7 +26,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Используется путь к платформе 1С" - И Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Используется путь к платформе 1С" + И Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 \ No newline at end of file diff --git a/features/core/step_definitions/shared.os b/features/core/step_definitions/shared.os index 21cbc2e4..3ec3e64e 100644 --- a/features/core/step_definitions/shared.os +++ b/features/core/step_definitions/shared.os @@ -8,6 +8,8 @@ Перем БДД; //контекст фреймворка 1bdd Перем Лог; +Перем ЭтоWindows; + // Метод выдает список шагов, реализованных в данном файле-шагов Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт БДД = КонтекстФреймворкаBDD; @@ -202,8 +204,7 @@ ПутьГитсинк = ОбъединитьПути(КаталогГитсинк(), "src", "cmd", "gitsync.os"); Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды)); - Команда.УстановитьКоманду("oscript"); - Команда.ДобавитьПараметр("-encoding=utf-8"); + УстановитьДвижок(Команда); // МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов; // МенеджерВременныхФайлов.БазовыйКаталог = ОбъединитьПути(КаталогГитсинк(), "coverage"); @@ -343,7 +344,20 @@ Возврат "Команда-" + ИмяКоманды; КонецФункции +Функция ЭтоWindows() + Если ЭтоWindows = Неопределено Тогда + СистемнаяИнформация = Новый СистемнаяИнформация; + ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; + КонецЕсли; + Возврат ЭтоWindows; +КонецФункции +Процедура УстановитьДвижок(Команда) + Команда.УстановитьКоманду("oscript"); + Если Не ЭтоWindows() Тогда + Команда.ДобавитьПараметр("-encoding=utf-8"); + КонецЕсли; +КонецПроцедуры Лог = Логирование.ПолучитьЛог(ИмяЛога()); //Лог.УстановитьУровень(Логирование.ПолучитьЛог("bdd").Уровень()); diff --git "a/features/core/step_definitions/testsata/test_plugin/src/\320\232\320\273\320\260\321\201\321\201\321\213/testPlugin.os" "b/features/core/step_definitions/testsata/test_plugin/src/\320\232\320\273\320\260\321\201\321\201\321\213/testPlugin.os" index 32280b51..6d359f29 100644 --- "a/features/core/step_definitions/testsata/test_plugin/src/\320\232\320\273\320\260\321\201\321\201\321\213/testPlugin.os" +++ "b/features/core/step_definitions/testsata/test_plugin/src/\320\232\320\273\320\260\321\201\321\201\321\213/testPlugin.os" @@ -2,8 +2,6 @@ Перем Лог; -#Область Подписки_на_события - #Область Подписка_на_активизацию_плагинов // Вызывается при начале установке новых подписчиков @@ -114,9 +112,10 @@ // * ГУИД_Автора - Строка - уникальный идентификатор автора версии // * ПредставлениеАвтора - Строка - представление автора для коммита в git // ПутьКХранилищу - Строка - полный путь к хранилищу конфигурации +// НачальнаяВерсия - Число - номер начальной версии хранилища // СтандартнаяОбработка - Булево - признак отказ от обработки по умолчанию // -Процедура ПриПолученииТаблицыВерсий(ТаблицаВерсий, ПутьКХранилищу, СтандартнаяОбработка) Экспорт +Процедура ПриПолученииТаблицыВерсий(ТаблицаВерсий, ПутьКХранилищу, НачальнаяВерсия, СтандартнаяОбработка) Экспорт Лог.Информация("Вызвано событие <ПриПолученииТаблицыВерсий> для плагина <%1>", Имя()); @@ -176,6 +175,35 @@ КонецПроцедуры +// Вызывается при получении таблицы пользователей из хранилища конфигурации +// +// Параметры: +// ПутьКФайлуАвторов - Строка - полный путь к хранилищу конфигурации +// ТаблицаАвторов - ТаблицаЗначений - инициализированная таблица с колонками: +// * Автор - Строка - имя автора версии в хранилище +// * ПредставлениеАвтора - Строка - представление автора для коммита в git +// СтандартнаяОбработка - Булево - признак отказ от обработки по умолчанию +// +Процедура ПриПолученииТаблицыАвторов(ПутьКФайлуАвторов, ТаблицаАвторов, СтандартнаяОбработка) Экспорт + + Лог.Информация("Вызвано событие <ПриПолученииТаблицыАвторов> для плагина <%1>", Имя()); + +КонецПроцедуры + +// Вызывается при получении таблицы пользователей из хранилища конфигурации +// +// Параметры: +// ПутьКФайлуАвторов - Строка - полный путь к хранилищу конфигурации +// ТаблицаАвторов - ТаблицаЗначений - инициализированная таблица с колонками: +// * Автор - Строка - имя автора версии в хранилище +// * ПредставлениеАвтора - Строка - представление автора для коммита в git +// +Процедура ПослеПолученияТаблицыАвторов(ПутьКФайлуАвторов, ТаблицаАвторов) Экспорт + + Лог.Информация("Вызвано событие <ПослеПолученияТаблицыАвторов> для плагина <%1>", Имя()); + +КонецПроцедуры + #КонецОбласти #Область Подписки_на_обработки_строки_версии diff --git a/features/core/sync.batch.feature b/features/core/sync.batch.feature index ee5f703b..02e2bf81 100644 --- a/features/core/sync.batch.feature +++ b/features/core/sync.batch.feature @@ -81,11 +81,11 @@ repositories: # И Я включаю отладку лога с именем "oscript.lib.configor.yaml" # И Я включаю отладку лога с именем "oscript.lib.configor.constructor" -Сценарий: Простая синхронизация хранилища с git-репозиторием - Допустим Я устанавливаю авторизацию "Администратор" с паролем "" в ПакетнаяСинхронизация - И Я устанавливаю версию платформы "8.3" в ПакетнаяСинхронизация - Когда Я выполняю выполняют пакетную синхронизацию - Тогда Вывод лога содержит "Завершена синхронизации с git" +#Сценарий: Простая синхронизация хранилища с git-репозиторием +# Допустим Я устанавливаю авторизацию "Администратор" с паролем "" в ПакетнаяСинхронизация +# И Я устанавливаю версию платформы "8.3" в ПакетнаяСинхронизация +# Когда Я выполняю выполняют пакетную синхронизацию +# Тогда Вывод лога содержит "Завершена синхронизации с git" # Сценарий: Cинхронизация хранилища с git-репозиторием c плагинами # Допустим Я устанавливаю авторизацию в хранилище пользователя "Администратор" с паролем "" diff --git "a/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" "b/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" new file mode 100644 index 00000000..40278df1 --- /dev/null +++ "b/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" @@ -0,0 +1,38 @@ +# language: ru + +Функциональность: Выполнение команды продукта + +Как разработчик +Я хочу иметь возможность выполнять команды продукта +Чтобы выполнять коллективную разработку приложения для OneScript + +Контекст: + Допустим Я очищаю параметры команды "oscript" в контексте + И я включаю отладку лога с именем "oscript.app.gitsync" + # И я включаю отладку лога с именем "bdd" + +Сценарий: Получение версии продукта + Когда Я выполняю команду "oscript" с параметрами "src/gitsync.os version" + Тогда Я сообщаю вывод команды "oscript" + Тогда я вижу в консоли строку подобно "(\d+\.){2}\d+" + И Вывод команды "oscript" не содержит "GitSync v" + И Код возврата команды "oscript" равен 0 + +Сценарий: Получение помощи продукта + Когда Я выполняю команду "oscript" с параметрами "src/gitsync.os help" + Тогда я вижу в консоли строку подобно "GitSync\s+v(\d+\.){2}\d+" + Тогда Вывод команды "oscript" содержит + """ + Возможные команды: + """ + И Код возврата команды "oscript" равен 0 + +Сценарий: Вызов исполняемого файла без параметров + Когда Я выполняю команду "oscript" с параметрами "src/gitsync.os" + Тогда я вижу в консоли строку подобно "GitSync\s+v(\d+\.){2}\d+" + Тогда Вывод команды "oscript" содержит + """ + ОШИБКА - Некорректные аргументы командной строки + Возможные команды: + """ + И Код возврата команды "oscript" равен 5 diff --git a/packagedef b/packagedef index a0ee29b0..83953435 100644 --- a/packagedef +++ b/packagedef @@ -1,21 +1,28 @@ Описание.Имя("gitsync") - .Версия("3.0.0-rc.2") - .ВерсияСреды("1.0.21") + .Версия("3.6.1") + .ВерсияСреды("1.9.0") .ЗависитОт("logos", "1.2.1") - .ЗависитОт("tempfiles", "0.2.2") - .ЗависитОт("v8runner", "1.3.0") - .ЗависитОт("gitrunner", "1.6.0") + .ЗависитОт("tempfiles", "1.1.1") + .ЗависитОт("v8runner", "1.9.1") + .ЗависитОт("gitrunner", "1.7.1") .ЗависитОт("strings", "0.4.1") .ЗависитОт("1commands", "1.4.0") .ЗависитОт("json", "1.1.1") .ЗависитОт("fs", "1.0.0") .ЗависитОт("delegate", "0.2.0") - .ЗависитОт("v8storage", "0.8.0") + .ЗависитОт("v8storage", "0.9.4") .ЗависитОт("reflector", "0.4.0") .ЗависитОт("opm", "0.15.3") - .ЗависитОт("cli", "0.9.10") - .ЗависитОт("configor", "0.6.3") + .ЗависитОт("cli", "0.10.2") + .ЗависитОт("cli-selector", "0.3.0") + .ЗависитОт("configor", "0.7.0") + .РазработкаЗависитОт("1bdd") + .РазработкаЗависитОт("1testrunner") + .РазработкаЗависитОт("asserts") + .РазработкаЗависитОт("coverage") + .РазработкаЗависитОт("1commands") + .РазработкаЗависитОт("fs") .ВключитьФайл("src") .ВключитьФайл("docs") .ВключитьФайл("embedded_plugins") diff --git a/readme.md b/readme.md index 3a4b325f..ef194c8c 100644 --- a/readme.md +++ b/readme.md @@ -1,50 +1,48 @@ Синхронизация хранилища 1С с репозиторием git ============================================= - -Обсудить [![ЧАТ ДЛЯ ОБЩЕНИЯ https://gitter.im/EvilBeaver/oscript-library](https://badges.gitter.im/EvilBeaver/oscript-library.svg)](https://gitter.im/EvilBeaver/oscript-library?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -[![GitHub release](https://img.shields.io/github/release/khorevaa/gitsync.svg)](https://github.com/oscript-library/gitsync/releases) +[![Last release](https://img.shields.io/github/v/release/oscript-library/gitsync?include_prereleases&label=last%20release&style=badge)](https://github.com/oscript-library/gitsync/releases/latest) +[![GitHub issues](https://img.shields.io/github/issues-raw/oscript-library/gitsync?style=badge)](https://github.com/oscript-library/gitsync/issues) +[![oscript_library](https://img.shields.io/badge/chat-telegram-blue)](https://t.me/oscript_library) Оглавление ========== -- [Введение](#введение) -- [Установка](#установка) - - [Вручную](#вручную) +- [Синхронизация хранилища 1С с репозиторием git](#синхронизация-хранилища-1с-с-репозиторием-git) +- [Оглавление](#оглавление) + - [Введение](#введение) + - [Установка](#установка) - [Через пакетный менеджер opm](#через-пакетный-менеджер-opm) -- [Требования](#требования) -- [Особенности](#особенности) + - [Вручную](#вручную) + - [Требования](#требования) + - [Особенности](#особенности) - [Отличия от `gitsync` версий 2.x](#отличия-от-gitsync-версий-2x) - [Описание функциональности](#описание-функциональности) -- [Использование приложения `gitsync`](#использование-приложения-gitsync) - - [Подготовка нового репозитория](#подготовка-нового-репозитория) - - [Установка соответствия пользователей](#установка-соответствия-пользователей) - - [Установка начальной версии из хранилища 1С для синхронизации](#установка-начальной-версии-из-хранилища-1с-для-синхронизации) - - [Настройка плагинов синхронизации](#настройка-плагинов-синхронизации) + - [Использование приложения `gitsync`](#использование-приложения-gitsync) + - [Подготовка](#подготовка) + - [Подготовка нового репозитория (локального)](#подготовка-нового-репозитория-локального) + - [Установка соответствия пользователей](#установка-соответствия-пользователей) + - [Установка номера начальной версии хранилища 1С для синхронизации](#установка-номера-начальной-версии-хранилища-1с-для-синхронизации) - [Синхронизация](#синхронизация) - - [Справка по использованию команды](#справка-по-использованию-команды) - - [Глобальные переменные окружения](#глобальные-переменные-окружения) - - [Переменные окружения команды](#переменные-окружения-команды) - - [Значения по умолчанию](#значения-по-умолчанию) - - [Примеры использования](#примеры-использования) -- [Использование библиотеки `gitsync`](#использование-библиотеки-gitsync) -- [Доработка и разработка плагинов](#доработка-и-разработка-плагинов) -- [Механизм подписок на события](#механизм-подписок-на-события) -- [Сборка проекта](#сборка-проекта) -- [Доработка](#доработка) -- [Лицензия](#лицензия) + - [Справка по использованию команды](#справка-по-использованию-команды) + - [Глобальные переменные окружения](#глобальные-переменные-окружения) + - [Переменные окружения команды](#переменные-окружения-команды) + - [Значения по умолчанию](#значения-по-умолчанию) + - [Примеры использования](#примеры-использования) + - [Настройка плагинов синхронизации](#настройка-плагинов-синхронизации) + - [Использование библиотеки `gitsync`](#использование-библиотеки-gitsync) + - [Доработка и разработка плагинов](#доработка-и-разработка-плагинов) + - [Механизм подписок на события](#механизм-подписок-на-события) + - [Сборка проекта](#сборка-проекта) + - [Доработка](#доработка) + - [Лицензия](#лицензия) ## Введение -> Возможно данный проект примут как следующую версию в gitsync - -Проект является форком проекта gitsync см. [https://github.com/oscript-library/gitsync](https://github.com/oscript-library/gitsync) и результатом глубокого рефакторинга начального проекта - Проект *gitsync* представляет собой: 1. Библиотеку `gitsync` (`src/core`) - которая реализует основные классы для синхронизации хранилища 1С с git @@ -55,21 +53,16 @@ ## Установка - -### Вручную - -1. Скачать файл `gitsync*.ospx` из раздела [releases](https://github.com/khorevaa/gitsync/releases) -2. Воспользоваться командой: - -``` -$ opm install -f <ПутьКФайлу> -``` - ### Через пакетный менеджер opm -1. командой `opm install gitsync` -2. Запустить командой `gitsync` +1. Установить командой `opm install gitsync` + + +### Вручную +> Запасной споcоб, например, когда на сервере нет доступа к Интернет +1. Скачать файл `gitsync*.ospx` из раздела [releases](https://github.com/oscript-library/gitsync/releases) +2. Установить командой: `opm install -f <ПутьКФайлу>` ## Требования @@ -84,13 +77,13 @@ $ opm install -f <ПутьКФайлу> ### Отличия от `gitsync` версий 2.x * Полностью другая строка вызова приложения, а именно используется стандарт POSIX. -* Работа с хранилищем конфигурации реализовано на основании библиотеки [`v8storage`](https://github.com/khorevaa/v8storage) -* Реализована поддержка работы с `http` и `tcp` хранилищами +* Работа с хранилищем конфигурации реализована через библиотеку [`v8storage`](https://github.com/khorevaa/v8storage) +* Реализована поддержка работы с хранилищем по протоколу `http` и `tcp` * Функциональность работы через `tool1CD` - перенесена в предустановленный плагин `tool1CD` -* Вместо двух команд `sync` и `export` оставлена только одна команда `sync`, которая работает как команда `export` в предыдущих версиях, при это функциональность синхронизации с удаленным репозиторием (команды `git pull` и `git push` ) перенесена в отдельный плагин `sync-remote` -* Отказ от поддержки работы с форматом `plain` при выгрузке конфигурации в исходники -* Отказ от поддержки файла `renames.txt` и переименования длинных файлов -* Расширяемость функционала за счет использования механизма подписок на события +* Вместо двух команд `sync` и `export` оставлена только одна команда `sync`, которая работает как команда `export` в предыдущих версиях, при этом функциональность синхронизации с удаленным репозиторием (команды `git pull` и `git push` ) перенесена в отдельный плагин `sync-remote` +* Прекращена поддержка выгрузки конфигурации в исходники в формате `plain` +* Прекращена поддержка использования файла `renames.txt` и переименования длинных файлов +* Расширен функционал за счет использования механизма подписок на события * Пока не поддерживается синхронизация с несколькими хранилищами одновременно. (команда `all`) @@ -103,45 +96,55 @@ $ opm install -f <ПутьКФайлу> ## Использование приложения `gitsync` + +### Подготовка + -### Подготовка нового репозитория +#### Подготовка нового репозитория (локального) -> Данный шаг можно пропустить, если у Вас уже готова рабочая копия git репозитория +> Данный шаг можно пропустить, если у Вас уже есть локальный репозиторий git -1. Если у Вас уже есть удаленный репозиторий (уже делалась синхронизация с git) и вы проводили синхронизацию тогда следует воспользоваться командой `clone` +**a. Если у Вас уже есть удаленный репозиторий** (ранее выполнялась синхронизация с сервером git) - используйте команду `clone` + +Синтаксис команды: `gitsync clone [ОПЦИИ] PATH URL [WORKDIR]` Пример использования: `gitsync clone --storage-user Администратор --storage-pwd Секрет <путь_к_хранилищу_1С> <адрес_удаленного_репозитория> <рабочий_каталог>(необязательный)` -Справка по команде `clone`: `gitsync clone --help` +Команда создаст локальный репозиторий в указанном каталоге путем копирования удаленного. + +Справка по команде: `gitsync clone --help` -Больше примеров можно увидеть, использовав команду `gitsync usage clone` +Больше примеров: `gitsync usage clone` -2. Если у Вас нет удаленного репозитория, тогда стоит воспользоваться командой `init` для выполнения начальной настройки и наполнения данными рабочего каталог +**b. Если у Вас нет удаленного репозитория** - используйте команду `init` + +Синтаксис команды: `gitsync init [ОПЦИИ] PATH [WORKDIR]` Пример использования: * `gitsync init --storage-user Администратор --storage-pwd Секрет C:/Хранилище_1С/ C:/GIT/src` - Данная команда создаст новый репозиторий git в каталоге `C:/GIT/src` из хранилища 1С по пути `C:/Хранилище_1С/` и наполнил его служебными файлами `VERSION` и `AUTHORS` + Команда создаст новый репозиторий (каталог) `.git` в каталоге `C:/GIT/src`, и наполнит его служебными файлами `VERSION` и `AUTHORS`. + На данном этапе хранилище 1С по пути `C:/Хранилище_1С/` используется для наполнения файла `AUTHORS`. Выгрузка хранилища 1С (синхронизация с репозиторием .git ) не выполняется. * `gitsync init --storage-user Администратор --storage-pwd Секрет http:/www.storages.1c.com/repository.1ccr/ИмяХранилища C:/GIT/src` - Тоже самое только для `http` хранилищем по адресу `http:/www.storages.1c.com/repository.1ccr/ИмяХранилища` + Вариант для подключения к хранилищу по протоколу `http` -Справка по команде `init`: `gitsync init --help` +Справка по команде: `gitsync init --help` -Больше примеров можно увидеть, использовав команду `gitsync usage init` +Больше примеров: `gitsync usage init` -### Установка соответствия пользователей +#### Установка соответствия пользователей -> Данный шаг можно пропустить, если у Вас уже установлено соответствие пользователей хранилища 1с и git +> Данный шаг можно пропустить, если у Вас уже установлено соответствие пользователей хранилища 1С и git -Для настройки соответствия между пользователями хранилища 1с и git предназначен Файл `AUTHORS`. +Для настройки соответствия между пользователями хранилища 1С и git-сервера предназначен файл `AUTHORS`. -Данный файл имеет формат `ini` файла. +Файл заполняется в формате `ini`. Пример файла: @@ -151,18 +154,19 @@ $ opm install -f <ПутьКФайлу> ``` слева указано имя пользователя хранилища 1С -справа - представление имени пользователя репозитория Git и его e-mail +справа - представление имени пользователя репозитория git и его e-mail С помощью e-mail выполняется связка пользователя с публичными репозиториями (например, Github или Bitbucket) -### Установка начальной версии из хранилища 1С для синхронизации +#### Установка номера начальной версии хранилища 1С для синхронизации -> Данный шаг можно пропустить, если у Вас уже установлена или заполнения версия в файле `VERSION` +> Данный шаг можно пропустить, если у Вас уже установлен номер версии в файле `VERSION` -Для настройки последней синхронизированной(выгруженной в рабочий каталог) версии хранилища 1С служит файл `VERSION`. +При выгрузке изменений хранилища 1С в каталог проекта (в рабочий каталог), gitsync ориентируется на номер последней выгруженной версии, указанный в файле `VERSION`. +Номер версии в файле надо указать если Вы не хотите выгружать в git все версии хранилища 1С. -Данный файл имеет формат `xml` +Файл заполняется в формате `xml`. Пример файла, в котором указано, что выгружено 10 версий: @@ -171,72 +175,23 @@ $ opm install -f <ПутьКФайлу> 10 ``` -Данный файл можно отредактировать в ручную или воспользовавшись командой `set-version`. - -Пример использования: +Файл можно отредактировать вручную или использовать команду `set-version`. +Пример использования команды: `gitsync set-version <номер_версии> <рабочий_каталог>(необязательный)` -Данная команда установит указанную версию `<номер_версии>` в файл `VERSION`, который лежит в каталоге `<рабочий_каталог>` - -Справка по команде `set-version`: `gitsync set-version --help` +Справка по команде: `gitsync set-version --help` Для удобства использования команда `set-version` имеет короткое название `sv`. -Больше примеров можно увидеть, использовав команду `gitsync usage set-version` - - -### Настройка плагинов синхронизации - -> Данный пункт можно пропустить, если Вам не требуется дополнительная функциональность синхронизации - -Для расширения функциональности синхронизации предлагается механизм *плагинов*. -Данный механизм реализован через подписки на события синхронизации, с возможностью переопределения стандартной обработки. - -Для обеспечения управления плагинами реализована подкоманда `plugins`, а так же ряд вложенных команд: - -1. `init` - Инициализация предустановленных плагинов -1. `list` - Вывод списка плагинов -1. `enable` - Активизация установленных плагинов -1. `disable` - Деактивизация установленных плагинов -1. `install` - Установка новых плагинов -1. `clear` - Очистка установленных плагинов -1. `help` - Вывод справки по выбранным плагинам - -Пример использования: - -* `gitsync plugins enable limit` - будет активирован плагин `limit` -* `gitsync plugins list` - будет выведен список всех *активированных* плагинов -* `gitsync plugins list -a` - будет выведен список всех *установленных* плагинов - -Справка по команде `plugins`: `gitsync plugins --help` - -Для удобства использования команда `plugins` имеет короткое название `p`. - -Больше примеров можно увидеть, использовав команду `gitsync usage plugins` - -> Для хранения установленных плагинов и списка активных плагинов используется каталог `локальных данных приложения` - -Список предустановленных плагинов: -> Для инициализации предустановленных плагинов необходимо выполнить команду `gitsync plugins init` - -1. `increment` - обеспечивает инкрементальную выгрузку конфигурации в исходники -1. `sync-remote` - добавляет функциональность синхронизации с удаленным репозиторием git (команды `git pull` и `git push`) -1. `limit` - добавляет возможность ограничения на минимальный, максимальный номер версии хранилища, а так же на лимит на количество выгружаемых версий за один запуск -1. `check-authors` - добавляет функциональность проверки автора версии в хранилище на наличие соответствия в файле `AUTHORS` -1. `check-comments` - добавляет функциональность проверки на заполненность комментариев в хранилище -1. `smart-tags` - добавляет функциональность автоматической расстановки меток в git (команда `git tag`) при изменении версии конфигурации -1. `unpackForm` - добавляет функциональность распаковки обычных форм на исходники -1. `tool1CD` - заменяет использование штатных механизмов 1С на приложение `tool1CD` при синхронизации -1. `disable-support` - снимает конфигурацию с поддержки перед выгрузкой в исходники - +Больше примеров: `gitsync usage set-version` ### Синхронизация Команда `sync` (синоним s) - выполняет синхронизацию хранилища 1С с git-репозиторием -> Подробную справку по опциям и аргументам см. `gitsync sync --help` +> Подробную справку по опциям и аргументам см. `gitsync sync --help`. Важно: описание опций команды sync при использовании плагина выводится только после активации этого плагина. #### Справка по использованию команды @@ -254,47 +209,54 @@ $ opm install -f <ПутьКФайлу> Опции: -u, --storage-user пользователь хранилища конфигурации (env $GITSYNC_STORAGE_USER) (по умолчанию Администратор) -p, --storage-pwd пароль пользователя хранилища конфигурации (env $GITSYNC_STORAGE_PASSWORD, $GITSYNC_STORAGE_PWD) - + -e, --ext имя расширения для работы с хранилищем расширения(env $GITSYNC_EXTENSION) ``` #### Глобальные переменные окружения -| Имя | Описание | -|---------------------|--------------------------------------------------------| -| `GITSYNC_V8VERSION` | маска версии платформы (8.3, 8.3.5, 8.3.6.2299 и т.п.) | +| Имя | Описание | +| ------------------- | --------------------------------------------------------------------------- | +| `GITSYNC_V8VERSION` | маска версии платформы (8.3, 8.3.5, 8.3.6.2299 и т.п.) | | `GITSYNC_V8_PATH` | путь к исполняемому файлу платформы 1С (Например, /opt/1C/v8.3/x86_64/1cv8) | -| `GITSYNC_VERBOSE` | вывод отладочной информации в процессе выполнения | -| `GITSYNC_TEMP` | путь к каталогу временных файлов | -| `GITSYNC_EMAIL` | домен почты для пользователей git | +| `GITSYNC_VERBOSE` | вывод отладочной информации в процессе выполнения | +| `GITSYNC_TEMP` | путь к каталогу временных файлов | +| `GITSYNC_EMAIL` | домен почты для пользователей git | #### Переменные окружения команды | Имя | Описание | -|----------------------------|--------------------------------------------| +| -------------------------- | ------------------------------------------ | | `GITSYNC_WORKDIR` | рабочий каталог для команды | | `GITSYNC_STORAGE_PATH` | путь к хранилищу конфигурации 1С. | | `GITSYNC_STORAGE_USER` | пользователь хранилища конфигурации | | `GITSYNC_STORAGE_PASSWORD` | пароль пользователя хранилища конфигурации | +| `GITSYNC_EXTENSION` | имя расширения | #### Значения по умолчанию | | | -|--------------------|------------------------------| +| ------------------ | ---------------------------- | | WORKDIR | текущая рабочая директория | | -u, --storage-user | пользователь `Администратор` | #### Примеры использования -* Простое использование +* Примитивный вариант `gitsync sync C:/Хранилище_1С/ C:/GIT/src` - Данная команда выполнить синхронизацию хранилища 1С по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/GIT/src` + Команда выполнит выгрузку версий хранилища 1С из `C:/Хранилище_1С/` в репозиторий git в каталоге `C:/GIT/src`. Пример учебный, на практике обычно требуется указать также имя пользователя хранилища и пароль. + +* Вариант для расширения конфигурации + + `gitsync sync --ext ИМЯ_Расширения C:/Хранилище_1С/ C:/GIT/src` -* Инициализация в текущем рабочем каталоге, + Команда выполнит выгрузку версий хранилища расширения 1С из `C:/Хранилище_1С/` для расширения `ИМЯ_Расширения` в репозиторий git в каталоге `C:/GIT/src`. + +* Вариант вызова команды в текущем рабочем каталоге > переменная окружения **`GITSYNC_WORKDIR`** не должна быть задана @@ -302,33 +264,32 @@ $ opm install -f <ПутьКФайлу> cd C:/work_dir/ gitsync sync C:/Хранилище_1С/ ``` - Данная команда выполнить синхронизацию хранилища 1С по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/work_dir` + Команда выполнит выгрузку версий хранилища 1С из `C:/Хранилище_1С/` в репозиторий git в каталоге `C:/work_dir` -* Инициализация в с указанием пользователя и пароля. +* Вариант с указанием пользователя хранилища и пароля ```sh - gitsync sync --storage-user Admin --storage-pwd=Secret C:/Хранилище_1С/ C:/work_dir/ + gitsync sync --storage-user Admin --storage-pwd Secret C:/Хранилище_1С/ C:/work_dir/ ``` - Данная команда выполнить синхронизацию хранилища 1С по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/work_dir` - Используя для подключения к хранилищу 1С пользователя `Admin` и пароль `Secret` - + Имя пользователя = Admin, пароль = Secret. + * Использование синонимов (короткая версия предыдущего примера) ```sh - gitsync s -uAdmin -p=Secret C:/Хранилище_1С/ C:/work_dir/ + gitsync s -u Admin -p Secret C:/Хранилище_1С/ C:/work_dir/ + # возможны варианты + # gitsync s -uAdmin -pSecret C:/Хранилище_1С/ C:/work_dir/ + # gitsync s -u=Admin -p=Secret C:/Хранилище_1С/ C:/work_dir/ ``` - Данная команда выполнить синхронизацию хранилища 1С по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/work_dir` - Используя для подключения к хранилищу 1С пользователя `Admin` и пароль `Secret` -* Использование конкретной исполняемого файла платформы +* Указание исполняемого файла нужной версии платформы ```sh gitsync --v8-path /opt/1C/v8.3/x86_64/1cv8 s -uAdmin -p=Secret C:/Хранилище_1С/ C:/work_dir/ ``` - Данная команда синхронизации выполнится с использованием исполняемого файла платформы `/opt/1C/v8.3/x86_64/1cv8` для хранилища 1С по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/work_dir` - Используя для подключения к хранилищу 1С пользователя `Admin` и пароль `Secret` + Команда синхронизации будет выполнена с использованием исполняемого файла платформы `/opt/1C/v8.3/x86_64/1cv8` (приведен синтаксис для linux; вариант для Windows см. ниже). -* Использование только переменных окружения +* Вызов команды без указания параметров, с использованием переменных окружения linux: ```sh @@ -338,8 +299,8 @@ $ opm install -f <ПутьКФайлу> export GITSYNC_STORAGE_USER=Admin export GITSYNC_STORAGE_PASSWORD=Secret export GITSYNC_V8VERSION=8.3.7 - # Указание конкретного исполняемого файла платформы 1С - #export GITSYNC_V8_PATH=/opt/1C/v8.3/x86_64/1cv8 # Надо обернуть в кавычки если путь содержит пробелы + # Указание конкретного исполняемого файла платформы 1С. Путь надо обернуть в кавычки если он содержит пробелы. + #export GITSYNC_V8_PATH=/opt/1C/v8.3/x86_64/1cv8 export GITSYNC_VERBOSE=true #Можно использовать Да/Ложь/Нет/Истина export GITSYNC_TEMP=./temp/sync gitsync s @@ -352,15 +313,62 @@ $ opm install -f <ПутьКФайлу> set GITSYNC_STORAGE_USER=Admin set GITSYNC_STORAGE_PASSWORD=Secret set GITSYNC_V8VERSION=8.3.7 - # Указание конкретного исполняемого файла платформы 1С - #set GITSYNC_V8_PATH="C:\Program Files (x86)\1cv8\8.3.12.1567\bin\1cv8.exe" # Надо обернуть в кавычки если путь содержит пробелы + # Указание конкретного исполняемого файла платформы 1С. Путь надо обернуть в кавычки если он содержит пробелы. + #set GITSYNC_V8_PATH="C:\Program Files (x86)\1cv8\8.3.12.1567\bin\1cv8.exe" set GITSYNC_VERBOSE=true #Можно использовать Да/Ложь/Нет/Истина set GITSYNC_TEMP=./temp/sync gitsync s ``` - Данная команда выполнить синхронизацию хранилища 1С по пути `C:/Хранилище_1С/` и репозитория git в каталоге `C:/work_dir` - Используя для подключения к хранилищу 1С пользователя `Admin` и пароль `Secret` + + +#### Настройка плагинов синхронизации + +> Данный пункт можно пропустить, если Вам не требуется дополнительная функциональность синхронизации + +Для расширения функциональности синхронизации предлагается механизм *плагинов*. +Данный механизм реализован через подписки на события синхронизации, с возможностью переопределения стандартной обработки. + +Для обеспечения управления плагинами реализована подкоманда `plugins`, а так же ряд вложенных команд: + +1. `init` - Инициализация предустановленных плагинов (установка из поставляемого пакета) +1. `list` - Вывод списка плагинов +1. `enable` - Активизация установленных плагинов +1. `disable` - Деактивизация установленных плагинов +1. `install` - Установка новых плагинов +1. `clear` - Удаление установленных плагинов +1. `help` - Вывод справки по выбранным плагинам + +Пример использования: + +* `gitsync plugins enable limit` - будет активирован плагин `limit` +* `gitsync plugins enable -a` - будут активированы все предустановленные плагины +* `gitsync plugins enable` - будет выведен список всех установленных плагинов для интерактивного выбора и активации выбранных +* `gitsync plugins list` - будет выведен список всех *активированных* плагинов +* `gitsync plugins list -a` - будет выведен список всех *установленных* плагинов + +Справка по команде: `gitsync plugins --help` + +Для удобства использования команда `plugins` имеет короткое название `p`. + +Больше примеров: `gitsync usage plugins` + +> Для хранения установленных плагинов и списка активных плагинов используется каталог `локальных данных приложения` - для Windows это C:\Users\UserName\AppData\Local\gitsync\plugins + +Список предустановленных плагинов: +> Для инициализации предустановленных плагинов необходимо выполнить команду `gitsync plugins init`. Описание используемых плагинами опций см. в справке к команде sync. + +1. `increment` - включает режим инкрементальной выгрузки конфигурации в исходники. + Выгружается не вся конфигурация, а только те объекты, версия которых отличается от версии, имеющейся в каталоге. См. [DumpConfigToFiles](https://its.1c.ru/db/v8319doc#bookmark:adm:TI000000493:dumpconfigtofiles), опция update. +2. `sync-remote` - добавляет опции команды `sync` для синхронизации с удаленным репозиторием git (команды `git pull` и `git push`) +3. `limit` - позволяет ограничить количество выгружаемых версий за один запуск, а так же указать минимальную и/или максимальную версию хранилища для выгрузки +4. `check-authors` - блокирует выгрузку версии, если автор версии хранилища отсутствует в файле `AUTHORS` +5. `check-comments` - добавляет опции команды `sync` для проверки наличия комментария у версии хранилища, а также для проверки заполнения комментария +6. `smart-tags` - устанавливает тег равный версии конфигурации при смене версии конфигурации (не путать с версией хранилища). А также добавляет опции команды `sync` для автоматической установки метки git (команда `git tag`) равной версии хранилища (в формате "v.номер"). +7. `unpackForm` - выполняет распаковку обычных форм на исходники. Добавляет опции команды `sync` для переименования объектов обычных форм. +8. `tool1CD` - заменяет использование штатных механизмов 1С на приложение `tool1CD` при выгрузке +9. `disable-support` - снимает конфигурацию с поддержки перед выгрузкой в исходники +10. `edtExport` - добавляет возможность выгрузки в формате EDT. Для работы плагина необходимо установить EDT. ## Использование библиотеки `gitsync` @@ -372,11 +380,8 @@ $ opm install -f <ПутьКФайлу> ## Доработка и разработка плагинов -Как разработать свой или доработать текущие плагины - -1. [Как создать свой плагин](./create-new-plugin.md) -1. Доработка предустановленных плагинов производится в отдельном репозитории [gitsync-plugins](https://github.com/khorevaa/gitsync-plugins) - +* [Как создать свой плагин](./create-new-plugin.md) +* Доработка предустановленных плагинов производится в отдельном репозитории [gitsync-plugins](https://github.com/khorevaa/gitsync-plugins) ## Механизм подписок на события @@ -397,16 +402,16 @@ $ opm install -f <ПутьКФайлу> `opm build .` - > при данной сборки не собираются предустановленные пакеты. Их надо будет устанавливать отдельно + В этом варианте в сборку не добавляются предустановленные пакеты. Их надо будет устанавливать отдельно. 2. Сборка пакета с зависимостями `opm build -mf ./build_packagedef .` - При данной сборке будут дополнительно собраны из репозиториев: + В сборку будут добавлены пакеты из репозиториев: * `opm` - из ветки develop - * `gitsync-pre-plugins` - из вертки develop + * `gitsync-pre-plugins` - из ветки develop ## Доработка @@ -416,4 +421,4 @@ $ opm install -f <ПутьКФайлу> ## Лицензия -Смотри файл [`LICENSE`](./LICENSE). \ No newline at end of file +Смотри файл [`LICENSE`](./LICENSE). diff --git a/sonar-project.properties b/sonar-project.properties index 85d664c2..a02fdadb 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,6 +1,5 @@ # must be unique in a given SonarQube instance -sonar.projectKey=opensource-gitsync -sonar.organization=sonar-opensource-add +sonar.projectKey=gitsync # this is the name displayed in the SonarQube UI sonar.projectName=1S storage and git sync for OScript diff --git a/sonar-qube.sh b/sonar-qube.sh deleted file mode 100644 index f56f2f29..00000000 --- a/sonar-qube.sh +++ /dev/null @@ -1,22 +0,0 @@ -temp=`cat packagedef | grep ".Версия(" | sed 's|[^"]*"||' | sed -r 's/".+//'` -version=${temp##*|} - -if [ "$TRAVIS_SECURE_ENV_VARS" == "true" ]; then - if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then - sonar-scanner \ - -Dsonar.host.url=https://sonar.silverbulleters.org \ - -Dsonar.analysis.mode=issues \ - -Dsonar.github.pullRequest=$TRAVIS_PULL_REQUEST \ - -Dsonar.github.repository=$TRAVIS_REPO_SLUG \ - -Dsonar.github.oauth=$GITHUB_OAUTH_TOKEN \ - -Dsonar.login=$SONAR_TOKEN \ - -Dsonar.scanner.skip=false - - elif [ "$TRAVIS_BRANCH" == "develop" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then - sonar-scanner \ - -Dsonar.host.url=https://sonar.silverbulleters.org \ - -Dsonar.login=$SONAR_TOKEN \ - -Dsonar.projectVersion=$version\ - -Dsonar.scanner.skip=false - fi -fi \ No newline at end of file diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260All.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260All.os" index ae70b108..79813f1f 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260All.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260All.os" @@ -47,6 +47,10 @@ ИнтервалПовторенияСинхронизации = Команда.ЗначениеОпции("timer"); + ПользовательИБ = Команда.ЗначениеОпции("ib-user"); + ПарольПользователяИБ = Команда.ЗначениеОпции("ib-pwd"); + СтрокаСоединенияИБ = Команда.ЗначениеОпции("ib-connection"); + ФайлНастроек = Новый Файл(ПутьКФайлуНастроек); Если Не ФайлНастроек.Существует() Тогда ВызватьИсключение СтрШаблон("Файл настроек <%1> не найден", ФайлНастроек.ПолноеИмя); @@ -72,12 +76,18 @@ .АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища) ; - ПакетнаяСинхронизация.ПрочитатьНастройки(ПараметрыФайлаНастроек); - + ПакетнаяСинхронизация.ПрочитатьНастройки(ПараметрыФайлаНастроек); + Если ЗначениеЗаполнено(ИмяНастройкиСинхронизации) Тогда - ПакетнаяСинхронизация.ВыполнитьСинхронизациюПоНастройке(ИмяНастройкиСинхронизации); + ПакетнаяСинхронизация.ВыполнитьСинхронизациюПоНастройке(ИмяНастройкиСинхронизации, + СтрокаСоединенияИБ, + ПользовательИБ, + ПарольПользователяИБ); Иначе - ПакетнаяСинхронизация.ВыполнитьСинхронизацию(КоличествоПотоковСинхронизации); + ПакетнаяСинхронизация.ВыполнитьСинхронизацию(КоличествоПотоковСинхронизации, + СтрокаСоединенияИБ, + ПользовательИБ, + ПарольПользователяИБ); КонецЕсли; Лог.Информация("Завершено выполнение команды "); diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260PluginDisable.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260PluginDisable.os" index a0c9872e..a6da8c2d 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260PluginDisable.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260PluginDisable.os" @@ -1,14 +1,16 @@ #Использовать "../../core" +#Использовать cli-selector Процедура ОписаниеКоманды(Команда) Экспорт Команда.Опция("a all", Ложь, "Отключить все включенные плагины") .ВОкружении("GITSYNC_DISABLE_ALL_PLUGINS"); + Команда.Аргумент("PLUGIN", "", "Имя плагина") .ТМассивСтрок() .ВОкружении("GITSYNC_PLUGINS"); - Команда.Спек = "(-a | --all) | PLUGIN..."; + Команда.Спек = "[-a | --all] | [PLUGIN...]"; КонецПроцедуры @@ -23,11 +25,33 @@ Лог.Отладка("Отключение всех плагинов <%1>", ВсеВключенные); Если ВсеВключенные Тогда + МенеджерПлагинов.ОтключитьВсеПлагины(); + Иначе + + Если НЕ ЗначениеЗаполнено(ИменаПлагинов) Тогда + ВсеПлагины = МенеджерПлагинов.ПолучитьИндексПлагинов(); + ВыборВКонсоли = Новый ВыборВКонсоли("Выберите плагины к отключению:"); + Для каждого Плагин Из ВсеПлагины Цикл + Если Плагин.Значение.Включен() Тогда + Представление = Плагин.Ключ; + Иначе + Представление = СтроковыеФункции.ДополнитьСтроку(Плагин.Ключ, 15, " ", "Справа") + " - отключен"; + КонецЕсли; + ВыборВКонсоли.ДобавитьЗначениеВыбора(Плагин.Ключ, Представление, , Плагин.Значение.Включен()); + КонецЦикла; + ИменаПлагинов = ВыборВКонсоли.Выбрать(); + КонецЕсли; + МенеджерПлагинов.ОтключитьПлагины(ИменаПлагинов); + + Если ЗначениеЗаполнено(ИменаПлагинов) Тогда + Сообщить("Выключены плагины: " + СтрСоединить(ИменаПлагинов, ", ")); + КонецЕсли; + КонецЕсли; - + ПараметрыПриложения.ЗаписатьВключенныеПлагины(); КонецПроцедуры diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260PluginEnable.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260PluginEnable.os" index 5be60ffa..9ca2aca9 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260PluginEnable.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260PluginEnable.os" @@ -1,4 +1,5 @@ #Использовать "../../core" +#Использовать cli-selector Перем Лог; @@ -6,16 +7,17 @@ Команда.Опция("a all", Ложь, "включить все установленные плагинов") .ВОкружении("GITSYNC_ENABLE_ALL_PLUGINS"); + Команда.Аргумент("PLUGIN", "", "Имя установленного плагина") .ТМассивСтрок() .ВОкружении("GITSYNC_PLUGINS"); - Команда.Спек = "(-a | --all) | PLUGIN..."; + Команда.Спек = "[-a | --all] | [PLUGIN...]"; КонецПроцедуры Процедура ВыполнитьКоманду(Знач Команда) Экспорт - + ИменаПлагинов = Команда.ЗначениеАргумента("PLUGIN"); ВсеУстановленные = Команда.ЗначениеОпции("all"); @@ -27,6 +29,19 @@ ВсеПлагины = МенеджерПлагинов.ПолучитьИндексПлагинов(); + Если НЕ ЗначениеЗаполнено(ИменаПлагинов) Тогда + ВыборВКонсоли = Новый ВыборВКонсоли("Выберите плагины к включению:"); + Для каждого Плагин Из ВсеПлагины Цикл + Если Плагин.Значение.Включен() Тогда + Представление = СтроковыеФункции.ДополнитьСтроку(Плагин.Ключ, 15, " ", "Справа") + " - включен"; + Иначе + Представление = Плагин.Ключ; + КонецЕсли; + ВыборВКонсоли.ДобавитьЗначениеВыбора(Плагин.Ключ, Представление, , НЕ Плагин.Значение.Включен()); + КонецЦикла; + ИменаПлагинов = ВыборВКонсоли.Выбрать(); + КонецЕсли; + Для каждого Плагин Из ИменаПлагинов Цикл ИмяПлагина = СокрЛ(Плагин); diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260PluginList.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260PluginList.os" index e94ea93d..1521ae5b 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260PluginList.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260PluginList.os" @@ -50,8 +50,8 @@ Процедура ВывестиОписаниеПлагина(КлассПлагина); - ШаблонНаименования = " %4 %1 [%3] " + Символы.Таб + "%2"; - ТекстВключен = ?(КлассПлагина.Включен(), "[on] ", "[off]"); + ШаблонНаименования = "%4 [%3] - %1 - %2"; + ТекстВключен = ?(КлассПлагина.Включен(), " [on]", "[off]"); Сообщить(СтрШаблон(ШаблонНаименования, КлассПлагина.Имя(), КлассПлагина.Описание(), КлассПлагина.Версия(), ТекстВключен)); diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Sync.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Sync.os" index 2bbeca8a..e89bd964 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Sync.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Sync.os" @@ -15,6 +15,9 @@ Команда.Опция("e ext extension", "", "имя расширения для работы с хранилищем расширения") .ТСтрока() .ВОкружении("GITSYNC_EXTENSION"); + + Команда.Опция("d das disable-auto-src", Ложь, "Отключить автопоиск папки src") + .ВОкружении("GITSYNC_DISABLE_AUTO_SRC"); Команда.Аргумент("PATH", "", "Путь к хранилищу конфигурации 1С.") .ТСтрока() @@ -50,10 +53,14 @@ Лог.Отладка("ПутьКХранилищу = " + ПутьКХранилищу); Лог.Отладка("КаталогРабочейКопии = " + КаталогРабочейКопии); - МассивФайлов = НайтиФайлы(КаталогРабочейКопии, "src"); КаталогИсходников = КаталогРабочейКопии; - Если МассивФайлов.Количество() > 0 Тогда - КаталогИсходников = МассивФайлов[0].ПолноеИмя; + + АвтодополнениеПути = НЕ Команда.ЗначениеОпции("disable-auto-src"); + Если АвтодополнениеПути Тогда + МассивФайлов = НайтиФайлы(КаталогРабочейКопии, "src"); + Если МассивФайлов.Количество() > 0 Тогда + КаталогИсходников = МассивФайлов[0].ПолноеИмя; + КонецЕсли; КонецЕсли; ОбщиеПараметры = ПараметрыПриложения.Параметры(); diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Usage.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Usage.os" index f2590682..10fb6318 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Usage.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Usage.os" @@ -35,9 +35,12 @@ | | 1. Активизация нужных плагинов: | - | > %1 plugins enable ИМЯПЛАГИНА - | или активизация всех плагинов + | активизация указанных плагинов + | > %1 plugins enable ИМЯПЛАГИНА1 ИМЯПЛАГИНА2 + | активизация всех плагинов | > %1 plugins enable -a + | интерактивный выбор плагинов + | > %1 plugins enable | | Подробные описание использования команды : | @@ -119,42 +122,22 @@ Процедура ВывестиОписание(Знач ТекстОписания) - Консоль = Новый Консоль(); - // ЦветТекстаКонсоли = Консоль.ЦветТекста; - // Консоль.ЦветТекста = ЦветТекстаКонсоли; - ИтоговаяСправка = ТекстОписания;// СтрШаблон(ТекстОписания, ИмяКомандыGitsync); - + ИтоговаяСправка = ТекстОписания; + МассивСтрокВывода = СтрРазделить(ИтоговаяСправка, Символы.ПС); Для каждого СтрокаВывода Из МассивСтрокВывода Цикл - Если СтрНачинаетсяС(СокрЛП(Строкавывода),"*") Тогда - СтрокаВывода = СтрЗаменить(СтрокаВывода,"*", " "); - - // Консоль.ЦветТекста = ЦветаКонсоли().ЦветСписка; - + Если СтрНачинаетсяС(СокрЛП(Строкавывода), "*") Тогда + СтрокаВывода = СтрЗаменить(СтрокаВывода, "*", " "); Консоль.ВывестиСтроку(Строкавывода); - - // Консоль.ЦветТекста = ЦветТекстаКонсоли; - - ИначеЕсли СтрНачинаетсяС(СокрЛП(Строкавывода),">") Тогда - //СтрокаВывода = СтрЗаменить(Строкавывода,">", " "); - - // Консоль.ЦветТекста = ЦветаКонсоли().ЦветКоманды; - + + ИначеЕсли СтрНачинаетсяС(СокрЛП(Строкавывода), ">") Тогда Консоль.ВывестиСтроку(Строкавывода); - - // Консоль.ЦветТекста = ЦветТекстаКонсоли; Иначе Консоль.ВывестиСтроку(Строкавывода); КонецЕсли; КонецЦикла; - - // Консоль.ЦветТекста = ЦветТекстаКонсоли; - //Консоль.ВывестиСтроку(ИтоговаяСправка); - Консоль = Неопределено; - - КонецПроцедуры Процедура ВывестиОписаниеДляКоманды(Знач ИмяКоманды) @@ -196,7 +179,7 @@ КонецФункции // ПрочитатьФайл() -Функция ЦветаКонсоли() Экспорт; +Функция ЦветаКонсоли() Экспорт Цвета = Новый Структура; // Цвета.Вставить("ЦветСписка", ЦветКонсоли.Желтый); diff --git "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" index 507e5848..4db871a6 100644 --- "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" @@ -101,8 +101,6 @@ КонецПроцедуры -#КонецОбласти - Функция ПолучитьПутьКФайлуПлагинов() МассивИменФайла = СтрРазделить(ИмяФайлаПлагинов, " ", Ложь); @@ -113,8 +111,8 @@ ФайлПлагинов = Новый Файл(ПутьКФайлуПлагинов); - Если Не ФайлПлагинов.Существует() Тогда - Возврат ФайлПлагинов.ПолноеИмя; + Если ФайлПлагинов.Существует() Тогда + Возврат ФайлПлагинов.ПолноеИмя; КонецЕсли; КонецЦикла; @@ -126,7 +124,7 @@ Функция ЭтоСборкаEXE() Экспорт Если ЭтоПриложениеEXE = Неопределено Тогда - ЭтоПриложениеEXE = ВРег(Прав(ТекущийСценарий().Источник, 3)) = "EXE"; + ЭтоПриложениеEXE = НРег(Лев(ТекущийСценарий().Источник, 10)) = "oscript://"; КонецЕсли; Возврат ЭтоПриложениеEXE; @@ -371,7 +369,7 @@ Функция Версия() Экспорт - Возврат "3.0.0-rc.2"; + Возврат "3.6.1"; КонецФункции diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/files/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/files/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os" index 01a53335..3d123f54 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/files/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/files/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os" @@ -2,7 +2,7 @@ Функция ПрочитатьФайл(Знач ПутьКФайлу) Экспорт - ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8", , , Ложь); ТекстФайла = ЧтениеТекста.Прочитать(); ЧтениеТекста.Закрыть(); diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os" index 2806e2d8..d2f62289 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262.os" @@ -39,7 +39,7 @@ МенеджерПодписок = Новый МенеджерПодписок; - ДоступныйИнтерфейсПлагинов.ИзОбъектаИсключая(МенеджерПодписок, "УстановитьПодписчиков, ВыполнитьПодпискуНаСобытие, ПрисвоитьЗначенияПараметраПроцедуры, ПриСозданииОбъекта"); + ДоступныйИнтерфейсПлагинов.ИзОбъектаИсключая(МенеджерПодписок, "УстановитьПодписчиков ВыполнитьПодпискуНаСобытие ПрисвоитьЗначенияПараметраПроцедуры ПриСозданииОбъекта"); Возврат ДоступныйИнтерфейсПлагинов; diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\276\320\264\320\277\320\270\321\201\320\276\320\272.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\276\320\264\320\277\320\270\321\201\320\276\320\272.os" index 63bb64d7..1815fa28 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\276\320\264\320\277\320\270\321\201\320\276\320\272.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\276\320\264\320\277\320\270\321\201\320\276\320\272.os" @@ -20,8 +20,6 @@ #КонецОбласти -#Область Подписки_на_события - #Область Подписка_на_активизацию_плагинов // Вызывается при начале установке новых подписчиков @@ -792,8 +790,6 @@ #КонецОбласти -#КонецОбласти - #Область Вспомогательные_процедуры_и_функции Процедура ВыполнитьПодпискуНаСобытие(Знач ИмяПроцедурыВыполнения, ПараметрыПроцедуры) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.os" index d91e271a..737a3699 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\320\273\320\260\320\263\320\270\320\275\320\276\320\262\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.os" @@ -7,7 +7,7 @@ МассивПодключенныхПлагинов = Новый Массив(); - Если ВРег(Прав(ТекущийСценарий().Источник, 3)) = "EXE" Тогда + Если НРег(Лев(ТекущийСценарий().Источник, 10)) = "oscript://" Тогда Возврат МассивПодключенныхПлагинов; КонецЕсли; @@ -71,7 +71,7 @@ Идентификатор = Чтение.ЗначениеАтрибута("name"); Если Не ПустаяСтрока(Идентификатор) Тогда ПодключитьСценарий(ФайлКласса.ПолноеИмя, Идентификатор); - МассивПодключенныхПлагинов.Добавить(Идентификатор); + МассивПодключенныхПлагинов.Добавить(Идентификатор); КонецЕсли; Иначе ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте"; diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" index 374addbe..d4e1e943 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" @@ -20,7 +20,14 @@ Перем Лог; -Процедура Синхронизировать() Экспорт +// Обертка над МенеджерСинхронизации.Синхронизировать +// +// СтрокаСоединенияИБ - Строка, необязательный, формат: /SServerName\BaseName или /F<Путь к ИБ> +// ПользовательИБ - Строка, необязательный +// ПарольПользователяИБ - Строка, необязательный +Процедура Синхронизировать(Знач СтрокаСоединенияИБ = "", + Знач ПользовательИБ = "", + Знач ПарольПользователяИБ = "") Экспорт Лог.Информация("================================="); Лог.Информация("Начало синхронизации с хранилищем"); @@ -30,11 +37,12 @@ ПроверитьВозможностьСинхронизации(); - МенеджерСинхронизации = ПолучитьМенеджерСинхронизации(); + МенеджерСинхронизации = ПолучитьМенеджерСинхронизации(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ); Если МенеджерСинхронизации.ТребуетсяСинхронизироватьХранилищеСГит(ПутьКРабочемуКаталогу, ПутьКХранилищу) Тогда - МенеджерСинхронизации.Синхронизировать(ПутьКРабочемуКаталогу, ПутьКХранилищу); + МенеджерСинхронизации.Синхронизировать(ПутьКРабочемуКаталогу, ПутьКХранилищу, + СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ); Лог.Информация("Завершена синхронизации с хранилищем"); Лог.Информация("Наименование: <%1>", Наименование); @@ -52,7 +60,9 @@ // TODO: Написать проверку какую? ) КонецПроцедуры -Функция ПолучитьМенеджерСинхронизации() +Функция ПолучитьМенеджерСинхронизации(Знач СтрокаСоединенияИБ = "", + Знач ПользовательИБ = "", + Знач ПарольПользователяИБ = "") МенеджерСинхронизации = Новый МенеджерСинхронизации(); МенеджерСинхронизации.ВерсияПлатформы(ВерсияПлатформы) @@ -64,6 +74,10 @@ .РежимУдаленияВременныхФайлов(Истина) .АвторизацияВХранилищеКонфигурации(ПользовательХранилища, ПарольПользователяХранилища); + Если ЗначениеЗаполнено(СтрокаСоединенияИБ) Тогда + МенеджерСинхронизации.УстановитьКонтекст(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ); + КонецЕсли; + Если ЗначениеЗаполнено(ИмяРасширения) Тогда МенеджерСинхронизации.ИмяРасширения(ИмяРасширения); КонецЕсли; diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" index 8b2ea4b8..15f73dc0 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" @@ -253,11 +253,20 @@ // Параметры: // КаталогРабочейКопии - Строка - путь к каталогу рабочей копии // ПутьКХранилищу - Строка - путь к хранилищу конфигурации -// -Процедура Синхронизировать(Знач КаталогРабочейКопии, Знач ПутьКХранилищу) Экспорт +// СтрокаСоединенияИБ - Строка, необязательный, формат: /SServerName\BaseName или /F<Путь к ИБ> +// ПользовательИБ - Строка, необязательный +// ПарольПользователяИБ - Строка, необязательный +Процедура Синхронизировать(Знач КаталогРабочейКопии, Знач ПутьКХранилищу, + Знач СтрокаСоединенияИБ = "", + Знач ПользовательИБ = "", + Знач ПарольПользователяИБ = "") Экспорт ОбработчикПодписок.ПередНачаломВыполнения(ПутьКХранилищу, КаталогРабочейКопии); + Если ЗначениеЗаполнено(СтрокаСоединенияИБ) Тогда + УстановитьКонтекст(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ); + КонецЕсли; + Лог.Информация("Начата синхронизация с git"); РабочийКонфигуратор = ПолучитьУправлениеКонфигуратором(); @@ -300,6 +309,8 @@ СтрокаВерсии = ТаблицаИсторииХранилища.Найти(СледующаяВерсия, "НомерВерсии"); Если СтрокаВерсии <> Неопределено Тогда + ВременныеФайлыДо = ВременныеФайлы.Файлы(); + ОбработчикПодписок.ПередОбработкойВерсииХранилища(СтрокаВерсии, СледующаяВерсия); Попытка @@ -315,16 +326,26 @@ СтрокаВерсии.Комментарий, СтрокаВерсии.ПредставлениеАвтора, СтрокаВерсии.Дата); - + Исключение + // откат файла версий должен выполняться только до фактического коммита в репозиторий + // поэтому в попытке после коммита в репозиторий больше ничего не должно выполняться Лог.Отладка("Откатываем файл VERSION после ошибки"); ЗаписатьФайлВерсийГит(КаталогРабочейКопии, ТекущаяВерсия); + + Если УдалятьВременныеФайлы Тогда + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(ВременныеФайлыДо); + КонецЕсли; + ВызватьИсключение; КонецПопытки; + + ВыполнитьПодпискиПослеКоммита(КаталогРабочейКопии); ТекущаяВерсия = СледующаяВерсия; ОбработчикПодписок.ПослеОбработкиВерсииХранилища(СтрокаВерсии, ТекущаяВерсия); - + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(ВременныеФайлыДо); КонецЕсли; СледующаяВерсия = СледующаяВерсия + 1; @@ -548,6 +569,9 @@ СоответствиеИменФайловДляПропуска = Новый Соответствие; СоответствиеИменФайловДляПропуска.Вставить(".git", Истина); + СоответствиеИменФайловДляПропуска.Вставить(".gitignore", Истина); + СоответствиеИменФайловДляПропуска.Вставить(".gitattributes", Истина); + СоответствиеИменФайловДляПропуска.Вставить(".hooks", Истина); СоответствиеИменФайловДляПропуска.Вставить(ИмяФайлаАвторов(), Истина); // Соответствие авторов и транслитерации. СоответствиеИменФайловДляПропуска.Вставить(ИмяФайлаВерсииХранилища(), Истина); // Номер версии, может использоватся для синхронизации с хранилищем. @@ -658,7 +682,6 @@ Если Файл.ЭтоКаталог() Тогда ИмяКаталога = ОбъединитьПути(КаталогРабочейКопии, ИмяНовогоФайла); - Лог.Отладка("Обрабатываю ИмяКаталога: %1 ", ИмяКаталога); ФайлКаталога = Новый Файл(ИмяКаталога); Если НЕ ФайлКаталога.Существует() Тогда СоздатьКаталог(ФайлКаталога.ПолноеИмя); @@ -824,12 +847,23 @@ ДатаДляГит); Лог.Отладка("Вывод команды Commit: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды())); - ОбработчикПодписок.ПослеКоммита(ГитРепозиторий, КаталогРабочейКопии); - ЗавершитьПроцесс_TGitCache_exe(); КонецПроцедуры +// Выполняет подписки после коммита в репозиторий +// +// Параметры: +// КаталогРабочейКопии - Строка - полный путь к рабочему каталогу копии +// +Процедура ВыполнитьПодпискиПослеКоммита(КаталогРабочейКопии) + + ГитРепозиторий = ПолучитьГитРепозиторий(КаталогРабочейКопии); + + ОбработчикПодписок.ПослеКоммита(ГитРепозиторий, КаталогРабочейКопии); + +КонецПроцедуры + #КонецОбласти #Область Функциональность_работы_с_таблицами_хранилища @@ -1349,7 +1383,7 @@ | комментарий <%2>, ГУИД-у <%3> - ПолучитьТаблицуВерсийИзФайлаХранилища1С"; Лог.Ошибка(СтрШаблон(Сообщение, Строка.НомерВерсии, Строка.Комментарий, Строка.ГУИД_Автора)); Иначе - Строка.Автор = СтрокаПользователя.Автор; + Строка.Автор = СокрЛП(СтрокаПользователя.Автор); КонецЕсли; КонецЦикла; diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\320\272\320\265\321\202\320\275\320\260\321\217\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\321\217.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\320\272\320\265\321\202\320\275\320\260\321\217\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\321\217.os" index 48b2f144..c535420e 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\320\272\320\265\321\202\320\275\320\260\321\217\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\321\217.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\320\272\320\265\321\202\320\275\320\260\321\217\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\321\217.os" @@ -200,13 +200,14 @@ // Выполняет пакетную синхронизацию // -Процедура ВыполнитьСинхронизацию(Знач КоличествоПотоков = 1) Экспорт +Процедура ВыполнитьСинхронизацию(Знач КоличествоПотоков = 1, Знач СтрокаСоединенияИБ = "", + Знач ПользовательИБ = "", Знач ПарольПользователяИБ = "") Экспорт ПодготовитьИндексРепозиториев(); Пока Истина Цикл - ПакетнаяСинхронизация(); + ПакетнаяСинхронизация(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ); Если ТаймерПовторения <= 0 Тогда @@ -221,11 +222,14 @@ КонецЦикла; + УдалитьВременныеФайлыПриНеобходимости(); + КонецПроцедуры // Выполняет пакетную синхронизацию // -Процедура ВыполнитьСинхронизациюПоНастройке(Знач ИмяНастройкиСинхронизации) Экспорт +Процедура ВыполнитьСинхронизациюПоНастройке(Знач ИмяНастройкиСинхронизации, Знач СтрокаСоединенияИБ = "", + Знач ПользовательИБ = "", Знач ПарольПользователяИБ = "") Экспорт ПодготовитьИндексРепозиториев(); @@ -240,7 +244,17 @@ Лог.Информация("Начата синхронизация с репозиторием <%1> ", ИмяНастройкиСинхронизации); + ВременныеФайлыДо = ВременныеФайлы.Файлы(); + + Если ЗначениеЗаполнено(СтрокаСоединенияИБ) Тогда + РепоСинхронизации.УстановитьКонтекст(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ); + КонецЕсли; + РепоСинхронизации.Синхронизировать(); + + Если УдалятьВременныеФайлы Тогда + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(ВременныеФайлыДо); + КонецЕсли; Если ТаймерПовторения <= 0 Тогда @@ -255,6 +269,8 @@ КонецЦикла; + УдалитьВременныеФайлыПриНеобходимости(); + КонецПроцедуры #КонецОбласти @@ -297,7 +313,7 @@ .ПолеСтрока("Наименование storage-name name") .ПолеСтрока("ПутьКХранилищу storage-path path") .ПолеСтрока("ПутьКРабочемуКаталогу work-dir git-local-path dir") - .ПолеСтрока("ИмяРасширения extention") + .ПолеСтрока("ИмяРасширения extention extension") ; Возврат КонструкторПараметров; @@ -322,14 +338,20 @@ #КонецОбласти -Процедура ПакетнаяСинхронизация() +Процедура ПакетнаяСинхронизация(Знач СтрокаСоединенияИБ = "", Знач ПользовательИБ = "", Знач ПарольПользователяИБ = "") Лог.Информация("Начата пакетная синхронизация с <%1> репозиториями", ИндексРепозиториев.Количество()); Для каждого КлючЗначение Из ИндексРепозиториев Цикл + + ВременныеФайлыДо = ВременныеФайлы.Файлы(); Репозиторий = КлючЗначение.Значение; - Репозиторий.Синхронизировать(); + Репозиторий.Синхронизировать(СтрокаСоединенияИБ, ПользовательИБ, ПарольПользователяИБ); + + Если УдалятьВременныеФайлы Тогда + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(ВременныеФайлыДо); + КонецЕсли; КонецЦикла; @@ -516,6 +538,26 @@ КонецПроцедуры +// Удаляет временные файлы при необходимости +// Если передана пустая строка, то удаляются все зарегистрированные временные файлы +// +// Параметры: +// ПутьКФайлу - Строка - полный путь файла или пустая строка +// +Процедура УдалитьВременныеФайлыПриНеобходимости(Знач ПутьКФайлу = "") + + Если НЕ УдалятьВременныеФайлы Тогда + Возврат; + КонецЕсли; + + Если ПутьКФайлу = "" Тогда + ВременныеФайлы.Удалить(); + Иначе + ВременныеФайлы.УдалитьФайл(ПутьКФайлу); + КонецЕсли; + +КонецПроцедуры + Процедура ПриСозданииОбъекта() ИндексРепозиториев = Новый Соответствие; diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" new file mode 100644 index 00000000..02627d4b --- /dev/null +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" @@ -0,0 +1,73 @@ +/////////////////////////////////////////////////////////////////// +// +// Служебный модуль с набором служебных параметров приложения +// +// Структура модуля реализована в соответствии с рекомендациями +// oscript-app-template (C) EvilBeaver +// +/////////////////////////////////////////////////////////////////// + +// ИмяПродукта +// Возвращает имя продукта +// +// Возвращаемое значение: +// Строка - Значение имени продукта +// +Функция ИмяПродукта() Экспорт + + Возврат "GitSync"; + +КонецФункции // ИмяПродукта + +// Возвращает идентификатор лога приложения +// +// Возвращаемое значение: +// Строка - Значение идентификатора лога приложения +// +Функция ИмяЛогаСистемы() Экспорт + + Возврат "oscript.app." + ИмяПродукта(); + +КонецФункции // ИмяЛогаСистемы + +// ВерсияПродукта +// Возвращает текущую версию продукта +// +// Возвращаемое значение: +// Строка - Значение текущей версии продукта +// +Функция ВерсияПродукта() Экспорт + + Возврат "3.6.1"; + +КонецФункции // ВерсияПродукта() + +Процедура ПриРегистрацииКомандПриложения(Знач КлассыРеализацииКоманд) Экспорт + + КлассыРеализацииКоманд["help"] = "КомандаСправкаПоПараметрам"; + КлассыРеализацииКоманд[ИмяКомандыВерсия()] = "КомандаVersion"; + КлассыРеализацииКоманд["clone"] = "КомандаClone"; + КлассыРеализацииКоманд["init"] = "КомандаInit"; + КлассыРеализацииКоманд["set-version"] = "КомандаSetVersion"; + КлассыРеализацииКоманд["all"] = "КомандаAll"; + КлассыРеализацииКоманд["export"] = "КомандаExport"; + КлассыРеализацииКоманд["sync"] = "КомандаSync"; + +КонецПроцедуры // ПриРегистрацииКомандПриложения + +Функция ИмяКомандыПоУмолчанию() Экспорт + + Возврат "sync"; + +КонецФункции // ИмяКомандыПоУмолчанию + +// Возвращает имя команды версия (ключ командной строки) +// +// Возвращаемое значение: +// Строка - имя команды +// +Функция ИмяКомандыВерсия() Экспорт + + Возврат "version"; + +КонецФункции // ИмяКомандыВерсия diff --git a/tasks/build.os b/tasks/build.os new file mode 100644 index 00000000..aeae013f --- /dev/null +++ b/tasks/build.os @@ -0,0 +1,45 @@ +#Использовать gitrunner +#Использовать tempfiles + +Перем Лог; +Перем КаталогПроекта; + +Процедура СобратьПакет(Знач ВыходнойКаталог, Знач ПутьКМанифестуСборки) + + КомандаOpm = Новый Команда; + // КомандаOpm.УстановитьРабочийКаталог(Каталог); + КомандаOpm.УстановитьКоманду("opm"); + КомандаOpm.ДобавитьПараметр("build"); + КомандаOpm.ДобавитьПараметр("-m"); + КомандаOpm.ДобавитьПараметр(ПутьКМанифестуСборки); + КомандаOpm.ДобавитьПараметр("-o"); + КомандаOpm.ДобавитьПараметр(ВыходнойКаталог); + КомандаOpm.ДобавитьПараметр(КаталогПроекта); + КомандаOpm.ПоказыватьВыводНемедленно(Истина); + + КодВозврата = КомандаOpm.Исполнить(); + + Если КодВозврата <> 0 Тогда + ВызватьИсключение КомандаOpm.ПолучитьВывод(); + КонецЕсли; + +КонецПроцедуры + +Процедура ПолезнаяРабота() + + // КаталогСборки = ВременныеФайлы.СоздатьКаталог(); + // КаталогУстановки = ВременныеФайлы.СоздатьКаталог(); + + ПутьКМанифестуСборки = ОбъединитьПути(КаталогПроекта, "build_packagedef"); + + СобратьПакет(КаталогПроекта, ПутьКМанифестуСборки); + + Лог.Информация("Пакет собран в каталог <%1>", КаталогПроекта); + +КонецПроцедуры + +КаталогПроекта = ОбъединитьПути(ТекущийСценарий().Каталог, ".."); +Лог = Логирование.ПолучитьЛог("task.install-opm"); +// Лог.УстановитьУровень(УровниЛОга.отладка); + +ПолезнаяРабота(); diff --git a/tasks/coverage.os b/tasks/coverage.os index bad9c65a..ec19ee6c 100644 --- a/tasks/coverage.os +++ b/tasks/coverage.os @@ -1,6 +1,12 @@ -#Использовать fs #Использовать coverage #Использовать 1commands +#Использовать fs + +Если АргументыКоманднойСтроки.Количество() = 0 Тогда + ТолькоЮнитТесты = Ложь; +Иначе + ТолькоЮнитТесты = Булево(АргументыКоманднойСтроки[0]); +КонецЕсли; ФС.ОбеспечитьПустойКаталог("coverage"); ПутьКСтат = "coverage/stat.json"; @@ -10,6 +16,10 @@ Команда.ДобавитьПараметр("-encoding=utf-8"); Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); Команда.ДобавитьПараметр("tasks/test.os"); +Если ТолькоЮнитТесты Тогда + Команда.ДобавитьПараметр("true"); +КонецЕсли; + Команда.ПоказыватьВыводНемедленно(Истина); КодВозврата = Команда.Исполнить(); @@ -21,6 +31,7 @@ ПроцессорГенерации = Новый ГенераторОтчетаПокрытия(); ПроцессорГенерации.ОтносительныеПути() + .ИмяФайлаСтатистики("stat*.json") .ФайлСтатистики(Файл_Стат.ПолноеИмя) .GenericCoverage() .Cobertura() diff --git a/tasks/get-plugins.os b/tasks/get-plugins.os index 021670d0..4fd76546 100644 --- a/tasks/get-plugins.os +++ b/tasks/get-plugins.os @@ -66,7 +66,14 @@ ПолучитьИсходники(URLРепозитория, ИмяВетки, КаталогСборки); СобратьПакет(КаталогСборки); - ВременныеФайлы.УдалитьФайл(КаталогСборки); + // При удалении временного каталога файлов исходников выводится ошибка + // о невозможности удаления подкаталога Git и из-за этого не проходит тест + Попытка + УдалитьФайлы(КаталогСборки); + Исключение + ТекстОшибки = "Попытка удаления временного каталога "+КаталогСборки+" закончилась неудачей"; + Лог.Предупреждение(ТекстОшибки); + КонецПопытки; КонецПроцедуры diff --git a/tasks/oscript.cfg b/tasks/oscript.cfg new file mode 100644 index 00000000..874f3d2d --- /dev/null +++ b/tasks/oscript.cfg @@ -0,0 +1 @@ +lib.system=../oscript_modules diff --git a/tasks/test.os b/tasks/test.os index 034f396c..12f9731c 100644 --- a/tasks/test.os +++ b/tasks/test.os @@ -187,8 +187,12 @@ Возврат ИтоговыйРезультатВыполнения <> ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался; КонецФункции // ПрогнатьФичи() -Функция ПрогнатьФичи() +Функция ПрогнатьФичи(ТолькоЮнитТесты) + Если ТолькоЮнитТесты Тогда + Возврат Истина; + КонецЕсли; + ФичиПрошли_opm = ПрогнатьФичи_opm(); ФичиПрошли_core = ПрогнатьФичи_core(); ФичиПрошли_cmd = ПрогнатьФичи_cmd(); @@ -206,6 +210,12 @@ ТестыПрошли = Истина; +Если АргументыКоманднойСтроки.Количество() = 0 Тогда + ТолькоЮнитТесты = Ложь; +Иначе + ТолькоЮнитТесты = Булево(АргументыКоманднойСтроки[0]); +КонецЕсли; + // Попытка // ТестыПрошли = ПрогнатьТесты(); @@ -218,7 +228,7 @@ ФичиПрошли = Истина; Попытка - ФичиПрошли = ПрогнатьФичи(); + ФичиПрошли = ПрогнатьФичи(ТолькоЮнитТесты); Исключение ФичиПрошли = Ложь; Сообщить(СтрШаблон("Тесты поведения через 1bdd выполнены неудачно