1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2025-02-11 13:38:37 +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, ИмяРепозитория, АлиасКаталога);
РепозиторийGit.Инициализировать();
ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст("# Репозиторий " + Алиас); ТекстовыйДокумент.УстановитьТекст("# Репозиторий " + Алиас);
ИмяФайлаreadme = ОбъединитьПути(КаталогРепозитория, "readme.md"); ИмяФайлаreadme = ОбъединитьПути(КаталогРепозитория, "readme.md");
ТекстовыйДокумент.Записать(ИмяФайлаreadme); ТекстовыйДокумент.Записать(ИмяФайлаreadme);
РепозиторийGit.ДобавитьФайлВИндекс(ИмяФайлаreadme); РепозиторийGit.ДобавитьФайлВИндекс(ИмяФайлаreadme);
РепозиторийGit.Закоммитить("init", ИСТИНА); РепозиторийGit.Закоммитить("init", ИСТИНА);
@ -72,6 +70,17 @@
КонецПроцедуры КонецПроцедуры
// я создаю новый репозиторий без инициализации "ИмяРепозитория" в каталоге "АлиасКаталога" и запоминаю его как "Алиас"
Процедура ЯСоздаюНовыйРепозиторийБезИнициализацииВКаталогеИЗапоминаюЕгоКак(ИмяРепозитория, АлиасКаталога, Алиас) Экспорт
РепозиторийGit = Новый ГитРепозиторий();
КаталогРепозитория = ИнициализироватьРепозиторий(РепозиторийGit, ИмяРепозитория, АлиасКаталога);
БДД.СохранитьВКонтекст(Алиас, КаталогРепозитория);
КонецПроцедуры
// В каталоге "ИмяКаталога" репозитория "ИмяРепозитория" есть файл "ИмяФайла" // В каталоге "ИмяКаталога" репозитория "ИмяРепозитория" есть файл "ИмяФайла"
Процедура ВКаталогеРепозиторияЕстьФайл(ИмяКаталога, ИмяРепозитория, ИмяФайла)Экспорт Процедура ВКаталогеРепозиторияЕстьФайл(ИмяКаталога, ИмяРепозитория, ИмяФайла)Экспорт
@ -143,4 +152,18 @@
Ожидаем.Что(СодержимоеИсходногоФайла).Не_().Равно(СодержимоеКонечногоФайла); Ожидаем.Что(СодержимоеИсходногоФайла).Не_().Равно(СодержимоеКонечногоФайла);
КонецПроцедуры КонецПроцедуры
Функция ИнициализироватьРепозиторий(РепозиторийGit, ИмяРепозитория, АлиасКаталога)
КаталогРепозиториев = БДД.ПолучитьИзКонтекста(АлиасКаталога);
КаталогРепозитория = ОбъединитьПути(КаталогРепозиториев, ИмяРепозитория);
СоздатьКаталог(КаталогРепозитория);
РепозиторийGit.УстановитьРабочийКаталог(КаталогРепозитория);
РепозиторийGit.Инициализировать();
Возврат КаталогРепозитория;
КонецФункции

View File

@ -5,6 +5,24 @@
Как разработчик Как разработчик
Я хочу быть уверенным, что precommit4onec корректно обрабатывает изменения в репозитории Я хочу быть уверенным, что 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" в контексте Допустим Я очищаю параметры команды "oscript" в контексте
И я очищаю параметры команды "git" в контексте И я очищаю параметры команды "git" в контексте

View File

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

View File

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

View File

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

View File

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

View File

@ -133,7 +133,7 @@
Функция ПолучитьЖурналИзменений() Функция ПолучитьЖурналИзменений()
ПараметрыКомандыGit = Новый Массив; ПараметрыКомандыGit = Новый Массив;
ПараметрыКомандыGit.Добавить("diff-index --name-status --cached HEAD"); ПараметрыКомандыGit.Добавить("diff --name-status --staged --no-renames");
РепозиторийGit.ВыполнитьКоманду(ПараметрыКомандыGit); РепозиторийGit.ВыполнитьКоманду(ПараметрыКоманды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].Значение; ИсходнаяСтрока = ПодчиненныеМетаданные[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Сценарии": { "Precommt4onecСценарии": {
"ИспользоватьСценарииРепозитория": false, "ИспользоватьСценарииРепозитория": false,
"КаталогЛокальныхСценариев": "", "КаталогЛокальныхСценариев": "",
"ГлобальныеСценарии": [ "ГлобальныеСценарии": [
"ДобавлениеПробеловПередКлючевымиСловами.os", "ДобавлениеПробеловПередКлючевымиСловами.os",
"ЗапретИспользованияПерейти.os", "ЗапретИспользованияПерейти.os",
"КорректировкаXMLФорм.os", "КорректировкаXMLФорм.os",
"ОтключениеПолнотекстовогоПоиска.os", "ОтключениеПолнотекстовогоПоиска.os",
"ПроверкаДублейПроцедурИФункций.os", "ПроверкаДублейПроцедурИФункций.os",
"ПроверкаКорректностиОбластей.os", "ПроверкаКорректностиОбластей.os",
"РазборОбычныхФормНаИсходники.os", "РазборОбычныхФормНаИсходники.os",
"РазборОтчетовОбработокРасширений.os", "РазборОтчетовОбработокРасширений.os",
"СинхронизацияОбъектовМетаданныхИФайлов.os", "СинхронизацияОбъектовМетаданныхИФайлов.os",
"СортировкаДереваМетаданных.os", "СортировкаДереваМетаданных.os",
"УдалениеДублейМетаданных.os", "УдалениеДублейМетаданных.os",
"УдалениеЛишнихКонцевыхПробелов.os", "УдалениеЛишнихКонцевыхПробелов.os",
"УдалениеЛишнихПустыхСтрок.os" "УдалениеЛишнихПустыхСтрок.os"
], ],
"НастройкиСценариев": { "НастройкиСценариев": {
"ОтключениеПолнотекстовогоПоиска": { "ОтключениеПолнотекстовогоПоиска": {
"МетаданныеДляИсключения": { "МетаданныеДляИсключения": {
"src\\_example.xml": [ "src\\_example.xml": [
"Номер" "Номер",
], "ТабличнаяЧасть1.Реквизит"
"src\\_example2.xml": [] ],
} "src\\_example2.xml": []
}, }
"РазборОтчетовОбработокРасширений": { },
"ИспользоватьНастройкиПоУмолчанию": true, "РазборОтчетовОбработокРасширений": {
"ВерсияПлатформы": "" "ИспользоватьНастройкиПоУмолчанию": true,
} "ВерсияПлатформы": ""
} }
} }
}
} }