1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2025-02-07 13:31:49 +02:00

Merge branch 'release/1.11'

This commit is contained in:
Maxmov Valery 2019-08-12 09:12:05 +03:00
commit e0efd08e88
11 changed files with 135 additions and 59 deletions

View File

@ -21,6 +21,7 @@
ВсеШаги.Добавить("ЯУстанавливаюКодировкуВыводаКоманды");
ВсеШаги.Добавить("УФайлаЕстьМетка");
ВсеШаги.Добавить("СодержимоеФайлаИФайлаРазное");
ВсеШаги.Добавить("ЯСоздаюНовыйРепозиторийБезИнициализацииВКаталогеИЗапоминаюЕгоКак");
Возврат ВсеШаги;
КонецФункции
@ -53,18 +54,15 @@
// я создаю новый репозиторий "ИмяРепозитория" в каталоге "АлиасКаталога" и запоминаю его как "Алиас"
Процедура ЯСоздаюНовыйРепозиторийВКаталогеИЗапоминаюЕгоКак(ИмяРепозитория, АлиасКаталога, Алиас) Экспорт
КаталогРепозиториев = БДД.ПолучитьИзКонтекста(АлиасКаталога);
КаталогРепозитория = ОбъединитьПути(КаталогРепозиториев, ИмяРепозитория);
СоздатьКаталог(КаталогРепозитория);
РепозиторийGit = Новый ГитРепозиторий();
РепозиторийGit.УстановитьРабочийКаталог(КаталогРепозитория);
РепозиторийGit.Инициализировать();
КаталогРепозитория = ИнициализироватьРепозиторий(РепозиторийGit, ИмяРепозитория, АлиасКаталога);
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст("# Репозиторий " + Алиас);
ИмяФайлаreadme = ОбъединитьПути(КаталогРепозитория, "readme.md");
ТекстовыйДокумент.Записать(ИмяФайлаreadme);
РепозиторийGit.ДобавитьФайлВИндекс(ИмяФайлаreadme);
РепозиторийGit.Закоммитить("init", ИСТИНА);
@ -72,6 +70,17 @@
КонецПроцедуры
// я создаю новый репозиторий без инициализации "ИмяРепозитория" в каталоге "АлиасКаталога" и запоминаю его как "Алиас"
Процедура ЯСоздаюНовыйРепозиторийБезИнициализацииВКаталогеИЗапоминаюЕгоКак(ИмяРепозитория, АлиасКаталога, Алиас) Экспорт
РепозиторийGit = Новый ГитРепозиторий();
КаталогРепозитория = ИнициализироватьРепозиторий(РепозиторийGit, ИмяРепозитория, АлиасКаталога);
БДД.СохранитьВКонтекст(Алиас, КаталогРепозитория);
КонецПроцедуры
// В каталоге "ИмяКаталога" репозитория "ИмяРепозитория" есть файл "ИмяФайла"
Процедура ВКаталогеРепозиторияЕстьФайл(ИмяКаталога, ИмяРепозитория, ИмяФайла)Экспорт
@ -143,4 +152,18 @@
Ожидаем.Что(СодержимоеИсходногоФайла).Не_().Равно(СодержимоеКонечногоФайла);
КонецПроцедуры
КонецПроцедуры
Функция ИнициализироватьРепозиторий(РепозиторийGit, ИмяРепозитория, АлиасКаталога)
КаталогРепозиториев = БДД.ПолучитьИзКонтекста(АлиасКаталога);
КаталогРепозитория = ОбъединитьПути(КаталогРепозиториев, ИмяРепозитория);
СоздатьКаталог(КаталогРепозитория);
РепозиторийGit.УстановитьРабочийКаталог(КаталогРепозитория);
РепозиторийGit.Инициализировать();
Возврат КаталогРепозитория;
КонецФункции

View File

