├── .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 | 
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 |
--------------------------------------------------------------------------------