├── .gitattributes ├── .github └── workflows │ ├── release.yml │ └── test.yml ├── .gitignore ├── .travis.yml ├── .vscode ├── settings.json └── tasks.json ├── CHANGELOG.md ├── LICENSE.md ├── NOTICE ├── README.md ├── features ├── step_definitions │ ├── ВыполнениеПроизвольнойКоманды.os │ ├── ДобавлениеФайлаВИндекс.os │ ├── ИзвлечениеИзменений.os │ ├── ИнициализацияРепозитория.os │ ├── КлонированиеРепозитория.os │ ├── ОтправкаИзменений.os │ ├── ПолучениеИзменений.os │ ├── ПолучениеИстории.os │ ├── ПолучениеСостояния.os │ ├── ПолучениеТаблицыСтатусов.os │ ├── ПроверкаРепозитория.os │ ├── РаботаСВетками.os │ ├── РаботаСВнешнимиРепозиториями.os │ ├── РаботаСНастройкамиGit.os │ ├── РаботаСПодмодулями.os │ ├── РаботаСоСвойствами.os │ └── ФиксацияИзменений.os ├── ВыполнениеПроизвольнойКоманды.feature ├── ДобавлениеФайлаВИндекс.feature ├── ИзвлечениеИзменений.feature ├── ИнициализацияРепозитория.feature ├── КлонированиеРепозитория.feature ├── ОтправкаИзменений.feature ├── ПолучениеИзменений.feature ├── ПолучениеИстории.feature ├── ПолучениеСостояния.feature ├── ПолучениеТаблицыСтатусов.feature ├── ПроверкаРепозитория.feature ├── РаботаСВетками.feature ├── РаботаСВнешнимиРепозиториями.feature ├── РаботаСНастройкамиGit.feature ├── РаботаСПодмодулями.feature ├── РаботаСоСвойствами.feature └── ФиксацияИзменений.feature ├── lib.config ├── logo ├── horizontal.png ├── logo.png └── vertical.png ├── packagedef ├── sonar-project.properties ├── sonarlint.json ├── src ├── ГитРепозиторий.os ├── Классы │ ├── ДанныеСтатуса.os │ ├── КомандаГитРепозитория.os │ ├── НастройкаКомандыКлонировать.os │ └── НастройкаКомандыОтправить.os └── Модули │ └── РежимУстановкиНастроекGit.os ├── tasks ├── coverage.os ├── oscript.cfg └── test.os └── travis.sh /.gitattributes: -------------------------------------------------------------------------------- 1 | LICENSE merge=ours 2 | *.feature text eol=lf 3 | *.os text eol=lf 4 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Публикация релиза 2 | 3 | on: 4 | release: 5 | types: 6 | - published 7 | workflow_dispatch: 8 | 9 | jobs: 10 | release: 11 | uses: autumn-library/workflows/.github/workflows/release.yml@main 12 | with: 13 | package_mask: "gitrunner-*.ospx" 14 | secrets: 15 | PUSH_TOKEN: ${{ secrets.PUSH_TOKEN }} 16 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Тестирование 2 | 3 | on: 4 | push: 5 | pull_request: 6 | workflow_dispatch: 7 | 8 | jobs: 9 | test: 10 | strategy: 11 | fail-fast: false 12 | matrix: 13 | oscript_version: ['default', 'stable'] 14 | uses: autumn-library/workflows/.github/workflows/test.yml@main 15 | with: 16 | oscript_version: ${{ matrix.oscript_version }} 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .sonar 2 | .sonarlint 3 | coverage 4 | exec.log 5 | sonarlint.json 6 | 7 | junit-bdd\.xml 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | 3 | dist: trusty 4 | 5 | # addons: 6 | # sonarqube: true 7 | 8 | # jdk: 9 | # - oraclejdk8 10 | 11 | before_install: 12 | - if [ $TRAVIS_OS_NAME == "linux" ]; then 13 | export CXX="g++-4.9" CC="gcc-4.9" DISPLAY=:99.0; 14 | sh -e /etc/init.d/xvfb start; 15 | sleep 3; 16 | fi 17 | - wget -O os.deb https://files.gitter.im/EvilBeaver/OneScript/VreX/onescript-engine_1.0.17_all.deb 18 | - sudo apt-get install mono-complete mono-devel 19 | - sudo dpkg -i os.deb; sudo apt install -f 20 | - oscript 21 | 22 | install: 23 | - sudo oscript /usr/share/oscript/lib/opm/src/opm.os install 24 | 25 | cache: 26 | directories: 27 | - '$HOME/.m2/repository' 28 | - '$HOME/.sonar/cache' 29 | 30 | script: 31 | - ./travis.sh 32 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Поместите параметры в этот файл, чтобы перезаписать параметры по умолчанию и пользовательские параметры. 2 | { 3 | "language-1c-bsl.linterEntryPoint": "src/ГитРепозиторий.os" 4 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "command": "oscript", 4 | "presentation": { 5 | "echo": true, 6 | "reveal": "always", 7 | "focus": false, 8 | "panel": "shared", 9 | "showReuseMessage": true, 10 | "clear": false 11 | }, 12 | "args": [ 13 | "-encoding=utf-8" 14 | ], 15 | "tasks": [ 16 | { 17 | "type": "shell", 18 | "label": "Exec all features", 19 | "command":[ 20 | "1bdd" 21 | ], 22 | "args": [ 23 | "${workspaceRoot}/features", 24 | "-fail-fast", 25 | "-out", 26 | "${workspaceRoot}/exec.log" 27 | ], 28 | "presentation": { 29 | "echo": true, 30 | "reveal": "always", 31 | "focus": false, 32 | "panel": "shared", 33 | "showReuseMessage": true, 34 | "clear": false 35 | }, 36 | "group": "test", 37 | "problemMatcher": { 38 | "fileLocation": "absolute", 39 | "pattern": { 40 | "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", 41 | "file": 1, 42 | "location": 2, 43 | "message": 3 44 | } 45 | } 46 | }, 47 | { 48 | "type": "shell", 49 | "label": "Exec feature", 50 | "command":[ 51 | "1bdd" 52 | ], 53 | "args": [ 54 | "${file}", 55 | "-fail-fast", 56 | "-out", 57 | "${workspaceRoot}/exec.log" 58 | ], 59 | "presentation": { 60 | "echo": true, 61 | "reveal": "always", 62 | "focus": false, 63 | "panel": "shared", 64 | "showReuseMessage": true, 65 | "clear": false 66 | }, 67 | "group": "test", 68 | "problemMatcher": { 69 | "fileLocation": "absolute", 70 | "pattern": [ 71 | { 72 | "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", 73 | "file": 1, 74 | "location": 2, 75 | "message": 3 76 | } 77 | ] 78 | } 79 | }, 80 | { 81 | "type": "shell", 82 | "label": "Exec feature + debug", 83 | "command":[ 84 | "1bdd" 85 | 86 | ], 87 | "args": [ 88 | "${file}", 89 | "-fail-fast", 90 | "-verbose", 91 | "on", 92 | "-out", 93 | "${workspaceRoot}/exec.log" 94 | ], 95 | "presentation": { 96 | "echo": true, 97 | "reveal": "always", 98 | "focus": false, 99 | "panel": "shared", 100 | "showReuseMessage": true, 101 | "clear": false 102 | }, 103 | "group": "test", 104 | "problemMatcher": { 105 | "fileLocation": "absolute", 106 | "pattern": { 107 | "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", 108 | "file": 1, 109 | "location": 2, 110 | "message": 3 111 | } 112 | } 113 | }, 114 | { 115 | "type": "shell", 116 | "label": "Generate feature steps", 117 | "command":[ 118 | "1bdd" 119 | ], 120 | "args": [ 121 | "gen", 122 | "${file}", 123 | // "-verbose", 124 | // "on", 125 | "-out", 126 | "${workspaceRoot}/exec.log" 127 | ], 128 | "presentation": { 129 | "echo": true, 130 | "reveal": "always", 131 | "focus": false, 132 | "panel": "shared", 133 | "showReuseMessage": true, 134 | "clear": false 135 | }, 136 | "group": "build", 137 | "problemMatcher": { 138 | "fileLocation": "absolute", 139 | "pattern": { 140 | "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", 141 | "file": 1, 142 | "location": 2, 143 | "message": 3 144 | } 145 | } 146 | }, 147 | { 148 | "type": "shell", 149 | "label": "Generate feature steps + debug", 150 | "command":[ 151 | "1bdd" 152 | ], 153 | "args": [ 154 | "gen", 155 | "${file}", 156 | "-verbose", 157 | "on", 158 | "-out", 159 | "${workspaceRoot}/gen.log" 160 | ], 161 | "presentation": { 162 | "echo": true, 163 | "reveal": "always", 164 | "focus": false, 165 | "panel": "shared", 166 | "showReuseMessage": true, 167 | "clear": false 168 | }, 169 | "group": "build", 170 | "problemMatcher": { 171 | "fileLocation": "absolute", 172 | "pattern": { 173 | "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", 174 | "file": 1, 175 | "location": 2, 176 | "message": 3 177 | } 178 | } 179 | }, 180 | { 181 | "type": "shell", 182 | "label": "OneScript: compile", 183 | "command":[ 184 | "oscript" 185 | ], 186 | "args": [ 187 | "-compile", 188 | "${file}" 189 | ], 190 | "presentation": { 191 | "echo": true, 192 | "reveal": "always", 193 | "focus": false, 194 | "panel": "shared", 195 | "showReuseMessage": true, 196 | "clear": false 197 | }, 198 | "group": "test", 199 | }, 200 | { 201 | "type": "shell", 202 | "label": "OneScript: check", 203 | "command":[ 204 | "oscript" 205 | ], 206 | "args": [ 207 | "-check", 208 | "${file}" 209 | ], 210 | "presentation": { 211 | "echo": true, 212 | "reveal": "always", 213 | "focus": false, 214 | "panel": "shared", 215 | "showReuseMessage": true, 216 | "clear": false 217 | }, 218 | "group": "test", 219 | }, 220 | { 221 | "type": "shell", 222 | "label": "OneScript: make", 223 | "command":[ 224 | "oscript" 225 | ], 226 | "args": [ 227 | "-make", 228 | "${file}", 229 | "${fileBasename}.exe" 230 | ], 231 | "presentation": { 232 | "echo": true, 233 | "reveal": "always", 234 | "focus": false, 235 | "panel": "shared", 236 | "showReuseMessage": true, 237 | "clear": false 238 | }, 239 | "group": "test", 240 | }, 241 | { 242 | "type": "shell", 243 | "label": "OneScript: run", 244 | "command":[ 245 | "oscript" 246 | ], 247 | "args": [ 248 | "${file}" 249 | ], 250 | "presentation": { 251 | "echo": true, 252 | "reveal": "always", 253 | "focus": false, 254 | "panel": "shared", 255 | "showReuseMessage": true, 256 | "clear": false 257 | }, 258 | "group": "build", 259 | "problemMatcher": { 260 | "fileLocation": "absolute", 261 | "pattern": { 262 | "regexp": "^{Модуль\\s+(.*)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+(.*)}$", 263 | "file": 1, 264 | "location": 2, 265 | "message": 3 266 | } 267 | } 268 | } 269 | ] 270 | } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 1.6.1 2 | 3 | * Исправлена ошибка заполнения таблицы внешних репозиториев (метод `ПолучитьСписокВнешнихРепозиториев`) при пустом списке внешних репозиториев 4 | 5 | ## 1.6.0 6 | 7 | * В метод `Статус()` добавлена возможность получать вывод в кратком формате (`--short`) 8 | * Исправлено сохранение многострочных комментариев при выполнении коммита 9 | * Дата автора коммита теперь устанавливается через временную переменную среды `GIT_AUTHOR_DATE` 10 | 11 | ## 1.5.2 12 | 13 | * При выполнении коммита разрешается делать "пустые" (empty) коммиты 14 | 15 | ## 1.5.1 16 | 17 | * Указаны реальные номера версий зависимостей 18 | 19 | ## 1.5.0 20 | 21 | * Добавлена возможность установки тихого режима работы, не выбрасывающего исключений 22 | * Изменено логирование в режиме отладки 23 | * Убраны сообщения о Deprecated-методе на oscript >= 1.0.17 24 | * Требуемая версия oscript повышена до 1.0.17 25 | 26 | ## 1.4.0 27 | 28 | * Добавлен новый метод `ЭтоРепозиторий` (@realMaxA) 29 | 30 | ## 1.3.0 31 | 32 | * Добавлен новый метод `Извлечь` (@dmpas) 33 | * Исправлена ошибка работы библиотеки, привнесенная в 1.2.0 34 | 35 | ## 1.2.0 36 | 37 | **Смена поведения:** 38 | 39 | * Класс `НастройкаРежимаОтправкиGit` переименован в `НастройкаКомандыОтправить` 40 | * Метод `УстановитьНастройкиРежимаОтправки` переименован в `УстановитьНастройкуКомандыОтправить` 41 | * Установлена требуемая версия движка oscript - 1.0.16 42 | 43 | **Прочие изменения:** 44 | 45 | * Добавлен класс `НастройкаКомандыКлонировать` для тонкой настройки режима клонирования репозитория 46 | * В класс ГитРепозиторий добавлен метод `УстановитьНастройкуКомандыКлонировать` 47 | * Обновлена документация по расширенным режимам работы 48 | * Библиотека переведена на использование 1commands 49 | 50 | ## 1.1.2 51 | 52 | * Исправлена синтаксическая ошибка в модуле 53 | 54 | ## 1.1.1 55 | 56 | * В метод `ПерейтиВВетку` добавлен флаг принудительного перехода (`-f`) 57 | 58 | ## 1.1.0 59 | 60 | * В метод `Отправить` добавлен флаг перезаписи истории (`--force`) 61 | * Добавлен метод `УстановитьНастройкиРежимаОтправки`, куда передается инстанс класса `НастройкаРежимаОтправкиGit` 62 | * Добавлен новый класс `НастройкаРежимаОтправкиGit` 63 | 64 | ## 1.0.0 65 | 66 | **Первый релиз** 67 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | ===================== 3 | 4 | Copyright © `2016` `Nikita Gryzlov ` 5 | 6 | Permission is hereby granted, free of charge, to any person 7 | obtaining a copy of this software and associated documentation 8 | files (the “Software”), to deal in the Software without 9 | restriction, including without limitation the rights to use, 10 | copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the 12 | Software is furnished to do so, subject to the following 13 | conditions: 14 | 15 | The above copyright notice and this permission notice shall be 16 | included in all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, 19 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 20 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 22 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 23 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25 | OTHER DEALINGS IN THE SOFTWARE. 26 | 27 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | This product contains parts of V8Runner, which is licensed under the Apache License, 2 | Version 2.0. 3 | The license can be downloaded from 4 | http://www.apache.org/licenses/LICENSE-2.0.html. 5 | The source code for this software is available from 6 | https://github.com/oscript-library/v8runner. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

gitrunner