@ -5,6 +5,24 @@
Как разработчик
Я хочу быть уверенным, что precommit4onec корректно обрабатывает изменения в репозитории
Контекст:
Допустим Я очищаю параметры команды "oscript" в контексте
И я очищаю параметры команды "git" в контексте
И Я устанавливаю кодировку вывода "utf-8" команды "git"
И я включаю отладку лога с именем "oscript.app.precommit4onec"
И я создаю временный каталог и запоминаю его как "КаталогРепозиториев"
И я переключаюсь во временный каталог "КаталогРепозиториев"
И я создаю новый репозиторий без инициализации "rep1" в каталоге "КаталогРепозиториев" и запоминаю его как "РабочийКаталог"
И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
И я установил рабочий каталог как текущий каталог
Сценарий: Успешный инициализирующий коммит в репозиторий после установки прекоммита
Когда Я создаю файл "РабочийКаталог/readme.md" с текстом "Инициализация"
И я выполняю команду "git" с параметрами "add ."
И я выполняю команду "git" с параметрами "commit -m init"
Тогда я не вижу в консоли вывод "ВызватьИсключение"
И я не вижу в консоли вывод "fatal:"
Контекст:
Допустим Я очищаю параметры команды "oscript" в контексте
И я очищаю параметры команды "git" в контексте

View File

