├── .gitattributes ├── logo ├── logo.png ├── vertical.png └── horizontal.png ├── sonarlint.json ├── .gitignore ├── .vscode ├── settings.json └── tasks.json ├── src ├── Модули │ └── РежимУстановкиНастроекGit.os ├── Классы │ ├── НастройкаКомандыКлонировать.os │ ├── ДанныеСтатуса.os │ ├── КомандаГитРепозитория.os │ └── НастройкаКомандыОтправить.os └── ГитРепозиторий.os ├── NOTICE ├── packagedef ├── lib.config ├── features ├── ИнициализацияРепозитория.feature ├── РаботаСПодмодулями.feature ├── ПолучениеСостояния.feature ├── РаботаСоСвойствами.feature ├── ПолучениеИстории.feature ├── КлонированиеРепозитория.feature ├── ПолучениеИзменений.feature ├── ВыполнениеПроизвольнойКоманды.feature ├── ПроверкаРепозитория.feature ├── step_definitions │ ├── ПолучениеИстории.os │ ├── ИзвлечениеИзменений.os │ ├── ПолучениеИзменений.os │ ├── ПолучениеСостояния.os │ ├── ПроверкаРепозитория.os │ ├── ДобавлениеФайлаВИндекс.os │ ├── ФиксацияИзменений.os │ ├── КлонированиеРепозитория.os │ ├── ИнициализацияРепозитория.os │ ├── РаботаСПодмодулями.os │ ├── РаботаСНастройкамиGit.os │ ├── ВыполнениеПроизвольнойКоманды.os │ ├── РаботаСВетками.os │ ├── РаботаСоСвойствами.os │ ├── РаботаСВнешнимиРепозиториями.os │ ├── ПолучениеТаблицыСтатусов.os │ └── ОтправкаИзменений.os ├── РаботаСНастройкамиGit.feature ├── ДобавлениеФайлаВИндекс.feature ├── ИзвлечениеИзменений.feature ├── РаботаСВнешнимиРепозиториями.feature ├── РаботаСВетками.feature ├── ФиксацияИзменений.feature ├── ПолучениеТаблицыСтатусов.feature └── ОтправкаИзменений.feature ├── sonar-project.properties ├── tasks ├── test.os └── coverage.os ├── .travis.yml ├── travis.sh ├── LICENSE.md ├── CHANGELOG.md └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | LICENSE merge=ours 2 | *.feature text eol=lf 3 | *.os text eol=lf 4 | -------------------------------------------------------------------------------- /logo/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitrunner/HEAD/logo/logo.png -------------------------------------------------------------------------------- /logo/vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitrunner/HEAD/logo/vertical.png -------------------------------------------------------------------------------- /sonarlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "serverId": "silverbulleters", 3 | "projectKey": "gitrunner" 4 | } -------------------------------------------------------------------------------- /logo/horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oscript-library/gitrunner/HEAD/logo/horizontal.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .sonar 2 | .sonarlint 3 | coverage 4 | exec.log 5 | sonarlint.json 6 | 7 | junit-bdd\.xml 8 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Поместите параметры в этот файл, чтобы перезаписать параметры по умолчанию и пользовательские параметры. 2 | { 3 | "language-1c-bsl.linterEntryPoint": "src/ГитРепозиторий.os" 4 | } -------------------------------------------------------------------------------- /src/Модули/РежимУстановкиНастроекGit.os: -------------------------------------------------------------------------------- 1 | Перем Локально Экспорт; 2 | Перем Глобально Экспорт; 3 | Перем Системно Экспорт; 4 | 5 | Локально = "--local"; 6 | Глобально = "--global"; 7 | Системно = "--system"; 8 | -------------------------------------------------------------------------------- /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. -------------------------------------------------------------------------------- /packagedef: -------------------------------------------------------------------------------- 1 | Описание.Имя("gitrunner") 2 | .Версия("1.7.0") 3 | .ЗависитОт("1bdd") 4 | .ВерсияСреды("1.0.17") 5 | .ЗависитОт("1commands", "1.3.1") 6 | .ЗависитОт("asserts", "0.4.0") 7 | .ЗависитОт("fs", "0.4.1") 8 | .ЗависитОт("json", "1.0.1") 9 | .ЗависитОт("logos", "1.0.0") 10 | .Задачи("tasks") 11 | .ВключитьФайл("src") 12 | .ВключитьФайл("features") 13 | .ВключитьФайл("lib.config") 14 | .ВключитьФайл("README.md") 15 | .ВключитьФайл("LICENSE.md") 16 | .ВключитьФайл("NOTICE"); 17 | -------------------------------------------------------------------------------- /lib.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /features/ИнициализацияРепозитория.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функциональность: Инициализация репозитория 4 | 5 | Как разработчик 6 | Я хочу иметь возможность инициализировать репозиторий git 7 | Чтобы мочь автоматизировать больше рутинных действий на OneScript 8 | 9 | Контекст: 10 | Допустим Я создаю новый объект ГитРепозиторий 11 | 12 | Сценарий: Инициализация репозитория 13 | Допустим Я создаю временный каталог и сохраняю его в контекст 14 | Когда Я инициализирую репозиторий во временном каталоге 15 | Тогда Во временном каталоге существует репозиторий git -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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" с веткой "develop" 16 | И Я обновляю подмодули 17 | И Я получаю состояние подмодулей 18 | Тогда Список подмодулей содержит подмодуль "gitrunner" c указателем "heads/develop" 19 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /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 | Тогда Вывод команды содержит "Добавлен тестовый файл" 20 | -------------------------------------------------------------------------------- /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 | И Я инициализирую репозиторий во временном каталоге 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 | Когда Я выполняю произвольную команду 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 | Как разработчик Я хочу иметь возможность проверить, что рабочий каталог является git-репозиторием 6 | Чтобы не писать такую проверку для каждого скрипта 7 | 8 | Сценарий: Проверка каталога с репозиторием 9 | Когда Я создаю новый объект ГитРепозиторий 10 | И Я создаю временный каталог и сохраняю его в контекст 11 | И Я инициализирую репозиторий во временном каталоге 12 | И Я проверяю существование репозитория во временном каталоге и результат сохраняю в контекст 13 | Тогда Результат равен "Истина" 14 | 15 | Сценарий: Проверка каталога без репозитория 16 | Когда Я создаю новый объект ГитРепозиторий 17 | И Я создаю временный каталог и сохраняю его в контекст 18 | И Я проверяю существование репозитория во временном каталоге и результат сохраняю в контекст 19 | Тогда Результат равен "Ложь" 20 | -------------------------------------------------------------------------------- /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 | Перем БДД; //контекст фреймворка 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/РаботаСНастройками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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/ДобавлениеФайлаВИндекс.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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | #Использовать 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/РаботаСВнешнимиРепозиториями.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/РаботаСВетками.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/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/ФиксацияИзменений.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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | #Использовать 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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | ВсеШаги.Добавить("СписокПодмодулейСодержитПодмодульCУказателем"); 17 | 18 | Возврат ВсеШаги; 19 | КонецФункции 20 | 21 | // Реализация шагов 22 | 23 | // Процедура выполняется перед запуском каждого сценария 24 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 25 | 26 | КонецПроцедуры 27 | 28 | // Процедура выполняется после завершения каждого сценария 29 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 30 | 31 | КонецПроцедуры 32 | 33 | //Я обновляю подмодули 34 | Процедура ЯОбновляюПодмодули() Экспорт 35 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 36 | ГитРепозиторий.ОбновитьПодмодули(); 37 | КонецПроцедуры 38 | 39 | //Я добавляю подмодуль "https://github.com/nixel2007/gitrunner" с веткой "develop" 40 | Процедура ЯДобавляюПодмодульСВеткой(Знач АдресВнешнегоРепозитория, Знач ИмяВетки) Экспорт 41 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 42 | ГитРепозиторий.ДобавитьПодмодуль(АдресВнешнегоРепозитория, , ИмяВетки) 43 | КонецПроцедуры 44 | 45 | //Список подмодулей содержит подмодуль "gitrunner" c указателем "develop" 46 | Процедура СписокПодмодулейСодержитПодмодульCУказателем(Знач ИмяПодмодуля, Знач Указатель) Экспорт 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 | -------------------------------------------------------------------------------- /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/ПолучениеТаблицыСтатусов.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/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 | 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 | // Реализация шагов 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/ОтправкаИзменений.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/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 | ВсеШаги.Добавить("ВыводКомандыНеСодержит"); 18 | ВсеШаги.Добавить("ЯСохраняюЗначениеВременногоКаталогаВПеременной"); 19 | ВсеШаги.Добавить("ЯДобавляюВнешнийРепозиторийПоСохраненномуАдресуВнешнегоРепозитория"); 20 | 21 | Возврат ВсеШаги; 22 | КонецФункции 23 | 24 | // Реализация шагов 25 | 26 | // Процедура выполняется перед запуском каждого сценария 27 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 28 | 29 | КонецПроцедуры 30 | 31 | // Процедура выполняется после завершения каждого сценария 32 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 33 | 34 | КонецПроцедуры 35 | 36 | //Я удаляю внешний репозиторий "test" 37 | Процедура ЯУдаляюВнешнийРепозиторий(Знач ИмяРепозитория) Экспорт 38 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 39 | ГитРепозиторий.УдалитьВнешнийРепозиторий(ИмяРепозитория); 40 | КонецПроцедуры 41 | 42 | //Вывод команды не содержит "test" 43 | Процедура ВыводКомандыНеСодержит(Знач ОжидаемыйВыводКоманды) Экспорт 44 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 45 | 46 | ВыводКоманды = ГитРепозиторий.ПолучитьВыводКоманды(); 47 | Ожидаем.Что(ВыводКоманды).Не_().Содержит(ОжидаемыйВыводКоманды); 48 | КонецПроцедуры 49 | 50 | //Я добавляю внешний репозиторий "test" по адресу "http://fake.com" 51 | Процедура ЯДобавляюВнешнийРепозиторийПоАдресу(Знач ИмяРепозитория,Знач АдресРепозитория) Экспорт 52 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 53 | ГитРепозиторий.ДобавитьВнешнийРепозиторий(ИмяРепозитория, АдресРепозитория); 54 | КонецПроцедуры 55 | 56 | //Я получаю список внешних репозиториев 57 | Процедура ЯПолучаюСписокВнешнихРепозиториев() Экспорт 58 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 59 | СписокВнешнихРепозиториев = ГитРепозиторий.ПолучитьСписокВнешнихРепозиториев(); 60 | 61 | БДД.СохранитьВКонтекст("СписокВнешнихРепозиториев", СписокВнешнихРепозиториев); 62 | КонецПроцедуры 63 | 64 | //Список внешних репозиториев содержит "test1" с адресом "http://fake1.com" 65 | Процедура СписокВнешнихРепозиториевСодержитСАдресом(Знач ИмяРепозитория, Знач АдресРепозитория) Экспорт 66 | СписокВнешнихРепозиториев = БДД.ПолучитьИзКонтекста("СписокВнешнихРепозиториев"); 67 | 68 | Нашли = Ложь; 69 | СтрокаРепозиторий = Неопределено; 70 | Для Каждого ВнешнийРепозиторий Из СписокВнешнихРепозиториев Цикл 71 | 72 | Если НЕ СтрСравнить(ВнешнийРепозиторий.Имя, ИмяРепозитория) = 0 Тогда 73 | Продолжить; 74 | КонецЕсли; 75 | 76 | Нашли = Истина; 77 | Ожидаем.Что(ВнешнийРепозиторий.Адрес, "Репозиторий содержит неверный адрес").Равно(АдресРепозитория); 78 | 79 | КонецЦикла; 80 | 81 | Ожидаем.Что(Нашли, "Список внешних репозиториев не содержит репозитория " + ИмяРепозитория).ЭтоИстина(); 82 | 83 | КонецПроцедуры 84 | 85 | //Я сохраняю значение временного каталога в переменной "ВнешийРепозиторий" 86 | Процедура ЯСохраняюЗначениеВременногоКаталогаВПеременной(Знач ИмяПеременной) Экспорт 87 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ВременныйКаталог"); 88 | БДД.СохранитьВКонтекст(ИмяПеременной, ВременныйКаталог); 89 | КонецПроцедуры 90 | 91 | //Я добавляю внешний репозиторий "origin" по сохраненному адресу внешнего репозитория 92 | Процедура ЯДобавляюВнешнийРепозиторийПоСохраненномуАдресуВнешнегоРепозитория(Знач ИмяРепозитория) Экспорт 93 | АдресРепозитория = БДД.ПолучитьИЗКонтекста("ВнешийРепозиторий"); 94 | ЯДобавляюВнешнийРепозиторийПоАдресу(ИмяРепозитория, АдресРепозитория); 95 | КонецПроцедуры 96 | 97 | 98 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | 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 | Инициализация(); -------------------------------------------------------------------------------- /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 | //Я сообщаю вывод команды 48 | Процедура ЯСообщаюВыводКоманды() Экспорт 49 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 50 | 51 | ВыводКоманды = ГитРепозиторий.ПолучитьВыводКоманды(); 52 | Сообщить(СокрЛП(ВыводКоманды)); 53 | 54 | КонецПроцедуры 55 | 56 | //Я инициализирую bare репозиторий во временном каталоге 57 | Процедура ЯИнициализируюBareРепозиторийВоВременномКаталоге() Экспорт 58 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 59 | ВременныйКаталог = БДД.ПолучитьИзКонтекста("ВременныйКаталог"); 60 | ГитРепозиторий.УстановитьРабочийКаталог(ВременныйКаталог); 61 | ПараметрыКоманды = Новый Массив; 62 | ПараметрыКоманды.Добавить("init"); 63 | ПараметрыКоманды.Добавить("--bare"); 64 | ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); 65 | КонецПроцедуры 66 | 67 | //Я отправляю изменения во внешний репозиторий "origin" в ветку "test" 68 | Процедура ЯОтправляюИзмененияВоВнешнийРепозиторийВВетку(Знач ИмяВнешнегоРепозитория,Знач ИмяВетки) Экспорт 69 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 70 | ГитРепозиторий.Отправить(ИмяВнешнегоРепозитория, ИмяВетки); 71 | КонецПроцедуры 72 | //Я создаю новый объект НастройкаКомандыОтправить 73 | Процедура ЯСоздаюНовыйОбъектНастройкаКомандыОтправить() Экспорт 74 | НастройкаКоманды = Новый НастройкаКомандыОтправить; 75 | БДД.СохранитьВКонтекст("НастройкаКоманды", НастройкаКоманды); 76 | КонецПроцедуры 77 | 78 | //Я устанавливаю настройку отправки режима тишины 79 | Процедура ЯУстанавливаюНастройкуОтправкиРежимаТишины() Экспорт 80 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 81 | НастройкаКоманды.РежимТишины(); 82 | КонецПроцедуры 83 | 84 | //Я устанавливаю настройку отправки полная отправка 85 | Процедура ЯУстанавливаюНастройкуОтправкиПолнаяОтправка() Экспорт 86 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 87 | НастройкаКоманды.ПолнаяОтправка(); 88 | КонецПроцедуры 89 | 90 | //Я устанавливаю настройку отправки отображение прогресса в значение "true" 91 | Процедура ЯУстанавливаюНастройкуОтправкиОтображениеПрогресса() Экспорт 92 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 93 | НастройкаКоманды.ОтображатьПрогресс(); 94 | КонецПроцедуры 95 | 96 | //Я отправляю изменения 97 | Процедура ЯОтправляюИзменения() Экспорт 98 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 99 | ГитРепозиторий.Отправить(); 100 | КонецПроцедуры 101 | 102 | //Я устанавливаю настройку режима отправки 103 | Процедура ЯУстанавливаюНастройкуРежимаОтправки() Экспорт 104 | ГитРепозиторий = БДД.ПолучитьИзКонтекста("ГитРепозиторий"); 105 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 106 | ГитРепозиторий.УстановитьНастройкуКомандыОтправить(НастройкаКоманды); 107 | КонецПроцедуры 108 | 109 | //Я устанавливаю репозиторий отправки "origin" 110 | Процедура ЯУстанавливаюРепозиторийОтправки(Знач URLРепозитория) Экспорт 111 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 112 | НастройкаКоманды.УстановитьURLРепозиторияОтправки(URLРепозитория); 113 | КонецПроцедуры 114 | 115 | //Я устанавливаю настройку отправки произвольный заголовок "push origin :test" 116 | Процедура ЯУстанавливаюНастройкуОтправкиПроизвольныйЗаголовок(Знач ПроизвольныйЗаголовок) Экспорт 117 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 118 | НастройкаКоманды.ДобавитьПроизвольныйЗаголовокОтправки(ПроизвольныйЗаголовок); 119 | КонецПроцедуры 120 | //Я добавляю заголовок отправки из "refs/heads/test" в "refs/heads/my/test" 121 | Процедура ЯДобавляюЗаголовокОтправкиИзВ(Знач ЗаголовокРабочейКопии, Знач ЗаголовокУдаленногоСервера) Экспорт 122 | НастройкаКоманды = БДД.ПолучитьИзКонтекста("НастройкаКоманды"); 123 | НастройкаКоманды.ДобавитьЗаголовкиОтправки(ЗаголовокРабочейКопии, ЗаголовокУдаленногоСервера); 124 | КонецПроцедуры 125 | 126 | 127 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.1.0", 3 | "command": "oscript", 4 | "isShellCommand": true, 5 | "showOutput": "silent", 6 | "args": [ 7 | "-encoding=utf-8" 8 | ], 9 | "tasks": [ 10 | { 11 | "taskName": "Exec all features", 12 | "args": [ 13 | "|", 14 | "1bdd", 15 | "${workspaceRoot}/features", 16 | "-fail-fast", 17 | "-out", 18 | "${workspaceRoot}/exec.log" 19 | ], 20 | "echoCommand": true, 21 | "showOutput": "always", 22 | "suppressTaskName": true, 23 | "isBuildCommand": true, 24 | "isTestCommand": false, 25 | "problemMatcher": { 26 | "fileLocation": "absolute", 27 | "pattern": { 28 | "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", 29 | "file": 1, 30 | "location": 2, 31 | "message": 3 32 | } 33 | } 34 | }, 35 | { 36 | "taskName": "Exec feature", 37 | "args": [ 38 | "|", 39 | "1bdd", 40 | "${file}", 41 | "-fail-fast", 42 | "-out", 43 | "${workspaceRoot}/exec.log" 44 | ], 45 | "echoCommand": true, 46 | "showOutput": "always", 47 | "suppressTaskName": true, 48 | "isTestCommand": true, 49 | "problemMatcher": { 50 | "fileLocation": "absolute", 51 | "pattern": [ 52 | { 53 | "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", 54 | "file": 1, 55 | "location": 2, 56 | "message": 3 57 | } 58 | ] 59 | } 60 | }, 61 | { 62 | "taskName": "Exec feature + debug", 63 | "args": [ 64 | "|", 65 | "1bdd", 66 | "${file}", 67 | "-fail-fast", 68 | "-verbose", 69 | "on", 70 | "-out", 71 | "${workspaceRoot}/exec.log" 72 | ], 73 | "echoCommand": true, 74 | "showOutput": "always", 75 | "suppressTaskName": true, 76 | "isTestCommand": false, 77 | "problemMatcher": { 78 | "fileLocation": "absolute", 79 | "pattern": { 80 | "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", 81 | "file": 1, 82 | "location": 2, 83 | "message": 3 84 | } 85 | } 86 | }, 87 | { 88 | "taskName": "Generate feature steps", 89 | "args": [ 90 | "|", 91 | "1bdd", 92 | "gen", 93 | "${file}", 94 | // "-verbose", 95 | // "on", 96 | "-out", 97 | "${workspaceRoot}/exec.log" 98 | ], 99 | "echoCommand": true, 100 | "showOutput": "always", 101 | "suppressTaskName": true, 102 | "isTestCommand": false, 103 | "problemMatcher": { 104 | "fileLocation": "absolute", 105 | "pattern": { 106 | "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", 107 | "file": 1, 108 | "location": 2, 109 | "message": 3 110 | } 111 | } 112 | }, 113 | { 114 | "taskName": "Generate feature steps + debug", 115 | "args": [ 116 | "|", 117 | "1bdd", 118 | "gen", 119 | "${file}", 120 | "-verbose", 121 | "on", 122 | "-out", 123 | "${workspaceRoot}/gen.log" 124 | ], 125 | "echoCommand": true, 126 | "showOutput": "always", 127 | "suppressTaskName": true, 128 | "isTestCommand": false, 129 | "problemMatcher": { 130 | "fileLocation": "absolute", 131 | "pattern": { 132 | "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", 133 | "file": 1, 134 | "location": 2, 135 | "message": 3 136 | } 137 | } 138 | }, 139 | { 140 | "taskName": "OneScript: compile", 141 | "args": [ 142 | "-compile", 143 | "${file}" 144 | ], 145 | "echoCommand": true, 146 | "showOutput": "always", 147 | "suppressTaskName": true, 148 | "isBuildCommand": false 149 | }, 150 | { 151 | "taskName": "OneScript: check", 152 | "args": [ 153 | "-check", 154 | "${file}" 155 | ], 156 | "echoCommand": true, 157 | "showOutput": "always", 158 | "suppressTaskName": true, 159 | "isBuildCommand": false 160 | }, 161 | { 162 | "taskName": "OneScript: make", 163 | "args": [ 164 | "-make", 165 | "${file}", 166 | "${fileBasename}.exe" 167 | ], 168 | "echoCommand": true, 169 | "showOutput": "always", 170 | "suppressTaskName": true, 171 | "isBuildCommand": false 172 | }, 173 | { 174 | "taskName": "OneScript: run", 175 | "args": [ 176 | "${file}" 177 | ], 178 | "echoCommand": true, 179 | "showOutput": "always", 180 | "suppressTaskName": true, 181 | "isBuildCommand": true, 182 | "problemMatcher": { 183 | "fileLocation": "absolute", 184 | "pattern": { 185 | "regexp": "^{Модуль\\s+(.*)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+(.*)}$", 186 | "file": 1, 187 | "location": 2, 188 | "message": 3 189 | } 190 | } 191 | } 192 | ] 193 | } -------------------------------------------------------------------------------- /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 | Перем Отправка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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | ПараметрыЗапуска = Новый Массив; 108 | ПараметрыЗапуска.Добавить("commit"); 109 | ПараметрыЗапуска.Добавить("--allow-empty"); 110 | 111 | Если ПроиндексироватьОтслеживаемыеФайлы Тогда 112 | ПараметрыЗапуска.Добавить("-a"); 113 | КонецЕсли; 114 | 115 | Если Не ПустаяСтрока(ПутьКФайлуКоммита) Тогда 116 | ПараметрыЗапуска.Добавить("-F"); 117 | ПараметрыЗапуска.Добавить(ОбернутьВКавычки(ПутьКФайлуКоммита)); 118 | ИначеЕсли СтрНайти(ТекстСообщения, Символы.ПС) Тогда // для многострочных комментариев стоит использовать файл 119 | ИмяВременногоФайлаКомментария = ПолучитьИмяВременногоФайла(); 120 | ТекстовыйДокумент = Новый ТекстовыйДокумент; 121 | ТекстовыйДокумент.УстановитьТекст(ТекстСообщения); 122 | ТекстовыйДокумент.Записать(ИмяВременногоФайлаКомментария, "utf-8"); 123 | 124 | ПараметрыЗапуска.Добавить("-F"); 125 | ПараметрыЗапуска.Добавить(ОбернутьВКавычки(ИмяВременногоФайлаКомментария)); 126 | 127 | НадоУдалитьВременныйФайлКомментария = Истина; 128 | Иначе 129 | ПараметрыЗапуска.Добавить("-m"); 130 | ПараметрыЗапуска.Добавить(ОбернутьВКавычки(ТекстСообщения)); 131 | КонецЕсли; 132 | 133 | Если Не ПустаяСтрока(Коммитер) Тогда 134 | 135 | УстановитьКоммитера(Коммитер, НадоВосстановитьКоммитера); 136 | 137 | КонецЕсли; 138 | 139 | Если ЗначениеЗаполнено(ДатаКоммита) Тогда 140 | НадоОчиститьУстановленныеПеременные = Истина; 141 | УстановитьДатуКоммита(ДатаКоммита); 142 | КонецЕсли; 143 | 144 | Если Не ПустаяСтрока(АвторКоммита) Тогда 145 | ПараметрыЗапуска.Добавить("--author="+ ОбернутьВКавычки(АвторКоммита)); 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 | // git log 184 | // 185 | // Параметры: 186 | // Графически - Булево - Вывести историю в виде графа (--graph) 187 | // 188 | Процедура ВывестиИсторию(Графически = Ложь) Экспорт 189 | 190 | ПараметрыЗапуска = Новый Массив; 191 | ПараметрыЗапуска.Добавить("log"); 192 | 193 | Если Графически Тогда 194 | ПараметрыЗапуска.Добавить("--graph"); 195 | КонецЕсли; 196 | 197 | ВыполнитьКоманду(ПараметрыЗапуска); 198 | 199 | КонецПроцедуры 200 | 201 | // Получить изменения из удаленного репозитория 202 | // git pull 203 | // 204 | // Параметры: 205 | // ИмяРепозитория - Строка - Имя репозитория, из которого необходимо 206 | // получить изменения 207 | // ИмяВетки - Строка - Имя ветки, из которой необходимо получить изменения 208 | // 209 | Процедура Получить(Знач ИмяРепозитория = "", Знач ИмяВетки = "") Экспорт 210 | 211 | ПараметрыЗапуска = Новый Массив; 212 | ПараметрыЗапуска.Добавить("pull"); 213 | 214 | Если ЗначениеЗаполнено(ИмяРепозитория) Тогда 215 | ПараметрыЗапуска.Добавить(ИмяРепозитория); 216 | КонецЕсли; 217 | 218 | Если ЗначениеЗаполнено(ИмяВетки) Тогда 219 | ПараметрыЗапуска.Добавить(ИмяВетки); 220 | КонецЕсли; 221 | 222 | ВыполнитьКоманду(ПараметрыЗапуска); 223 | 224 | КонецПроцедуры 225 | 226 | // Получить изменения из удаленного репозитория без обновления ветки 227 | // git fetch 228 | // 229 | // Параметры: 230 | // ИмяРепозитория - Строка - Имя репозитория, из которого необходимо 231 | // получить изменения 232 | // 233 | Процедура Извлечь(Знач ИмяРепозитория = "") Экспорт 234 | 235 | ПараметрыЗапуска = Новый Массив; 236 | ПараметрыЗапуска.Добавить("fetch"); 237 | 238 | Если ЗначениеЗаполнено(ИмяРепозитория) Тогда 239 | ПараметрыЗапуска.Добавить(ИмяРепозитория); 240 | КонецЕсли; 241 | 242 | ВыполнитьКоманду(ПараметрыЗапуска); 243 | 244 | КонецПроцедуры 245 | 246 | // Отправить изменения в удаленный репозиторий 247 | // git push 248 | // 249 | // Параметры: 250 | // ИмяРепозитория - Строка - Имя репозитория, в который необходимо 251 | // отправить изменения 252 | // ИмяВетки - Строка - Имя ветки, в который необходимо отправить изменения 253 | // ПерезаписатьИсторию - Булево - Флаг отправки с перезаписью истории (--force) 254 | // 255 | Процедура Отправить(Знач ИмяРепозитория = "", Знач ИмяВетки = "", Знач ПерезаписатьИсторию = Ложь) Экспорт 256 | 257 | КомандаГит = Новый КомандаГитРепозитория; 258 | КомандаГит.УстановитьКоманду("push"); 259 | КомандаГит.УстановитьКонтекст(ЭтотОбъект); 260 | 261 | НастройкаКоманды = НастройкиКоманд.Получить("Отправить"); 262 | 263 | Если НастройкаКоманды = Неопределено Тогда 264 | НастройкаКоманды = Новый НастройкаКомандыОтправить; 265 | КонецЕсли; 266 | 267 | Если ПерезаписатьИсторию Тогда 268 | НастройкаКоманды.ПерезаписатьИсторию(); 269 | КонецЕсли; 270 | 271 | Если ЗначениеЗаполнено(ИмяРепозитория) Тогда 272 | НастройкаКоманды.УстановитьURLРепозиторияОтправки(ИмяРепозитория); 273 | КонецЕсли; 274 | 275 | Если ЗначениеЗаполнено(ИмяВетки) Тогда 276 | НастройкаКоманды.УстановитьЗаголовкиОтправки(ИмяВетки); 277 | КонецЕсли; 278 | 279 | КомандаГит.УстановитьНастройкуКоманды(НастройкаКоманды); 280 | КомандаГит.ВыполнитьКоманду(); 281 | 282 | КонецПроцедуры 283 | 284 | // Установить настройки отправки изменений. 285 | // Позволяет произвести тонкую настройку необходимых флагов команды отправки изменений 286 | // 287 | // Параметры: 288 | // НастройкаКомандыОтправить - НастройкаКомандыОтправить - инстанс класса НастройкаКомандыОтправить с необходимыми 289 | // настройками 290 | // 291 | Процедура УстановитьНастройкуКомандыОтправить(НастройкаКомандыОтправить) Экспорт 292 | 293 | УстановитьНастройкуКоманды("Отправить", НастройкаКомандыОтправить); 294 | 295 | КонецПроцедуры 296 | 297 | // Клонировать удаленный репозиторий 298 | // git clone 299 | // 300 | // Параметры: 301 | // ПутьУдаленномуРепозиторию - Строка - Путь к удаленному репозиторию 302 | // КаталогКлонирования - Строка - Каталог, в который необходимо выполнить 303 | // клонирование 304 | // 305 | Процедура КлонироватьРепозиторий(Знач ПутьУдаленномуРепозиторию, Знач КаталогКлонирования = "") Экспорт 306 | 307 | // TODO: Потенциально bad-design. По-хорошему это не относится к объекту 308 | // ГитРепозиторий, это что-то вроде ГитМенеджер. 309 | 310 | КомандаГит = Новый КомандаГитРепозитория; 311 | КомандаГит.УстановитьКоманду("clone"); 312 | КомандаГит.УстановитьКонтекст(ЭтотОбъект); 313 | 314 | НастройкаКоманды = НастройкиКоманд.Получить("Клонировать"); 315 | 316 | Если НастройкаКоманды = Неопределено Тогда 317 | НастройкаКоманды = Новый НастройкаКомандыКлонировать; 318 | КонецЕсли; 319 | 320 | Если ЗначениеЗаполнено(ПутьУдаленномуРепозиторию) Тогда 321 | НастройкаКоманды.УстановитьURLРепозиторияКлонирования(ПутьУдаленномуРепозиторию); 322 | КонецЕсли; 323 | 324 | Если ЗначениеЗаполнено(КаталогКлонирования) Тогда 325 | НастройкаКоманды.УстановитьКаталогКлонирования(ОбернутьВКавычки(КаталогКлонирования)); 326 | КонецЕсли; 327 | 328 | КомандаГит.УстановитьНастройкуКоманды(НастройкаКоманды); 329 | КомандаГит.ВыполнитьКоманду(); 330 | 331 | КонецПроцедуры 332 | 333 | // Установить настройки клонирования репозитория. 334 | // Позволяет произвести тонкую настройку необходимых флагов команды клонирования репозитория 335 | // 336 | // Параметры: 337 | // НастройкаКомандыКлонировать - НастройкаКомандыКлонировать - инстанс класса НастройкаКомандыКлонировать с необходимыми 338 | // настройками 339 | // 340 | Процедура УстановитьНастройкуКомандыКлонировать(НастройкаКомандыКлонировать) Экспорт 341 | 342 | УстановитьНастройкуКоманды("Клонировать", НастройкаКомандыКлонировать); 343 | 344 | КонецПроцедуры 345 | 346 | // Возвращает признак того, что установленный Рабочий каталог является репозиторием git 347 | // 348 | // Возвращаемое значение: 349 | // Булево - Результат проверки 350 | // 351 | Функция ЭтоРепозиторий() Экспорт 352 | 353 | ПроверитьВозможностьВыполненияКоманды(); 354 | 355 | Команда = Новый Команда; 356 | 357 | Команда.УстановитьКоманду(ПолучитьПутьКГит()); 358 | Команда.УстановитьРабочийКаталог(ПолучитьРабочийКаталог()); 359 | Команда.УстановитьКодировкуВывода(КодировкаТекста.UTF8); 360 | 361 | Команда.ДобавитьПараметр("rev-parse"); 362 | Команда.ДобавитьПараметр("--show-toplevel"); 363 | 364 | КодВозврата = Команда.Исполнить(); 365 | 366 | Возврат (КодВозврата = 0); 367 | 368 | КонецФункции // ЭтоРепозиторий() 369 | 370 | ////////////////////////////////////////////// 371 | // Работа с ветками 372 | 373 | // Получить имя текущей ветки 374 | // 375 | // Возвращаемое значение: 376 | // Строка - Имя текущей ветки 377 | // 378 | Функция ПолучитьТекущуюВетку() Экспорт 379 | 380 | ПараметрыЗапуска = Новый Массив; 381 | ПараметрыЗапуска.Добавить("symbolic-ref"); 382 | ПараметрыЗапуска.Добавить("--short"); 383 | ПараметрыЗапуска.Добавить("HEAD"); 384 | 385 | ВыполнитьКоманду(ПараметрыЗапуска); 386 | 387 | ВыводКоманды = ПолучитьВыводКоманды(); 388 | 389 | Возврат ВыводКоманды; 390 | 391 | КонецФункции 392 | 393 | // Выполнить переход в ветку 394 | // git checkout 395 | // 396 | // Параметры: 397 | // ИмяВетки - Строка - Имя ветки, в которую необходимо перейти 398 | // СоздатьНовую - Булево - Флаг необходимости создания новой ветки (-b) 399 | // Принудительно - Булево - Флаг необходимости принудительно перейти в ветку (-f) 400 | // 401 | // @unstable 402 | // 403 | Процедура ПерейтиВВетку(Знач ИмяВетки, Знач СоздатьНовую = Ложь, Знач Принудительно = Ложь) Экспорт 404 | 405 | ПараметрыЗапуска = Новый Массив; 406 | ПараметрыЗапуска.Добавить("checkout"); 407 | 408 | Если СоздатьНовую Тогда 409 | ПараметрыЗапуска.Добавить("-b"); 410 | КонецЕсли; 411 | 412 | Если Принудительно Тогда 413 | ПараметрыЗапуска.Добавить("-f"); 414 | КонецЕсли; 415 | 416 | ПараметрыЗапуска.Добавить(ИмяВетки); 417 | 418 | ВыполнитьКоманду(ПараметрыЗапуска); 419 | 420 | КонецПроцедуры 421 | 422 | // Создать новую ветку без выполнения перехода в нее 423 | // git branch 424 | // 425 | // Параметры: 426 | // ИмяВетки - Строка - Имя создаваемой ветки 427 | // 428 | Процедура СоздатьВетку(Знач ИмяВетки) Экспорт 429 | 430 | ПараметрыЗапуска = Новый Массив; 431 | ПараметрыЗапуска.Добавить("branch"); 432 | ПараметрыЗапуска.Добавить(ИмяВетки); 433 | 434 | ВыполнитьКоманду(ПараметрыЗапуска); 435 | 436 | КонецПроцедуры 437 | 438 | // Получить список веток 439 | // 440 | // Параметры: 441 | // ВключаяУдаленные - Булево - Включать информацию об удаленных ветках 442 | // 443 | // Возвращаемое значение: 444 | // ТаблицаЗначений - Таблица с информацией о текущих ветках. 445 | // Содержит колонки: 446 | // Текущая - Булево - Признак текущей ветки 447 | // Имя - Строка - Имя ветки 448 | // 449 | Функция ПолучитьСписокВеток(Знач ВключаяУдаленные = Ложь) Экспорт 450 | 451 | ПараметрыЗапуска = Новый Массив; 452 | ПараметрыЗапуска.Добавить("branch"); 453 | ПараметрыЗапуска.Добавить("--no-color"); 454 | 455 | Если ВключаяУдаленные Тогда 456 | ПараметрыЗапуска.Добавить("-a"); 457 | КонецЕсли; 458 | 459 | ВыполнитьКоманду(ПараметрыЗапуска); 460 | 461 | ВыводКоманды = ПолучитьВыводКоманды(); 462 | 463 | ТаблицаВеток = Новый ТаблицаЗначений(); 464 | ТаблицаВеток.Колонки.Добавить("Текущая"); 465 | ТаблицаВеток.Колонки.Добавить("Имя"); 466 | 467 | Если ПустаяСтрока(ВыводКоманды) Тогда 468 | Возврат ТаблицаВеток; 469 | КонецЕсли; 470 | 471 | ЧислоСтрок = СтрЧислоСтрок(ВыводКоманды); 472 | 473 | Для сч = 1 По ЧислоСтрок Цикл 474 | 475 | Строка = СокрЛП(СтрПолучитьСтроку(ВыводКоманды, сч)); 476 | Если ПустаяСтрока(Строка) Тогда 477 | Продолжить; 478 | КонецЕсли; 479 | 480 | Ветка = ТаблицаВеток.Добавить(); 481 | 482 | Ветка.Текущая = Лев(Строка, 1) = "*"; 483 | 484 | Если Ветка.Текущая Тогда 485 | Строка = Прав(Строка, СтрДлина(Строка) - 2); 486 | КонецЕсли; 487 | 488 | Ветка.Имя = Строка; 489 | 490 | КонецЦикла; 491 | 492 | Возврат ТаблицаВеток; 493 | 494 | 495 | КонецФункции 496 | 497 | // Работа с ветками 498 | ////////////////////////////////////////////// 499 | 500 | ////////////////////////////////////////////// 501 | // Работа с внешними репозиториями 502 | 503 | // Добавить внешний репозиторий 504 | // git remote add 505 | // 506 | // Параметры: 507 | // ИмяРепозитория - Строка - Имя внешнего репозитория 508 | // АдресВнешнегоРепозитория - Строка - Путь к внешнему репозиторию 509 | // 510 | Процедура ДобавитьВнешнийРепозиторий(Знач ИмяРепозитория, Знач АдресВнешнегоРепозитория) Экспорт 511 | 512 | ПараметрыЗапуска = Новый Массив; 513 | ПараметрыЗапуска.Добавить("remote"); 514 | ПараметрыЗапуска.Добавить("add"); 515 | 516 | ПараметрыЗапуска.Добавить(ИмяРепозитория); 517 | ПараметрыЗапуска.Добавить(АдресВнешнегоРепозитория); 518 | 519 | ВыполнитьКоманду(ПараметрыЗапуска); 520 | 521 | КонецПроцедуры 522 | 523 | // Удалить внешний репозиторий 524 | // git remote remove 525 | // 526 | // Параметры: 527 | // ИмяРепозитория - Строка - Имя внешнего репозитория 528 | // 529 | Процедура УдалитьВнешнийРепозиторий(Знач ИмяРепозитория) Экспорт 530 | 531 | ПараметрыЗапуска = Новый Массив; 532 | ПараметрыЗапуска.Добавить("remote"); 533 | ПараметрыЗапуска.Добавить("remove"); 534 | 535 | ПараметрыЗапуска.Добавить(ИмяРепозитория); 536 | 537 | ВыполнитьКоманду(ПараметрыЗапуска); 538 | 539 | КонецПроцедуры 540 | 541 | // Получить список внешних репозиториев 542 | // 543 | // Возвращаемое значение: 544 | // ТаблицаЗначений - Таблица с информацией о внешних репозиториях. 545 | // Содержит колонки: 546 | // Имя - Строка - Имя внешнего репозитория 547 | // Адрес - Строка - Путь к внешнему репозиторию 548 | // Режим - Строка - Режим работы с внешним репозиторием (push/fetch) 549 | // 550 | Функция ПолучитьСписокВнешнихРепозиториев() Экспорт 551 | 552 | ПараметрыЗапуска = Новый Массив; 553 | ПараметрыЗапуска.Добавить("remote"); 554 | ПараметрыЗапуска.Добавить("-v"); 555 | 556 | ВыполнитьКоманду(ПараметрыЗапуска); 557 | 558 | ВыводКоманды = ПолучитьВыводКоманды(); 559 | 560 | ТаблицаВнешнихРепозиториев = Новый ТаблицаЗначений; 561 | ТаблицаВнешнихРепозиториев.Колонки.Добавить("Имя"); 562 | ТаблицаВнешнихРепозиториев.Колонки.Добавить("Адрес"); 563 | ТаблицаВнешнихРепозиториев.Колонки.Добавить("Режим"); 564 | 565 | ЧислоСтрок = СтрЧислоСтрок(ВыводКоманды); 566 | 567 | // I know, I'll use regular expressions! 568 | Выражение = Новый РегулярноеВыражение("(\w+)\s+(.+)\s+\((\w+)\)"); 569 | 570 | Для сч = 1 По ЧислоСтрок Цикл 571 | 572 | Строка = СтрПолучитьСтроку(ВыводКоманды, сч); 573 | Если ПустаяСтрока(Строка) Тогда 574 | Продолжить; 575 | КонецЕсли; 576 | 577 | Совпадения = Выражение.НайтиСовпадения(Строка); 578 | Если Совпадения.Количество() = 0 Тогда 579 | Лог.Ошибка("Нестандартный вывод в git remote: '%1'", Строка); 580 | Продолжить; 581 | КонецЕсли; 582 | 583 | ВнешнийРепозиторий = ТаблицаВнешнихРепозиториев.Добавить(); 584 | 585 | ВнешнийРепозиторий.Имя = СокрЛП(Совпадения[0].Группы[1].Значение); 586 | ВнешнийРепозиторий.Адрес = СокрЛП(Совпадения[0].Группы[2].Значение); 587 | ВнешнийРепозиторий.Режим = СокрЛП(Совпадения[0].Группы[3].Значение); 588 | 589 | Лог.Отладка("%1 %2 %3", ВнешнийРепозиторий.Имя, ВнешнийРепозиторий.Адрес, ВнешнийРепозиторий.Режим); 590 | 591 | КонецЦикла; 592 | 593 | Возврат ТаблицаВнешнихРепозиториев; 594 | 595 | КонецФункции 596 | 597 | // Работа с внешними репозиториями 598 | ////////////////////////////////////////////// 599 | 600 | ////////////////////////////////////////////// 601 | // Работа с подмодулями 602 | 603 | // Добавить новый подмодуль 604 | // git submodule add 605 | // 606 | // Параметры: 607 | // АдресВнешнегоРепозитория - Строка - Путь к внешнему репозиторию 608 | // Местоположение - Строка - Каталог, в который необходимо поместить 609 | // указанный подмодуль 610 | // Ветка - Строка - Имя ветки внешнего репозитория для получения (-b Ветка) 611 | // ИмяПодмодуля - Строка - Имя, под которым подмодуль будет сохранен 612 | // в настройках (--name ИмяПодмодуля) 613 | // 614 | Процедура ДобавитьПодмодуль(Знач АдресВнешнегоРепозитория, 615 | Знач Местоположение = "", 616 | Знач Ветка = "", 617 | Знач ИмяПодмодуля = "") Экспорт 618 | 619 | ПараметрыЗапуска = Новый Массив; 620 | ПараметрыЗапуска.Добавить("submodule"); 621 | ПараметрыЗапуска.Добавить("add"); 622 | 623 | Если ЗначениеЗаполнено(Ветка) Тогда 624 | ПараметрыЗапуска.Добавить("-b"); 625 | ПараметрыЗапуска.Добавить(Ветка); 626 | КонецЕсли; 627 | 628 | Если ЗначениеЗаполнено(ИмяПодмодуля) Тогда 629 | ПараметрыЗапуска.Добавить("--name"); 630 | ПараметрыЗапуска.Добавить(ИмяПодмодуля); 631 | КонецЕсли; 632 | 633 | ПараметрыЗапуска.Добавить(АдресВнешнегоРепозитория); 634 | 635 | Если ЗначениеЗаполнено(Местоположение) Тогда 636 | ПараметрыЗапуска.Добавить(Местоположение); 637 | КонецЕсли; 638 | 639 | ВыполнитьКоманду(ПараметрыЗапуска); 640 | 641 | КонецПроцедуры 642 | 643 | // Обновить данные о зарегистрированных подмодулях 644 | // git submodule update 645 | // 646 | // Параметры: 647 | // Инициализировать - Булево - Выполнять инициализацию подмодуля (--init) 648 | // Рекурсивно - Рекурсивно - Обновлять подмодули подмодулей (--recursive) 649 | // 650 | Процедура ОбновитьПодмодули(Знач Инициализировать = Ложь, Знач Рекурсивно = Ложь) Экспорт 651 | 652 | ПараметрыЗапуска = Новый Массив; 653 | ПараметрыЗапуска.Добавить("submodule"); 654 | ПараметрыЗапуска.Добавить("update"); 655 | 656 | Если Инициализировать Тогда 657 | ПараметрыЗапуска.Добавить("--init"); 658 | КонецЕсли; 659 | 660 | Если Рекурсивно Тогда 661 | ПараметрыЗапуска.Добавить("--recursive"); 662 | КонецЕсли; 663 | 664 | ВыполнитьКоманду(ПараметрыЗапуска); 665 | 666 | КонецПроцедуры 667 | 668 | // Получить состояние подмодулей 669 | // 670 | // Возвращаемое значение: 671 | // ТаблицаЗначений - Таблица с информацией о подмодулях. 672 | // Содержит колонки: 673 | // ХэшКоммита - Строка - Хэш коммита, на который указывает подмодуль 674 | // Имя - Строка - Имя подмодуля 675 | // Указатель - Строка - указатель на внешний репозиторий 676 | // 677 | Функция ПолучитьСостояниеПодмодулей() Экспорт 678 | 679 | ПараметрыЗапуска = Новый Массив; 680 | ПараметрыЗапуска.Добавить("submodule"); 681 | ПараметрыЗапуска.Добавить("status"); 682 | 683 | ВыполнитьКоманду(ПараметрыЗапуска); 684 | 685 | ВыводКоманды = ПолучитьВыводКоманды(); 686 | 687 | ТаблицаПодмодулей = Новый ТаблицаЗначений; 688 | ТаблицаПодмодулей.Колонки.Добавить("ХэшКоммита"); 689 | ТаблицаПодмодулей.Колонки.Добавить("Имя"); 690 | ТаблицаПодмодулей.Колонки.Добавить("Указатель"); 691 | 692 | ЧислоСтрок = СтрЧислоСтрок(ВыводКоманды); 693 | 694 | Для сч = 1 По ЧислоСтрок Цикл 695 | 696 | Строка = СтрПолучитьСтроку(ВыводКоманды, сч); 697 | Если ПустаяСтрока(Строка) Тогда 698 | Продолжить; 699 | КонецЕсли; 700 | 701 | ДанныеПодмодуля = ТаблицаПодмодулей.Добавить(); 702 | 703 | ДанныеСтроки = СтрРазделить(Строка, " ", Ложь); 704 | ДанныеПодмодуля.ХэшКоммита = ДанныеСтроки[0]; 705 | ДанныеПодмодуля.Имя = ДанныеСтроки[1]; 706 | ДанныеПодмодуля.Указатель = Сред(ДанныеСтроки[2], 2, СтрДлина(ДанныеСтроки[2]) - 2); 707 | 708 | КонецЦикла; 709 | 710 | Возврат ТаблицаПодмодулей; 711 | 712 | КонецФункции 713 | 714 | #КонецОбласти 715 | #Область СлужебныйПрограммныйИнтерфейс 716 | 717 | // Работа с подмодулями 718 | ////////////////////////////////////////////// 719 | 720 | ////////////////////////////////////////////// 721 | // Работа с настройками git 722 | 723 | // Получить значение настройки git 724 | // 725 | // Параметры: 726 | // ИмяНастройки - Строка - Имя настройки 727 | // РежимУстановкиНастроекGit - РежимУстановкиНастроекGit - Режим установки настройки. 728 | // Значения параметра содержатся в перечислении РежимУстановкиНастроекGit 729 | // 730 | // Возвращаемое значение: 731 | // Строка - Значение настройки 732 | // 733 | Функция ПолучитьНастройку(Знач ИмяНастройки, Знач РежимУстановкиНастроекGit = Неопределено) Экспорт 734 | 735 | ПараметрыЗапуска = Новый Массив; 736 | ПараметрыЗапуска.Добавить("config"); 737 | ПараметрыЗапуска.Добавить(ИмяНастройки); 738 | 739 | 740 | Если РежимУстановкиНастроекGit <> Неопределено Тогда 741 | ПараметрыЗапуска.Добавить(РежимУстановкиНастроекGit); 742 | КонецЕсли; 743 | 744 | 745 | ВыполнитьКоманду(ПараметрыЗапуска); 746 | 747 | ВыводКоманды = СокрЛП(ПолучитьВыводКоманды()); 748 | 749 | Возврат ВыводКоманды; 750 | 751 | КонецФункции 752 | 753 | // Установить настройку git 754 | // git config 755 | // 756 | // Параметры: 757 | // ИмяНастройки - Строка - Имя настройки 758 | // ЗначениеНастройки - Строка - Устанавливаемое значение 759 | // РежимУстановкиНастроекGit - РежимУстановкиНастроекGit - Режим установки настройки. 760 | // Значения параметра содержатся в перечислении РежимУстановкиНастроекGit 761 | // 762 | Процедура УстановитьНастройку(Знач ИмяНастройки, Знач ЗначениеНастройки, Знач РежимУстановкиНастроекGit = Неопределено) Экспорт 763 | 764 | ПараметрыЗапуска = Новый Массив; 765 | ПараметрыЗапуска.Добавить("config"); 766 | 767 | Если Найти(ЗначениеНастройки, " ") > 0 Тогда 768 | ЗначениеНастройки = ОбернутьВКавычки(ЗначениеНастройки); 769 | КонецЕсли; 770 | 771 | Если РежимУстановкиНастроекGit <> Неопределено Тогда 772 | ПараметрыЗапуска.Добавить(РежимУстановкиНастроекGit); 773 | КонецЕсли; 774 | 775 | ПараметрыЗапуска.Добавить(ИмяНастройки); 776 | ПараметрыЗапуска.Добавить(ЗначениеНастройки); 777 | 778 | ВыполнитьКоманду(ПараметрыЗапуска); 779 | 780 | КонецПроцедуры 781 | 782 | // Удаление секции настроек git 783 | // 784 | // Параметры: 785 | // ИмяСекции - Строка - Имя секции 786 | // РежимУстановкиНастроекGit - РежимУстановкиНастроекGit - Режим установки настройки. 787 | // 788 | Процедура УдалитьСекциюНастроек(Знач ИмяСекции, Знач РежимУстановкиНастроекGit = Неопределено) Экспорт 789 | 790 | ПараметрыЗапуска = Новый Массив; 791 | ПараметрыЗапуска.Добавить("config"); 792 | 793 | Если РежимУстановкиНастроекGit <> Неопределено Тогда 794 | ПараметрыЗапуска.Добавить(РежимУстановкиНастроекGit); 795 | КонецЕсли; 796 | 797 | ПараметрыЗапуска.Добавить("--remove-section"); 798 | ПараметрыЗапуска.Добавить(ИмяСекции); 799 | 800 | ВыполнитьКоманду(ПараметрыЗапуска); 801 | 802 | КонецПроцедуры 803 | 804 | 805 | // Получить список настроек git 806 | // 807 | // Параметры: 808 | // РежимУстановкиНастроекGit - РежимУстановкиНастроекGit - Уровень, на котором 809 | // необходимо искать значения настроек 810 | // 811 | // Возвращаемое значение: 812 | // Соответствие - Список настроек. 813 | // Ключ соответствия - ключ настройки 814 | // Значение соответствия - значение настройки 815 | // 816 | Функция ПолучитьСписокНастроек(Знач РежимУстановкиНастроекGit = Неопределено) Экспорт 817 | 818 | ПараметрыЗапуска = Новый Массив; 819 | ПараметрыЗапуска.Добавить("config"); 820 | ПараметрыЗапуска.Добавить("--list"); 821 | 822 | Если РежимУстановкиНастроекGit <> Неопределено Тогда 823 | ПараметрыЗапуска.Добавить(РежимУстановкиНастроекGit); 824 | КонецЕсли; 825 | 826 | ВыполнитьКоманду(ПараметрыЗапуска); 827 | 828 | ВыводКоманды = СокрЛП(ПолучитьВыводКоманды()); 829 | 830 | СписокНастроек = Новый Соответствие(); 831 | 832 | ЧислоСтрок = СтрЧислоСтрок(ВыводКоманды); 833 | 834 | Для сч = 1 По ЧислоСтрок Цикл 835 | 836 | Строка = СтрПолучитьСтроку(ВыводКоманды, сч); 837 | Если ПустаяСтрока(Строка) Тогда 838 | Продолжить; 839 | КонецЕсли; 840 | 841 | СимволРавно = СтрНайти(Строка, "="); 842 | 843 | ИмяНастройки = Лев(Строка, СимволРавно - 1); 844 | ЗначениеНастройки = Прав(Строка, СтрДлина(Строка) - СимволРавно); 845 | 846 | СписокНастроек.Вставить(ИмяНастройки, ЗначениеНастройки); 847 | 848 | КонецЦикла; 849 | 850 | Возврат СписокНастроек; 851 | 852 | КонецФункции 853 | 854 | // Работа с настройками git 855 | ////////////////////////////////////////////// 856 | 857 | // Выполнение произвольной команды git 858 | // 859 | // Параметры: 860 | // Параметры - Массив - Массив строковых аргументов, передаваемых в командную 861 | // строку. Добавляются после исполняемого файла. 862 | // 863 | Процедура ВыполнитьКоманду(Знач Параметры) Экспорт 864 | 865 | ПроверитьВозможностьВыполненияКоманды(); 866 | 867 | Команда = Новый Команда; 868 | 869 | Команда.УстановитьКоманду(ПолучитьПутьКГит()); 870 | Команда.УстановитьРабочийКаталог(ПолучитьРабочийКаталог()); 871 | Команда.УстановитьКодировкуВывода(КодировкаТекста.UTF8); 872 | 873 | Команда.ДобавитьПараметры(Параметры); 874 | 875 | Лог.Отладка("Команда %1", Команда.ПолучитьКоманду()); 876 | Для каждого Параметр Из Команда.ПолучитьПараметры() Цикл 877 | Лог.Отладка("Параметр команды %1", Параметр); 878 | КонецЦикла; 879 | Лог.Отладка("Рабочий каталог команды %1", Команда.ПолучитьРабочийКаталог()); 880 | 881 | КодВозврата = Команда.Исполнить(); 882 | 883 | УстановитьВывод(Команда.ПолучитьВывод()); 884 | 885 | УстановитьКодВозврата(КодВозврата); 886 | 887 | Если КодВозврата <> 0 Тогда 888 | ВыводКоманды = ПолучитьВыводКоманды(); 889 | Если ТихийРежимРаботы Тогда 890 | Лог.Ошибка("Получен ненулевой код возврата %1. Сообщение: `%2`", КодВозврата, ВыводКоманды); 891 | Иначе 892 | Лог.Ошибка("Получен ненулевой код возврата %1. Выполнение скрипта остановлено!", КодВозврата); 893 | ВызватьИсключение ВыводКоманды; 894 | КонецЕсли; 895 | Иначе 896 | Лог.Отладка("Код возврата равен 0"); 897 | КонецЕсли; 898 | 899 | КонецПроцедуры 900 | 901 | ////////////////////////////////////////////////////////////////////////// 902 | // Работа со свойствами класса 903 | 904 | // Получить текущий рабочий каталог. 905 | // 906 | // Возвращаемое значение: 907 | // Строка - Путь к рабочему каталогу 908 | // 909 | Функция ПолучитьРабочийКаталог() Экспорт 910 | Возврат РабочийКаталог; 911 | КонецФункции 912 | 913 | // Установить текущий рабочий каталог. 914 | // Все команды git будут выполняться относительно указанного каталога. 915 | // 916 | // Параметры: 917 | // ПутьРабочийКаталог - Строка - Путь к рабочему каталогу. 918 | // Может быть относительным. 919 | // 920 | Процедура УстановитьРабочийКаталог(Знач ПутьРабочийКаталог) Экспорт 921 | 922 | Файл_РабочийКаталог = Новый Файл(ПутьРабочийКаталог); 923 | Ожидаем.Что( 924 | Файл_РабочийКаталог.Существует(), 925 | СтрШаблон("Рабочий каталог <%1> не существует.", ПутьРабочийКаталог) 926 | ).ЭтоИстина(); 927 | 928 | РабочийКаталог = Файл_РабочийКаталог.ПолноеИмя; 929 | Лог.Отладка("РабочийКаталог: " + РабочийКаталог); 930 | 931 | КонецПроцедуры 932 | 933 | // Получить путь к исполняемому файлу git. 934 | // 935 | // Возвращаемое значение: 936 | // Строка - Путь к исполняемому файлу. 937 | // По умолчанию содержит значение "git". 938 | // 939 | Функция ПолучитьПутьКГит() Экспорт 940 | Возврат ПутьКГит; 941 | КонецФункции 942 | 943 | // Установить путь к исполняемому файлу git. 944 | // 945 | // Параметры: 946 | // Путь - Строка - Путь к исполняемому файлу. 947 | // 948 | Процедура УстановитьПутьКГит(Знач Путь) Экспорт 949 | ПутьКГит = Путь; 950 | КонецПроцедуры 951 | 952 | // Получить вывод последней выполненной команды. 953 | // 954 | // Возвращаемое значение: 955 | // Строка - Вывод команды 956 | // 957 | Функция ПолучитьВыводКоманды() Экспорт 958 | Возврат мВыводКоманды; 959 | КонецФункции 960 | 961 | // Установить вывод последней выполненной команды. 962 | // 963 | // Параметры: 964 | // Сообщение - Строка - Вывод команды 965 | // 966 | Процедура УстановитьВывод(Знач Сообщение) 967 | мВыводКоманды = Сообщение; 968 | КонецПроцедуры 969 | 970 | // Установить код возврата последней выполненной команды. 971 | // 972 | // Параметры: 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 | // NOTICE: https://github.com/oscript-library/v8runner 1035 | // Apache 2.0 1036 | 1037 | Если Лев(Строка, 1) = """" И Прав(Строка, 1) = """" Тогда 1038 | Возврат Строка; 1039 | Иначе 1040 | Возврат """" + Строка + """"; 1041 | КонецЕсли; 1042 | 1043 | КонецФункции 1044 | 1045 | // Очищает установленные переменные системы 1046 | // 1047 | Процедура ОчиститьУстановленныеПеременныеГит() 1048 | 1049 | УстановитьДатуКоммита(""); 1050 | 1051 | КонецПроцедуры 1052 | 1053 | // Устанавливает переменную системы GIT_COMMITTER_DATE 1054 | // 1055 | // Параметры: 1056 | // Дата - Дата - Дата для установки даты коммитера, отличной от текущей даты 1057 | // 1058 | Процедура УстановитьДатуКоммита(Знач Дата) 1059 | 1060 | УстановитьПеременнуюСреды("GIT_COMMITTER_DATE", Дата); 1061 | 1062 | КонецПроцедуры // УстановитьПеременнуюСреды() 1063 | 1064 | // Устанавливает переменную системы GIT_AUTHOR_DATE 1065 | // 1066 | // Параметры: 1067 | // Дата - Дата - Дата для установки даты автора, отличной от текущей даты 1068 | // 1069 | Процедура УстановитьДатуАвтораКоммита(Знач Дата) 1070 | 1071 | УстановитьПеременнуюСреды("GIT_AUTHOR_DATE", Дата); 1072 | 1073 | КонецПроцедуры // УстановитьДатуАвтораКоммита() 1074 | 1075 | // Устанавливает коммитера комментария в дополнительную секцию локальной настройки репозитория 1076 | // 1077 | // Параметры: 1078 | // Коммитер - Строка - представление коммитера комментария в формате: автор 1079 | // ТребуетсяВосстановлениеНастроек - Булево - устанавливается в истина для последующего восстановления 1080 | // 1081 | Процедура УстановитьКоммитера(Знач Коммитер, ТребуетсяВосстановлениеНастроек = Ложь) 1082 | 1083 | РегуляркаДляПочты = Новый РегулярноеВыражение ("<([^>]+)>"); 1084 | КоллекцияСовпадений = РегуляркаДляПочты.НайтиСовпадения(Коммитер); 1085 | 1086 | Наименование = Лев(Коммитер, СтрНайти(Коммитер, "<") - 1); 1087 | 1088 | Ожидаем.Что(КоллекцияСовпадений.Количество()).Равно(1); 1089 | 1090 | Почта = КоллекцияСовпадений[0].Группы[1].Значение; // Должно быть только одно значение 1091 | 1092 | НастройкаНаименования = ПолучитьИмяНастройкиНаименованияПользователя(); 1093 | НастройкаПочты = ПолучитьИмяНастройкиПочтыПользователя(); 1094 | 1095 | ТекущееНаименование = ПолучитьНастройку(НастройкаНаименования, РежимУстановкиНастроекGit.Локально); 1096 | ТекущаяПочта = ПолучитьНастройку(НастройкаПочты, РежимУстановкиНастроекGit.Локально); 1097 | 1098 | // Сохранение в отдельную секцию "bak" 1099 | 1100 | ТребуетсяСохранениеВСекцию_bak = НЕ (ПустаяСтрока(ТекущееНаименование) И ПустаяСтрока(ТекущаяПочта)); 1101 | Если ТребуетсяСохранениеВСекцию_bak Тогда 1102 | 1103 | // Установка новых значений в секцию bak 1104 | УстановитьНастройку("bak."+ НастройкаНаименования, ТекущееНаименование); 1105 | УстановитьНастройку("bak."+ НастройкаПочты, ТекущаяПочта); 1106 | 1107 | ТребуетсяВосстановлениеНастроек = Истина; 1108 | 1109 | КонецЕсли; 1110 | 1111 | // Установим новые значения 1112 | УстановитьНастройку(НастройкаНаименования, Наименование, РежимУстановкиНастроекGit.Локально); 1113 | УстановитьНастройку(НастройкаПочты, Почта, РежимУстановкиНастроекGit.Локально); 1114 | 1115 | КонецПроцедуры 1116 | 1117 | // Восстановление коммитера комментария из резервной секции 1118 | // 1119 | Процедура ВосстановитьКоммитера() 1120 | 1121 | НастройкаНаименования = ПолучитьИмяНастройкиНаименованияПользователя(); 1122 | НастройкаПочты = ПолучитьИмяНастройкиПочтыПользователя(); 1123 | 1124 | ТекущееНаименование = ПолучитьНастройку(НастройкаНаименования, РежимУстановкиНастроекGit.Локально); 1125 | ТекущаяПочта = ПолучитьНастройку(НастройкаПочты, РежимУстановкиНастроекGit.Локально); 1126 | 1127 | Наименование_bak = ПолучитьНастройку("bak."+ НастройкаНаименования, РежимУстановкиНастроекGit.Локально); 1128 | Почта_bak = ПолучитьНастройку("bak."+ НастройкаПочты, РежимУстановкиНастроекGit.Локально); 1129 | 1130 | // Установим новые значения 1131 | Если ТекущееНаименование <> Наименование_bak Тогда 1132 | УстановитьНастройку(НастройкаНаименования, Наименование_bak, РежимУстановкиНастроекGit.Локально); 1133 | КонецЕсли; 1134 | 1135 | Если ТекущаяПочта <> Почта_bak Тогда 1136 | УстановитьНастройку(НастройкаПочты, Почта_bak, РежимУстановкиНастроекGit.Локально); 1137 | КонецЕсли; 1138 | 1139 | УдалитьСекциюНастроек("bak.user", РежимУстановкиНастроекGit.Локально); 1140 | 1141 | КонецПроцедуры 1142 | 1143 | // Возвращает имя настройки Гит для имени пользователя 1144 | // 1145 | Функция ПолучитьИмяНастройкиНаименованияПользователя() 1146 | Возврат "user.name"; 1147 | КонецФункции // ПолучитьИмяНастройкиНаименования() 1148 | 1149 | // Возвращает имя настройки Гит для почты пользователя 1150 | // 1151 | Функция ПолучитьИмяНастройкиПочтыПользователя() 1152 | Возврат "user.email"; 1153 | КонецФункции // ПолучитьИмяНастройкиПочты() 1154 | 1155 | Процедура УстановитьНастройкуКоманды(Знач ИмяКоманды, КлассНастройкаКоманды) 1156 | 1157 | НастройкиКоманд.Вставить(ИмяКоманды, КлассНастройкаКоманды); 1158 | 1159 | КонецПроцедуры 1160 | 1161 | // Инициализация работы библиотеки. 1162 | // Задает минимальные настройки. 1163 | // 1164 | Процедура Инициализация() 1165 | 1166 | Лог = Логирование.ПолучитьЛог("oscript.lib.gitrunner"); 1167 | СистемнаяИнформация = Новый СистемнаяИнформация; 1168 | ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; 1169 | 1170 | НастройкиКоманд = Новый Соответствие; 1171 | УстановитьПутьКГит("git"); 1172 | 1173 | ТихийРежимРаботы = Ложь; 1174 | 1175 | КонецПроцедуры 1176 | 1177 | #КонецОбласти 1178 | 1179 | Инициализация(); 1180 | --------------------------------------------------------------------------------