2 | 3 | # gitrunner 4 | 5 | ## Библиотека для упрощения работы с git из oscript. 6 | 7 | Позволяет выполнять рутинные операции с репозиторием в стиле [v8runner](https://github.com/oscript-library/v8runner). 8 | 9 | Пример работы: 10 | ```bsl 11 | ГитРепозиторий = Новый ГитРепозиторий(); 12 | ГитРепозиторий.УстановитьРабочийКаталог(КаталогРепозитория); 13 | 14 | ГитРепозиторий.УстановитьНастройку("core.quotePath", "true", РежимУстановкиНастроекGit.Локально); 15 | 16 | ГитРепозиторий.ДобавитьВнешнийРепозиторий("origin", ПутьКВнешнемуРепозиторию); 17 | 18 | ГитРепозиторий.ПерейтиВВетку("master"); 19 | ГитРепозиторий.Получить(); 20 | 21 | ГитРепозиторий.ОбновитьПодмодули(Истина, Истина); 22 | ``` 23 | 24 | Расширенный режим работы (например, отправки изменений): 25 | ```bsl 26 | ГитРепозиторий = Новый ГитРепозиторий(); 27 | НастройкаОтправить = Новый НастройкаКомандыОтправить; 28 | НастройкаОтправить.УстановитьURLРепозиторияОтправки("origin"); 29 | НастройкаОтправить.ОтображатьПрогресс(); 30 | НастройкаОтправить.ПерезаписатьИсторию(); 31 | НастройкаОтправить.ПолнаяОтправка(); 32 | 33 | ГитРепозиторий.УстановитьНастройкуКомандыОтправить(НастройкаОтправить); 34 | 35 | ГитРепозиторий.Отправить(); 36 | ``` 37 | 38 | 39 | Так же описание функциональности содержится в папке `features`. В прилагающихся `step_definitions` можно подсмотреть больше примеров. 40 | 41 | ## Публичный интерфейс 42 | 43 | ### Класс ГитРепозиторий: 44 | 45 | > Работа со свойствами объекта ГитРепозиторий 46 | 47 | #### УстановитьРабочийКаталог 48 | ```bsl 49 | // Установить текущий рабочий каталог. 50 | // Все команды git будут выполняться относительно указанного каталога. 51 | // 52 | // Параметры: 53 | // ПутьРабочийКаталог - Строка - Путь к рабочему каталогу. 54 | // Может быть относительным. 55 | // 56 | ``` 57 | 58 | #### ПолучитьРабочийКаталог 59 | ```bsl 60 | // Получить текущий рабочий каталог. 61 | // 62 | // Возвращаемое значение: 63 | // Строка - Путь к рабочему каталогу 64 | // 65 | ``` 66 | 67 | #### ПолучитьПутьКГит 68 | ```bsl 69 | // Получить путь к исполняемому файлу git. 70 | // 71 | // Возвращаемое значение: 72 | // Строка - Путь к исполняемому файлу. 73 | // По умолчанию содержит значение "git". 74 | // 75 | ``` 76 | 77 | #### УстановитьПутьКГит 78 | ```bsl 79 | // Установить путь к исполняемому файлу git. 80 | // 81 | // Параметры: 82 | // Путь - Строка - Путь к исполняемому файлу. 83 | // 84 | ``` 85 | 86 | #### ПолучитьВыводКоманды 87 | ```bsl 88 | // Получить вывод последней выполненной команды. 89 | // 90 | // Возвращаемое значение: 91 | // Строка - Вывод команды 92 | // 93 | ``` 94 | 95 | #### ПолучитьКодВозврата 96 | ```bsl 97 | // Получить код возврата последней выполненной команды. 98 | // 99 | // Возвращаемое значение: 100 | // Число - Код возврата выполнения команды 101 | // 102 | ``` 103 | 104 | #### УстановитьТихийРежимРаботы 105 | ```bsl 106 | // Устанавливает тихий режим работы библиотеки (без вызова исключений). 107 | // 108 | ``` 109 | 110 | #### УстановитьНормальныйРежимРаботы 111 | ```bsl 112 | // Устанавливает нормальный режим работы библиотеки (с вызовом исключений). 113 | // 114 | ``` 115 | 116 | > Общие команды git 117 | 118 | #### Инициализировать 119 | ```bsl 120 | // Выполняет инициализиацию репозитория в рабочем каталоге 121 | // git init 122 | // 123 | ``` 124 | 125 | #### Статус 126 | ```bsl 127 | // Получает состояние репозитория 128 | // git status 129 | // 130 | // Параметры: 131 | // ВКороткомФормате - Булево - Вывод в коротком формате 132 | // 133 | // Возвращаемое значение: 134 | // Строка - Вывод команды 135 | // 136 | ``` 137 | 138 | #### ДобавитьФайлВИндекс 139 | ```bsl 140 | // Добавляет файл в индекс git 141 | // git add 142 | // 143 | // Параметры: 144 | // ПутьКДобавляемомуФайлу - Строка - Путь к файлу на диске 145 | // 146 | ``` 147 | 148 | #### Закоммитить 149 | ```bsl 150 | // Зафиксировать проиндексированные изменения в истории git 151 | // git commit 152 | // 153 | // Параметры: 154 | // ТекстСообщения - Строка - Текст сообщения коммита (-m ТекстСообщения) 155 | // ПроиндексироватьОтслеживаемыеФайлы - Булево - Автоматически добавить 156 | // в индекс файлы, уже отслеживаемые git (-a) 157 | // ПутьКФайлуКоммита - Строка - путь к файлу с текстом комментария (-F ПутьКФайлуСтекстомКоммита) 158 | // АвторКоммита - Строка - Автор комментария, передается в случае необходимости (--author=АвторКоммита) 159 | // ДатаАвтораКоммита - Дата - Дата комментария (--date=ДатаАвтораКоммита) 160 | // Коммитер - Строка - Коммитер комментария, передается в случае, если требуется 161 | // ДатаКоммита - Дата - Дата произведения коммита 162 | // 163 | ``` 164 | 165 | #### ВывестиИсторию 166 | ```bsl 167 | // Вывести историю репозитория 168 | // git log 169 | // 170 | // Параметры: 171 | // Графически - Булево - Вывести историю в виде графа (--graph) 172 | // 173 | ``` 174 | 175 | #### Получить 176 | ```bsl 177 | // Получить изменения из удаленного репозитория 178 | // git pull 179 | // 180 | // Параметры: 181 | // ИмяРепозитория - Строка - Имя репозитория, из которого необходимо 182 | // получить изменения 183 | // ИмяВетки - Строка - Имя ветки, из которой необходимо получить изменения 184 | // 185 | ``` 186 | 187 | #### Извлечь 188 | ```bsl 189 | // Получить изменения из удаленного репозитория без обновления ветки 190 | // git fetch 191 | // 192 | // Параметры: 193 | // ИмяРепозитория - Строка - Имя репозитория, из которого необходимо 194 | // получить изменения 195 | // 196 | ``` 197 | 198 | #### Отправить 199 | ```bsl 200 | // git push 201 | // 202 | // Параметры: 203 | // ИмяРепозитория - Строка - Имя репозитория, в который необходимо 204 | // отправить изменения 205 | // ИмяВетки - Строка - Имя ветки, в который необходимо отправить изменения 206 | // ПерезаписатьИсторию - Булево - Флаг отправки с перезаписью истории (--force) 207 | // 208 | ``` 209 | 210 | #### УстановитьНастройкиРежимаОтправки 211 | ```bsl 212 | // Установить настройки отправки изменений. 213 | // Позволяет произвести тонкую настройку необходимых флагов команды отправки изменений 214 | // 215 | // Параметры: 216 | // НастройкаКомандыОтправить - НастройкаКомандыОтправить - инстанс класса НастройкаКомандыОтправить с необходимыми 217 | // настройками 218 | // 219 | ``` 220 | 221 | #### КлонироватьРепозиторий 222 | ```bsl 223 | // git clone 224 | // 225 | // Параметры: 226 | // ПутьУдаленномуРепозиторию - Строка - Путь к удаленному репозиторию 227 | // КаталогКлонирования - Строка - Каталог, в который необходимо выполнить 228 | // клонирование 229 | // 230 | ``` 231 | 232 | #### УстановитьНастройкуКомандыКлонировать 233 | ```bsl 234 | // Установить настройки клонирования репозитория. 235 | // Позволяет произвести тонкую настройку необходимых флагов команды клонирования репозитория 236 | // 237 | // Параметры: 238 | // НастройкаКомандыКлонировать - НастройкаКомандыКлонировать - инстанс класса НастройкаКомандыКлонировать с необходимыми 239 | // настройками 240 | // 241 | ``` 242 | 243 | #### ЭтоРепозиторий 244 | ```bsl 245 | // Возвращает признак того, что РабочийКаталог является репозиторием git 246 | // 247 | ``` 248 | 249 | > Работа с ветками 250 | 251 | #### ПолучитьТекущуюВетку 252 | ```bsl 253 | // Получить имя текущей ветки 254 | // 255 | // Возвращаемое значение: 256 | // Строка - Имя текущей ветки 257 | // 258 | ``` 259 | 260 | #### ПерейтиВВетку 261 | ```bsl 262 | // Выполнить переход в ветку 263 | // git checkout 264 | // 265 | // Параметры: 266 | // ИмяВетки - Строка - Имя ветки, в которую необходимо перейти 267 | // СоздатьНовую - Булево - Флаг необходимости создания новой ветки (-b) 268 | // Принудительно - Булево - Флаг необходимости принудительно перейти в ветку (-f) 269 | // 270 | // @unstable 271 | // 272 | ``` 273 | 274 | #### СоздатьВетку 275 | ```bsl 276 | // Создать новую ветку без выполнения перехода в нее 277 | // git branch 278 | // 279 | // Параметры: 280 | // ИмяВетки - Строка - Имя создаваемой ветки 281 | // 282 | ``` 283 | 284 | #### ПолучитьСписокВеток 285 | ```bsl 286 | // Получить список веток 287 | // 288 | // Параметры: 289 | // ВключаяУдаленные - Булево - Включать информацию об удаленных ветках 290 | // 291 | // Возвращаемое значение: 292 | // ТаблицаЗначений - Таблица с информацией о текущих ветках. 293 | // Содержит колонки: 294 | // Текущая - Булево - Признак текущей ветки 295 | // Имя - Строка - Имя ветки 296 | // 297 | ``` 298 | 299 | > Работа с внешними репозиториями 300 | 301 | #### ДобавитьВнешнийРепозиторий 302 | ```bsl 303 | // Добавить внешний репозиторий 304 | // git remote add 305 | // 306 | // Параметры: 307 | // ИмяРепозитория - Строка - Имя внешнего репозитория 308 | // АдресВнешнегоРепозитория - Строка - Путь к внешнему репозиторию 309 | // 310 | ``` 311 | 312 | #### УдалитьВнешнийРепозиторий 313 | ```bsl 314 | // Удалить внешний репозиторий 315 | // git remote remove 316 | // 317 | // Параметры: 318 | // ИмяРепозитория - Строка - Имя внешнего репозитория 319 | // 320 | ``` 321 | 322 | #### ПолучитьСписокВнешнихРепозиториев 323 | ```bsl 324 | // Получить список внешних репозиториев 325 | // 326 | // Возвращаемое значение: 327 | // ТаблицаЗначений - Таблица с информацией о внешних репозиториях. 328 | // Содержит колонки: 329 | // Имя - Строка - Имя внешнего репозитория 330 | // Адрес - Строка - Путь к внешнему репозиторию 331 | // Режим - Строка - Режим работы с внешним репозиторием (push/fetch) 332 | // 333 | ``` 334 | 335 | > Работа с подмодулями 336 | 337 | #### ДобавитьПодмодуль 338 | ```bsl 339 | // Добавить новый подмодуль 340 | // git submodule add 341 | // 342 | // Параметры: 343 | // АдресВнешнегоРепозитория - Строка - Путь к внешнему репозиторию 344 | // Местоположение - Строка - Каталог, в который необходимо поместить 345 | // указанный подмодуль 346 | // Ветка - Строка - Имя ветки внешнего репозитория для получения 347 | // ИмяПодмодуля - Строка - Имя, под которым подмодуль будет сохранен 348 | // в настройках 349 | // 350 | ``` 351 | 352 | #### ОбновитьПодмодули 353 | ```bsl 354 | // Обновить данные о зарегистрированных подмодулях 355 | // git submodule update 356 | // 357 | // Параметры: 358 | // Инициализировать - Булево - Выполнять инициализацию подмодуля 359 | // Рекурсивно - Рекурсивно - Обновлять подмодули подмодулей 360 | // 361 | ``` 362 | 363 | #### ПолучитьСостояниеПодмодулей 364 | ```bsl 365 | // Получить состояние подмодулей 366 | // 367 | // Возвращаемое значение: 368 | // ТаблицаЗначений - Таблица с информацией о подмодулях. 369 | // Содержит колонки: 370 | // ХэшКоммита - Строка - Хэш коммита, на который указывает подмодуль 371 | // Имя - Строка - Имя подмодуля 372 | // Указатель - Строка - указатель на внешний репозиторий 373 | // 374 | ``` 375 | 376 | > Работа с настройками 377 | 378 | #### ПолучитьНастройку 379 | ```bsl 380 | // Получить значение настройки git 381 | // 382 | // Параметры: 383 | // ИмяНастройки - Строка - Имя настройки 384 | // РежимУстановкиНастроекGit - РежимУстановкиНастроекGit - Режим установки настройки. 385 | // Значения параметра содержатся в перечислении РежимУстановкиНастроекGit 386 | // 387 | // Возвращаемое значение: 388 | // Строка - Значение настройки 389 | // 390 | ``` 391 | 392 | #### УстановитьНастройку 393 | ```bsl 394 | // Установить настройку git 395 | // git config 396 | // 397 | // Параметры: 398 | // ИмяНастройки - Строка - Имя настройки 399 | // ЗначениеНастройки - Строка - Устанавливаемое значение 400 | // РежимУстановкиНастроекGit - РежимУстановкиНастроекGit - Режим установки настройки. 401 | // Значения параметра содержатся в перечислении РежимУстановкиНастроекGit 402 | // 403 | ``` 404 | 405 | #### УдалитьСекциюНастроек 406 | ```bsl 407 | // Удаление секции настроек git 408 | // 409 | // Параметры: 410 | // ИмяСекции - Строка - Имя секции 411 | // РежимУстановкиНастроекGit - РежимУстановкиНастроекGit - Режим установки настройки. 412 | // 413 | ``` 414 | 415 | #### ПолучитьСписокНастроек 416 | ```bsl 417 | // Получить список настроек git 418 | // 419 | // Параметры: 420 | // РежимУстановкиНастроекGit - РежимУстановкиНастроекGit - Уровень, на котором 421 | // необходимо искать значения настроек 422 | // 423 | // Возвращаемое значение: 424 | // Соответствие - Список настроек. 425 | // Ключ соответствия - ключ настройки 426 | // Значение соответствия - значение настройки 427 | // 428 | ``` 429 | 430 | > Выполнение произвольных команд 431 | 432 | #### ВыполнитьКоманду 433 | ```bsl 434 | // Выполнение произвольной команды git 435 | // 436 | // Параметры: 437 | // Параметры - Массив - Массив строковых аргументов, передаваемых в командную 438 | // строку. Добавляются после исполняемого файла. 439 | // 440 | ``` 441 | 442 | ### Класс НастройкаКомандыОтправить: 443 | 444 | #### ПолучитьПараметрыКоманды 445 | ```bsl 446 | // Функция возвращает массив параметров выполнения команды git 447 | // 448 | ```bsl 449 | 450 | #### ПолучитьНастройки 451 | ```bsl 452 | // Функция возвращает стурктуру с текущими настройками отправки 453 | // 454 | // Возвращаемое значение: 455 | // Структура 456 | // Доступные ключи: 457 | // URLРепозитория - Строка - Признак текущей ветки 458 | // ЗаголовкиОтправки - Массив - Массив строк заголовков 459 | // ПараметрыКомандыОтправки - Соответсвие - Соответвие настроек команды (ключ - имя параметра, значение - булево) 460 | ``` 461 | 462 | #### УстановитьНастройки 463 | ```bsl 464 | // Процедура устанавливает текущими настройками отправки по переданный структуре 465 | // 466 | // Параметры 467 | // НовыеНастройкиОтправки - Структура 468 | // Доступные ключи: 469 | // URLРепозитория - Строка - Признак текущей ветки 470 | // ЗаголовкиОтправки - Массив - Массив строк заголовков 471 | // ПараметрыКомандыОтправки - Соответсвие - Соответвие настроек команды (ключ - имя параметра, значение - булево) 472 | ``` 473 | 474 | #### ДобавитьПроизвольныйЗаголовокОтправки 475 | ```bsl 476 | // Процедура добавляет произвольный заголовок настройками отправки 477 | // 478 | // Параметры 479 | // ЗаголовокОтправки - Строка - значение заголовка отправки 480 | // 481 | ``` 482 | 483 | #### УстановитьURLРепозиторияОтправки 484 | ```bsl 485 | // Процедура устанавливает URL репозитория git в настройками отправки 486 | // 487 | // Параметры 488 | // НовыйURLРепозитория - Строка - значение URL git репозитория или имя внешнего репозитория 489 | // 490 | ``` 491 | 492 | #### УстановитьЗаголовкиОтправки 493 | ```bsl 494 | // Процедура устанавливает массив заголовков отправки репозитория git в настройки отправки 495 | // 496 | // Параметры 497 | // НовыйЗаголовкиОтправки - Строка/Массив - Строка или массив готовый заголовок отправки 498 | // 499 | ``` 500 | 501 | #### УстановитьПараметрыКомандыОтправки 502 | ```bsl 503 | // Процедура устанавливает параметры команды в настройки отправки 504 | // 505 | // Параметры 506 | // Параметры - Соответвие - Соответвие настроек команды (ключ - имя параметра, значение - булево) 507 | // 508 | ``` 509 | 510 | #### ДобавитьЗаголовкиОтправки 511 | ```bsl 512 | // Процедура добавляет заголовки отправки в настройки отправки 513 | // 514 | // Параметры 515 | // ЗаголовокРабочейКопии - строка - строка с именем ветки или refspec рабочей копии 516 | // ЗаголовокУдаленногоСервера - строка - строка с именем ветки или refspec удаленного сервера 517 | // 518 | ``` 519 | 520 | #### ОтображатьПрогресс 521 | ```bsl 522 | // Процедура устанавливает параметры отображения прогресса выполнения команды в настройки отправки 523 | // git push --progress 524 | // Параметры 525 | // ЗначениеУстановки - булево - По умолчанию Истина 526 | ``` 527 | 528 | #### РежимТишины 529 | ```bsl 530 | // Процедура устанавливает параметры режима тишины выполнения команды в настройки отправки 531 | // git push --quiet 532 | // Параметры 533 | // ЗначениеУстановки - булево - По умолчанию Истина 534 | ``` 535 | 536 | #### РежимЗеркала 537 | ```bsl 538 | // Процедура устанавливает параметры режима зеркала выполнения команды в настройки отправки 539 | // git push --mirror 540 | // Параметры 541 | // ЗначениеУстановки - булево - По умолчанию Истина 542 | ``` 543 | 544 | #### РежимУдаления 545 | ```bsl 546 | // Процедура устанавливает параметры режима удаления выполнения команды в настройки отправки 547 | // git push --delete 548 | // Параметры 549 | // ЗначениеУстановки - булево - По умолчанию Истина 550 | ``` 551 | 552 | #### ПолнаяОтправка 553 | ```bsl 554 | // Процедура устанавливает параметры режима полной отправки при выполнении команды в настройки отправки 555 | // git push --all 556 | // Параметры 557 | // ЗначениеУстановки - булево - По умолчанию Истина 558 | ``` 559 | 560 | #### ПерезаписатьИсторию 561 | ```bsl 562 | // Процедура устанавливает режим перезаписи истории при выполнении команды в настройки отправки 563 | // git push --force 564 | // Параметры 565 | // ЗначениеУстановки - булево - По умолчанию Истина 566 | ``` 567 | 568 | #### Отслеживать 569 | ```bsl 570 | // Процедура устанавливает необходимость отслеживать отправленные заголовки при выполнении команды в настройки отправки 571 | // git push --set-upstream 572 | // Параметры 573 | // ЗначениеУстановки - булево - По умолчанию Истина 574 | ``` 575 | 576 | #### РежимПрограммнойОбработкаРезультата 577 | ```bsl 578 | // Процедура устанавливает режим программной обработки результатов при выполнении команды в настройки отправки 579 | // git push --porcelain 580 | // Параметры 581 | // ЗначениеУстановки - булево - По умолчанию Истина 582 | ``` 583 | 584 | #### ОтправкаТегов 585 | ```bsl 586 | // Процедура устанавливает режим отправки тегов при выполнении команды в настройки отправки 587 | // git push --tags 588 | // Параметры 589 | // ЗначениеУстановки - булево - По умолчанию Истина 590 | ``` 591 | 592 | #### УстановитьПроизвольныйРежим 593 | 594 | ```bsl 595 | // Процедура устанавливает произвольную настройку при выполнении команды в настройки отправки 596 | // 597 | // Параметры 598 | // НаименованиеПараметра - строка - Наименование параметра настройки 599 | // ЗначениеУстановки - булево - По умолчанию Истина 600 | ``` 601 | 602 | ### Класс НастройкаКомандыКлонировать: 603 | 604 | #### ПолучитьПараметрыКоманды 605 | 606 | ```bsl 607 | // Функция возвращает массив параметров выполнения команды git 608 | // 609 | ``` 610 | 611 | #### УстановитьURLРепозиторияКлонирования 612 | 613 | ```bsl 614 | // Процедура устанавливает URL репозитория git в настройками отправки 615 | // 616 | // Параметры 617 | // НовыйURLРепозитория - Строка - значение URL git репозитория или имя внешнего репозитория 618 | // 619 | ``` 620 | 621 | #### УстановитьКаталогКлонирования 622 | 623 | ```bsl 624 | // Процедура устанавливает каталог рабочей копии репозитория git в настройками клонирования 625 | // 626 | // Параметры 627 | // КаталогКлонирования - Строка - значение URL git репозитория или имя внешнего репозитория 628 | // 629 | ``` 630 | 631 | #### УстановитьПараметрыКомандыКлонирования 632 | 633 | ```bsl 634 | // Процедура устанавливает параметры команды в настройки отправки 635 | // 636 | // Параметры 637 | // Параметры - Соответвие - Соответвие настроек команды (ключ - имя параметра, значение - булево) 638 | // 639 | ``` 640 | 641 | #### РежимЗеркала 642 | 643 | ```bsl 644 | // Процедура устанавливает параметры режима зеркала выполнения команды в настройки 645 | // --mirror 646 | // Параметры 647 | // ЗначениеУстановки - булево - По умолчанию Истина 648 | ``` 649 | 650 | #### РежимБезРабочейКопии 651 | 652 | ```bsl 653 | // Процедура устанавливает параметры режима без рабочей выполнения команды в настройки 654 | // --bare 655 | // Параметры 656 | // ЗначениеУстановки - булево - По умолчанию Истина 657 | ``` 658 | 659 | #### ГлубинаКопии 660 | 661 | ```bsl 662 | // Процедура устанавливает параметры глубина получения коммитов команды в настройки 663 | // --depth 664 | // Параметры 665 | // ЗначениеУстановки - Число - По умолчанию 0 666 | ``` 667 | 668 | #### УстановитьПроизвольныйРежим 669 | 670 | ```bsl 671 | // Процедура устанавливает произвольную настройку при выполнении команды в настройки 672 | // 673 | // Параметры 674 | // НаименованиеПараметра - строка - Наименование параметра настройки 675 | // ЗначениеУстановки - булево - По умолчанию Истина 676 | ``` 677 | 678 | 679 | ### Перечисления 680 | 681 | #### РежимУстановкиНастроекGit: 682 | 683 | Значения: 684 | * Локально 685 | * Глобально 686 | * Системно 687 | -------------------------------------------------------------------------------- /features/step_definitions/ВыполнениеПроизвольнойКоманды.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | #Использовать asserts 4 | #Использовать tempfiles 5 | 6 | Перем БДД; //контекст фреймворка 1bdd 7 | 8 | // Метод выдает список шагов, реализованных в данном файле-шагов 9 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 10 | БДД = КонтекстФреймворкаBDD; 11 | 12 | ВсеШаги = Новый Массив; 13 | 14 | ВсеШаги.Добавить("ЯВыполняюПроизвольнуюКомандуGit"); 15 | ВсеШаги.Добавить("ВыводКомандыСодержит"); 16 | ВсеШаги.Добавить("ВыводКомандыНеСодержит"); 17 | ВсеШаги.Добавить("ЯСообщаюВыводКоманды"); 18 | ВсеШаги.Добавить("ЯПытаюсьВыполнитьПроизвольнуюКомандуGit"); 19 | 20 | Возврат ВсеШаги; 21 | КонецФункции 22 | 23 | // Реализация шагов 24 | 25 | // Процедура выполняется перед запуском каждого сценария 26 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 27 | 28 | КонецПроцедуры 29 | 30 | // Процедура выполняется после завершения каждого сценария 31 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 32 | 33 | КонецПроцедуры 34 | 35 | //Я выполняю произвольную команду git "status" 36 | Процедура ЯВыполняюПроизвольнуюКомандуGit(Знач ТекстПроизвольнойКоманды) Экспорт 37 | 38 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 39 | 40 | ПараметрыКоманды = Новый Массив; 41 | ПараметрыКоманды = СтрРазделить(ТекстПроизвольнойКоманды, " "); 42 | 43 | ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); 44 | 45 | КонецПроцедуры 46 | 47 | //Вывод команды содержит "" 48 | Процедура ВыводКомандыСодержит(Знач ОжидаемыйВыводКоманды) Экспорт 49 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 50 | 51 | ВыводКоманды = ГитРепозиторий.ПолучитьВыводКоманды(); 52 | Ожидаем.Что(ВыводКоманды).Содержит(ОжидаемыйВыводКоманды); 53 | КонецПроцедуры 54 | 55 | //Вывод команды не содержит "" 56 | Процедура ВыводКомандыНеСодержит(Знач ОжидаемыйВыводКоманды) Экспорт 57 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 58 | 59 | ВыводКоманды = ГитРепозиторий.ПолучитьВыводКоманды(); 60 | Ожидаем.Что(ВыводКоманды).Не_().Содержит(ОжидаемыйВыводКоманды); 61 | КонецПроцедуры 62 | 63 | //Я сообщаю вывод команды 64 | Процедура ЯСообщаюВыводКоманды() Экспорт 65 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 66 | 67 | ВыводКоманды = ГитРепозиторий.ПолучитьВыводКоманды(); 68 | Сообщить(СокрЛП(ВыводКоманды)); 69 | 70 | КонецПроцедуры 71 | 72 | //Я пытаюсь выполнить произвольную команду git "status" 73 | Процедура ЯПытаюсьВыполнитьПроизвольнуюКомандуGit(Знач ТекстПроизвольнойКоманды) Экспорт 74 | Попытка 75 | ЯВыполняюПроизвольнуюКомандуGit(ТекстПроизвольнойКоманды); 76 | Сообщить("Команда " + ТекстПроизвольнойКоманды + " выполнена успешно."); 77 | Исключение 78 | Сообщить("Выполнение команды " + ТекстПроизвольнойКоманды + " завершилось с ошибкой."); 79 | Сообщить(ОписаниеОшибки()); 80 | КонецПопытки 81 | КонецПроцедуры 82 | 83 | -------------------------------------------------------------------------------- /features/step_definitions/ДобавлениеФайлаВИндекс.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | #Использовать asserts 4 | #Использовать tempfiles 5 | 6 | Перем БДД; //контекст фреймворка 1bdd 7 | 8 | // Метод выдает список шагов, реализованных в данном файле-шагов 9 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 10 | БДД = КонтекстФреймворкаBDD; 11 | 12 | ВсеШаги = Новый Массив; 13 | 14 | ВсеШаги.Добавить("ЯСоздаюВременныйФайлВоВременномКаталогеИСохраняюЕгоВКонтекст"); 15 | ВсеШаги.Добавить("ЯДобавляюВременныйФайлВИндекс"); 16 | ВсеШаги.Добавить("ЯДобавляюВременныйКаталогВИндекс"); 17 | 18 | Возврат ВсеШаги; 19 | КонецФункции 20 | 21 | // Реализация шагов 22 | 23 | // Процедура выполняется перед запуском каждого сценария 24 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 25 | 26 | КонецПроцедуры 27 | 28 | // Процедура выполняется после завершения каждого сценария 29 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 30 | 31 | КонецПроцедуры 32 | 33 | //Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 34 | Процедура ЯСоздаюВременныйФайлВоВременномКаталогеИСохраняюЕгоВКонтекст(ИмяФайла) Экспорт 35 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ВременныйКаталог"); 36 | ВременныйФайл = ОбъединитьПути(ВременныйКаталог, ИмяФайла); 37 | ЗаписьФайла = Новый ЗаписьТекста(ВременныйФайл); 38 | ЗаписьФайла.Закрыть(); 39 | БДД.СохранитьВКонтекст("ВременныйФайл", ВременныйФайл); 40 | КонецПроцедуры 41 | 42 | //Я добавляю временный файл в индекс 43 | Процедура ЯДобавляюВременныйФайлВИндекс() Экспорт 44 | ВременныйФайл = БДД.ПолучитьИзКонтекста("ВременныйФайл"); 45 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 46 | ГитРепозиторий.ДобавитьФайлВИндекс(ВременныйФайл); 47 | КонецПроцедуры 48 | 49 | //Я добавляю временный каталог в индекс 50 | Процедура ЯДобавляюВременныйКаталогВИндекс() Экспорт 51 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ВременныйКаталог"); 52 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 53 | ГитРепозиторий.ДобавитьФайлВИндекс(ВременныйКаталог); 54 | КонецПроцедуры 55 | -------------------------------------------------------------------------------- /features/step_definitions/ИзвлечениеИзменений.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | Перем БДД; //контекст фреймворка 1bdd 4 | 5 | // Метод выдает список шагов, реализованных в данном файле-шагов 6 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 7 | БДД = КонтекстФреймворкаBDD; 8 | 9 | ВсеШаги = Новый Массив; 10 | 11 | ВсеШаги.Добавить("ЯИзвлекаюИзмененияИзВнешнегоРепозитория"); 12 | 13 | Возврат ВсеШаги; 14 | КонецФункции 15 | 16 | // Реализация шагов 17 | 18 | // Процедура выполняется перед запуском каждого сценария 19 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 20 | 21 | КонецПроцедуры 22 | 23 | // Процедура выполняется после завершения каждого сценария 24 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 25 | 26 | КонецПроцедуры 27 | 28 | //Я извлекаю изменения из внешнего репозитория 29 | Процедура ЯИзвлекаюИзмененияИзВнешнегоРепозитория() Экспорт 30 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 31 | ГитРепозиторий.Извлечь(); 32 | КонецПроцедуры 33 | 34 | -------------------------------------------------------------------------------- /features/step_definitions/ИнициализацияРепозитория.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | #Использовать asserts 4 | #Использовать tempfiles 5 | 6 | Перем БДД; //контекст фреймворка 1bdd 7 | 8 | // Метод выдает список шагов, реализованных в данном файле-шагов 9 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 10 | БДД = КонтекстФреймворкаBDD; 11 | 12 | ВсеШаги = Новый Массив; 13 | 14 | ВсеШаги.Добавить("ЯСоздаюВременныйКаталогИСохраняюЕгоВКонтекст"); 15 | ВсеШаги.Добавить("ЯИнициализируюРепозиторийВоВременномКаталоге"); 16 | ВсеШаги.Добавить("ВоВременномКаталогеСуществуетРепозиторийGit"); 17 | 18 | Возврат ВсеШаги; 19 | КонецФункции 20 | 21 | // Реализация шагов 22 | 23 | // Процедура выполняется перед запуском каждого сценария 24 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 25 | 26 | КонецПроцедуры 27 | 28 | // Процедура выполняется после завершения каждого сценария 29 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 30 | 31 | КонецПроцедуры 32 | 33 | //Я создаю временный каталог и сохраняю его в контекст 34 | Процедура ЯСоздаюВременныйКаталогИСохраняюЕгоВКонтекст() Экспорт 35 | ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); 36 | БДД.СохранитьВКонтекст("ВременныйКаталог", ВременныйКаталог); 37 | КонецПроцедуры 38 | 39 | //Я инициализирую репозиторий во временном каталоге 40 | Процедура ЯИнициализируюРепозиторийВоВременномКаталоге() Экспорт 41 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 42 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ВременныйКаталог"); 43 | ГитРепозиторий.УстановитьРабочийКаталог(ВременныйКаталог); 44 | ГитРепозиторий.Инициализировать(); 45 | КонецПроцедуры 46 | 47 | //Во временном каталоге существует репозиторий git 48 | Процедура ВоВременномКаталогеСуществуетРепозиторийGit() Экспорт 49 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 50 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ВременныйКаталог"); 51 | 52 | КаталогГит = Новый Файл(ВременныйКаталог); 53 | Ожидаем.Что(КаталогГит.Существует(), "Временный каталог не существует").ЭтоИстина(); 54 | 55 | Путь_СлужебныйКаталогГит = ОбъединитьПути(ВременныйКаталог, ".git"); 56 | СлужебныйКаталогГит = Новый Файл(Путь_СлужебныйКаталогГит); 57 | Ожидаем.Что(СлужебныйКаталогГит.Существует(), "Во временном каталоге не обнаружен репозиторий git").ЭтоИстина(); 58 | КонецПроцедуры 59 | 60 | -------------------------------------------------------------------------------- /features/step_definitions/КлонированиеРепозитория.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | Перем БДД; //контекст фреймворка 1bdd 4 | 5 | // Метод выдает список шагов, реализованных в данном файле-шагов 6 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 7 | БДД = КонтекстФреймворкаBDD; 8 | 9 | ВсеШаги = Новый Массив; 10 | 11 | ВсеШаги.Добавить("ЯУстанавливаюРабочийКаталогВоВременныйКаталог"); 12 | ВсеШаги.Добавить("ЯКлонируюУдаленныйРепозиторийВПодкаталог"); 13 | ВсеШаги.Добавить("ЯУстанавливаюРабочийКаталогВСклонированныйРепозиторий"); 14 | 15 | Возврат ВсеШаги; 16 | КонецФункции 17 | 18 | // Реализация шагов 19 | 20 | // Процедура выполняется перед запуском каждого сценария 21 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 22 | 23 | КонецПроцедуры 24 | 25 | // Процедура выполняется после завершения каждого сценария 26 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 27 | 28 | КонецПроцедуры 29 | 30 | //Я устанавливаю рабочий каталог во временный каталог 31 | Процедура ЯУстанавливаюРабочийКаталогВоВременныйКаталог() Экспорт 32 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 33 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ВременныйКаталог"); 34 | ГитРепозиторий.УстановитьРабочийКаталог(ВременныйКаталог); 35 | КонецПроцедуры 36 | 37 | //Я устанавливаю рабочий каталог в склонированный репозиторий 38 | Процедура ЯУстанавливаюРабочийКаталогВСклонированныйРепозиторий() Экспорт 39 | КаталогСклонированногоРепозитория = БДД.ПолучитьИзКонтекста("КаталогСклонированногоРепозитория"); 40 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 41 | ГитРепозиторий.УстановитьРабочийКаталог(КаталогСклонированногоРепозитория); 42 | КонецПроцедуры 43 | 44 | //Я клонирую удаленный репозиторий "https://github.com/nixel2007/gitrunner" в подкаталог "./gitrunner" 45 | Процедура ЯКлонируюУдаленныйРепозиторийВПодкаталог(Знач ПутьУдаленномуРепозиторию, Знач ИмяКаталога) Экспорт 46 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 47 | ГитРепозиторий.КлонироватьРепозиторий(ПутьУдаленномуРепозиторию, ИмяКаталога); 48 | 49 | КаталогСклонированногоРепозитория = Новый Файл(ОбъединитьПути(ГитРепозиторий.ПолучитьРабочийКаталог(), ИмяКаталога)); 50 | БДД.СохранитьВКонтекст("КаталогСклонированногоРепозитория", КаталогСклонированногоРепозитория.ПолноеИмя); 51 | КонецПроцедуры 52 | 53 | 54 | -------------------------------------------------------------------------------- /features/step_definitions/ОтправкаИзменений.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | Перем БДД; //контекст фреймворка 1bdd 4 | 5 | // Метод выдает список шагов, реализованных в данном файле-шагов 6 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 7 | БДД = КонтекстФреймворкаBDD; 8 | 9 | ВсеШаги = Новый Массив; 10 | 11 | ВсеШаги.Добавить("ЯОтправляюИзмененияВоВнешнийРепозиторийВВетку"); 12 | ВсеШаги.Добавить("ЯСоздаюНовыйОбъектНастройкаКомандыОтправить"); 13 | ВсеШаги.Добавить("ЯУстанавливаюНастройкуОтправкиРежимаТишины"); 14 | ВсеШаги.Добавить("ЯУстанавливаюНастройкуОтправкиПолнаяОтправка"); 15 | ВсеШаги.Добавить("ЯУстанавливаюНастройкуОтправкиОтображениеПрогресса"); 16 | ВсеШаги.Добавить("ЯОтправляюИзменения"); 17 | ВсеШаги.Добавить("ЯУстанавливаюНастройкуОтправкиПроизвольныйЗаголовок"); 18 | ВсеШаги.Добавить("ЯДобавляюЗаголовокОтправкиИзВ"); 19 | ВсеШаги.Добавить("ЯИнициализируюBareРепозиторийВоВременномКаталоге"); 20 | ВсеШаги.Добавить("ЯУстанавливаюНастройкуРежимаОтправки"); 21 | ВсеШаги.Добавить("ЯУстанавливаюРепозиторийОтправки"); 22 | 23 | Возврат ВсеШаги; 24 | КонецФункции 25 | 26 | // Реализация шагов 27 | 28 | // Процедура выполняется перед запуском каждого сценария 29 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 30 | 31 | КонецПроцедуры 32 | 33 | // Процедура выполняется после завершения каждого сценария 34 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 35 | 36 | КонецПроцедуры 37 | 38 | //Я сообщаю вывод команды 39 | Процедура ЯСообщаюВыводКоманды() Экспорт 40 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 41 | 42 | ВыводКоманды = ГитРепозиторий.ПолучитьВыводКоманды(); 43 | Сообщить(СокрЛП(ВыводКоманды)); 44 | 45 | КонецПроцедуры 46 | 47 | //Я инициализирую bare репозиторий во временном каталоге 48 | Процедура ЯИнициализируюBareРепозиторийВоВременномКаталоге() Экспорт 49 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 50 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ВременныйКаталог"); 51 | ГитРепозиторий.УстановитьРабочийКаталог(ВременныйКаталог); 52 | ПараметрыКоманды = Новый Массив; 53 | ПараметрыКоманды.Добавить("init"); 54 | ПараметрыКоманды.Добавить("--bare"); 55 | ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); 56 | КонецПроцедуры 57 | 58 | //Я отправляю изменения во внешний репозиторий "origin" в ветку "test" 59 | Процедура ЯОтправляюИзмененияВоВнешнийРепозиторийВВетку(Знач ИмяВнешнегоРепозитория,Знач ИмяВетки) Экспорт 60 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 61 | ГитРепозиторий.Отправить(ИмяВнешнегоРепозитория, ИмяВетки); 62 | КонецПроцедуры 63 | //Я создаю новый объект НастройкаКомандыОтправить 64 | Процедура ЯСоздаюНовыйОбъектНастройкаКомандыОтправить() Экспорт 65 | НастройкаКоманды = Новый НастройкаКомандыОтправить; 66 | БДД.СохранитьВКонтекст("НастройкаКоманды", НастройкаКоманды); 67 | КонецПроцедуры 68 | 69 | //Я устанавливаю настройку отправки режима тишины 70 | Процедура ЯУстанавливаюНастройкуОтправкиРежимаТишины() Экспорт 71 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 72 | НастройкаКоманды.РежимТишины(); 73 | КонецПроцедуры 74 | 75 | //Я устанавливаю настройку отправки полная отправка 76 | Процедура ЯУстанавливаюНастройкуОтправкиПолнаяОтправка() Экспорт 77 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 78 | НастройкаКоманды.ПолнаяОтправка(); 79 | КонецПроцедуры 80 | 81 | //Я устанавливаю настройку отправки отображение прогресса в значение "true" 82 | Процедура ЯУстанавливаюНастройкуОтправкиОтображениеПрогресса() Экспорт 83 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 84 | НастройкаКоманды.ОтображатьПрогресс(); 85 | КонецПроцедуры 86 | 87 | //Я отправляю изменения 88 | Процедура ЯОтправляюИзменения() Экспорт 89 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 90 | ГитРепозиторий.Отправить(); 91 | КонецПроцедуры 92 | 93 | //Я устанавливаю настройку режима отправки 94 | Процедура ЯУстанавливаюНастройкуРежимаОтправки() Экспорт 95 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 96 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 97 | ГитРепозиторий.УстановитьНастройкуКомандыОтправить(НастройкаКоманды); 98 | КонецПроцедуры 99 | 100 | //Я устанавливаю репозиторий отправки "origin" 101 | Процедура ЯУстанавливаюРепозиторийОтправки(Знач URLРепозитория) Экспорт 102 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 103 | НастройкаКоманды.УстановитьURLРепозиторияОтправки(URLРепозитория); 104 | КонецПроцедуры 105 | 106 | //Я устанавливаю настройку отправки произвольный заголовок "push origin :test" 107 | Процедура ЯУстанавливаюНастройкуОтправкиПроизвольныйЗаголовок(Знач ПроизвольныйЗаголовок) Экспорт 108 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 109 | НастройкаКоманды.ДобавитьПроизвольныйЗаголовокОтправки(ПроизвольныйЗаголовок); 110 | КонецПроцедуры 111 | //Я добавляю заголовок отправки из "refs/heads/test" в "refs/heads/my/test" 112 | Процедура ЯДобавляюЗаголовокОтправкиИзВ(Знач ЗаголовокРабочейКопии, Знач ЗаголовокУдаленногоСервера) Экспорт 113 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 114 | НастройкаКоманды.ДобавитьЗаголовкиОтправки(ЗаголовокРабочейКопии, ЗаголовокУдаленногоСервера); 115 | КонецПроцедуры 116 | 117 | 118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /features/step_definitions/ПолучениеИзменений.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | Перем БДД; //контекст фреймворка 1bdd 4 | 5 | // Метод выдает список шагов, реализованных в данном файле-шагов 6 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 7 | БДД = КонтекстФреймворкаBDD; 8 | 9 | ВсеШаги = Новый Массив; 10 | 11 | ВсеШаги.Добавить("ЯПолучаюИзмененияИзРепозиторияВетки"); 12 | 13 | Возврат ВсеШаги; 14 | КонецФункции 15 | 16 | // Реализация шагов 17 | 18 | // Процедура выполняется перед запуском каждого сценария 19 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 20 | 21 | КонецПроцедуры 22 | 23 | // Процедура выполняется после завершения каждого сценария 24 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 25 | 26 | КонецПроцедуры 27 | 28 | //Я получаю изменения из репозитория "origin" ветки "develop" 29 | Процедура ЯПолучаюИзмененияИзРепозиторияВетки(Знач ИмяРепозитория, Знач ВеткаРепозитория) Экспорт 30 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 31 | ГитРепозиторий.Получить(ИмяРепозитория, ВеткаРепозитория); 32 | КонецПроцедуры 33 | 34 | 35 | -------------------------------------------------------------------------------- /features/step_definitions/ПолучениеИстории.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | Перем БДД; //контекст фреймворка 1bdd 4 | 5 | // Метод выдает список шагов, реализованных в данном файле-шагов 6 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 7 | БДД = КонтекстФреймворкаBDD; 8 | 9 | ВсеШаги = Новый Массив; 10 | 11 | ВсеШаги.Добавить("ЯПолучаюИсториюРепозитория"); 12 | 13 | Возврат ВсеШаги; 14 | КонецФункции 15 | 16 | // Реализация шагов 17 | 18 | // Процедура выполняется перед запуском каждого сценария 19 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 20 | 21 | КонецПроцедуры 22 | 23 | // Процедура выполняется после завершения каждого сценария 24 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 25 | 26 | КонецПроцедуры 27 | 28 | //Я получаю историю репозитория 29 | Процедура ЯПолучаюИсториюРепозитория() Экспорт 30 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 31 | ГитРепозиторий.ВывестиИсторию(); 32 | КонецПроцедуры 33 | 34 | -------------------------------------------------------------------------------- /features/step_definitions/ПолучениеСостояния.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | #Использовать tempfiles 4 | 5 | Перем БДД; //контекст фреймворка 1bdd 6 | 7 | // Метод выдает список шагов, реализованных в данном файле-шагов 8 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 9 | БДД = КонтекстФреймворкаBDD; 10 | 11 | ВсеШаги = Новый Массив; 12 | 13 | ВсеШаги.Добавить("ЯПолучаюСостояниеРепозитория"); 14 | ВсеШаги.Добавить("ЯПолучаюКороткоеСостояниеРепозитория"); 15 | 16 | Возврат ВсеШаги; 17 | КонецФункции 18 | 19 | // Реализация шагов 20 | 21 | // Процедура выполняется перед запуском каждого сценария 22 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 23 | 24 | КонецПроцедуры 25 | 26 | // Процедура выполняется после завершения каждого сценария 27 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 28 | 29 | КонецПроцедуры 30 | 31 | //Я получаю состояние репозитория 32 | Процедура ЯПолучаюСостояниеРепозитория() Экспорт 33 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 34 | ГитРепозиторий.Статус(); 35 | КонецПроцедуры 36 | 37 | //Я получаю короткое состояние репозитория 38 | Процедура ЯПолучаюКороткоеСостояниеРепозитория() Экспорт 39 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 40 | ГитРепозиторий.Статус(Истина); 41 | КонецПроцедуры -------------------------------------------------------------------------------- /features/step_definitions/ПолучениеТаблицыСтатусов.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | Перем БДД; //контекст фреймворка 1bdd 4 | 5 | // Метод выдает список шагов, реализованных в данном файле-шагов 6 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 7 | БДД = КонтекстФреймворкаBDD; 8 | 9 | ВсеШаги = Новый Массив; 10 | ВсеШаги.Добавить("ЯПолучаюВыводСтатусаЧерезКоманду"); 11 | ВсеШаги.Добавить("ЯМодифицируюВременныйФайл"); 12 | ВсеШаги.Добавить("ЯИзменяюГитомИмяВременногоФайлаНа"); 13 | ВсеШаги.Добавить("ЯУдаляюВременныйФайл"); 14 | ВсеШаги.Добавить("ЯПолучаюМассивФайловКДобавлению"); 15 | ВсеШаги.Добавить("ЯПолучаюМассивФайловВнеИндекса"); 16 | ВсеШаги.Добавить("ЯПолучаюМассивФайловКУдалению"); 17 | ВсеШаги.Добавить("ЯПолучаюМассивНеослеживаемыхФайлов"); 18 | ВсеШаги.Добавить("МассивФайловСодержит"); 19 | 20 | Возврат ВсеШаги; 21 | КонецФункции 22 | 23 | // Реализация шагов 24 | 25 | // Процедура выполняется перед запуском каждого сценария 26 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 27 | 28 | КонецПроцедуры 29 | 30 | // Процедура выполняется после завершения каждого сценария 31 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 32 | 33 | КонецПроцедуры 34 | 35 | //Я получаю вывод Статуса через команду 36 | Процедура ЯПолучаюВыводСтатусаЧерезКоманду() Экспорт 37 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 38 | ГитРепозиторий.ДанныеСтатуса().Получить(); 39 | КонецПроцедуры 40 | 41 | //Я получаю Массив файлов к добавлению 42 | Процедура ЯПолучаюМассивФайловКДобавлению() Экспорт 43 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 44 | ТаблицаСтатусовМассивФайлов = ГитРепозиторий.ДанныеСтатуса().КДобавлению(); 45 | БДД.СохранитьВКонтекст("ТаблицаСтатусовМассивФайлов", ТаблицаСтатусовМассивФайлов); 46 | КонецПроцедуры 47 | 48 | //Я получаю Массив файлов вне индекса 49 | Процедура ЯПолучаюМассивФайловВнеИндекса() Экспорт 50 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 51 | ТаблицаСтатусовМассивФайлов = ГитРепозиторий.ДанныеСтатуса().ВнеИндекса(); 52 | БДД.СохранитьВКонтекст("ТаблицаСтатусовМассивФайлов", ТаблицаСтатусовМассивФайлов); 53 | КонецПроцедуры 54 | 55 | //Я получаю Массив файлов к удалению 56 | Процедура ЯПолучаюМассивФайловКУдалению() Экспорт 57 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 58 | ТаблицаСтатусовМассивФайлов = ГитРепозиторий.ДанныеСтатуса().КУдалению(); 59 | БДД.СохранитьВКонтекст("ТаблицаСтатусовМассивФайлов", ТаблицаСтатусовМассивФайлов); 60 | КонецПроцедуры 61 | 62 | //Я получаю Массив неослеживаемых файлов 63 | Процедура ЯПолучаюМассивНеослеживаемыхФайлов() Экспорт 64 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 65 | ТаблицаСтатусовМассивФайлов = ГитРепозиторий.ДанныеСтатуса().НеОтслеживаются(); 66 | БДД.СохранитьВКонтекст("ТаблицаСтатусовМассивФайлов", ТаблицаСтатусовМассивФайлов); 67 | КонецПроцедуры 68 | 69 | //Массив файлов содержит 70 | Процедура МассивФайловСодержит(ИмяФайла) Экспорт 71 | ТаблицаСтатусовМассивФайлов = БДД.ПолучитьИзКонтекста("ТаблицаСтатусовМассивФайлов"); 72 | Ожидаем.Что(ТаблицаСтатусовМассивФайлов).Содержит(ИмяФайла); 73 | КонецПроцедуры 74 | 75 | //Я модифицирую временный файл 76 | Процедура ЯМодифицируюВременныйФайл() Экспорт 77 | ВременныйФайл = БДД.ПолучитьИзКонтекста("ВременныйФайл"); 78 | ЗаписьФайла = Новый ЗаписьТекста(ВременныйФайл); 79 | ЗаписьФайла.ЗаписатьСтроку("Модификация"); 80 | ЗаписьФайла.Закрыть(); 81 | КонецПроцедуры 82 | 83 | //Я удаляю временный файл 84 | Процедура ЯУдаляюВременныйФайл() Экспорт 85 | ВременныйФайл = БДД.ПолучитьИзКонтекста("ВременныйФайл"); 86 | УдалитьФайлы(ВременныйФайл); 87 | КонецПроцедуры 88 | 89 | //Я изменяю имя временного файла на "tempХ.tmp" 90 | Процедура ЯИзменяюГитомИмяВременногоФайлаНа(ИмяФайла) Экспорт 91 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 92 | ВременныйФайл = БДД.ПолучитьИзКонтекста("ВременныйФайл"); 93 | Файл = Новый Файл(ВременныйФайл); 94 | ПараметрыКоманды = Новый Массив(); 95 | ПараметрыКоманды.Добавить("mv"); 96 | ПараметрыКоманды.Добавить("""" + Файл.Имя + """"); 97 | ПараметрыКоманды.Добавить("""" + ИмяФайла + """"); 98 | ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); 99 | БДД.СохранитьВКонтекст("ВременныйФайл", ИмяФайла); 100 | КонецПроцедуры 101 | -------------------------------------------------------------------------------- /features/step_definitions/ПроверкаРепозитория.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | #Использовать tempfiles 4 | 5 | Перем БДД; //контекст фреймворка 1bdd 6 | 7 | // Метод выдает список шагов, реализованных в данном файле-шагов 8 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 9 | БДД = КонтекстФреймворкаBDD; 10 | 11 | ВсеШаги = Новый Массив; 12 | 13 | ВсеШаги.Добавить("ЯПроверяюСуществованиеРепозиторияВоВременномКаталогеИРезультатСохраняюВКонтекст"); 14 | ВсеШаги.Добавить("РезультатРавен"); 15 | 16 | Возврат ВсеШаги; 17 | КонецФункции 18 | 19 | // Реализация шагов 20 | 21 | // Процедура выполняется перед запуском каждого сценария 22 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 23 | 24 | КонецПроцедуры 25 | 26 | // Процедура выполняется после завершения каждого сценария 27 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 28 | 29 | КонецПроцедуры 30 | 31 | //Я проверяю существование репозитория во временном каталоге и результат сохраняю в контекст 32 | Процедура ЯПроверяюСуществованиеРепозиторияВоВременномКаталогеИРезультатСохраняюВКонтекст() Экспорт 33 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 34 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ВременныйКаталог"); 35 | ГитРепозиторий.УстановитьРабочийКаталог(ВременныйКаталог); 36 | Результат = ГитРепозиторий.ЭтоРепозиторий(); 37 | БДД.СохранитьВКонтекст("Результат", Результат); 38 | КонецПроцедуры 39 | 40 | //Результат равен 41 | Процедура РезультатРавен(Знач ОжидаемыйРезультат) Экспорт 42 | Результат = БДД.ПолучитьИзКонтекста("Результат"); 43 | Ожидаем.Что(Результат).Равно(Булево(ОжидаемыйРезультат)); 44 | КонецПроцедуры 45 | -------------------------------------------------------------------------------- /features/step_definitions/РаботаСВетками.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | #Использовать asserts 4 | 5 | Перем БДД; //контекст фреймворка 1bdd 6 | 7 | // Метод выдает список шагов, реализованных в данном файле-шагов 8 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 9 | БДД = КонтекстФреймворкаBDD; 10 | 11 | ВсеШаги = Новый Массив; 12 | 13 | ВсеШаги.Добавить("ЯПолучаюТекущуюВетку"); 14 | ВсеШаги.Добавить("ТекущаяВеткаРавна"); 15 | ВсеШаги.Добавить("ЯСоздаюВетку"); 16 | ВсеШаги.Добавить("ЯПолучаюСписокВеток"); 17 | ВсеШаги.Добавить("СписокВетокСодержитВеткуCПризнакомТекущая"); 18 | ВсеШаги.Добавить("ЯПерехожуНаВеткуСЕеСозданием"); 19 | ВсеШаги.Добавить("ЯПерехожуНаВетку"); 20 | 21 | Возврат ВсеШаги; 22 | КонецФункции 23 | 24 | 25 | // Реализация шагов 26 | 27 | // Процедура выполняется перед запуском каждого сценария 28 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 29 | 30 | КонецПроцедуры 31 | 32 | // Процедура выполняется после завершения каждого сценария 33 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 34 | 35 | КонецПроцедуры 36 | 37 | //Я получаю текущую ветку 38 | Процедура ЯПолучаюТекущуюВетку() Экспорт 39 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 40 | ТекущаяВетка = ГитРепозиторий.ПолучитьТекущуюВетку(); 41 | 42 | БДД.СохранитьВКонтекст("ТекущаяВетка", ТекущаяВетка); 43 | КонецПроцедуры 44 | 45 | //Текущая ветка равна "master" 46 | Процедура ТекущаяВеткаРавна(Знач ОжидаемаяВетка) Экспорт 47 | ТекущаяВетка = БДД.ПолучитьИзКонтекста("ТекущаяВетка"); 48 | Ожидаем.Что(ТекущаяВетка).Содержит(ОжидаемаяВетка); 49 | КонецПроцедуры 50 | 51 | //Я перехожу на ветку "master" 52 | Процедура ЯПерехожуНаВетку(Знач ИмяВетки) Экспорт 53 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 54 | ГитРепозиторий.ПерейтиВВетку(ИмяВетки); 55 | КонецПроцедуры 56 | 57 | //Я получаю список веток 58 | Процедура ЯПолучаюСписокВеток() Экспорт 59 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 60 | СписокВеток = ГитРепозиторий.ПолучитьСписокВеток(); 61 | БДД.СохранитьВКонтекст("СписокВеток", СписокВеток); 62 | КонецПроцедуры 63 | 64 | //Список веток содержит ветку "master" c признаком текущая "истина" 65 | Процедура СписокВетокСодержитВеткуCПризнакомТекущая(Знач ИмяВетки, Знач Текущая) Экспорт 66 | СписокВеток = БДД.ПолучитьИзКонтекста("СписокВеток"); 67 | 68 | Нашли = Ложь; 69 | Для Каждого Ветка Из СписокВеток Цикл 70 | 71 | Если Ветка.Имя <> ИмяВетки Тогда 72 | Продолжить; 73 | КонецЕсли; 74 | 75 | Нашли = Истина; 76 | Ожидаем.Что(Ветка.Текущая, "Ветка содержит неверный признак ""Текущая""").Равно(Булево(Текущая)); 77 | 78 | КонецЦикла; 79 | 80 | Ожидаем.Что(Нашли, "Список веток не содержит ветки " + ИмяВетки).ЭтоИстина(); 81 | КонецПроцедуры 82 | 83 | //Я перехожу на ветку "develop" с ее созданием 84 | Процедура ЯПерехожуНаВеткуСЕеСозданием(Знач ИмяВетки) Экспорт 85 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 86 | ГитРепозиторий.ПерейтиВВетку(ИмяВетки, Истина); 87 | КонецПроцедуры 88 | 89 | //Я создаю ветку "develop" 90 | Процедура ЯСоздаюВетку(Знач ИмяВетки) Экспорт 91 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 92 | ГитРепозиторий.СоздатьВетку(ИмяВетки); 93 | КонецПроцедуры 94 | -------------------------------------------------------------------------------- /features/step_definitions/РаботаСВнешнимиРепозиториями.os: -------------------------------------------------------------------------------- 1 | // BSLLS:MissingReturnedValueDescription-off 2 | // BSLLS:MissingParameterDescription-off 3 | 4 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 5 | 6 | #Использовать asserts 7 | 8 | Перем БДД; //контекст фреймворка 1bdd 9 | 10 | // Метод выдает список шагов, реализованных в данном файле-шагов 11 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 12 | БДД = КонтекстФреймворкаBDD; 13 | 14 | ВсеШаги = Новый Массив; 15 | 16 | ВсеШаги.Добавить("ЯДобавляюВнешнийРепозиторийПоАдресу"); 17 | ВсеШаги.Добавить("ЯПолучаюСписокВнешнихРепозиториев"); 18 | ВсеШаги.Добавить("СписокВнешнихРепозиториевСодержитСАдресом"); 19 | ВсеШаги.Добавить("ЯУдаляюВнешнийРепозиторий"); 20 | ВсеШаги.Добавить("ЯСохраняюЗначениеВременногоКаталогаВПеременной"); 21 | ВсеШаги.Добавить("ЯДобавляюВнешнийРепозиторийПоСохраненномуАдресуВнешнегоРепозитория"); 22 | 23 | Возврат ВсеШаги; 24 | КонецФункции 25 | 26 | // Реализация шагов 27 | 28 | // Процедура выполняется перед запуском каждого сценария 29 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 30 | 31 | КонецПроцедуры 32 | 33 | // Процедура выполняется после завершения каждого сценария 34 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 35 | 36 | КонецПроцедуры 37 | 38 | //Я удаляю внешний репозиторий "test" 39 | Процедура ЯУдаляюВнешнийРепозиторий(Знач ИмяРепозитория) Экспорт 40 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 41 | ГитРепозиторий.УдалитьВнешнийРепозиторий(ИмяРепозитория); 42 | КонецПроцедуры 43 | 44 | //Я добавляю внешний репозиторий "test" по адресу "http://fake.com" 45 | Процедура ЯДобавляюВнешнийРепозиторийПоАдресу(Знач ИмяРепозитория,Знач АдресРепозитория) Экспорт 46 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 47 | ГитРепозиторий.ДобавитьВнешнийРепозиторий(ИмяРепозитория, АдресРепозитория); 48 | КонецПроцедуры 49 | 50 | //Я получаю список внешних репозиториев 51 | Процедура ЯПолучаюСписокВнешнихРепозиториев() Экспорт 52 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 53 | СписокВнешнихРепозиториев = ГитРепозиторий.ПолучитьСписокВнешнихРепозиториев(); 54 | 55 | БДД.СохранитьВКонтекст("СписокВнешнихРепозиториев", СписокВнешнихРепозиториев); 56 | КонецПроцедуры 57 | 58 | //Список внешних репозиториев содержит "test1" с адресом "http://fake1.com" 59 | Процедура СписокВнешнихРепозиториевСодержитСАдресом(Знач ИмяРепозитория, Знач АдресРепозитория) Экспорт 60 | СписокВнешнихРепозиториев = БДД.ПолучитьИзКонтекста("СписокВнешнихРепозиториев"); 61 | 62 | Нашли = Ложь; 63 | СтрокаРепозиторий = Неопределено; 64 | Для Каждого ВнешнийРепозиторий Из СписокВнешнихРепозиториев Цикл 65 | 66 | Если НЕ СтрСравнить(ВнешнийРепозиторий.Имя, ИмяРепозитория) = 0 Тогда 67 | Продолжить; 68 | КонецЕсли; 69 | 70 | Нашли = Истина; 71 | Ожидаем.Что(ВнешнийРепозиторий.Адрес, "Репозиторий содержит неверный адрес").Равно(АдресРепозитория); 72 | 73 | КонецЦикла; 74 | 75 | Ожидаем.Что(Нашли, "Список внешних репозиториев не содержит репозитория " + ИмяРепозитория).ЭтоИстина(); 76 | 77 | КонецПроцедуры 78 | 79 | //Я сохраняю значение временного каталога в переменной "ВнешийРепозиторий" 80 | Процедура ЯСохраняюЗначениеВременногоКаталогаВПеременной(Знач ИмяПеременной) Экспорт 81 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ВременныйКаталог"); 82 | БДД.СохранитьВКонтекст(ИмяПеременной, ВременныйКаталог); 83 | КонецПроцедуры 84 | 85 | //Я добавляю внешний репозиторий "origin" по сохраненному адресу внешнего репозитория 86 | Процедура ЯДобавляюВнешнийРепозиторийПоСохраненномуАдресуВнешнегоРепозитория(Знач ИмяРепозитория) Экспорт 87 | АдресРепозитория = БДД.ПолучитьИЗКонтекста("ВнешийРепозиторий"); 88 | ЯДобавляюВнешнийРепозиторийПоАдресу(ИмяРепозитория, АдресРепозитория); 89 | КонецПроцедуры 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /features/step_definitions/РаботаСНастройкамиGit.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | #Использовать asserts 4 | 5 | #Использовать "../.." 6 | 7 | Перем БДД; //контекст фреймворка 1bdd 8 | 9 | // Метод выдает список шагов, реализованных в данном файле-шагов 10 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 11 | БДД = КонтекстФреймворкаBDD; 12 | 13 | ВсеШаги = Новый Массив; 14 | 15 | ВсеШаги.Добавить("ЯПолучаюСписокНастроек"); 16 | ВсеШаги.Добавить("СписокНастроекСодержитНастройкуСоЗначением"); 17 | ВсеШаги.Добавить("ЯЧитаюНастройку"); 18 | ВсеШаги.Добавить("ЯУстанавливаюНастройкуВЗначение"); 19 | ВсеШаги.Добавить("ЯУстанавливаюНастройкуВЗначениеЛокально"); 20 | 21 | Возврат ВсеШаги; 22 | КонецФункции 23 | 24 | // Реализация шагов 25 | 26 | // Процедура выполняется перед запуском каждого сценария 27 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 28 | 29 | КонецПроцедуры 30 | 31 | // Процедура выполняется после завершения каждого сценария 32 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 33 | 34 | КонецПроцедуры 35 | 36 | //Я читаю настройку "core.autocrlf" 37 | Процедура ЯЧитаюНастройку(Знач ИмяНастройки) Экспорт 38 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 39 | Настройка = ГитРепозиторий.ПолучитьНастройку(ИмяНастройки); 40 | КонецПроцедуры 41 | 42 | //Я устанавливаю настройку "test.test" в значение "true" 43 | Процедура ЯУстанавливаюНастройкуВЗначение(Знач ИмяНастройки, Знач ЗначениеНастройки) Экспорт 44 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 45 | ГитРепозиторий.УстановитьНастройку(ИмяНастройки, ЗначениеНастройки); 46 | КонецПроцедуры 47 | 48 | //Я устанавливаю настройку "test.test" в значение "true" локально 49 | Процедура ЯУстанавливаюНастройкуВЗначениеЛокально(Знач ИмяНастройки, Знач ЗначениеНастройки) Экспорт 50 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 51 | ГитРепозиторий.УстановитьНастройку(ИмяНастройки, ЗначениеНастройки, РежимУстановкиНастроекGit.Локально); 52 | КонецПроцедуры 53 | 54 | //Я получаю список настроек 55 | Процедура ЯПолучаюСписокНастроек() Экспорт 56 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 57 | СписокНастроек = ГитРепозиторий.ПолучитьСписокНастроек(); 58 | БДД.СохранитьВКонтекст("СписокНастроек", СписокНастроек); 59 | КонецПроцедуры 60 | 61 | //Список настроек содержит настройку "123" со значением "фыв" 62 | Процедура СписокНастроекСодержитНастройкуСоЗначением(Знач ИмяНастройки, Знач ЗначениеНастройки) Экспорт 63 | СписокНастроек = БДД.ПолучитьИзКонтекста("СписокНастроек"); 64 | ПолученноеИмяНастройки = СписокНастроек.Получить(ИмяНастройки); 65 | 66 | Ожидаем.Что(ЗначениеНастройки, "Ожидаемое значение настройки не соответствует установленному.").Равно(ПолученноеИмяНастройки); 67 | КонецПроцедуры 68 | 69 | -------------------------------------------------------------------------------- /features/step_definitions/РаботаСПодмодулями.os: -------------------------------------------------------------------------------- 1 | // BSLLS:MissingParameterDescription-off 2 | 3 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 4 | 5 | #Использовать asserts 6 | 7 | Перем БДД; //контекст фреймворка 1bdd 8 | 9 | // Метод выдает список шагов, реализованных в данном файле-шагов 10 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 11 | БДД = КонтекстФреймворкаBDD; 12 | 13 | ВсеШаги = Новый Массив; 14 | 15 | ВсеШаги.Добавить("ЯДобавляюПодмодульСВеткой"); 16 | ВсеШаги.Добавить("ЯОбновляюПодмодули"); 17 | ВсеШаги.Добавить("ЯПолучаюСостояниеПодмодулей"); 18 | ВсеШаги.Добавить("СписокПодмодулейСодержитПодмодульCУказателем"); 19 | 20 | Возврат ВсеШаги; 21 | КонецФункции 22 | 23 | // Реализация шагов 24 | 25 | // Процедура выполняется перед запуском каждого сценария 26 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 27 | 28 | КонецПроцедуры 29 | 30 | // Процедура выполняется после завершения каждого сценария 31 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 32 | 33 | КонецПроцедуры 34 | 35 | //Я обновляю подмодули 36 | Процедура ЯОбновляюПодмодули() Экспорт 37 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 38 | ГитРепозиторий.ОбновитьПодмодули(); 39 | КонецПроцедуры 40 | 41 | //Я добавляю подмодуль "https://github.com/nixel2007/gitrunner" с веткой "develop" 42 | Процедура ЯДобавляюПодмодульСВеткой(Знач АдресВнешнегоРепозитория, Знач ИмяВетки) Экспорт 43 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 44 | ГитРепозиторий.ДобавитьПодмодуль(АдресВнешнегоРепозитория, , ИмяВетки) 45 | КонецПроцедуры 46 | 47 | //Список подмодулей содержит подмодуль "gitrunner" c указателем "develop" 48 | Процедура СписокПодмодулейСодержитПодмодульCУказателем(Знач ИмяПодмодуля, Знач Указатель) Экспорт 49 | СостояниеПодмодулей = БДД.ПолучитьИзКонтекста("СостояниеПодмодулей"); 50 | 51 | Нашли = Ложь; 52 | СтрокаПодмодуль = Неопределено; 53 | Для Каждого Подмодуль Из СостояниеПодмодулей Цикл 54 | 55 | Если Подмодуль.Имя <> ИмяПодмодуля Тогда 56 | Продолжить; 57 | КонецЕсли; 58 | 59 | Нашли = Истина; 60 | Ожидаем.Что(Подмодуль.Указатель, "Подмодуль содержит неверный указатель").Равно(Указатель); 61 | 62 | КонецЦикла; 63 | 64 | Ожидаем.Что(Нашли, "Данные о подмодулях не содержат подмодуля " + ИмяПодмодуля).ЭтоИстина(); 65 | КонецПроцедуры 66 | 67 | //Я получаю состояние подмодулей 68 | Процедура ЯПолучаюСостояниеПодмодулей() Экспорт 69 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 70 | СостояниеПодмодулей = ГитРепозиторий.ПолучитьСостояниеПодмодулей(); 71 | 72 | БДД.СохранитьВКонтекст("СостояниеПодмодулей", СостояниеПодмодулей); 73 | КонецПроцедуры 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /features/step_definitions/РаботаСоСвойствами.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | #Использовать asserts 4 | #Использовать tempfiles 5 | 6 | #Использовать "../.." 7 | 8 | Перем БДД; //контекст фреймворка 1bdd 9 | 10 | // Метод выдает список шагов, реализованных в данном файле-шагов 11 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 12 | БДД = КонтекстФреймворкаBDD; 13 | 14 | ВсеШаги = Новый Массив; 15 | 16 | ВсеШаги.Добавить("ЯСоздаюНовыйОбъектГитрепозиторий"); 17 | ВсеШаги.Добавить("ЯУстанавливаюРабочийКаталог"); 18 | ВсеШаги.Добавить("РабочийКаталогУстановленВ"); 19 | ВсеШаги.Добавить("ЯПытаюсьУстановитьРабочийКаталог"); 20 | ВсеШаги.Добавить("ВыбрасываетсяИсключениеСТекстом"); 21 | ВсеШаги.Добавить("ЯУстанавливаюПутьКGit"); 22 | ВсеШаги.Добавить("ПутьКGitУстановленВ"); 23 | 24 | Возврат ВсеШаги; 25 | КонецФункции 26 | 27 | // Реализация шагов 28 | 29 | // Процедура выполняется перед запуском каждого сценария 30 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 31 | 32 | КонецПроцедуры 33 | 34 | // Процедура выполняется после завершения каждого сценария 35 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 36 | 37 | КонецПроцедуры 38 | 39 | //Я устанавливаю рабочий каталог "." 40 | Процедура ЯУстанавливаюРабочийКаталог(Знач ПутьРабочийКаталог) Экспорт 41 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 42 | ГитРепозиторий.УстановитьРабочийКаталог(ПутьРабочийКаталог); 43 | КонецПроцедуры 44 | 45 | //Рабочий каталог установлен в "." 46 | Процедура РабочийКаталогУстановленВ(Знач ПутьРабочийКаталог) Экспорт 47 | Файл = Новый Файл(ПутьРабочийКаталог); 48 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 49 | Ожидаем.Что(Файл.ПолноеИмя).Равно(ГитРепозиторий.ПолучитьРабочийКаталог()); 50 | КонецПроцедуры 51 | 52 | //Я создаю новый объект ГитРепозиторий 53 | Процедура ЯСоздаюНовыйОбъектГитрепозиторий() Экспорт 54 | ГитРепозиторий = Новый ГитРепозиторий; 55 | БДД.СохранитьВКонтекст("ГитРепозиторий", ГитРепозиторий); 56 | КонецПроцедуры 57 | 58 | //я устанавливаю путь к git "fake/bin/git" 59 | Процедура ЯУстанавливаюПутьКGit(Знач ПутьКГит) Экспорт 60 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 61 | ГитРепозиторий.УстановитьПутьКГит(ПутьКГит); 62 | КонецПроцедуры 63 | 64 | //Путь к git установлен в "fake/bin/git" 65 | Процедура ПутьКGitУстановленВ(Знач ПутьКГит) Экспорт 66 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 67 | Ожидаем.Что(ГитРепозиторий.ПолучитьПутьКГит()).Равно(ПутьКГит); 68 | КонецПроцедуры 69 | 70 | //Я пытаюсь установить рабочий каталог "/fake/workspace" 71 | Процедура ЯПытаюсьУстановитьРабочийКаталог(Знач ПутьРабочийКаталог) Экспорт 72 | 73 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 74 | БДД.СохранитьВКонтекст("ТекстИсключения", ""); 75 | Попытка 76 | ГитРепозиторий.УстановитьРабочийКаталог(ПутьРабочийКаталог); 77 | Исключение 78 | БДД.СохранитьВКонтекст("ТекстИсключения", ОписаниеОшибки()); 79 | КонецПопытки; 80 | 81 | КонецПроцедуры 82 | 83 | //Выбрасывается исключение с текстом "не существует" 84 | Процедура ВыбрасываетсяИсключениеСТекстом(Знач ИскомыйТекстИсключения) Экспорт 85 | ТекстИсключения = БДД.ПолучитьИзКонтекста("ТекстИсключения"); 86 | Ожидаем.Что(ТекстИсключения).Содержит(ИскомыйТекстИсключения); 87 | КонецПроцедуры 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /features/step_definitions/ФиксацияИзменений.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | #Использовать tempfiles 4 | 5 | Перем БДД; //контекст фреймворка 1bdd 6 | 7 | // Метод выдает список шагов, реализованных в данном файле-шагов 8 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 9 | БДД = КонтекстФреймворкаBDD; 10 | 11 | ВсеШаги = Новый Массив; 12 | 13 | ВсеШаги.Добавить("ЯФиксируюИзмененияССообщением"); 14 | ВсеШаги.Добавить("ЯФиксируюИзмененияССообщениемСУказаниемАвтораИДатойАвтора"); 15 | ВсеШаги.Добавить("ЯФиксируюИзмененияССообщениемСУказаниемКоммитераИДатойКоммита"); 16 | 17 | Возврат ВсеШаги; 18 | КонецФункции 19 | 20 | // Реализация шагов 21 | 22 | // Процедура выполняется перед запуском каждого сценария 23 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 24 | 25 | КонецПроцедуры 26 | 27 | // Процедура выполняется после завершения каждого сценария 28 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 29 | 30 | КонецПроцедуры 31 | 32 | //Я фиксирую изменения с сообщением "Добавлен тестовый файл" 33 | Процедура ЯФиксируюИзмененияССообщением(Знач ТекстСообщения) Экспорт 34 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 35 | ГитРепозиторий.Закоммитить(ТекстСообщения); 36 | КонецПроцедуры 37 | 38 | //Я фиксирую изменения с сообщением "Добавлен тестовый файл" с указанием автора "Другой автор" и датой автора 01.01.2016 39 | Процедура ЯФиксируюИзмененияССообщениемСУказаниемАвтораИДатойАвтора( 40 | Знач ТекстСообщения, 41 | Знач Автор, 42 | Знач ДатаАвтора) Экспорт 43 | 44 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 45 | ГитРепозиторий.Закоммитить(ТекстСообщения, , , Автор, ДатаАвтора); 46 | КонецПроцедуры 47 | 48 | //Я фиксирую изменения с сообщением "Добавлен тестовый файл" с указанием коммитера "Другой коммитер <1@1.ru>" и датой коммита 01.01.2016 49 | Процедура ЯФиксируюИзмененияССообщениемСУказаниемКоммитераИДатойКоммита(Знач ТекстСообщения, Знач Коммитер, Знач ДатаКоммитера) Экспорт 50 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 51 | ГитРепозиторий.Закоммитить(ТекстСообщения, , , , , Коммитер, ДатаКоммитера); 52 | КонецПроцедуры 53 | -------------------------------------------------------------------------------- /features/ВыполнениеПроизвольнойКоманды.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Выполнение произвольной команды 4 | 5 | Как разработчик 6 | Я хочу иметь возможность выполнять произвольные команды git 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | И Я создаю временный каталог и сохраняю его в контекст 12 | И Я инициализирую репозиторий во временном каталоге 13 | 14 | Сценарий: Выполнение произвольной команды 15 | Когда Я выполняю произвольную команду git "status" 16 | Тогда Вывод команды содержит "master" 17 | 18 | Сценарий: Получение вывода команды 19 | Допустим Я выполняю произвольную команду git "status" 20 | Когда Я сообщаю вывод команды 21 | Тогда Вывод команды содержит "master" 22 | 23 | Сценарий: Попытка выполнения произвольной команды 24 | Когда Я пытаюсь выполнить произвольную команду git "status" 25 | -------------------------------------------------------------------------------- /features/ДобавлениеФайлаВИндекс.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Добавление файла в индекс 4 | 5 | Как разработчик 6 | Я хочу иметь возможность добавлять файлы в индекс git 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | И Я создаю временный каталог и сохраняю его в контекст 12 | И Я инициализирую репозиторий во временном каталоге 13 | 14 | Сценарий: Я добавляю новый файл в индекс 15 | Допустим Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 16 | Когда Я добавляю временный файл в индекс 17 | И Я получаю состояние репозитория 18 | Тогда Вывод команды содержит "temp.tmp" 19 | 20 | Сценарий: Добавление нескольких файлов в рабочий каталог 21 | Допустим Я создаю временный файл "1.tmp" во временном каталоге и сохраняю его в контекст 22 | И Я создаю временный файл "2.tmp" во временном каталоге и сохраняю его в контекст 23 | Когда Я добавляю временный каталог в индекс 24 | И Я получаю состояние репозитория 25 | Тогда Вывод команды содержит "1.tmp" 26 | И Вывод команды содержит "2.tmp" 27 | -------------------------------------------------------------------------------- /features/ИзвлечениеИзменений.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Извлечение изменений 4 | 5 | Как разработчик 6 | Я хочу иметь возможность извлекать изменения из удаленного репозитория 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | И Я создаю временный каталог и сохраняю его в контекст 12 | И Я инициализирую репозиторий во временном каталоге 13 | И Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 14 | И Я добавляю временный файл в индекс 15 | И Я фиксирую изменения с сообщением "Добавлен тестовый файл" 16 | И Я сохраняю значение временного каталога в переменной "ВнешийРепозиторий" 17 | И Я создаю новый объект ГитРепозиторий 18 | И Я создаю временный каталог и сохраняю его в контекст 19 | И Я инициализирую репозиторий во временном каталоге 20 | И Я добавляю внешний репозиторий "origin" по сохраненному адресу внешнего репозитория 21 | 22 | Сценарий: Извлечение изменений из внешнего репозитория 23 | Когда Я извлекаю изменения из внешнего репозитория 24 | Тогда Вывод команды содержит "new branch" 25 | -------------------------------------------------------------------------------- /features/ИнициализацияРепозитория.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Инициализация репозитория 4 | 5 | Как разработчик 6 | Я хочу иметь возможность инициализировать репозиторий git 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | 12 | Сценарий: Инициализация репозитория 13 | Допустим Я создаю временный каталог и сохраняю его в контекст 14 | Когда Я инициализирую репозиторий во временном каталоге 15 | Тогда Во временном каталоге существует репозиторий git -------------------------------------------------------------------------------- /features/КлонированиеРепозитория.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Клонирование удаленного репозитория 4 | 5 | Как разработчик 6 | Я хочу иметь возможность клонировать удаленный репозиторий 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю временный каталог и сохраняю его в контекст 11 | И Я создаю новый объект ГитРепозиторий 12 | И Я устанавливаю рабочий каталог во временный каталог 13 | 14 | Сценарий: Клонирование удаленного репозитория 15 | Когда Я клонирую удаленный репозиторий "https://github.com/nixel2007/gitrunner" в подкаталог "./gitrunner" 16 | И Я устанавливаю рабочий каталог в склонированный репозиторий 17 | И Я получаю список внешних репозиториев 18 | Тогда Список внешних репозиториев содержит "origin" с адресом "https://github.com/nixel2007/gitrunner" 19 | -------------------------------------------------------------------------------- /features/ОтправкаИзменений.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Отправка изменений 4 | 5 | Как разработчик 6 | Я хочу иметь возможность отправлять изменения в удаленный репозиторий 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | И Я создаю временный каталог и сохраняю его в контекст 12 | И Я инициализирую bare репозиторий во временном каталоге 13 | И Я сохраняю значение временного каталога в переменной "ВнешийРепозиторий" 14 | И Я создаю новый объект ГитРепозиторий 15 | И Я создаю временный каталог и сохраняю его в контекст 16 | И Я инициализирую репозиторий во временном каталоге 17 | 18 | Сценарий: Отправка зафиксированных изменений 19 | Допустим Я добавляю внешний репозиторий "origin" по сохраненному адресу внешнего репозитория 20 | И Я перехожу на ветку "test" с ее созданием 21 | И Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 22 | И Я добавляю временный файл в индекс 23 | И Я фиксирую изменения с сообщением "Добавлен тестовый файл" 24 | Когда Я отправляю изменения во внешний репозиторий "origin" в ветку "test" 25 | И Я выполняю произвольную команду git "branch -a" 26 | Тогда Вывод команды содержит "remotes/origin/test" 27 | И Я выполняю произвольную команду git "push origin :test" 28 | 29 | Сценарий: Отправка всех зафиксированных изменений через настройку отправки 30 | Допустим Я добавляю внешний репозиторий "origin" по сохраненному адресу внешнего репозитория 31 | И Я перехожу на ветку "test" с ее созданием 32 | И Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 33 | И Я добавляю временный файл в индекс 34 | И Я фиксирую изменения с сообщением "Добавлен тестовый файл" 35 | И Я создаю новый объект НастройкаКомандыОтправить 36 | И Я устанавливаю настройку отправки режима тишины 37 | И Я устанавливаю настройку отправки полная отправка 38 | И Я устанавливаю настройку отправки отображение прогресса 39 | И Я устанавливаю настройку режима отправки 40 | Когда Я отправляю изменения 41 | И Я выполняю произвольную команду git "branch -a" 42 | Тогда Вывод команды содержит "remotes/origin/test" 43 | И Я создаю новый объект НастройкаКомандыОтправить 44 | И Я устанавливаю настройку отправки произвольный заголовок "origin :test" 45 | И Я устанавливаю настройку режима отправки 46 | И Я отправляю изменения 47 | 48 | Сценарий: Отправка зафиксированных изменений через настройку отправки в отдельное пространство 49 | Допустим Я добавляю внешний репозиторий "origin" по сохраненному адресу внешнего репозитория 50 | И Я перехожу на ветку "test" с ее созданием 51 | И Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 52 | И Я добавляю временный файл в индекс 53 | И Я фиксирую изменения с сообщением "Добавлен тестовый файл" 54 | И Я создаю новый объект НастройкаКомандыОтправить 55 | И Я устанавливаю репозиторий отправки "origin" 56 | И Я добавляю заголовок отправки из "refs/heads/test" в "refs/heads/my/test" 57 | И Я устанавливаю настройку режима отправки 58 | Когда Я отправляю изменения 59 | И Я выполняю произвольную команду git "branch -a" 60 | Тогда Вывод команды содержит "remotes/origin/my/test" 61 | И Я создаю новый объект НастройкаКомандыОтправить 62 | И Я устанавливаю репозиторий отправки "origin" 63 | И Я добавляю заголовок отправки из "" в "refs/heads/my/test" 64 | И Я устанавливаю настройку режима отправки 65 | И Я отправляю изменения 66 | -------------------------------------------------------------------------------- /features/ПолучениеИзменений.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Получение изменений 4 | 5 | Как разработчик 6 | Я хочу иметь возможность получать изменения из удаленного репозитория 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | И Я создаю временный каталог и сохраняю его в контекст 12 | И Я инициализирую репозиторий во временном каталоге 13 | 14 | Сценарий: Получение изменений репозитория 15 | Допустим Я перехожу на ветку "develop" с ее созданием 16 | И Я добавляю внешний репозиторий "origin" по адресу "https://github.com/nixel2007/gitrunner" 17 | Когда Я получаю изменения из репозитория "origin" ветки "develop" 18 | И Я получаю историю репозитория 19 | Тогда Вывод команды содержит "commit" 20 | И Вывод команды содержит "Author" 21 | И Вывод команды содержит "Date" 22 | -------------------------------------------------------------------------------- /features/ПолучениеИстории.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Получение истории репозитория 4 | 5 | Как разработчик 6 | Я хочу иметь возможность получить историю репозитория git 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | И Я создаю временный каталог и сохраняю его в контекст 12 | И Я инициализирую репозиторий во временном каталоге 13 | 14 | Сценарий: Получение истории репозитория 15 | Допустим Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 16 | И Я добавляю временный файл в индекс 17 | И Я фиксирую изменения с сообщением "Добавлен тестовый файл" 18 | Когда Я получаю историю репозитория 19 | Тогда Вывод команды содержит "Добавлен тестовый файл" 20 | -------------------------------------------------------------------------------- /features/ПолучениеСостояния.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Получение состояния репозитория 4 | 5 | Как разработчик 6 | Я хочу иметь возможность получить состояние репозитория git 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | И Я создаю временный каталог и сохраняю его в контекст 12 | И Я инициализирую репозиторий во временном каталоге 13 | 14 | Сценарий: Получение состояния репозитория 15 | Когда Я получаю состояние репозитория 16 | Тогда Вывод команды содержит "master" 17 | 18 | Сценарий: Получение короткого состояния репозитория 19 | Когда Я получаю короткое состояние репозитория 20 | Тогда Вывод команды не содержит "master" 21 | -------------------------------------------------------------------------------- /features/ПолучениеТаблицыСтатусов.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Получение таблицы состояний файлов 4 | 5 | Как разработчик 6 | Я хочу иметь возможность получать статусы файлов в/вне индекса в виде таблицы 7 | Чтобы использовать их состояние для последующей обработки 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | И Я создаю временный каталог и сохраняю его в контекст 12 | И Я инициализирую репозиторий во временном каталоге 13 | 14 | Сценарий: Я добавляю новый файл и проверяю его статусы 15 | Допустим Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 16 | 17 | И Я получаю вывод Статуса через команду 18 | Тогда Вывод команды содержит "?? temp.tmp" 19 | 20 | И Я получаю Массив неослеживаемых файлов 21 | Тогда Массив файлов содержит "temp.tmp" 22 | 23 | Также Я добавляю временный файл в индекс 24 | И Я получаю вывод Статуса через команду 25 | Тогда Вывод команды содержит "A temp.tmp" 26 | И Я получаю Массив файлов к добавлению 27 | Тогда Массив файлов содержит "temp.tmp" 28 | 29 | Также Я фиксирую изменения с сообщением "Добавлен тестовый файл" 30 | И Я модифицирую временный файл 31 | И Я получаю вывод Статуса через команду 32 | Тогда Вывод команды содержит " M temp.tmp" 33 | И Я получаю Массив файлов вне индекса 34 | Тогда Массив файлов содержит "temp.tmp" 35 | 36 | Также Я фиксирую изменения с сообщением "Изменен тестовый файл" 37 | И Я удаляю временный файл 38 | И Я получаю вывод Статуса через команду 39 | Тогда Вывод команды содержит " D temp.tmp" 40 | И Я добавляю временный файл в индекс 41 | И Я получаю вывод Статуса через команду 42 | Тогда Вывод команды содержит "D temp.tmp" 43 | И Я получаю Массив файлов к удалению 44 | Тогда Массив файлов содержит "temp.tmp" 45 | 46 | Сценарий: Добавление файла с пробелами в имени и получении его статусов 47 | Допустим Я создаю временный файл "temp 2.tmp" во временном каталоге и сохраняю его в контекст 48 | 49 | И Я получаю вывод Статуса через команду 50 | Тогда Вывод команды содержит '?? "temp 2.tmp"' 51 | 52 | И Я получаю Массив неослеживаемых файлов 53 | Тогда Массив файлов содержит "temp 2.tmp" 54 | 55 | Также Я добавляю временный файл в индекс 56 | И Я фиксирую изменения с сообщением "Изменен тестовый файл" 57 | И Я изменяю гитом имя временного файла на "temp 3.tmp" 58 | И Я добавляю временный файл в индекс 59 | И Я получаю вывод Статуса через команду 60 | Тогда Вывод команды содержит 'R "temp 2.tmp" -> "temp 3.tmp"' 61 | И Я получаю Массив файлов к удалению 62 | Тогда Массив файлов содержит "temp 2.tmp" 63 | И Я получаю Массив файлов к добавлению 64 | Тогда Массив файлов содержит "temp 3.tmp" 65 | -------------------------------------------------------------------------------- /features/ПроверкаРепозитория.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Проверка существования репозитория в рабочем каталоге 4 | 5 | Как разработчик Я хочу иметь возможность проверить, что рабочий каталог является git-репозиторием 6 | Чтобы не писать такую проверку для каждого скрипта 7 | 8 | Сценарий: Проверка каталога с репозиторием 9 | Когда Я создаю новый объект ГитРепозиторий 10 | И Я создаю временный каталог и сохраняю его в контекст 11 | И Я инициализирую репозиторий во временном каталоге 12 | И Я проверяю существование репозитория во временном каталоге и результат сохраняю в контекст 13 | Тогда Результат равен "Истина" 14 | 15 | Сценарий: Проверка каталога без репозитория 16 | Когда Я создаю новый объект ГитРепозиторий 17 | И Я создаю временный каталог и сохраняю его в контекст 18 | И Я проверяю существование репозитория во временном каталоге и результат сохраняю в контекст 19 | Тогда Результат равен "Ложь" 20 | -------------------------------------------------------------------------------- /features/РаботаСВетками.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Работа с ветками 4 | 5 | Как разработчик 6 | Я хочу иметь возможность работать с различными ветками репозитория 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | И Я создаю временный каталог и сохраняю его в контекст 12 | И Я инициализирую репозиторий во временном каталоге 13 | 14 | Сценарий: Получение текущей ветки 15 | Когда Я получаю текущую ветку 16 | Тогда Текущая ветка равна "master" 17 | 18 | Сценарий: Создание новой ветки 19 | Допустим Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 20 | И Я добавляю временный файл в индекс 21 | И Я фиксирую изменения с сообщением "Добавлен тестовый файл" 22 | Когда Я создаю ветку "develop" 23 | Тогда Я получаю список веток 24 | И Список веток содержит ветку "master" c признаком текущая "истина" 25 | И Список веток содержит ветку "develop" c признаком текущая "ложь" 26 | 27 | Сценарий: Переход на новую ветку 28 | Когда Я перехожу на ветку "develop" с ее созданием 29 | И Я получаю текущую ветку 30 | Тогда Текущая ветка равна "develop" 31 | 32 | Сценарий: Переход на существующую ветку 33 | Допустим Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 34 | И Я добавляю временный файл в индекс 35 | И Я фиксирую изменения с сообщением "Добавлен тестовый файл" 36 | И Я создаю ветку "develop" 37 | Когда Я перехожу на ветку "develop" 38 | И Я получаю текущую ветку 39 | Тогда Текущая ветка равна "develop" 40 | 41 | Сценарий: Получение списка веток 42 | Допустим Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 43 | И Я добавляю временный файл в индекс 44 | И Я фиксирую изменения с сообщением "Добавлен тестовый файл" 45 | Когда Я получаю список веток 46 | Тогда Список веток содержит ветку "master" c признаком текущая "истина" 47 | -------------------------------------------------------------------------------- /features/РаботаСВнешнимиРепозиториями.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Работа с внешними репозиториями 4 | 5 | Как разработчик 6 | Я хочу иметь возможность управлять внешними репозиториями 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | И Я создаю временный каталог и сохраняю его в контекст 12 | И Я инициализирую репозиторий во временном каталоге 13 | 14 | Сценарий: Добавление внешнего репозитория 15 | Когда Я добавляю внешний репозиторий "test" по адресу "http://fake.com" 16 | И Я получаю список внешних репозиториев 17 | Тогда Список внешних репозиториев содержит "test" с адресом "http://fake.com" 18 | 19 | Сценарий: Удаление внешнего репозитория 20 | Допустим Я добавляю внешний репозиторий "test" по адресу "http://fake.com" 21 | Когда Я удаляю внешний репозиторий "test" 22 | И Я получаю список внешних репозиториев 23 | Тогда Вывод команды не содержит "test" 24 | 25 | Сценарий: Получение списка внешних репозиториев 26 | Допустим Я добавляю внешний репозиторий "origin" по адресу "http://fake1.com/longurl-segment/somerepo.git" 27 | И Я добавляю внешний репозиторий "upstream" по адресу "http://fake2.com/longurl-segment/somerepo.git" 28 | Когда Я получаю список внешних репозиториев 29 | И Я выполняю произвольную команду git "remote -v" 30 | И Я сообщаю вывод команды 31 | Тогда Список внешних репозиториев содержит "origin" с адресом "http://fake1.com/longurl-segment/somerepo.git" 32 | И Список внешних репозиториев содержит "upstream" с адресом "http://fake2.com/longurl-segment/somerepo.git" 33 | 34 | Сценарий: Добавление внешнего репозитория по сохраненному адресу 35 | Допустим Я сохраняю значение временного каталога в переменной "ВнешийРепозиторий" 36 | Когда Я добавляю внешний репозиторий "origin" по сохраненному адресу внешнего репозитория 37 | И Я получаю список внешних репозиториев 38 | Тогда Вывод команды содержит "origin" 39 | -------------------------------------------------------------------------------- /features/РаботаСНастройкамиGit.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Работа с настройками git 4 | 5 | Как разработчик 6 | Я хочу иметь возможность читать и устанавливать настройки git 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | И Я создаю временный каталог и сохраняю его в контекст 12 | И Я инициализирую репозиторий во временном каталоге 13 | 14 | Сценарий: Получение списка настроек 15 | Допустим Я устанавливаю настройку "test.test" в значение "true" 16 | Когда Я получаю список настроек 17 | Тогда Список настроек содержит настройку "test.test" со значением "true" 18 | 19 | Сценарий: Установка настроек 20 | Когда Я устанавливаю настройку "test.test" в значение "true" 21 | Тогда Я читаю настройку "test.test" 22 | И Вывод команды содержит "true" 23 | 24 | Сценарий: Установка настройки локально 25 | Когда Я устанавливаю настройку "test.test" в значение "true" локально 26 | Тогда Я читаю настройку "test.test" 27 | И Вывод команды содержит "true" 28 | -------------------------------------------------------------------------------- /features/РаботаСПодмодулями.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Работа с подмодулями 4 | 5 | Как разработчик 6 | Я хочу иметь возможность работать с подмодулями git 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | И Я создаю временный каталог и сохраняю его в контекст 12 | И Я инициализирую репозиторий во временном каталоге 13 | 14 | Сценарий: Добавление подмодуля 15 | Когда Я добавляю подмодуль "https://github.com/nixel2007/gitrunner" с веткой "gitrunner-submodule-test" 16 | И Я обновляю подмодули 17 | И Я получаю состояние подмодулей 18 | Тогда Список подмодулей содержит подмодуль "gitrunner" c указателем "v1.7.0-20-g674ffa7" 19 | -------------------------------------------------------------------------------- /features/РаботаСоСвойствами.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Работа со свойствами 4 | Как разработчик 5 | Я хочу иметь возможность устанавливать свойства окружения 6 | Чтобы корректно выполнять команды git 7 | 8 | Контекст: 9 | Допустим Я создаю новый объект ГитРепозиторий 10 | 11 | Сценарий: Установка рабочего каталога 12 | Когда Я устанавливаю рабочий каталог "." 13 | Тогда Рабочий каталог установлен в "." 14 | 15 | Сценарий: Установка несуществующего рабочего каталога 16 | Когда Я пытаюсь установить рабочий каталог "/fake/workspace" 17 | Тогда Выбрасывается исключение с текстом "не существует" 18 | 19 | Сценарий: Установка пути к git 20 | Когда я устанавливаю путь к git "fake/bin/git" 21 | Тогда Путь к git установлен в "fake/bin/git" 22 | -------------------------------------------------------------------------------- /features/ФиксацияИзменений.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Фиксация изменений 4 | 5 | Как разработчик 6 | Я хочу иметь возможность фиксировать изменения, добавленные в индекс git 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | И Я создаю временный каталог и сохраняю его в контекст 12 | И Я инициализирую репозиторий во временном каталоге 13 | 14 | Сценарий: Фиксация изменений нового файла 15 | Допустим Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 16 | И Я добавляю временный файл в индекс 17 | Когда Я фиксирую изменения с сообщением "Добавлен тестовый файл" 18 | И Я получаю состояние репозитория 19 | Тогда Вывод команды содержит "nothing to commit" 20 | Когда Я получаю историю репозитория 21 | Тогда Вывод команды содержит "Добавлен тестовый файл" 22 | 23 | Сценарий: Фиксация изменений с переопределением автора и даты автора 24 | Допустим Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 25 | И Я добавляю временный файл в индекс 26 | Когда Я фиксирую изменения с сообщением "Добавлен тестовый файл" с указанием автора "Другой автор <1@1.ru>" и датой автора 01.01.2016 27 | И Я получаю историю репозитория 28 | Тогда Вывод команды содержит "Author: Другой автор <1@1.ru>" 29 | И Вывод команды содержит "Date: Fri Jan 1 00:00:00 2016" 30 | 31 | Сценарий: Фиксация изменений с переопределением коммитера и даты коммитера 32 | Допустим Я создаю временный файл "temp.tmp" во временном каталоге и сохраняю его в контекст 33 | И Я добавляю временный файл в индекс 34 | И Я устанавливаю настройку "user.name" в значение "Установленный коммитер" локально 35 | Когда Я фиксирую изменения с сообщением "Добавлен тестовый файл" с указанием коммитера "Другой коммитер <1@1.ru>" и датой коммита 01.01.2016 36 | И Я выполняю произвольную команду git "log --format=fuller" 37 | Тогда Вывод команды содержит "Commit: Другой коммитер <1@1.ru>" 38 | И Вывод команды содержит "CommitDate: Fri Jan 1 00:00:00 2016" 39 | -------------------------------------------------------------------------------- /lib.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /logo/horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nixel2007/gitrunner/d8dc5894957e2c4e0352b1dd54a4ecb614bcbb60/logo/horizontal.png -------------------------------------------------------------------------------- /logo/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nixel2007/gitrunner/d8dc5894957e2c4e0352b1dd54a4ecb614bcbb60/logo/logo.png -------------------------------------------------------------------------------- /logo/vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nixel2007/gitrunner/d8dc5894957e2c4e0352b1dd54a4ecb614bcbb60/logo/vertical.png -------------------------------------------------------------------------------- /packagedef: -------------------------------------------------------------------------------- 1 | Описание.Имя("gitrunner") 2 | .Версия("1.8.0") 3 | .ВерсияСреды("1.9.2") 4 | .ЗависитОт("1commands", "1.5.0") 5 | .ЗависитОт("asserts", "0.4.0") 6 | .ЗависитОт("fs", "0.4.1") 7 | .ЗависитОт("json", "1.0.1") 8 | .ЗависитОт("logos", "1.7.1") 9 | .РазработкаЗависитОт("1bdd", "1.15.1") 10 | .Задачи("tasks") 11 | .ВключитьФайл("src") 12 | .ВключитьФайл("features") 13 | .ВключитьФайл("lib.config") 14 | .ВключитьФайл("README.md") 15 | .ВключитьФайл("LICENSE.md") 16 | .ВключитьФайл("NOTICE"); 17 | -------------------------------------------------------------------------------- /sonar-project.properties: -------------------------------------------------------------------------------- 1 | # must be unique in a given SonarQube instance 2 | sonar.projectKey=gitrunner 3 | 4 | # this is the name displayed in the SonarQube UI 5 | sonar.projectName=GitRunner 6 | 7 | # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. 8 | # Since SonarQube 4.2, this property is optional if sonar.modules is set. 9 | # If not set, SonarQube starts looking for source code from the directory containing 10 | # the sonar-project.properties file. 11 | 12 | sonar.sources=./src,./features 13 | 14 | # Encoding of the source code. Default is default system encoding 15 | sonar.sourceEncoding=UTF-8 16 | 17 | sonar.coverageReportPaths=coverage/genericCoverage.xml 18 | -------------------------------------------------------------------------------- /sonarlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "serverId": "silverbulleters", 3 | "projectKey": "gitrunner" 4 | } -------------------------------------------------------------------------------- /src/ГитРепозиторий.os: -------------------------------------------------------------------------------- 1 | #Использовать asserts 2 | #Использовать logos 3 | #Использовать 1commands 4 | 5 | #Область Переменные 6 | 7 | Перем Лог; 8 | 9 | Перем мВыводКоманды; 10 | Перем ИмяФайлаИнформации; 11 | Перем РабочийКаталог; 12 | Перем ПутьКГит; 13 | Перем СистемнаяИнформация; 14 | Перем ЭтоWindows; 15 | Перем НастройкиКоманд; 16 | Перем ТихийРежимРаботы; 17 | Перем КодВозврата; 18 | 19 | #КонецОбласти 20 | 21 | #Область ПрограммныйИнтерфейс 22 | 23 | ///////////////////////////////////////////////////////////////////////// 24 | // Программный интерфейс 25 | 26 | ///////////////////////////////////////////////////////////////////////// 27 | // Процедуры-обертки над git 28 | 29 | // Выполняет инициализиацию репозитория в рабочем каталоге 30 | // git init 31 | // 32 | Процедура Инициализировать() Экспорт 33 | 34 | ПараметрыЗапуска = Новый Массив; 35 | ПараметрыЗапуска.Добавить("init"); 36 | 37 | ВыполнитьКоманду(ПараметрыЗапуска); 38 | 39 | КонецПроцедуры 40 | 41 | // Получает состояние репозитория 42 | // git status 43 | // 44 | // Параметры: 45 | // ВКороткомФормате - Булево - Вывод в коротком формате 46 | // 47 | // Возвращаемое значение: 48 | // Строка - Вывод команды 49 | // 50 | Функция Статус(Знач ВКороткомФормате = Ложь) Экспорт 51 | 52 | ПараметрыЗапуска = Новый Массив; 53 | ПараметрыЗапуска.Добавить("status"); 54 | Если ВКороткомФормате Тогда 55 | ПараметрыЗапуска.Добавить("--short"); 56 | ПараметрыЗапуска.Добавить("--porcelain"); 57 | КонецЕсли; 58 | 59 | ВыполнитьКоманду(ПараметрыЗапуска); 60 | 61 | Возврат ПолучитьВыводКоманды(); 62 | 63 | КонецФункции 64 | 65 | // Добавляет файл в индекс git 66 | // git add 67 | // 68 | // Параметры: 69 | // ПутьКДобавляемомуФайлу - Строка - Путь к файлу на диске 70 | // 71 | Процедура ДобавитьФайлВИндекс(Знач ПутьКДобавляемомуФайлу) Экспорт 72 | 73 | ПараметрыЗапуска = Новый Массив; 74 | ПараметрыЗапуска.Добавить("add"); 75 | ПараметрыЗапуска.Добавить(ОбернутьВКавычки(ПутьКДобавляемомуФайлу)); 76 | 77 | ВыполнитьКоманду(ПараметрыЗапуска); 78 | 79 | КонецПроцедуры 80 | 81 | // Зафиксировать проиндексированные изменения в истории git 82 | // git commit 83 | // 84 | // Параметры: 85 | // ТекстСообщения - Строка - Текст сообщения коммита (-m ТекстСообщения) 86 | // ПроиндексироватьОтслеживаемыеФайлы - Булево - Автоматически добавить 87 | // в индекс файлы, уже отслеживаемые git (-a) 88 | // ПутьКФайлуКоммита - Строка - путь к файлу с текстом комментария (-F ПутьКФайлуСтекстомКоммита) 89 | // АвторКоммита - Строка - Автор комментария, передается в случае необходимости (--author=АвторКоммита) 90 | // ДатаАвтораКоммита - Дата - Дата комментария (--date=ДатаАвтораКоммита) 91 | // Коммитер - Строка - Коммитер комментария, передается в случае, если требуется 92 | // ДатаКоммита - Дата - Дата произведения коммита 93 | // 94 | Процедура Закоммитить(Знач ТекстСообщения = "", 95 | Знач ПроиндексироватьОтслеживаемыеФайлы = Ложь, 96 | Знач ПутьКФайлуКоммита = "", 97 | Знач АвторКоммита = "", 98 | Знач ДатаАвтораКоммита = '00010101', 99 | Знач Коммитер = "", 100 | Знач ДатаКоммита = '00010101') Экспорт 101 | 102 | НадоОчиститьУстановленныеПеременные = Ложь; 103 | НадоУдалитьВременныйФайлКомментария = Ложь; 104 | ИмяВременногоФайлаКомментария = ""; 105 | 106 | ПараметрыЗапуска = Новый Массив; 107 | ПараметрыЗапуска.Добавить("commit"); 108 | ПараметрыЗапуска.Добавить("--allow-empty"); 109 | 110 | Если ПроиндексироватьОтслеживаемыеФайлы Тогда 111 | ПараметрыЗапуска.Добавить("-a"); 112 | КонецЕсли; 113 | 114 | Если Не ПустаяСтрока(ПутьКФайлуКоммита) Тогда 115 | ПараметрыЗапуска.Добавить("-F"); 116 | ПараметрыЗапуска.Добавить(ОбернутьВКавычки(ПутьКФайлуКоммита)); 117 | ИначеЕсли СтрНайти(ТекстСообщения, Символы.ПС) Тогда // для многострочных комментариев стоит использовать файл 118 | ИмяВременногоФайлаКомментария = ПолучитьИмяВременногоФайла(); 119 | ТекстовыйДокумент = Новый ТекстовыйДокумент; 120 | ТекстовыйДокумент.УстановитьТекст(ТекстСообщения); 121 | ТекстовыйДокумент.Записать(ИмяВременногоФайлаКомментария, "utf-8"); 122 | 123 | ПараметрыЗапуска.Добавить("-F"); 124 | ПараметрыЗапуска.Добавить(ОбернутьВКавычки(ИмяВременногоФайлаКомментария)); 125 | 126 | НадоУдалитьВременныйФайлКомментария = Истина; 127 | Иначе 128 | ПараметрыЗапуска.Добавить("-m"); 129 | ПараметрыЗапуска.Добавить(ОбернутьВКавычки(ТекстСообщения)); 130 | КонецЕсли; 131 | 132 | Если Не ПустаяСтрока(Коммитер) Тогда 133 | УстановитьКоммитера(Коммитер); 134 | КонецЕсли; 135 | 136 | Если ЗначениеЗаполнено(ДатаКоммита) Тогда 137 | НадоОчиститьУстановленныеПеременные = Истина; 138 | УстановитьДатуКоммита(ДатаКоммита); 139 | КонецЕсли; 140 | 141 | Если Не ПустаяСтрока(АвторКоммита) Тогда 142 | ПараметрыЗапуска.Добавить("--author="+ ОбернутьВКавычки(АвторКоммита)); 143 | КонецЕсли; 144 | 145 | Если ЗначениеЗаполнено(ДатаАвтораКоммита) Тогда 146 | НадоОчиститьУстановленныеПеременные = Истина; 147 | УстановитьДатуАвтораКоммита(ДатаАвтораКоммита); 148 | КонецЕсли; 149 | 150 | КомандаВыполненаУспешно = Истина; 151 | Попытка 152 | ВыполнитьКоманду(ПараметрыЗапуска); 153 | Исключение 154 | КомандаВыполненаУспешно = Ложь; 155 | КонецПопытки; 156 | ВыводКоманды = ПолучитьВыводКоманды(); 157 | 158 | Если НадоОчиститьУстановленныеПеременные Тогда 159 | ОчиститьУстановленныеПеременныеГит(); 160 | КонецЕсли; 161 | 162 | Если Не ПустаяСтрока(Коммитер) Тогда 163 | ВосстановитьКоммитера(); 164 | КонецЕсли; 165 | 166 | Если НадоУдалитьВременныйФайлКомментария Тогда 167 | Попытка 168 | УдалитьФайлы(ИмяВременногоФайлаКомментария); 169 | Исключение 170 | // не обрабатываем 171 | КонецПопытки 172 | КонецЕсли; 173 | 174 | Если НЕ КомандаВыполненаУспешно Тогда 175 | ВызватьИсключение ВыводКоманды; 176 | КонецЕсли; 177 | 178 | КонецПроцедуры 179 | 180 | // Вывести историю репозитория 181 | // git log 182 | // 183 | // Параметры: 184 | // Графически - Булево - Вывести историю в виде графа (--graph) 185 | // 186 | Процедура ВывестиИсторию(Графически = Ложь) Экспорт 187 | 188 | ПараметрыЗапуска = Новый Массив; 189 | ПараметрыЗапуска.Добавить("log"); 190 | 191 | Если Графически Тогда 192 | ПараметрыЗапуска.Добавить("--graph"); 193 | КонецЕсли; 194 | 195 | ВыполнитьКоманду(ПараметрыЗапуска); 196 | 197 | КонецПроцедуры 198 | 199 | // Получить изменения из удаленного репозитория 200 | // git pull 201 | // 202 | // Параметры: 203 | // ИмяРепозитория - Строка - Имя репозитория, из которого необходимо 204 | // получить изменения 205 | // ИмяВетки - Строка - Имя ветки, из которой необходимо получить изменения 206 | // 207 | Процедура Получить(Знач ИмяРепозитория = "", Знач ИмяВетки = "") Экспорт 208 | 209 | ПараметрыЗапуска = Новый Массив; 210 | ПараметрыЗапуска.Добавить("pull"); 211 | 212 | Если ЗначениеЗаполнено(ИмяРепозитория) Тогда 213 | ПараметрыЗапуска.Добавить(ИмяРепозитория); 214 | КонецЕсли; 215 | 216 | Если ЗначениеЗаполнено(ИмяВетки) Тогда 217 | ПараметрыЗапуска.Добавить(ИмяВетки); 218 | КонецЕсли; 219 | 220 | ВыполнитьКоманду(ПараметрыЗапуска); 221 | 222 | КонецПроцедуры 223 | 224 | // Получить изменения из удаленного репозитория без обновления ветки 225 | // git fetch 226 | // 227 | // Параметры: 228 | // ИмяРепозитория - Строка - Имя репозитория, из которого необходимо 229 | // получить изменения 230 | // 231 | Процедура Извлечь(Знач ИмяРепозитория = "") Экспорт 232 | 233 | ПараметрыЗапуска = Новый Массив; 234 | ПараметрыЗапуска.Добавить("fetch"); 235 | 236 | Если ЗначениеЗаполнено(ИмяРепозитория) Тогда 237 | ПараметрыЗапуска.Добавить(ИмяРепозитория); 238 | КонецЕсли; 239 | 240 | ВыполнитьКоманду(ПараметрыЗапуска); 241 | 242 | КонецПроцедуры 243 | 244 | // Отправить изменения в удаленный репозиторий 245 | // git push 246 | // 247 | // Параметры: 248 | // ИмяРепозитория - Строка - Имя репозитория, в который необходимо 249 | // отправить изменения 250 | // ИмяВетки - Строка - Имя ветки, в который необходимо отправить изменения 251 | // ПерезаписатьИсторию - Булево - Флаг отправки с перезаписью истории (--force) 252 | // 253 | Процедура Отправить(Знач ИмяРепозитория = "", Знач ИмяВетки = "", Знач ПерезаписатьИсторию = Ложь) Экспорт 254 | 255 | КомандаГит = Новый КомандаГитРепозитория; 256 | КомандаГит.УстановитьКоманду("push"); 257 | КомандаГит.УстановитьКонтекст(ЭтотОбъект); 258 | 259 | НастройкаКоманды = НастройкиКоманд.Получить("Отправить"); 260 | 261 | Если НастройкаКоманды = Неопределено Тогда 262 | НастройкаКоманды = Новый НастройкаКомандыОтправить; 263 | КонецЕсли; 264 | 265 | Если ПерезаписатьИсторию Тогда 266 | НастройкаКоманды.ПерезаписатьИсторию(); 267 | КонецЕсли; 268 | 269 | Если ЗначениеЗаполнено(ИмяРепозитория) Тогда 270 | НастройкаКоманды.УстановитьURLРепозиторияОтправки(ИмяРепозитория); 271 | КонецЕсли; 272 | 273 | Если ЗначениеЗаполнено(ИмяВетки) Тогда 274 | НастройкаКоманды.УстановитьЗаголовкиОтправки(ИмяВетки); 275 | КонецЕсли; 276 | 277 | КомандаГит.УстановитьНастройкуКоманды(НастройкаКоманды); 278 | КомандаГит.ВыполнитьКоманду(); 279 | 280 | КонецПроцедуры 281 | 282 | // Установить настройки отправки изменений. 283 | // Позволяет произвести тонкую настройку необходимых флагов команды отправки изменений 284 | // 285 | // Параметры: 286 | // НастройкаКомандыОтправить - НастройкаКомандыОтправить - инстанс класса НастройкаКомандыОтправить с необходимыми 287 | // настройками 288 | // 289 | Процедура УстановитьНастройкуКомандыОтправить(НастройкаКомандыОтправить) Экспорт 290 | 291 | УстановитьНастройкуКоманды("Отправить", НастройкаКомандыОтправить); 292 | 293 | КонецПроцедуры 294 | 295 | // Клонировать удаленный репозиторий 296 | // git clone 297 | // 298 | // Параметры: 299 | // ПутьУдаленномуРепозиторию - Строка - Путь к удаленному репозиторию 300 | // КаталогКлонирования - Строка - Каталог, в который необходимо выполнить 301 | // клонирование 302 | // 303 | Процедура КлонироватьРепозиторий(Знач ПутьУдаленномуРепозиторию, Знач КаталогКлонирования = "") Экспорт 304 | 305 | // TODO: Потенциально bad-design. По-хорошему это не относится к объекту 306 | // ГитРепозиторий, это что-то вроде ГитМенеджер. 307 | 308 | КомандаГит = Новый КомандаГитРепозитория; 309 | КомандаГит.УстановитьКоманду("clone"); 310 | КомандаГит.УстановитьКонтекст(ЭтотОбъект); 311 | 312 | НастройкаКоманды = НастройкиКоманд.Получить("Клонировать"); 313 | 314 | Если НастройкаКоманды = Неопределено Тогда 315 | НастройкаКоманды = Новый НастройкаКомандыКлонировать; 316 | КонецЕсли; 317 | 318 | Если ЗначениеЗаполнено(ПутьУдаленномуРепозиторию) Тогда 319 | НастройкаКоманды.УстановитьURLРепозиторияКлонирования(ПутьУдаленномуРепозиторию); 320 | КонецЕсли; 321 | 322 | Если ЗначениеЗаполнено(КаталогКлонирования) Тогда 323 | НастройкаКоманды.УстановитьКаталогКлонирования(ОбернутьВКавычки(КаталогКлонирования)); 324 | КонецЕсли; 325 | 326 | КомандаГит.УстановитьНастройкуКоманды(НастройкаКоманды); 327 | КомандаГит.ВыполнитьКоманду(); 328 | 329 | КонецПроцедуры 330 | 331 | // Установить настройки клонирования репозитория. 332 | // Позволяет произвести тонкую настройку необходимых флагов команды клонирования репозитория 333 | // 334 | // Параметры: 335 | // НастройкаКомандыКлонировать - НастройкаКомандыКлонировать - инстанс класса НастройкаКомандыКлонировать с необходимыми 336 | // настройками 337 | // 338 | Процедура УстановитьНастройкуКомандыКлонировать(НастройкаКомандыКлонировать) Экспорт 339 | 340 | УстановитьНастройкуКоманды("Клонировать", НастройкаКомандыКлонировать); 341 | 342 | КонецПроцедуры 343 | 344 | // Возвращает признак того, что установленный Рабочий каталог является репозиторием git 345 | // 346 | // Возвращаемое значение: 347 | // Булево - Результат проверки 348 | // 349 | Функция ЭтоРепозиторий() Экспорт 350 | 351 | ПроверитьВозможностьВыполненияКоманды(); 352 | 353 | Команда = Новый Команда; 354 | 355 | Команда.УстановитьКоманду(ПолучитьПутьКГит()); 356 | Команда.УстановитьРабочийКаталог(ПолучитьРабочийКаталог()); 357 | Команда.УстановитьКодировкуВывода(КодировкаТекста.UTF8); 358 | 359 | Команда.ДобавитьПараметр("rev-parse"); 360 | Команда.ДобавитьПараметр("--show-toplevel"); 361 | 362 | КодВозврата = Команда.Исполнить(); 363 | 364 | Возврат (КодВозврата = 0); 365 | 366 | КонецФункции // ЭтоРепозиторий() 367 | 368 | ////////////////////////////////////////////// 369 | // Работа с ветками 370 | 371 | // Получить имя текущей ветки 372 | // 373 | // Возвращаемое значение: 374 | // Строка - Имя текущей ветки 375 | // 376 | Функция ПолучитьТекущуюВетку() Экспорт 377 | 378 | ПараметрыЗапуска = Новый Массив; 379 | ПараметрыЗапуска.Добавить("symbolic-ref"); 380 | ПараметрыЗапуска.Добавить("--short"); 381 | ПараметрыЗапуска.Добавить("HEAD"); 382 | 383 | ВыполнитьКоманду(ПараметрыЗапуска); 384 | 385 | ВыводКоманды = ПолучитьВыводКоманды(); 386 | 387 | Возврат ВыводКоманды; 388 | 389 | КонецФункции 390 | 391 | // Выполнить переход в ветку 392 | // git checkout 393 | // 394 | // Параметры: 395 | // ИмяВетки - Строка - Имя ветки, в которую необходимо перейти 396 | // СоздатьНовую - Булево - Флаг необходимости создания новой ветки (-b) 397 | // Принудительно - Булево - Флаг необходимости принудительно перейти в ветку (-f) 398 | // 399 | // @unstable 400 | // 401 | Процедура ПерейтиВВетку(Знач ИмяВетки, Знач СоздатьНовую = Ложь, Знач Принудительно = Ложь) Экспорт 402 | 403 | ПараметрыЗапуска = Новый Массив; 404 | ПараметрыЗапуска.Добавить("checkout"); 405 | 406 | Если СоздатьНовую Тогда 407 | ПараметрыЗапуска.Добавить("-b"); 408 | КонецЕсли; 409 | 410 | Если Принудительно Тогда 411 | ПараметрыЗапуска.Добавить("-f"); 412 | КонецЕсли; 413 | 414 | ПараметрыЗапуска.Добавить(ИмяВетки); 415 | 416 | ВыполнитьКоманду(ПараметрыЗапуска); 417 | 418 | КонецПроцедуры 419 | 420 | // Создать новую ветку без выполнения перехода в нее 421 | // git branch 422 | // 423 | // Параметры: 424 | // ИмяВетки - Строка - Имя создаваемой ветки 425 | // 426 | Процедура СоздатьВетку(Знач ИмяВетки) Экспорт 427 | 428 | ПараметрыЗапуска = Новый Массив; 429 | ПараметрыЗапуска.Добавить("branch"); 430 | ПараметрыЗапуска.Добавить(ИмяВетки); 431 | 432 | ВыполнитьКоманду(ПараметрыЗапуска); 433 | 434 | КонецПроцедуры 435 | 436 | // Получить список веток 437 | // 438 | // Параметры: 439 | // ВключаяУдаленные - Булево - Включать информацию об удаленных ветках 440 | // 441 | // Возвращаемое значение: 442 | // ТаблицаЗначений - Таблица с информацией о текущих ветках. 443 | // Содержит колонки: 444 | // Текущая - Булево - Признак текущей ветки 445 | // Имя - Строка - Имя ветки 446 | // 447 | Функция ПолучитьСписокВеток(Знач ВключаяУдаленные = Ложь) Экспорт 448 | 449 | ПараметрыЗапуска = Новый Массив; 450 | ПараметрыЗапуска.Добавить("branch"); 451 | ПараметрыЗапуска.Добавить("--no-color"); 452 | 453 | Если ВключаяУдаленные Тогда 454 | ПараметрыЗапуска.Добавить("-a"); 455 | КонецЕсли; 456 | 457 | ВыполнитьКоманду(ПараметрыЗапуска); 458 | 459 | ВыводКоманды = ПолучитьВыводКоманды(); 460 | 461 | ТаблицаВеток = Новый ТаблицаЗначений(); 462 | ТаблицаВеток.Колонки.Добавить("Текущая"); 463 | ТаблицаВеток.Колонки.Добавить("Имя"); 464 | 465 | Если ПустаяСтрока(ВыводКоманды) Тогда 466 | Возврат ТаблицаВеток; 467 | КонецЕсли; 468 | 469 | ЧислоСтрок = СтрЧислоСтрок(ВыводКоманды); 470 | 471 | Для сч = 1 По ЧислоСтрок Цикл 472 | 473 | Строка = СокрЛП(СтрПолучитьСтроку(ВыводКоманды, сч)); 474 | Если ПустаяСтрока(Строка) Тогда 475 | Продолжить; 476 | КонецЕсли; 477 | 478 | Ветка = ТаблицаВеток.Добавить(); 479 | 480 | Ветка.Текущая = Лев(Строка, 1) = "*"; 481 | 482 | Если Ветка.Текущая Тогда 483 | Строка = Прав(Строка, СтрДлина(Строка) - 2); 484 | КонецЕсли; 485 | 486 | Ветка.Имя = Строка; 487 | 488 | КонецЦикла; 489 | 490 | Возврат ТаблицаВеток; 491 | 492 | 493 | КонецФункции 494 | 495 | // Работа с ветками 496 | ////////////////////////////////////////////// 497 | 498 | ////////////////////////////////////////////// 499 | // Работа с внешними репозиториями 500 | 501 | // Добавить внешний репозиторий 502 | // git remote add 503 | // 504 | // Параметры: 505 | // ИмяРепозитория - Строка - Имя внешнего репозитория 506 | // АдресВнешнегоРепозитория - Строка - Путь к внешнему репозиторию 507 | // 508 | Процедура ДобавитьВнешнийРепозиторий(Знач ИмяРепозитория, Знач АдресВнешнегоРепозитория) Экспорт 509 | 510 | ПараметрыЗапуска = Новый Массив; 511 | ПараметрыЗапуска.Добавить("remote"); 512 | ПараметрыЗапуска.Добавить("add"); 513 | 514 | ПараметрыЗапуска.Добавить(ИмяРепозитория); 515 | ПараметрыЗапуска.Добавить(АдресВнешнегоРепозитория); 516 | 517 | ВыполнитьКоманду(ПараметрыЗапуска); 518 | 519 | КонецПроцедуры 520 | 521 | // Удалить внешний репозиторий 522 | // git remote remove 523 | // 524 | // Параметры: 525 | // ИмяРепозитория - Строка - Имя внешнего репозитория 526 | // 527 | Процедура УдалитьВнешнийРепозиторий(Знач ИмяРепозитория) Экспорт 528 | 529 | ПараметрыЗапуска = Новый Массив; 530 | ПараметрыЗапуска.Добавить("remote"); 531 | ПараметрыЗапуска.Добавить("remove"); 532 | 533 | ПараметрыЗапуска.Добавить(ИмяРепозитория); 534 | 535 | ВыполнитьКоманду(ПараметрыЗапуска); 536 | 537 | КонецПроцедуры 538 | 539 | // Получить список внешних репозиториев 540 | // 541 | // Возвращаемое значение: 542 | // ТаблицаЗначений - Таблица с информацией о внешних репозиториях. 543 | // Содержит колонки: 544 | // Имя - Строка - Имя внешнего репозитория 545 | // Адрес - Строка - Путь к внешнему репозиторию 546 | // Режим - Строка - Режим работы с внешним репозиторием (push/fetch) 547 | // 548 | Функция ПолучитьСписокВнешнихРепозиториев() Экспорт 549 | 550 | ПараметрыЗапуска = Новый Массив; 551 | ПараметрыЗапуска.Добавить("remote"); 552 | ПараметрыЗапуска.Добавить("-v"); 553 | 554 | ВыполнитьКоманду(ПараметрыЗапуска); 555 | 556 | ВыводКоманды = ПолучитьВыводКоманды(); 557 | 558 | ТаблицаВнешнихРепозиториев = Новый ТаблицаЗначений; 559 | ТаблицаВнешнихРепозиториев.Колонки.Добавить("Имя"); 560 | ТаблицаВнешнихРепозиториев.Колонки.Добавить("Адрес"); 561 | ТаблицаВнешнихРепозиториев.Колонки.Добавить("Режим"); 562 | 563 | ЧислоСтрок = СтрЧислоСтрок(ВыводКоманды); 564 | 565 | // I know, I'll use regular expressions! 566 | Выражение = Новый РегулярноеВыражение("(\w+)\s+(.+)\s+\((\w+)\)"); 567 | 568 | Для сч = 1 По ЧислоСтрок Цикл 569 | 570 | Строка = СтрПолучитьСтроку(ВыводКоманды, сч); 571 | Если ПустаяСтрока(Строка) Тогда 572 | Продолжить; 573 | КонецЕсли; 574 | 575 | Совпадения = Выражение.НайтиСовпадения(Строка); 576 | Если Совпадения.Количество() = 0 Тогда 577 | Лог.Ошибка("Нестандартный вывод в git remote: '%1'", Строка); 578 | Продолжить; 579 | КонецЕсли; 580 | 581 | ВнешнийРепозиторий = ТаблицаВнешнихРепозиториев.Добавить(); 582 | 583 | ВнешнийРепозиторий.Имя = СокрЛП(Совпадения[0].Группы[1].Значение); 584 | ВнешнийРепозиторий.Адрес = СокрЛП(Совпадения[0].Группы[2].Значение); 585 | ВнешнийРепозиторий.Режим = СокрЛП(Совпадения[0].Группы[3].Значение); 586 | 587 | Лог.Отладка("%1 %2 %3", ВнешнийРепозиторий.Имя, ВнешнийРепозиторий.Адрес, ВнешнийРепозиторий.Режим); 588 | 589 | КонецЦикла; 590 | 591 | Возврат ТаблицаВнешнихРепозиториев; 592 | 593 | КонецФункции 594 | 595 | // Работа с внешними репозиториями 596 | ////////////////////////////////////////////// 597 | 598 | ////////////////////////////////////////////// 599 | // Работа с подмодулями 600 | 601 | // Добавить новый подмодуль 602 | // git submodule add 603 | // 604 | // Параметры: 605 | // АдресВнешнегоРепозитория - Строка - Путь к внешнему репозиторию 606 | // Местоположение - Строка - Каталог, в который необходимо поместить 607 | // указанный подмодуль 608 | // Ветка - Строка - Имя ветки внешнего репозитория для получения (-b Ветка) 609 | // ИмяПодмодуля - Строка - Имя, под которым подмодуль будет сохранен 610 | // в настройках (--name ИмяПодмодуля) 611 | // 612 | Процедура ДобавитьПодмодуль(Знач АдресВнешнегоРепозитория, 613 | Знач Местоположение = "", 614 | Знач Ветка = "", 615 | Знач ИмяПодмодуля = "") Экспорт 616 | 617 | ПараметрыЗапуска = Новый Массив; 618 | ПараметрыЗапуска.Добавить("submodule"); 619 | ПараметрыЗапуска.Добавить("add"); 620 | 621 | Если ЗначениеЗаполнено(Ветка) Тогда 622 | ПараметрыЗапуска.Добавить("-b"); 623 | ПараметрыЗапуска.Добавить(Ветка); 624 | КонецЕсли; 625 | 626 | Если ЗначениеЗаполнено(ИмяПодмодуля) Тогда 627 | ПараметрыЗапуска.Добавить("--name"); 628 | ПараметрыЗапуска.Добавить(ИмяПодмодуля); 629 | КонецЕсли; 630 | 631 | ПараметрыЗапуска.Добавить(АдресВнешнегоРепозитория); 632 | 633 | Если ЗначениеЗаполнено(Местоположение) Тогда 634 | ПараметрыЗапуска.Добавить(Местоположение); 635 | КонецЕсли; 636 | 637 | ВыполнитьКоманду(ПараметрыЗапуска); 638 | 639 | КонецПроцедуры 640 | 641 | // Обновить данные о зарегистрированных подмодулях 642 | // git submodule update 643 | // 644 | // Параметры: 645 | // Инициализировать - Булево - Выполнять инициализацию подмодуля (--init) 646 | // Рекурсивно - Рекурсивно - Обновлять подмодули подмодулей (--recursive) 647 | // 648 | Процедура ОбновитьПодмодули(Знач Инициализировать = Ложь, Знач Рекурсивно = Ложь) Экспорт 649 | 650 | ПараметрыЗапуска = Новый Массив; 651 | ПараметрыЗапуска.Добавить("submodule"); 652 | ПараметрыЗапуска.Добавить("update"); 653 | 654 | Если Инициализировать Тогда 655 | ПараметрыЗапуска.Добавить("--init"); 656 | КонецЕсли; 657 | 658 | Если Рекурсивно Тогда 659 | ПараметрыЗапуска.Добавить("--recursive"); 660 | КонецЕсли; 661 | 662 | ВыполнитьКоманду(ПараметрыЗапуска); 663 | 664 | КонецПроцедуры 665 | 666 | // Получить состояние подмодулей 667 | // 668 | // Возвращаемое значение: 669 | // ТаблицаЗначений - Таблица с информацией о подмодулях. 670 | // Содержит колонки: 671 | // ХэшКоммита - Строка - Хэш коммита, на который указывает подмодуль 672 | // Имя - Строка - Имя подмодуля 673 | // Указатель - Строка - указатель на внешний репозиторий 674 | // 675 | Функция ПолучитьСостояниеПодмодулей() Экспорт 676 | 677 | ПараметрыЗапуска = Новый Массив; 678 | ПараметрыЗапуска.Добавить("submodule"); 679 | ПараметрыЗапуска.Добавить("status"); 680 | 681 | ВыполнитьКоманду(ПараметрыЗапуска); 682 | 683 | ВыводКоманды = ПолучитьВыводКоманды(); 684 | 685 | ТаблицаПодмодулей = Новый ТаблицаЗначений; 686 | ТаблицаПодмодулей.Колонки.Добавить("ХэшКоммита"); 687 | ТаблицаПодмодулей.Колонки.Добавить("Имя"); 688 | ТаблицаПодмодулей.Колонки.Добавить("Указатель"); 689 | 690 | ЧислоСтрок = СтрЧислоСтрок(ВыводКоманды); 691 | 692 | Для сч = 1 По ЧислоСтрок Цикл 693 | 694 | Строка = СтрПолучитьСтроку(ВыводКоманды, сч); 695 | Если ПустаяСтрока(Строка) Тогда 696 | Продолжить; 697 | КонецЕсли; 698 | 699 | ДанныеПодмодуля = ТаблицаПодмодулей.Добавить(); 700 | 701 | ДанныеСтроки = СтрРазделить(Строка, " ", Ложь); 702 | ДанныеПодмодуля.ХэшКоммита = ДанныеСтроки[0]; 703 | ДанныеПодмодуля.Имя = ДанныеСтроки[1]; 704 | ДанныеПодмодуля.Указатель = Сред(ДанныеСтроки[2], 2, СтрДлина(ДанныеСтроки[2]) - 2); 705 | 706 | КонецЦикла; 707 | 708 | Возврат ТаблицаПодмодулей; 709 | 710 | КонецФункции 711 | 712 | #КонецОбласти 713 | #Область СлужебныйПрограммныйИнтерфейс 714 | 715 | // Работа с подмодулями 716 | ////////////////////////////////////////////// 717 | 718 | ////////////////////////////////////////////// 719 | // Работа с настройками git 720 | 721 | // Получить значение настройки git 722 | // 723 | // Параметры: 724 | // ИмяНастройки - Строка - Имя настройки 725 | // РежимУстановкиНастроекGit - РежимУстановкиНастроекGit - Режим установки настройки. 726 | // Значения параметра содержатся в перечислении РежимУстановкиНастроекGit 727 | // 728 | // Возвращаемое значение: 729 | // Строка - Значение настройки 730 | // 731 | Функция ПолучитьНастройку(Знач ИмяНастройки, Знач РежимУстановкиНастроекGit = Неопределено) Экспорт 732 | 733 | ПараметрыЗапуска = Новый Массив; 734 | ПараметрыЗапуска.Добавить("config"); 735 | 736 | Если РежимУстановкиНастроекGit <> Неопределено Тогда 737 | ПараметрыЗапуска.Добавить(РежимУстановкиНастроекGit); 738 | КонецЕсли; 739 | 740 | ПараметрыЗапуска.Добавить(ИмяНастройки); 741 | 742 | // если настройка не установлена - возвращает код 1 743 | ВыполнитьКоманду(ПараметрыЗапуска, 1); 744 | 745 | ВыводКоманды = СокрЛП(ПолучитьВыводКоманды()); 746 | 747 | Возврат ВыводКоманды; 748 | 749 | КонецФункции 750 | 751 | // Установить настройку git 752 | // git config 753 | // 754 | // Параметры: 755 | // ИмяНастройки - Строка - Имя настройки 756 | // ЗначениеНастройки - Строка - Устанавливаемое значение 757 | // РежимУстановкиНастроекGit - РежимУстановкиНастроекGit - Режим установки настройки. 758 | // Значения параметра содержатся в перечислении РежимУстановкиНастроекGit 759 | // 760 | Процедура УстановитьНастройку(Знач ИмяНастройки, Знач ЗначениеНастройки, Знач РежимУстановкиНастроекGit = Неопределено) Экспорт 761 | 762 | ПараметрыЗапуска = Новый Массив; 763 | ПараметрыЗапуска.Добавить("config"); 764 | 765 | Если Найти(ЗначениеНастройки, " ") > 0 Тогда 766 | ЗначениеНастройки = ОбернутьВКавычки(ЗначениеНастройки); 767 | КонецЕсли; 768 | 769 | Если РежимУстановкиНастроекGit <> Неопределено Тогда 770 | ПараметрыЗапуска.Добавить(РежимУстановкиНастроекGit); 771 | КонецЕсли; 772 | 773 | ПараметрыЗапуска.Добавить(ИмяНастройки); 774 | ПараметрыЗапуска.Добавить(ЗначениеНастройки); 775 | 776 | ВыполнитьКоманду(ПараметрыЗапуска); 777 | 778 | КонецПроцедуры 779 | 780 | // Удалить настройку git 781 | // git config --unset 782 | // 783 | // Параметры: 784 | // ИмяНастройки - Строка - Имя настройки 785 | // РежимУстановкиНастроекGit - РежимУстановкиНастроекGit - Режим установки настройки. 786 | // Значения параметра содержатся в перечислении РежимУстановкиНастроекGit 787 | // 788 | Процедура УдалитьНастройку(Знач ИмяНастройки, Знач РежимУстановкиНастроекGit = Неопределено) Экспорт 789 | 790 | ПараметрыЗапуска = Новый Массив; 791 | ПараметрыЗапуска.Добавить("config"); 792 | 793 | Если Найти(ИмяНастройки, " ") > 0 Тогда 794 | ИмяНастройки = ОбернутьВКавычки(ИмяНастройки); 795 | КонецЕсли; 796 | 797 | Если РежимУстановкиНастроекGit <> Неопределено Тогда 798 | ПараметрыЗапуска.Добавить(РежимУстановкиНастроекGit); 799 | КонецЕсли; 800 | 801 | ПараметрыЗапуска.Добавить("--unset"); 802 | ПараметрыЗапуска.Добавить(ИмяНастройки); 803 | 804 | ВыполнитьКоманду(ПараметрыЗапуска); 805 | 806 | КонецПроцедуры 807 | 808 | // Удаление секции настроек git 809 | // 810 | // Параметры: 811 | // ИмяСекции - Строка - Имя секции 812 | // РежимУстановкиНастроекGit - РежимУстановкиНастроекGit - Режим установки настройки. 813 | // 814 | Процедура УдалитьСекциюНастроек(Знач ИмяСекции, Знач РежимУстановкиНастроекGit = Неопределено) Экспорт 815 | 816 | ПараметрыЗапуска = Новый Массив; 817 | ПараметрыЗапуска.Добавить("config"); 818 | 819 | Если РежимУстановкиНастроекGit <> Неопределено Тогда 820 | ПараметрыЗапуска.Добавить(РежимУстановкиНастроекGit); 821 | КонецЕсли; 822 | 823 | ПараметрыЗапуска.Добавить("--remove-section"); 824 | ПараметрыЗапуска.Добавить(ИмяСекции); 825 | 826 | // удаление несуществующей секции - код возврата 128 827 | ВыполнитьКоманду(ПараметрыЗапуска, 128); 828 | 829 | КонецПроцедуры 830 | 831 | 832 | // Получить список настроек git 833 | // 834 | // Параметры: 835 | // РежимУстановкиНастроекGit - РежимУстановкиНастроекGit - Уровень, на котором 836 | // необходимо искать значения настроек 837 | // 838 | // Возвращаемое значение: 839 | // Соответствие - Список настроек. 840 | // Ключ соответствия - ключ настройки 841 | // Значение соответствия - значение настройки 842 | // 843 | Функция ПолучитьСписокНастроек(Знач РежимУстановкиНастроекGit = Неопределено) Экспорт 844 | 845 | ПараметрыЗапуска = Новый Массив; 846 | ПараметрыЗапуска.Добавить("config"); 847 | ПараметрыЗапуска.Добавить("--list"); 848 | 849 | Если РежимУстановкиНастроекGit <> Неопределено Тогда 850 | ПараметрыЗапуска.Добавить(РежимУстановкиНастроекGit); 851 | КонецЕсли; 852 | 853 | ВыполнитьКоманду(ПараметрыЗапуска); 854 | 855 | ВыводКоманды = СокрЛП(ПолучитьВыводКоманды()); 856 | 857 | СписокНастроек = Новый Соответствие(); 858 | 859 | ЧислоСтрок = СтрЧислоСтрок(ВыводКоманды); 860 | 861 | Для сч = 1 По ЧислоСтрок Цикл 862 | 863 | Строка = СтрПолучитьСтроку(ВыводКоманды, сч); 864 | Если ПустаяСтрока(Строка) Тогда 865 | Продолжить; 866 | КонецЕсли; 867 | 868 | СимволРавно = СтрНайти(Строка, "="); 869 | 870 | ИмяНастройки = Лев(Строка, СимволРавно - 1); 871 | ЗначениеНастройки = Прав(Строка, СтрДлина(Строка) - СимволРавно); 872 | 873 | СписокНастроек.Вставить(ИмяНастройки, ЗначениеНастройки); 874 | 875 | КонецЦикла; 876 | 877 | Возврат СписокНастроек; 878 | 879 | КонецФункции 880 | 881 | // Работа с настройками git 882 | ////////////////////////////////////////////// 883 | 884 | // Выполнение произвольной команды git 885 | // 886 | // Параметры: 887 | // Параметры - Массив - Массив строковых аргументов, передаваемых в командную 888 | // строку. Добавляются после исполняемого файла. 889 | // 890 | Процедура ВыполнитьКоманду(Знач Параметры, Знач ДопустимыйКодВозврата = 0) Экспорт 891 | 892 | ПроверитьВозможностьВыполненияКоманды(); 893 | 894 | Команда = Новый Команда; 895 | 896 | Команда.УстановитьКоманду(ПолучитьПутьКГит()); 897 | Команда.УстановитьРабочийКаталог(ПолучитьРабочийКаталог()); 898 | Команда.УстановитьКодировкуВывода(КодировкаТекста.UTF8); 899 | 900 | Команда.ДобавитьПараметры(Параметры); 901 | 902 | Лог.Отладка("Команда %1", Команда.ПолучитьКоманду()); 903 | Для каждого Параметр Из Команда.ПолучитьПараметры() Цикл 904 | Лог.Отладка("Параметр команды %1", Параметр); 905 | КонецЦикла; 906 | Лог.Отладка("Рабочий каталог команды %1", Команда.ПолучитьРабочийКаталог()); 907 | 908 | КодВозврата = Команда.Исполнить(); 909 | 910 | УстановитьВывод(Команда.ПолучитьВывод()); 911 | 912 | УстановитьКодВозврата(КодВозврата); 913 | 914 | Если КодВозврата <> 0 915 | И КодВозврата <> ДопустимыйКодВозврата Тогда 916 | 917 | ВыводКоманды = ПолучитьВыводКоманды(); 918 | Если ТихийРежимРаботы Тогда 919 | Лог.Ошибка("Получен ненулевой код возврата %1. Сообщение: `%2`", КодВозврата, ВыводКоманды); 920 | Иначе 921 | Лог.Ошибка("Получен ненулевой код возврата %1. Выполнение скрипта остановлено!", КодВозврата); 922 | ВызватьИсключение ВыводКоманды; 923 | КонецЕсли; 924 | Иначе 925 | Лог.Отладка("Код возврата равен %1", КодВозврата); 926 | КонецЕсли; 927 | 928 | КонецПроцедуры 929 | 930 | ////////////////////////////////////////////////////////////////////////// 931 | // Работа со свойствами класса 932 | 933 | // Получить текущий рабочий каталог. 934 | // 935 | // Возвращаемое значение: 936 | // Строка - Путь к рабочему каталогу 937 | // 938 | Функция ПолучитьРабочийКаталог() Экспорт 939 | Возврат РабочийКаталог; 940 | КонецФункции 941 | 942 | // Установить текущий рабочий каталог. 943 | // Все команды git будут выполняться относительно указанного каталога. 944 | // 945 | // Параметры: 946 | // ПутьРабочийКаталог - Строка - Путь к рабочему каталогу. 947 | // Может быть относительным. 948 | // 949 | Процедура УстановитьРабочийКаталог(Знач ПутьРабочийКаталог) Экспорт 950 | 951 | Файл_РабочийКаталог = Новый Файл(ПутьРабочийКаталог); 952 | Ожидаем.Что( 953 | Файл_РабочийКаталог.Существует(), 954 | СтрШаблон("Рабочий каталог <%1> не существует.", ПутьРабочийКаталог) 955 | ).ЭтоИстина(); 956 | 957 | РабочийКаталог = Файл_РабочийКаталог.ПолноеИмя; 958 | Лог.Отладка("РабочийКаталог: " + РабочийКаталог); 959 | 960 | КонецПроцедуры 961 | 962 | // Получить путь к исполняемому файлу git. 963 | // 964 | // Возвращаемое значение: 965 | // Строка - Путь к исполняемому файлу. 966 | // По умолчанию содержит значение "git". 967 | // 968 | Функция ПолучитьПутьКГит() Экспорт 969 | Возврат ПутьКГит; 970 | КонецФункции 971 | 972 | // Установить путь к исполняемому файлу git. 973 | // 974 | // Параметры: 975 | // Путь - Строка - Путь к исполняемому файлу. 976 | // 977 | Процедура УстановитьПутьКГит(Знач Путь) Экспорт 978 | ПутьКГит = Путь; 979 | КонецПроцедуры 980 | 981 | // Получить вывод последней выполненной команды. 982 | // 983 | // Возвращаемое значение: 984 | // Строка - Вывод команды 985 | // 986 | Функция ПолучитьВыводКоманды() Экспорт 987 | Возврат мВыводКоманды; 988 | КонецФункции 989 | 990 | // Установить вывод последней выполненной команды. 991 | // 992 | // Параметры: 993 | // Сообщение - Строка - Вывод команды 994 | // 995 | Процедура УстановитьВывод(Знач Сообщение) 996 | мВыводКоманды = Сообщение; 997 | КонецПроцедуры 998 | 999 | // Установить код возврата последней выполненной команды. 1000 | // 1001 | // Параметры: 1002 | // НовыйКодВозврата - Число - Код возврата выполнения команды 1003 | // 1004 | Процедура УстановитьКодВозврата(Знач НовыйКодВозврата) 1005 | КодВозврата = НовыйКодВозврата; 1006 | КонецПроцедуры 1007 | 1008 | // Получить код возврата последней выполненной команды. 1009 | // 1010 | // Возвращаемое значение: 1011 | // Число - Код возврата выполнения команды 1012 | // 1013 | Функция ПолучитьКодВозврата() Экспорт 1014 | Возврат КодВозврата; 1015 | КонецФункции 1016 | 1017 | // Устанавливает тихий режим работы библиотеки (без вызова исключений). 1018 | // 1019 | Процедура УстановитьТихийРежимРаботы() Экспорт 1020 | ТихийРежимРаботы = Истина; 1021 | КонецПроцедуры 1022 | 1023 | // Устанавливает нормальный режим работы библиотеки (с вызовом исключений). 1024 | // 1025 | Процедура УстановитьНормальныйРежимРаботы() Экспорт 1026 | ТихийРежимРаботы = Ложь; 1027 | КонецПроцедуры 1028 | 1029 | // Работа со статусом репозитория 1030 | // 1031 | // Возвращаемое значение: 1032 | // ДанныеСтатуса - Объект класса 1033 | Функция ДанныеСтатуса() Экспорт 1034 | Статус = Статус(Истина); 1035 | Возврат Новый ДанныеСтатуса(Статус); 1036 | КонецФункции 1037 | 1038 | #КонецОбласти 1039 | 1040 | #Область СлужебныеПроцедурыИФункции 1041 | 1042 | ////////////////////////////////////////////////////////////////////////// 1043 | // Служебные процедуры и функции 1044 | 1045 | // Проверяет возможность выполнить команду. 1046 | // 1047 | Процедура ПроверитьВозможностьВыполненияКоманды() 1048 | 1049 | Ожидаем.Что(ПолучитьРабочийКаталог(), "Рабочий каталог не установлен.").Заполнено(); 1050 | 1051 | КонецПроцедуры 1052 | 1053 | // Оборачивает переданную строку в кавычки, если она еще не обернута. 1054 | // 1055 | // Параметры: 1056 | // Строка - Строка - Входящая строка 1057 | // 1058 | // Возвращаемое значение: 1059 | // Строка - Строка, обернутая в кавычки 1060 | // 1061 | Функция ОбернутьВКавычки(Знач Строка) 1062 | 1063 | // NOTICE: https://github.com/oscript-library/v8runner 1064 | // Apache 2.0 1065 | 1066 | Если Лев(Строка, 1) = """" И Прав(Строка, 1) = """" Тогда 1067 | Возврат Строка; 1068 | Иначе 1069 | Возврат """" + Строка + """"; 1070 | КонецЕсли; 1071 | 1072 | КонецФункции 1073 | 1074 | // Очищает установленные переменные системы 1075 | // 1076 | Процедура ОчиститьУстановленныеПеременныеГит() 1077 | 1078 | УстановитьДатуКоммита(""); 1079 | 1080 | КонецПроцедуры 1081 | 1082 | // Устанавливает переменную системы GIT_COMMITTER_DATE 1083 | // 1084 | // Параметры: 1085 | // Дата - Дата - Дата для установки даты коммитера, отличной от текущей даты 1086 | // 1087 | Процедура УстановитьДатуКоммита(Знач Дата) 1088 | 1089 | УстановитьПеременнуюСреды("GIT_COMMITTER_DATE", Дата); 1090 | 1091 | КонецПроцедуры // УстановитьПеременнуюСреды() 1092 | 1093 | // Устанавливает переменную системы GIT_AUTHOR_DATE 1094 | // 1095 | // Параметры: 1096 | // Дата - Дата - Дата для установки даты автора, отличной от текущей даты 1097 | // 1098 | Процедура УстановитьДатуАвтораКоммита(Знач Дата) 1099 | 1100 | УстановитьПеременнуюСреды("GIT_AUTHOR_DATE", Дата); 1101 | 1102 | КонецПроцедуры // УстановитьДатуАвтораКоммита() 1103 | 1104 | // Устанавливает коммитера комментария в дополнительную секцию локальной настройки репозитория 1105 | // 1106 | // Параметры: 1107 | // Коммитер - Строка - представление коммитера комментария в формате: автор 1108 | // 1109 | Процедура УстановитьКоммитера(Знач Коммитер) 1110 | 1111 | РегуляркаДляПочты = Новый РегулярноеВыражение ("<([^>]+)>"); 1112 | КоллекцияСовпадений = РегуляркаДляПочты.НайтиСовпадения(Коммитер); 1113 | 1114 | Наименование = Лев(Коммитер, СтрНайти(Коммитер, "<") - 1); 1115 | 1116 | Ожидаем.Что(КоллекцияСовпадений.Количество()).Равно(1); 1117 | 1118 | Почта = КоллекцияСовпадений[0].Группы[1].Значение; // Должно быть только одно значение 1119 | 1120 | НастройкаНаименования = ПолучитьИмяНастройкиНаименованияПользователя(); 1121 | НастройкаПочты = ПолучитьИмяНастройкиПочтыПользователя(); 1122 | 1123 | ТекущееНаименование = ПолучитьНастройку(НастройкаНаименования, РежимУстановкиНастроекGit.Локально); 1124 | ТекущаяПочта = ПолучитьНастройку(НастройкаПочты, РежимУстановкиНастроекGit.Локально); 1125 | 1126 | // Сохранение в отдельную секцию "bak" 1127 | Если ЗначениеЗаполнено(ТекущееНаименование) Тогда 1128 | УстановитьНастройку("bak."+ НастройкаНаименования, ТекущееНаименование, РежимУстановкиНастроекGit.Локально); 1129 | КонецЕсли; 1130 | Если ЗначениеЗаполнено(ТекущаяПочта) Тогда 1131 | УстановитьНастройку("bak."+ НастройкаПочты, ТекущаяПочта, РежимУстановкиНастроекGit.Локально); 1132 | КонецЕсли; 1133 | 1134 | // Установим новые значения 1135 | УстановитьНастройку(НастройкаНаименования, Наименование, РежимУстановкиНастроекGit.Локально); 1136 | УстановитьНастройку(НастройкаПочты, Почта, РежимУстановкиНастроекGit.Локально); 1137 | 1138 | КонецПроцедуры 1139 | 1140 | // Восстановление коммитера комментария из резервной секции 1141 | // 1142 | Процедура ВосстановитьКоммитера() 1143 | 1144 | НастройкаНаименования = ПолучитьИмяНастройкиНаименованияПользователя(); 1145 | НастройкаПочты = ПолучитьИмяНастройкиПочтыПользователя(); 1146 | 1147 | ТекущееНаименование = ПолучитьНастройку(НастройкаНаименования, РежимУстановкиНастроекGit.Локально); 1148 | ТекущаяПочта = ПолучитьНастройку(НастройкаПочты, РежимУстановкиНастроекGit.Локально); 1149 | 1150 | Наименование_bak = ПолучитьНастройку("bak."+ НастройкаНаименования, РежимУстановкиНастроекGit.Локально); 1151 | Почта_bak = ПолучитьНастройку("bak."+ НастройкаПочты, РежимУстановкиНастроекGit.Локально); 1152 | 1153 | // Установим новые значения 1154 | Если ТекущееНаименование <> Наименование_bak Тогда 1155 | Если ЗначениеЗаполнено(Наименование_bak) Тогда 1156 | УстановитьНастройку(НастройкаНаименования, Наименование_bak, РежимУстановкиНастроекGit.Локально); 1157 | Иначе 1158 | УдалитьНастройку(НастройкаНаименования, РежимУстановкиНастроекGit.Локально); 1159 | КонецЕсли; 1160 | КонецЕсли; 1161 | 1162 | Если ТекущаяПочта <> Почта_bak Тогда 1163 | Если ЗначениеЗаполнено(Почта_bak) Тогда 1164 | УстановитьНастройку(НастройкаПочты, Почта_bak, РежимУстановкиНастроекGit.Локально); 1165 | Иначе 1166 | УдалитьНастройку(НастройкаПочты, РежимУстановкиНастроекGit.Локально); 1167 | КонецЕсли; 1168 | КонецЕсли; 1169 | 1170 | УдалитьСекциюНастроек("bak.user", РежимУстановкиНастроекGit.Локально); 1171 | 1172 | КонецПроцедуры 1173 | 1174 | // Возвращает имя настройки Гит для имени пользователя 1175 | // 1176 | Функция ПолучитьИмяНастройкиНаименованияПользователя() 1177 | Возврат "user.name"; 1178 | КонецФункции // ПолучитьИмяНастройкиНаименования() 1179 | 1180 | // Возвращает имя настройки Гит для почты пользователя 1181 | // 1182 | Функция ПолучитьИмяНастройкиПочтыПользователя() 1183 | Возврат "user.email"; 1184 | КонецФункции // ПолучитьИмяНастройкиПочты() 1185 | 1186 | Процедура УстановитьНастройкуКоманды(Знач ИмяКоманды, КлассНастройкаКоманды) 1187 | 1188 | НастройкиКоманд.Вставить(ИмяКоманды, КлассНастройкаКоманды); 1189 | 1190 | КонецПроцедуры 1191 | 1192 | // Инициализация работы библиотеки. 1193 | // Задает минимальные настройки. 1194 | // 1195 | Процедура Инициализация() 1196 | 1197 | Лог = Логирование.ПолучитьЛог("oscript.lib.gitrunner"); 1198 | СистемнаяИнформация = Новый СистемнаяИнформация; 1199 | ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; 1200 | 1201 | НастройкиКоманд = Новый Соответствие; 1202 | УстановитьПутьКГит("git"); 1203 | 1204 | ТихийРежимРаботы = Ложь; 1205 | 1206 | КонецПроцедуры 1207 | 1208 | #КонецОбласти 1209 | 1210 | Инициализация(); 1211 | -------------------------------------------------------------------------------- /src/Классы/ДанныеСтатуса.os: -------------------------------------------------------------------------------- 1 | 2 | Перем Статус; 3 | Перем ТаблицаСостоянийФайлов; 4 | Перем ОписаниеСостояния; 5 | 6 | Процедура ПриСозданииОбъекта(ВыводКоманды) Экспорт 7 | Статус = ВыводКоманды; 8 | ЗаполнитьТаблицу(); 9 | КонецПроцедуры 10 | 11 | #Область ПрограммныйИнтерфейс 12 | 13 | Функция Получить() Экспорт 14 | Возврат Статус; 15 | КонецФункции 16 | 17 | Функция ТаблицаИзменений() Экспорт 18 | Возврат ТаблицаСостоянийФайлов; 19 | КонецФункции 20 | 21 | Функция КДобавлению(КромеИзмененныхВДереве = Ложь) Экспорт 22 | Массив = Новый Массив(); 23 | Для каждого Стр Из ТаблицаСостоянийФайлов Цикл 24 | Если СтрНайти("AMURC", Стр.СостояниеВИндексе) > 0 Тогда 25 | Если КромеИзмененныхВДереве И НЕ ПустаяСтрока(Стр.СостояниеВДереве) Тогда 26 | Продолжить; 27 | КонецЕсли; 28 | Массив.Добавить(Стр.ИмяФайла); 29 | КонецЕсли; 30 | КонецЦикла; 31 | Возврат Массив; 32 | КонецФункции 33 | 34 | Функция КУдалению(УчитыватьПереименование=Истина) Экспорт 35 | Массив = Новый Массив(); 36 | Для каждого Стр Из ТаблицаСостоянийФайлов Цикл 37 | Если СтрНайти("D", Стр.СостояниеВИндексе) > 0 Тогда 38 | Массив.Добавить(Стр.ИмяФайла); 39 | ИначеЕсли СтрНайти("R", Стр.СостояниеВИндексе) > 0 40 | И УчитыватьПереименование Тогда 41 | Массив.Добавить(Стр.СтароеИмяФайла); 42 | КонецЕсли; 43 | КонецЦикла; 44 | Возврат Массив; 45 | КонецФункции 46 | 47 | Функция ВнеИндекса() Экспорт 48 | Массив = Новый Массив(); 49 | Для каждого Стр Из ТаблицаСостоянийФайлов Цикл 50 | Если ПустаяСтрока(Стр.СостояниеВДереве) Тогда 51 | Продолжить; 52 | КонецЕсли; 53 | Массив.Добавить(Стр.ИмяФайла); 54 | КонецЦикла; 55 | Возврат Массив; 56 | КонецФункции 57 | 58 | Функция НеОтслеживаются() Экспорт 59 | Массив = Новый Массив(); 60 | Для каждого Стр Из ТаблицаСостоянийФайлов Цикл 61 | Если СтрНайти("?", Стр.СостояниеВИндексе) > 0 62 | Или СтрНайти("?", Стр.СостояниеВИндексе) > 0 Тогда 63 | Массив.Добавить(Стр.ИмяФайла); 64 | КонецЕсли; 65 | КонецЦикла; 66 | Возврат Массив; 67 | КонецФункции 68 | 69 | #КонецОбласти 70 | 71 | Процедура ЗаполнитьТаблицу() 72 | 73 | Для НомерСтроки = 1 По СтрЧислоСтрок(Статус) Цикл 74 | СтрокаСтатуса = СтрПолучитьСтроку(Статус, НомерСтроки); 75 | Если ПустаяСтрока(СтрокаСтатуса) Тогда 76 | Продолжить; 77 | КонецЕсли; 78 | 79 | Стр = ТаблицаСостоянийФайлов.Добавить(); 80 | Стр.СостояниеВИндексе = Сред(СтрокаСтатуса, 1, 1); 81 | Стр.СостояниеВДереве = Сред(СтрокаСтатуса, 2, 1); 82 | 83 | ИмяФайла = Сред(СтрокаСтатуса, 4); 84 | Поз = СтрНайти(ИмяФайла, " -> "); 85 | Если Поз = 0 Тогда 86 | Стр.СтароеИмяФайла = ""; 87 | Стр.ИмяФайла = СокрЛП(ИмяФайла); 88 | Иначе 89 | Стр.СтароеИмяФайла = СокрЛП(Лев(ИмяФайла, Поз - 1)); 90 | Стр.ИмяФайла = СокрЛП(Сред(ИмяФайла, Поз + 4)); 91 | КонецЕсли; 92 | 93 | Стр.ИмяФайла = УбратьКавычки(Стр.ИмяФайла); 94 | Стр.СтароеИмяФайла = УбратьКавычки(Стр.СтароеИмяФайла); 95 | 96 | Стр.ОписаниеСостоянияВИндексе = ОписаниеСостояния[Стр.СостояниеВИндексе]; 97 | Стр.ОписаниеСостоянияВДереве = ОписаниеСостояния[Стр.СостояниеВДереве]; 98 | 99 | КонецЦикла; 100 | 101 | КонецПроцедуры 102 | 103 | Функция УбратьКавычки(Знач Строка) 104 | Если Лев(Строка, 1) = """" И Прав(Строка, 1) = """" Тогда 105 | Возврат Сред(Строка, 2, СтрДлина(Строка) - 2); 106 | Иначе 107 | Возврат Строка; 108 | КонецЕсли; 109 | КонецФункции 110 | 111 | Процедура Инициализация() 112 | 113 | ТаблицаСостоянийФайлов = Новый ТаблицаЗначений(); 114 | ТаблицаСостоянийФайлов.Колонки.Добавить("ИмяФайла"); 115 | ТаблицаСостоянийФайлов.Колонки.Добавить("СтароеИмяФайла"); 116 | ТаблицаСостоянийФайлов.Колонки.Добавить("СостояниеВИндексе"); 117 | ТаблицаСостоянийФайлов.Колонки.Добавить("СостояниеВДереве"); 118 | ТаблицаСостоянийФайлов.Колонки.Добавить("ОписаниеСостоянияВИндексе"); 119 | ТаблицаСостоянийФайлов.Колонки.Добавить("ОписаниеСостоянияВДереве"); 120 | 121 | // Описание состояний 122 | 123 | // M [ MD] updated in index 124 | // A [ MD] added to index 125 | // D deleted from index 126 | // R [ MD] renamed in index 127 | // C [ MD] copied in index 128 | // [MARC] index and work tree matches 129 | // [ MARC] M work tree changed since index 130 | // [ MARC] D deleted in work tree 131 | // [ D] R renamed in work tree 132 | // [ D] C copied in work tree 133 | // ------------------------------------------------- 134 | // D D unmerged, both deleted 135 | // A U unmerged, added by us 136 | // U D unmerged, deleted by them 137 | // U A unmerged, added by them 138 | // D U unmerged, deleted by us 139 | // A A unmerged, both added 140 | // U U unmerged, both modified 141 | // ------------------------------------------------- 142 | // ? ? untracked 143 | // ! ! ignored 144 | 145 | ОписаниеСостояния = Новый Соответствие(); 146 | ОписаниеСостояния.Вставить("M", "модифицирован"); 147 | ОписаниеСостояния.Вставить("A", "добавлен"); 148 | ОписаниеСостояния.Вставить("D", "удален"); 149 | ОписаниеСостояния.Вставить("R", "переименован"); 150 | ОписаниеСостояния.Вставить("C", "скопирован"); 151 | ОписаниеСостояния.Вставить("U", "обновлен"); 152 | ОписаниеСостояния.Вставить("?", "не отслеживается"); 153 | ОписаниеСостояния.Вставить("!", "игнорируется"); 154 | 155 | КонецПроцедуры 156 | 157 | Инициализация(); -------------------------------------------------------------------------------- /src/Классы/КомандаГитРепозитория.os: -------------------------------------------------------------------------------- 1 | // Массив параметров команды для выполнения 2 | Перем ПараметрыКоманды Экспорт; 3 | // Установленная команда 4 | Перем КомандаГит Экспорт; 5 | Перем ГитРепозиторий; 6 | Перем КлассНастройкиКоманды; 7 | Перем ПлагиныОбработчики; 8 | Перем Отказ; 9 | Перем СтандартнаяОбработка; 10 | Перем РефлекторПроверкиКоманд; 11 | 12 | 13 | // Установить команды git для выполнения. 14 | // 15 | // Параметры: 16 | // НоваяКомандаГит - строка - строковое представление команды git 17 | // 18 | Процедура УстановитьКоманду(Знач НоваяКомандаГит) Экспорт 19 | 20 | КомандаГит = НоваяКомандаГит; 21 | 22 | КонецПроцедуры 23 | 24 | // Установить контекст выполнения команды git. 25 | // 26 | // Параметры: 27 | // КонтекстВыполненияКоманды - ГитРепозиторий - инстанс класса ГитРепозиторий с необходимыми 28 | // настройками 29 | Процедура УстановитьКонтекст(КонтекстВыполненияКоманды) Экспорт 30 | 31 | ГитРепозиторий = КонтекстВыполненияКоманды; 32 | 33 | КонецПроцедуры 34 | 35 | // Добавление дополнительных контекстов выполнения команды git. 36 | // 37 | // Параметры: 38 | // КонтекстВыполненияКоманды - Произвольный класс - инстанс класса с реализацией дополнительных обработчиков 39 | // 40 | Процедура ДобавитьКонтекстВыполнения(КонтекстВыполненияКоманды) Экспорт 41 | 42 | ПлагиныОбработчики.Вставить(КонтекстВыполненияКоманды); 43 | 44 | КонецПроцедуры 45 | 46 | // Установить настройку выполнения команды git. 47 | // 48 | // Параметры: 49 | // НовыйКлассНастройкиКоманды - Произвольный класс - инстанс класса реализующего настройки выполнения команды 50 | // 51 | Процедура УстановитьНастройкуКоманды(НовыйКлассНастройкиКоманды) Экспорт 52 | 53 | КлассНастройкиКоманды = НовыйКлассНастройкиКоманды; 54 | 55 | КонецПроцедуры 56 | 57 | // Процедура выполнения команды git 58 | Процедура ВыполнитьКоманду() Экспорт 59 | 60 | ПередВыполнением_НастройкаКоманды(); 61 | ПередВыполнением_ПодпискиПлагинов(); 62 | ПередВыполнением_СтандартнаяОбработка(); 63 | 64 | ПараметрыКоманды.Вставить(0, КомандаГит); 65 | 66 | ПриВыполнении_НастройкаКоманды(); 67 | ПриВыполнении_ПодпискиПлагинов(); 68 | ПриВыполнении_СтандартнаяОбработка(); 69 | 70 | ПослеВыполнения_НастройкаКоманды(); 71 | ПослеВыполнения_ПодпискиПлагинов(); 72 | ПослеВыполнения_СтандартнаяОбработка(); 73 | 74 | КонецПроцедуры 75 | 76 | /////////////////// 77 | // ОБРАБОТЧИКИ НАСТРОЙКИ КОМАНДЫ 78 | 79 | 80 | Процедура ПередВыполнением_НастройкаКоманды() 81 | 82 | Если Не ПроверитьОбработчикПередВыполнением(КлассНастройкиКоманды) Тогда 83 | Возврат; 84 | КонецЕсли; 85 | 86 | КлассНастройкиКоманды.ПередВыполнением(Отказ, ПараметрыКоманды, СтандартнаяОбработка); 87 | 88 | КонецПроцедуры 89 | 90 | Процедура ПриВыполнении_НастройкаКоманды() 91 | 92 | Если Не ПроверитьОбработчикПриВыполнении(КлассНастройкиКоманды) Тогда 93 | Возврат; 94 | КонецЕсли; 95 | 96 | КлассНастройкиКоманды.ПриВыполнении(КомандаГит, ПараметрыКоманды, ГитРепозиторий, СтандартнаяОбработка); 97 | 98 | КонецПроцедуры 99 | 100 | Процедура ПослеВыполнения_НастройкаКоманды() 101 | 102 | Если Не ПроверитьОбработчикПослеВыполнения(КлассНастройкиКоманды) Тогда 103 | Возврат; 104 | КонецЕсли; 105 | 106 | КлассНастройкиКоманды.ПослеВыполнения(СтандартнаяОбработка); 107 | 108 | КонецПроцедуры 109 | 110 | 111 | /////////////////// 112 | // СТАНДАРТНЫЕ ОБРАБОТЧИКИ 113 | 114 | Процедура ПередВыполнением_СтандартнаяОбработка() 115 | 116 | Если НЕ СтандартнаяОбработка Тогда 117 | Возврат; 118 | КонецЕсли; 119 | 120 | ТиповаяФункция = "ПолучитьПараметрыКоманды"; 121 | 122 | Если Не ПроверитьМетодКласса(КлассНастройкиКоманды, ТиповаяФункция, , Истина) Тогда 123 | Сообщение = СтрШаблон( 124 | "У класса %1 не реализована обязательная функция: %2", 125 | КлассНастройкиКоманды, 126 | ТиповаяФункция 127 | ); 128 | ВызватьИсключение Сообщение; 129 | КонецЕсли; 130 | 131 | ПараметрыКоманды = КлассНастройкиКоманды.ПолучитьПараметрыКоманды(); 132 | 133 | КонецПроцедуры 134 | 135 | Процедура ПриВыполнении_СтандартнаяОбработка() 136 | 137 | Если Отказ Тогда 138 | ВызватьИсключение "Выполнение команды прервано"; 139 | КонецЕсли; 140 | 141 | ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); 142 | 143 | КонецПроцедуры 144 | 145 | Процедура ПослеВыполнения_СтандартнаяОбработка() 146 | // Действий по умолчанию не требуется 147 | Возврат; 148 | КонецПроцедуры 149 | 150 | ////////////////////// 151 | // ОБРАБОТКИ ПЛАГИНОВ И ПОДПИСОК 152 | 153 | Процедура ПередВыполнением_ПодпискиПлагинов() 154 | 155 | Для каждого Плагин Из ПлагиныОбработчики Цикл 156 | 157 | КлассРеализацииКоманды = Плагин.Ключ; 158 | 159 | Если ПроверитьОбработчикПередВыполнением(КлассРеализацииКоманды) Тогда 160 | Продолжить; 161 | КонецЕсли; 162 | 163 | КлассРеализацииКоманды.ПередВыполнением(Отказ, ПараметрыКоманды, СтандартнаяОбработка); 164 | 165 | КонецЦикла; 166 | 167 | КонецПроцедуры 168 | 169 | Процедура ПриВыполнении_ПодпискиПлагинов() 170 | 171 | Для каждого Плагин Из ПлагиныОбработчики Цикл 172 | 173 | КлассРеализацииКоманды = Плагин.Ключ; 174 | 175 | Если ПроверитьОбработчикПриВыполнении(КлассРеализацииКоманды) Тогда 176 | Продолжить; 177 | КонецЕсли; 178 | 179 | КлассРеализацииКоманды.ПриВыполнении(КомандаГит, ПараметрыКоманды, ГитРепозиторий, Отказ, СтандартнаяОбработка); 180 | 181 | КонецЦикла; 182 | 183 | КонецПроцедуры 184 | 185 | Процедура ПослеВыполнения_ПодпискиПлагинов() 186 | 187 | Для каждого Плагин Из ПлагиныОбработчики Цикл 188 | 189 | КлассРеализацииКоманды = Плагин.Ключ; 190 | 191 | Если ПроверитьОбработчикПослеВыполнения(КлассРеализацииКоманды) Тогда 192 | Продолжить; 193 | КонецЕсли; 194 | 195 | КлассРеализацииКоманды.ПослеВыполнения(КомандаГит, ПараметрыКоманды, ГитРепозиторий, СтандартнаяОбработка); 196 | 197 | КонецЦикла; 198 | 199 | КонецПроцедуры 200 | 201 | /////////////////////////// 202 | // ПРОЦЕДУРЫ РЕФЛЕКТОРА 203 | 204 | Функция ПроверитьОбработчикПередВыполнением(КлассРеализацииКоманды) 205 | 206 | ИмяМетода = "ПередВыполнением"; 207 | ТребуемоеКоличествоПараметров = 3; 208 | ЭтоФункция = Ложь; 209 | 210 | Возврат ПроверитьМетодКласса(КлассРеализацииКоманды, ИмяМетода, ТребуемоеКоличествоПараметров, ЭтоФункция); 211 | 212 | КонецФункции 213 | 214 | Функция ПроверитьОбработчикПриВыполнении(КлассРеализацииКоманды) 215 | 216 | ИмяМетода = "ПриВыполнении"; 217 | ТребуемоеКоличествоПараметров = 5; 218 | ЭтоФункция = Ложь; 219 | 220 | Возврат ПроверитьМетодКласса(КлассРеализацииКоманды, ИмяМетода, ТребуемоеКоличествоПараметров, ЭтоФункция); 221 | 222 | КонецФункции 223 | 224 | Функция ПроверитьОбработчикПослеВыполнения(КлассРеализацииКоманды) 225 | 226 | ИмяМетода = "ПослеВыполнения"; 227 | ТребуемоеКоличествоПараметров = 4; 228 | ЭтоФункция = Ложь; 229 | 230 | Возврат ПроверитьМетодКласса(КлассРеализацииКоманды, ИмяМетода, ТребуемоеКоличествоПараметров, ЭтоФункция); 231 | 232 | КонецФункции 233 | 234 | Функция ПроверитьМетодКласса(Знач КлассРеализацииКоманды, 235 | Знач ИмяМетода, 236 | Знач ТребуемоеКоличествоПараметров = 0, 237 | Знач ЭтоФункция = Ложь) 238 | 239 | ЕстьМетод = РефлекторПроверкиКоманд.МетодСуществует(КлассРеализацииКоманды, ИмяМетода); 240 | 241 | Если Не ЕстьМетод Тогда 242 | Возврат Ложь; 243 | КонецЕсли; 244 | 245 | ТаблицаМетодов = ПолучитьТаблицуМетодов(КлассРеализацииКоманды); 246 | СтрокаМетода = ТаблицаМетодов.Найти(ИмяМетода, "Имя"); 247 | Если СтрокаМетода = Неопределено Тогда 248 | Возврат Ложь; 249 | КонецЕсли; 250 | 251 | ПроверкаНаФункцию = ЭтоФункция = СтрокаМетода.ЭтоФункция; 252 | ПроверкаНаКоличествоПараметров = ТребуемоеКоличествоПараметров = СтрокаМетода.КоличествоПараметров; 253 | 254 | //Сообщить(СтрШаблон("Класс %1 метод %2: %3", КлассРеализацииКоманды, ИмяМетода, ПроверкаНаФункцию 255 | // И ПроверкаНаКоличествоПараметров )); 256 | 257 | Возврат ПроверкаНаФункцию 258 | И ПроверкаНаКоличествоПараметров; 259 | 260 | 261 | КонецФункции // ПроверитьМетодУКласса() 262 | 263 | Функция ПолучитьТаблицуМетодов(Знач КлассРеализацииКоманды) 264 | 265 | Возврат РефлекторПроверкиКоманд.ПолучитьТаблицуМетодов(КлассРеализацииКоманды); 266 | 267 | КонецФункции 268 | 269 | Процедура Инициализация() 270 | 271 | ПлагиныОбработчики = Новый Соответствие; 272 | ПараметрыКоманды = Новый Массив; 273 | РефлекторПроверкиКоманд = Новый Рефлектор; 274 | СтандартнаяОбработка = Истина; 275 | Отказ = ложь; 276 | КонецПроцедуры 277 | 278 | Инициализация(); -------------------------------------------------------------------------------- /src/Классы/НастройкаКомандыКлонировать.os: -------------------------------------------------------------------------------- 1 | Перем URLРепозитория; 2 | Перем ПараметрыКоманды; 3 | Перем КаталогКлонирования; 4 | 5 | // Функция возвращает массив параметров выполнения команды git 6 | // 7 | Функция ПолучитьПараметрыКоманды() Экспорт 8 | 9 | МассивПараметров = Новый Массив; 10 | 11 | Для каждого Настройка Из ПараметрыКоманды Цикл 12 | 13 | УстановитьПараметрКоманды(МассивПараметров, Настройка.Ключ, Настройка.Значение); 14 | 15 | КонецЦикла; 16 | 17 | Если ЗначениеЗаполнено(URLРепозитория) Тогда 18 | МассивПараметров.Добавить(URLРепозитория); 19 | КонецЕслИ; 20 | 21 | Если ЗначениеЗаполнено(КаталогКлонирования) Тогда 22 | МассивПараметров.Добавить(КаталогКлонирования); 23 | КонецЕслИ; 24 | 25 | Возврат МассивПараметров; 26 | 27 | КонецФункции // ПолучитьНастройкиКоманды() Экспорт 28 | 29 | // Процедура устанавливает URL репозитория git в настройками отправки 30 | // 31 | // Параметры 32 | // НовыйURLРепозитория - Строка - значение URL git репозитория или имя внешнего репозитория 33 | // 34 | Процедура УстановитьURLРепозиторияКлонирования(Знач НовыйURLРепозитория) Экспорт 35 | 36 | URLРепозитория = НовыйURLРепозитория; 37 | 38 | КонецПроцедуры // УстановитьРепозиторийОтправки() 39 | 40 | // Процедура устанавливает каталог рабочей копии репозитория git в настройками клонирования 41 | // 42 | // Параметры 43 | // НовыйКаталогКлонирования - Строка - значение URL git репозитория или имя внешнего репозитория 44 | // 45 | Процедура УстановитьКаталогКлонирования(Знач НовыйКаталогКлонирования) Экспорт 46 | 47 | КаталогКлонирования = НовыйКаталогКлонирования; 48 | 49 | КонецПроцедуры // УстановитьРепозиторийОтправки() 50 | 51 | // Процедура устанавливает параметры команды в настройки отправки 52 | // 53 | // Параметры 54 | // Параметры - Соответвие - Соответвие настроек команды (ключ - имя параметра, значение - булево) 55 | // 56 | Процедура УстановитьПараметрыКомандыКлонирования(Знач Параметры) Экспорт 57 | 58 | ПараметрыКоманды = Параметры; 59 | 60 | КонецПроцедуры 61 | 62 | // Процедура устанавливает параметры режима зеркала выполнения команды в настройки 63 | // --mirror 64 | // Параметры 65 | // ЗначениеУстановки - булево - По умолчанию Истина 66 | Процедура РежимЗеркала(Знач ЗначениеУстановки = Истина) Экспорт 67 | 68 | УстановитьПроизвольныйРежим("--mirror", ЗначениеУстановки); 69 | 70 | КонецПроцедуры 71 | 72 | // Процедура устанавливает параметры режима без рабочей выполнения команды в настройки 73 | // --bare 74 | // Параметры 75 | // ЗначениеУстановки - булево - По умолчанию Истина 76 | Процедура РежимБезРабочейКопии(Знач ЗначениеУстановки = Истина) Экспорт 77 | 78 | УстановитьПроизвольныйРежим("--bare", ЗначениеУстановки); 79 | 80 | КонецПроцедуры 81 | 82 | 83 | // Процедура устанавливает параметры глубина получения коммитов команды в настройки 84 | // --depth 85 | // Параметры 86 | // ЗначениеУстановки - Число - По умолчанию 0 87 | Процедура ГлубинаКопии(Знач ЗначениеУстановки = 0) Экспорт 88 | 89 | УстановитьПроизвольныйРежим("--depth", ЗначениеУстановки); 90 | 91 | КонецПроцедуры 92 | 93 | 94 | // Процедура устанавливает произвольную настройку при выполнении команды в настройки 95 | // 96 | // Параметры 97 | // НаименованиеПараметра - строка - Наименование параметра настройки 98 | // ЗначениеУстановки - булево - По умолчанию Истина 99 | Процедура УстановитьПроизвольныйРежим(Знач НаименованиеПараметра, Знач ЗначениеУстановки = Истина) Экспорт 100 | 101 | ПараметрыКоманды.Вставить(НаименованиеПараметра, ЗначениеУстановки); 102 | 103 | КонецПроцедуры 104 | 105 | 106 | Процедура УстановитьПараметрКоманды(МассивПараметров, Знач КлючПараметра, Знач ЗначениеПараметра) 107 | 108 | Если ТипЗнч(ЗначениеПараметра) = Тип("булево") Тогда 109 | Если Не ЗначениеПараметра Тогда 110 | Возврат; 111 | КонецЕсли; 112 | МассивПараметров.Добавить(КлючПараметра); 113 | Иначе 114 | МассивПараметров.Добавить(КлючПараметра); 115 | МассивПараметров.Добавить(ЗначениеПараметра); 116 | КонецЕсли; 117 | 118 | КонецПроцедуры 119 | 120 | 121 | Процедура ЗаполнитьНастройкиПоУмолчанию() 122 | 123 | Отключить = Ложь; 124 | ПараметрыКоманды = Новый Соответствие; 125 | 126 | РежимБезРабочейКопии(Отключить); 127 | РежимЗеркала(Отключить); 128 | 129 | URLРепозитория = ""; 130 | 131 | КонецПроцедуры 132 | 133 | Процедура Инициализация() 134 | 135 | Лог = Логирование.ПолучитьЛог("oscript.lib.gitrunner"); 136 | ЗаполнитьНастройкиПоУмолчанию(); 137 | 138 | КонецПроцедуры 139 | 140 | Инициализация(); 141 | -------------------------------------------------------------------------------- /src/Классы/НастройкаКомандыОтправить.os: -------------------------------------------------------------------------------- 1 | Перем ОтправкаRefspec; 2 | Перем ПараметрыКомандыОтправки; 3 | Перем URLРепозитория; 4 | Перем ЗаголовкиОтправки; 5 | 6 | // Функция возвращает массив параметров выполнения команды git 7 | // 8 | Функция ПолучитьПараметрыКоманды() Экспорт 9 | 10 | МассивПараметров = Новый Массив; 11 | 12 | Для каждого Настройка Из ПараметрыКомандыОтправки Цикл 13 | 14 | УстановитьПараметрКоманды(МассивПараметров, Настройка.Ключ, Настройка.Значение); 15 | 16 | КонецЦикла; 17 | 18 | Если ЗначениеЗаполнено(URLРепозитория) Тогда 19 | МассивПараметров.Добавить(URLРепозитория); 20 | КонецЕслИ; 21 | 22 | Для Каждого Заголовок Из ЗаголовкиОтправки Цикл 23 | МассивПараметров.Добавить(Заголовок); 24 | КонецЦикла; 25 | 26 | УдалитьВзаимоисключающиеПараметры(МассивПараметров); 27 | 28 | //МассивПараметров.Вставить(0, "push"); 29 | 30 | Возврат МассивПараметров; 31 | 32 | КонецФункции // ПолучитьНастройкиКоманды() Экспорт 33 | 34 | // Функция возвращает стурктуру с текущими настройками отправки 35 | // 36 | // Возвращаемое значение: 37 | // Структура 38 | // Доступные ключи: 39 | // URLРепозитория - Строка - Признак текущей ветки 40 | // ЗаголовкиОтправки - Массив - Массив строк заголовков 41 | // ПараметрыКомандыОтправки - Соответсвие - Соответвие настроек команды (ключ - имя параметра, значение - булево) 42 | Функция ПолучитьНастройки() Экспорт 43 | 44 | ТекущаяНастройкаОтправки = Новый Структура; 45 | ТекущаяНастройкаОтправки.Добавить("URLРепозитория", URLРепозитория); 46 | ТекущаяНастройкаОтправки.Добавить("ЗаголовкиОтправки", ЗаголовкиОтправки); 47 | ТекущаяНастройкаОтправки.Добавить("ПараметрыКомандыОтправки", ПараметрыКомандыОтправки); 48 | 49 | Возврат ТекущаяНастройкаОтправки; 50 | 51 | КонецФункции 52 | 53 | // Процедура устанавливает текущими настройками отправки по переданный структуре 54 | // 55 | // Параметры 56 | // НовыеНастройкиОтправки - Структура 57 | // Доступные ключи: 58 | // URLРепозитория - Строка - Признак текущей ветки 59 | // ЗаголовкиОтправки - Массив - Массив строк заголовков 60 | // ПараметрыКомандыОтправки - Соответсвие - Соответвие настроек команды (ключ - имя параметра, значение - булево) 61 | Процедура УстановитьНастройки(Знач НовыеНастройкиОтправки) Экспорт 62 | 63 | URLРепозитория = НовыеНастройкиОтправки.Получить("URLРепозитория"); 64 | ЗаголовкиОтправки = НовыеНастройкиОтправки.Получить("ЗаголовкиОтправки"); 65 | ПараметрыКомандыОтправки = НовыеНастройкиОтправки.Получить("ПараметрыКомандыОтправки"); 66 | 67 | КонецПроцедуры 68 | 69 | // Процедура добавляет произвольный заголовок настройками отправки 70 | // 71 | // Параметры 72 | // ЗаголовокОтправки - Строка - значение заголовка отправки 73 | // 74 | Процедура ДобавитьПроизвольныйЗаголовокОтправки(Знач ЗаголовокОтправки) Экспорт 75 | 76 | ПроверитьЗаголовкиНаRefspec(ЗаголовокОтправки); 77 | 78 | ЗаголовкиОтправки.Добавить(ЗаголовокОтправки); 79 | 80 | КонецПроцедуры 81 | 82 | // Процедура устанавливает URL репозитория git в настройками отправки 83 | // 84 | // Параметры 85 | // НовыйURLРепозитория - Строка - значение URL git репозитория или имя внешнего репозитория 86 | // 87 | Процедура УстановитьURLРепозиторияОтправки(Знач НовыйURLРепозитория) Экспорт 88 | 89 | URLРепозитория = НовыйURLРепозитория; 90 | 91 | КонецПроцедуры // УстановитьРепозиторийОтправки() 92 | 93 | // Процедура устанавливает массив заголовков отправки репозитория git в настройки отправки 94 | // 95 | // Параметры 96 | // НовыйЗаголовкиОтправки - Строка/Массив - Строка или массив готовый заголовок отправки 97 | // 98 | Процедура УстановитьЗаголовкиОтправки(Знач НовыйЗаголовкиОтправки) Экспорт 99 | 100 | 101 | Если Не ТипЗнч(НовыйЗаголовкиОтправки) = Тип("Массив") Тогда 102 | 103 | ПроверитьЗаголовкиНаRefspec(НовыйЗаголовкиОтправки); 104 | ЗаголовкиОтправки = Новый Массив; 105 | 106 | ЗаголовкиОтправки.Добавить(НовыйЗаголовкиОтправки); 107 | Иначе 108 | 109 | ЗаголовкиОтправки = НовыйЗаголовкиОтправки; 110 | 111 | КонецЕсли; 112 | 113 | КонецПроцедуры 114 | 115 | // Процедура устанавливает параметры команды в настройки отправки 116 | // 117 | // Параметры 118 | // Параметры - Соответвие - Соответвие настроек команды (ключ - имя параметра, значение - булево) 119 | // 120 | Процедура УстановитьПараметрыКомандыОтправки(Знач Параметры) Экспорт 121 | 122 | ПараметрыКомандыОтправки = Параметры; 123 | 124 | КонецПроцедуры 125 | 126 | // Процедура добавляет заголовки отправки в настройки отправки 127 | // 128 | // Параметры 129 | // ЗаголовокРабочейКопии - строка - строка с именем ветки или refspec рабочей копии 130 | // ЗаголовокУдаленногоСервера - строка - строка с именем ветки или refspec удаленного сервера 131 | // 132 | Процедура ДобавитьЗаголовкиОтправки(ЗаголовокРабочейКопии = "", ЗаголовокУдаленногоСервера = "") Экспорт 133 | 134 | НовыйЗаголовокОтправки = ""; 135 | 136 | Если НЕ ЗначениеЗаполнено(ЗаголовокУдаленногоСервера) Тогда 137 | 138 | НовыйЗаголовокОтправки = СтрШаблон("%1", ЗаголовокРабочейКопии); 139 | 140 | Иначе 141 | 142 | НовыйЗаголовокОтправки = СтрШаблон("%1:%2", ЗаголовокРабочейКопии, ЗаголовокУдаленногоСервера); 143 | 144 | КонецЕслИ; 145 | 146 | ДобавитьПроизвольныйЗаголовокОтправки(НовыйЗаголовокОтправки); 147 | 148 | КонецПроцедуры 149 | 150 | // Процедура устанавливает параметры отображения прогресса выполнения команды в настройки отправки 151 | // git push --progress 152 | // Параметры 153 | // ЗначениеУстановки - булево - По умолчанию Истина 154 | Процедура ОтображатьПрогресс(Знач ЗначениеУстановки = Истина) Экспорт 155 | 156 | УстановитьПроизвольныйРежим("--progress", ЗначениеУстановки); 157 | 158 | КонецПроцедуры 159 | 160 | // Процедура устанавливает параметры режима тишины выполнения команды в настройки отправки 161 | // git push --quiet 162 | // Параметры 163 | // ЗначениеУстановки - булево - По умолчанию Истина 164 | Процедура РежимТишины(Знач ЗначениеУстановки = Истина) Экспорт 165 | 166 | УстановитьПроизвольныйРежим("--quiet", ЗначениеУстановки); 167 | 168 | КонецПроцедуры 169 | 170 | // Процедура устанавливает параметры режима зеркала выполнения команды в настройки отправки 171 | // git push --mirror 172 | // Параметры 173 | // ЗначениеУстановки - булево - По умолчанию Истина 174 | Процедура РежимЗеркала(Знач ЗначениеУстановки = Истина) Экспорт 175 | 176 | УстановитьПроизвольныйРежим("--mirror", ЗначениеУстановки); 177 | 178 | КонецПроцедуры 179 | 180 | // Процедура устанавливает параметры режима удаления выполнения команды в настройки отправки 181 | // git push --delete 182 | // Параметры 183 | // ЗначениеУстановки - булево - По умолчанию Истина 184 | Процедура РежимУдаления(Знач ЗначениеУстановки = Истина) Экспорт 185 | 186 | УстановитьПроизвольныйРежим("--delete", ЗначениеУстановки); 187 | 188 | КонецПроцедуры 189 | 190 | // Процедура устанавливает параметры режима полной отправки при выполнении команды в настройки отправки 191 | // git push --all 192 | // Параметры 193 | // ЗначениеУстановки - булево - По умолчанию Истина 194 | Процедура ПолнаяОтправка(Знач ЗначениеУстановки = Истина) Экспорт 195 | 196 | УстановитьПроизвольныйРежим("--all", ЗначениеУстановки); 197 | 198 | КонецПроцедуры 199 | 200 | // Процедура устанавливает режим перезаписи истории при выполнении команды в настройки отправки 201 | // git push --force 202 | // Параметры 203 | // ЗначениеУстановки - булево - По умолчанию Истина 204 | Процедура ПерезаписатьИсторию(Знач ЗначениеУстановки = Истина) Экспорт 205 | 206 | УстановитьПроизвольныйРежим("--force", ЗначениеУстановки); 207 | 208 | КонецПроцедуры 209 | 210 | // Процедура устанавливает необходимость отслеживать отправленные заголовки при выполнении команды в настройки отправки 211 | // git push --set-upstream 212 | // Параметры 213 | // ЗначениеУстановки - булево - По умолчанию Истина 214 | Процедура Отслеживать(Знач ЗначениеУстановки = Истина) Экспорт 215 | 216 | УстановитьПроизвольныйРежим("--set-upstream", ЗначениеУстановки); 217 | 218 | КонецПроцедуры 219 | 220 | // Процедура устанавливает режим программной обработки результатов при выполнении команды в настройки отправки 221 | // git push --porcelain 222 | // Параметры 223 | // ЗначениеУстановки - булево - По умолчанию Истина 224 | Процедура РежимПрограммнойОбработкаРезультата(Знач ЗначениеУстановки = Истина) Экспорт 225 | 226 | УстановитьПроизвольныйРежим("--porcelain", ЗначениеУстановки); 227 | 228 | КонецПроцедуры 229 | 230 | // Процедура устанавливает режим отправки тегов при выполнении команды в настройки отправки 231 | // git push --tags 232 | // Параметры 233 | // ЗначениеУстановки - булево - По умолчанию Истина 234 | Процедура ОтправкаТегов(Знач ЗначениеУстановки = Истина) Экспорт 235 | 236 | УстановитьПроизвольныйРежим("--tags", ЗначениеУстановки); 237 | 238 | КонецПроцедуры 239 | 240 | // Процедура устанавливает произвольную настройку при выполнении команды в настройки отправки 241 | // 242 | // Параметры 243 | // НаименованиеПараметра - строка - Наименование параметра настройки 244 | // ЗначениеУстановки - булево - По умолчанию Истина 245 | Процедура УстановитьПроизвольныйРежим(Знач НаименованиеПараметра, Знач ЗначениеУстановки = Истина) Экспорт 246 | 247 | ПараметрыКомандыОтправки.Вставить(НаименованиеПараметра, ЗначениеУстановки); 248 | 249 | КонецПроцедуры 250 | 251 | Процедура ЗаполнитьНастройкиПоУмолчанию() 252 | 253 | ПараметрыКомандыОтправки = Новый Соответствие; 254 | Отключить = Ложь; 255 | 256 | РежимПрограммнойОбработкаРезультата(); 257 | РежимУдаления(Отключить); 258 | РежимЗеркала(Отключить); 259 | РежимТишины(Отключить); 260 | 261 | Отслеживать(Отключить); 262 | ОтправкаТегов(Отключить); 263 | ПерезаписатьИсторию(Отключить); 264 | ПолнаяОтправка(Отключить); 265 | ОтображатьПрогресс(Отключить); 266 | 267 | URLРепозитория = ""; 268 | ЗаголовкиОтправки = Новый Массив; 269 | 270 | ОтправкаRefspec = Ложь; 271 | 272 | КонецПроцедуры 273 | 274 | Процедура ПроверитьЗаголовкиНаRefspec(Знач ЗаголовокОтправки) 275 | 276 | Если ОтправкаRefspec Тогда 277 | Возврат; 278 | КонецЕсли; 279 | 280 | Если СтрНайти("refs/", ЗаголовокОтправки) > 0 Тогда 281 | 282 | ОтправкаRefspec = Истина; 283 | 284 | КонецЕсли; 285 | 286 | КонецПроцедуры 287 | 288 | Процедура УстановитьПараметрКоманды(МассивПараметров, Знач КлючПараметра, Знач ЗначениеПараметра) 289 | 290 | Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда 291 | Если Не ЗначениеПараметра Тогда 292 | Возврат; 293 | КонецЕсли; 294 | МассивПараметров.Добавить(КлючПараметра); 295 | Иначе 296 | МассивПараметров.Добавить(КлючПараметра); 297 | МассивПараметров.Добавить(ЗначениеПараметра); 298 | КонецЕсли; 299 | 300 | КонецПроцедуры 301 | 302 | Процедура УдалитьВзаимоисключающиеПараметры(МассивПараметров) 303 | 304 | МассивПроверки = МассивВзаимоисключающихПараметров(); 305 | 306 | ЭлементПроверки = Неопределено; 307 | 308 | Для каждого Параметр Из МассивПараметров Цикл 309 | 310 | ИндексЭлементаПроверки = МассивПроверки.Найти(Параметр); 311 | 312 | Если НЕ ИндексЭлементаПроверки = Неопределено Тогда 313 | ЭлементПроверки = МассивПроверки.Получить(ИндексЭлементаПроверки); 314 | Прервать; 315 | КонецЕсли; 316 | 317 | КонецЦикла; 318 | 319 | Если НЕ ЭлементПроверки = Неопределено Тогда 320 | 321 | Для каждого ПараметрДляУдаления Из МассивПроверки Цикл 322 | 323 | Если ЭлементПроверки = ПараметрДляУдаления Тогда 324 | Продолжить; 325 | КонецЕсли; 326 | 327 | ИндексЭлементаУдаления = МассивПараметров.Найти(ПараметрДляУдаления); 328 | 329 | Если НЕ ИндексЭлементаУдаления = Неопределено Тогда 330 | МассивПараметров.Удалить(ИндексЭлементаУдаления); 331 | КонецЕсли; 332 | 333 | Если Не ПараметрСовместимСRefspec(ПараметрДляУдаления) Тогда 334 | 335 | ИндексЭлементаУдаления = МассивПараметров.Найти(ПараметрДляУдаления); 336 | 337 | Если НЕ ИндексЭлементаУдаления = Неопределено Тогда 338 | МассивПараметров.Удалить(ИндексЭлементаУдаления); 339 | КонецЕсли; 340 | 341 | КонецЕсли; 342 | КонецЦикла; 343 | 344 | КонецЕслИ; 345 | 346 | КонецПроцедуры 347 | 348 | Функция ПараметрСовместимСRefspec(Знач КлючПараметра) 349 | 350 | Если Не ОтправкаRefspec Тогда 351 | Возврат Истина; 352 | КонецЕсли; 353 | 354 | МассивПроверки = МассивНесовместимыхПараметровСRefspec(); 355 | Если ЗначениеЗаполнено(МассивПроверки.Найти(КлючПараметра)) Тогда 356 | Возврат Ложь; 357 | КонецЕслИ; 358 | 359 | КонецФункции // ПроверитьСовместимостьПараметра() 360 | 361 | Функция МассивНесовместимыхПараметровСRefspec() 362 | 363 | ФиксированныйМассив = Новый Массив; 364 | ФиксированныйМассив.Добавить("--all"); 365 | ФиксированныйМассив.Добавить("--mirror"); 366 | ФиксированныйМассив.Добавить("--tags"); 367 | 368 | Возврат ФиксированныйМассив; 369 | 370 | КонецФункции 371 | 372 | Функция МассивВзаимоисключающихПараметров() 373 | 374 | ФиксированныйМассив = Новый Массив; 375 | ФиксированныйМассив.Добавить("--all"); 376 | ФиксированныйМассив.Добавить("--mirror"); 377 | ФиксированныйМассив.Добавить("--tags"); 378 | ФиксированныйМассив.Добавить("--delete"); 379 | 380 | Возврат ФиксированныйМассив; 381 | 382 | КонецФункции 383 | 384 | Процедура Инициализация() 385 | 386 | ЗаполнитьНастройкиПоУмолчанию(); 387 | 388 | КонецПроцедуры 389 | 390 | Инициализация(); 391 | 392 | 393 | -------------------------------------------------------------------------------- /src/Модули/РежимУстановкиНастроекGit.os: -------------------------------------------------------------------------------- 1 | Перем Локально Экспорт; 2 | Перем Глобально Экспорт; 3 | Перем Системно Экспорт; 4 | 5 | Локально = "--local"; 6 | Глобально = "--global"; 7 | Системно = "--system"; 8 | -------------------------------------------------------------------------------- /tasks/coverage.os: -------------------------------------------------------------------------------- 1 | #Использовать 1commands 2 | #Использовать asserts 3 | #Использовать fs 4 | #Использовать json 5 | 6 | СистемнаяИнформация = Новый СистемнаяИнформация; 7 | ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; 8 | 9 | ФС.ОбеспечитьПустойКаталог("coverage"); 10 | ПутьКСтат = "coverage/stat.json"; 11 | 12 | Команда = Новый Команда; 13 | Команда.УстановитьКоманду("oscript"); 14 | Если НЕ ЭтоWindows Тогда 15 | Команда.ДобавитьПараметр("-encoding=utf-8"); 16 | КонецЕсли; 17 | Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); 18 | Команда.ДобавитьПараметр("tasks/test.os"); 19 | Команда.ПоказыватьВыводНемедленно(Истина); 20 | 21 | КодВозврата = Команда.Исполнить(); 22 | Сообщить(Команда.ПолучитьВывод()); 23 | Ожидаем.Что(КодВозврата).Равно(0); 24 | 25 | Файл_Стат = Новый Файл(ПутьКСтат); 26 | Ожидаем.Что(Файл_Стат.Существует(), СтрШаблон("Файл <%1> с результатами покрытия не существует!", Файл_Стат.ПолноеИмя)).ЭтоИстина(); 27 | 28 | ЧтениеТекста = Новый ЧтениеТекста(ПутьКСтат, КодировкаТекста.UTF8); 29 | 30 | СтрокаJSON = ЧтениеТекста.Прочитать(); 31 | ЧтениеТекста.Закрыть(); 32 | 33 | Парсер = Новый ПарсерJSON(); 34 | ДанныеПокрытия = Парсер.ПрочитатьJSON(СтрокаJSON); 35 | 36 | ЗаписьXML = Новый ЗаписьXML; 37 | ЗаписьXML.ОткрытьФайл("coverage/genericCoverage.xml"); 38 | ЗаписьXML.ЗаписатьОбъявлениеXML(); 39 | ЗаписьXML.ЗаписатьНачалоЭлемента("coverage"); 40 | ЗаписьXML.ЗаписатьАтрибут("version", "1"); 41 | 42 | Для Каждого Файл Из ДанныеПокрытия Цикл 43 | 44 | ДанныеФайла = Файл.Значение; 45 | 46 | ЗаписьXML.ЗаписатьНачалоЭлемента("file"); 47 | ЗаписьXML.ЗаписатьАтрибут("path", ДанныеФайла.Получить("#path")); 48 | 49 | Для Каждого КлючИЗначение Из ДанныеФайла Цикл 50 | 51 | Если КлючИЗначение.Ключ = "#path" Тогда 52 | Продолжить; 53 | КонецЕсли; 54 | 55 | ДанныеПроцедуры = КлючИЗначение.Значение; 56 | Для Каждого ДанныеСтроки Из ДанныеПроцедуры Цикл 57 | 58 | ЗаписьXML.ЗаписатьНачалоЭлемента("lineToCover"); 59 | 60 | ЗаписьXML.ЗаписатьАтрибут("lineNumber", ДанныеСтроки.Ключ); 61 | Покрыто = Число(ДанныеСтроки.Значение.Получить("count")) > 0; 62 | ЗаписьXML.ЗаписатьАтрибут("covered", Формат(Покрыто, "БИ=true; БЛ=false")); 63 | 64 | ЗаписьXML.ЗаписатьКонецЭлемента(); // lineToCover 65 | КонецЦикла 66 | КонецЦикла; 67 | 68 | ЗаписьXML.ЗаписатьКонецЭлемента(); // file 69 | 70 | КонецЦикла; 71 | 72 | ЗаписьXML.ЗаписатьКонецЭлемента(); // coverage 73 | ЗаписьXML.Закрыть(); 74 | -------------------------------------------------------------------------------- /tasks/oscript.cfg: -------------------------------------------------------------------------------- 1 | lib.additional=../oscript_modules 2 | -------------------------------------------------------------------------------- /tasks/test.os: -------------------------------------------------------------------------------- 1 | #Использовать 1bdd 2 | 3 | КаталогФич = ОбъединитьПути(".", "features"); 4 | 5 | Файл_КаталогФич = Новый Файл(КаталогФич); 6 | 7 | ИсполнительБДД = Новый ИсполнительБДД; 8 | РезультатВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич); 9 | ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатВыполнения); 10 | 11 | ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit; 12 | ГенераторОтчетаJUnit.Сформировать(РезультатВыполнения, ИтоговыйРезультатВыполнения, "junit-bdd.xml"); 13 | 14 | Сообщить(ИтоговыйРезультатВыполнения); 15 | Если ИтоговыйРезультатВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался Тогда 16 | ВызватьИсключение 1; 17 | КонецЕсли; 18 | -------------------------------------------------------------------------------- /travis.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | oscript /usr/share/oscript/lib/opm/src/opm.os run coverage 5 | 6 | # temp=`cat packagedef | grep ".Версия(" | sed 's|[^"]*"||' | sed -r 's/".+//'` 7 | # version=${temp##*|} 8 | 9 | # if [ "$TRAVIS_SECURE_ENV_VARS" == "true" ]; then 10 | # if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then 11 | # sonar-scanner \ 12 | # -Dsonar.host.url=http://sonar.silverbulleters.org \ 13 | # -Dsonar.analysis.mode=issues \ 14 | # -Dsonar.github.pullRequest=$TRAVIS_PULL_REQUEST \ 15 | # -Dsonar.github.repository=$TRAVIS_REPO_SLUG \ 16 | # -Dsonar.github.oauth=$SONAR_GITHUB_TOKEN \ 17 | # -Dsonar.login=$SONAR_TOKEN \ 18 | # -Dsonar.scanner.skip=false \ 19 | # -Dsonar.branch.name= 20 | 21 | # elif [ "$TRAVIS_BRANCH" == "develop" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then 22 | # sonar-scanner \ 23 | # -Dsonar.host.url=http://sonar.silverbulleters.org \ 24 | # -Dsonar.login=$SONAR_TOKEN \ 25 | # -Dsonar.projectVersion=$version\ 26 | # -Dsonar.scanner.skip=false \ 27 | # -Dsonar.branch.name= 28 | # fi 29 | # fi 30 | --------------------------------------------------------------------------------