@ -10,7 +10,7 @@
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v1.10.0"
И Вывод команды "oscript" содержит "precommit4onec v1.11.1"
И Вывод команды "oscript" содержит "Установленные настройки:"
И Вывод команды "oscript" содержит "ИспользоватьСценарииРепозитория ="
И Вывод команды "oscript" содержит "КаталогЛокальныхСценариев ="
@ -24,7 +24,7 @@
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит
"""
precommit4onec v1.10.0
precommit4onec v1.11.1
Установленные настройки:
ИспользоватьСценарииРепозитория = Нет
КаталогЛокальныхСценариев =

View File

@ -14,7 +14,7 @@
Сценарий: Получение версии продукта
Когда Я выполняю команду "oscript" с параметрами "src/main.os version"
Тогда Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "1.10.0"
И Вывод команды "oscript" содержит "1.11.1"
И Вывод команды "oscript" не содержит "precommit4onec v"
И Код возврата команды "oscript" равен 0
@ -22,7 +22,7 @@
Когда Я выполняю команду "oscript" с параметрами "src/main.os help"
Тогда Вывод команды "oscript" содержит
"""
precommit4onec v1.10.0
precommit4onec v1.11.1
Возможные команды:
help - Выводит справку по командам
version - Выводит версию приложения
@ -36,7 +36,7 @@
Когда Я выполняю команду "oscript" с параметрами "src/main.os"
Тогда Вывод команды "oscript" содержит
"""
precommit4onec v1.10.0
precommit4onec v1.11.1
Возможные команды:
help - Выводит справку по командам
version - Выводит версию приложения

View File

@ -18,7 +18,7 @@
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v1.10.0"
И Вывод команды "oscript" содержит "precommit4onec v1.11.1"
И Вывод команды "oscript" содержит "Pre-commit hook для rep1 создан"
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
@ -26,15 +26,31 @@
Когда я создаю временный каталог и запоминаю его как "ПустойКаталог"
И я переключаюсь во временный каталог "ПустойКаталог"
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./"
Тогда Код возврата команды "oscript" равен 1
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v1.10.0"
И Вывод команды "oscript" содержит "can only be used inside a git repository"
И Вывод команды "oscript" содержит "precommit4onec v1.11.1"
И Вывод команды "oscript" содержит "не является репозиторием git"
Сценарий: Установка precommit4onec во вложенные каталоги
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v1.10.0"
И Вывод команды "oscript" содержит "precommit4onec v1.11.1"
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit"
Сценарий: Рекурсивная установка precommit4oneсне корректно обрабатывает папки не репо
Когда Я создаю каталог "!_test1" внутри каталога "КаталогРепозиториев"
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "не является репозиторием git"
Сценарий: Рекурсивная установка precommit4oneс выполняется, когда папке с репозиториями есть папки не репо
Когда Я создаю каталог "!_test1" внутри каталога "КаталогРепозиториев"
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v1.11.1"
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit"

View File

@ -14,7 +14,7 @@
Процедура НастроитьКоманду(Знач Команда, Знач Парсер) Экспорт
// Добавление параметров команды
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРепозитория", "Каталог репозитория, которому необходимо подключить precommit. При наличии флага -r устанавливает во вложенные в указанных каталог репозитории.");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРепозитория", "Каталог репозитория, к которому необходимо подключить precommit. Флаг -r, указанный после каталога репозитория, устанавливает во вложенные в указанный каталог репозитории.");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-source-dir", "Каталог расположения исходных файлов относительно корня репозитория. По умолчанию <src>");
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-from-path", "Установить с учетом того, что скрипт прописан в path");
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-r", "Устанавливает во вложенные каталоги. Если вложенный каталог не является репозиторием, то он пропускается.");
@ -31,7 +31,17 @@
Лог = Приложение.ПолучитьЛог();
КаталогРепозитория = ПараметрыКоманды["КаталогРепозитория"];
Если НЕ ЗначениеЗаполнено(КаталогРепозитория) Тогда
Лог.Ошибка("Для установки прекоммита надо указать каталог");
Возврат Приложение.РезультатыКоманд().НеверныеПараметры;
КонецЕсли;
ФайлКаталогРепозитория = Новый Файл(КаталогРепозитория);
Если НЕ ФайлКаталогРепозитория.Существует() ИЛИ ФайлКаталогРепозитория.ЭтоФайл() Тогда
Лог.Ошибка("Каталог репозитория '%1' не существует или это файл", КаталогРепозитория);
@ -86,7 +96,6 @@
РепозиторийGit = Новый ГитРепозиторий();
РепозиторийGit.УстановитьРабочийКаталог(КаталогРепозитория);
РепозиторийGit.УстановитьНастройку("core.quotePath", "false", РежимУстановкиНастроекGit.Локально);
// проверка каталога
Если НЕ РепозиторийGit.ЭтоРепозиторий() Тогда
@ -95,7 +104,7 @@
Возврат;
КонецЕсли;
РепозиторийGit.УстановитьНастройку("core.quotePath", "false", РежимУстановкиНастроекGit.Локально); // решение проблемы с кириллическими путями
// установка
КаталогGitHook = ОбъединитьПути(КаталогРепозитория, ".git", "hooks");
ФайлКаталогGitHook = Новый Файл(КаталогGitHook);
@ -109,6 +118,15 @@
ТекстPrecommtHook = Новый ТекстовыйДокумент;
ТекстPrecommtHook.УстановитьТекст(КомандаPrecommtHook);
ТекстPrecommtHook.Записать(ФайлPrecommtHook, КодировкаТекста.UTF8NoBOM, Символы.ПС);
СисИнфо = Новый СистемнаяИнформация;
ЭтоWindows = Найти(НРег(СисИнфо.ВерсияОС), "windows") > 0;
Если НЕ ЭтоWindows Тогда
ЗапуститьПриложение("chmod +x " + ФайлPrecommtHook);
КонецЕсли;
Лог.Информация("Pre-commit hook для %1 создан", КаталогРепозитория);

View File

@ -133,7 +133,7 @@
Функция ПолучитьЖурналИзменений()
ПараметрыКомандыGit = Новый Массив;
ПараметрыКомандыGit.Добавить("diff-index --name-status --cached HEAD");
ПараметрыКомандыGit.Добавить("diff --name-status --staged --no-renames");
РепозиторийGit.ВыполнитьКоманду(ПараметрыКомандыGit);
РезультатВывода = РепозиторийGit.ПолучитьВыводКоманды();
СтрокиВывода = СтрРазделить(РезультатВывода, Символы.ПС);

View File

@ -22,7 +22,7 @@
//
Функция ВерсияПродукта() Экспорт
Возврат "1.10.0";
Возврат "1.11.1";
КонецФункции // ВерсияПродукта

View File

@ -175,7 +175,7 @@
Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл
Если МассивИсключенийМетаданных.Найти(ОбъектМетаданных.Тип) <> Неопределено Тогда
Если МассивИсключенийМетаданных.Найти(ОбъектМетаданных.ТипМетаданных) <> Неопределено Тогда
Продолжить;

View File

@ -159,7 +159,7 @@
КонецЕсли;
ИсходнаяСтрока = ПодчиненныеМетаданные[0].Группы[2].Значение;
РегекспМетаданные = Новый РегулярноеВыражение("^\s+<([\w]+)>([a-zA-Z]+\.[а-яa-zA-ZА-Я0-9_]+)<\/[\w]+>");
РегекспМетаданные = Новый РегулярноеВыражение("^\s*<([\w]+)>([a-zA-Z]+\.[а-яa-zA-ZА-Я0-9_]+)<\/[\w]+>");
РегекспМетаданные.ИгнорироватьРегистр = ИСТИНА;
РегекспМетаданные.Многострочный = Истина;
ОбъектыМетаданныхСтроки = РегекспМетаданные.НайтиСовпадения(ИсходнаяСтрока);

View File

@ -1,35 +1,36 @@
{
"Precommt4onecСценарии": {
"ИспользоватьСценарииРепозитория": false,
"КаталогЛокальныхСценариев": "",
"ГлобальныеСценарии": [
"ДобавлениеПробеловПередКлючевымиСловами.os",
"ЗапретИспользованияПерейти.os",
"КорректировкаXMLФорм.os",
"ОтключениеПолнотекстовогоПоиска.os",
"ПроверкаДублейПроцедурИФункций.os",
"ПроверкаКорректностиОбластей.os",
"РазборОбычныхФормНаИсходники.os",
"РазборОтчетовОбработокРасширений.os",
"СинхронизацияОбъектовМетаданныхИФайлов.os",
"СортировкаДереваМетаданных.os",
"УдалениеДублейМетаданных.os",
"УдалениеЛишнихКонцевыхПробелов.os",
"УдалениеЛишнихПустыхСтрок.os"
],
"НастройкиСценариев": {
"ОтключениеПолнотекстовогоПоиска": {
"МетаданныеДляИсключения": {
"src\\_example.xml": [
"Номер"
],
"src\\_example2.xml": []
}
},
"РазборОтчетовОбработокРасширений": {
"ИспользоватьНастройкиПоУмолчанию": true,
"ВерсияПлатформы": ""
}
}
}
{
"Precommt4onecСценарии": {
"ИспользоватьСценарииРепозитория": false,
"КаталогЛокальныхСценариев": "",
"ГлобальныеСценарии": [
"ДобавлениеПробеловПередКлючевымиСловами.os",
"ЗапретИспользованияПерейти.os",
"КорректировкаXMLФорм.os",
"ОтключениеПолнотекстовогоПоиска.os",
"ПроверкаДублейПроцедурИФункций.os",
"ПроверкаКорректностиОбластей.os",
"РазборОбычныхФормНаИсходники.os",
"РазборОтчетовОбработокРасширений.os",
"СинхронизацияОбъектовМетаданныхИФайлов.os",
"СортировкаДереваМетаданных.os",
"УдалениеДублейМетаданных.os",
"УдалениеЛишнихКонцевыхПробелов.os",
"УдалениеЛишнихПустыхСтрок.os"
],
"НастройкиСценариев": {
"ОтключениеПолнотекстовогоПоиска": {
"МетаданныеДляИсключения": {
"src\\_example.xml": [
"Номер",
"ТабличнаяЧасть1.Реквизит"
],
"src\\_example2.xml": []
}
},
"РазборОтчетовОбработокРасширений": {
"ИспользоватьНастройкиПоУмолчанию": true,
"ВерсияПлатформы": ""
}
}
}
}