Skip to content

Commit

Permalink
Merge branch 'release/1.11'
Browse files Browse the repository at this point in the history
  • Loading branch information
bia-tech committed Aug 12, 2019
2 parents cac83e0 + 53f1b5c commit e0efd08
Show file tree
Hide file tree
Showing 11 changed files with 135 additions and 59 deletions.
39 changes: 31 additions & 8 deletions features/step_definitions/precommitonec_feature.os
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
ВсеШаги.Добавить("ЯУстанавливаюКодировкуВыводаКоманды");
ВсеШаги.Добавить("УФайлаЕстьМетка");
ВсеШаги.Добавить("СодержимоеФайлаИФайлаРазное");
ВсеШаги.Добавить("ЯСоздаюНовыйРепозиторийБезИнициализацииВКаталогеИЗапоминаюЕгоКак");

Возврат ВсеШаги;
КонецФункции
Expand Down Expand Up @@ -53,25 +54,33 @@
// я создаю новый репозиторий "ИмяРепозитория" в каталоге "АлиасКаталога" и запоминаю его как "Алиас"
Процедура ЯСоздаюНовыйРепозиторийВКаталогеИЗапоминаюЕгоКак(ИмяРепозитория, АлиасКаталога, Алиас) Экспорт

КаталогРепозиториев = БДД.ПолучитьИзКонтекста(АлиасКаталога);

КаталогРепозитория = ОбъединитьПути(КаталогРепозиториев, ИмяРепозитория);
СоздатьКаталог(КаталогРепозитория);

РепозиторийGit = Новый ГитРепозиторий();
РепозиторийGit.УстановитьРабочийКаталог(КаталогРепозитория);
РепозиторийGit.Инициализировать();
КаталогРепозитория = ИнициализироватьРепозиторий(РепозиторийGit, ИмяРепозитория, АлиасКаталога);

ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст("# Репозиторий " + Алиас);

ИмяФайлаreadme = ОбъединитьПути(КаталогРепозитория, "readme.md");
ТекстовыйДокумент.Записать(ИмяФайлаreadme);

РепозиторийGit.ДобавитьФайлВИндекс(ИмяФайлаreadme);
РепозиторийGit.Закоммитить("init", ИСТИНА);

БДД.СохранитьВКонтекст(Алиас, КаталогРепозитория);

КонецПроцедуры

// я создаю новый репозиторий без инициализации "ИмяРепозитория" в каталоге "АлиасКаталога" и запоминаю его как "Алиас"
Процедура ЯСоздаюНовыйРепозиторийБезИнициализацииВКаталогеИЗапоминаюЕгоКак(ИмяРепозитория, АлиасКаталога, Алиас) Экспорт

РепозиторийGit = Новый ГитРепозиторий();

КаталогРепозитория = ИнициализироватьРепозиторий(РепозиторийGit, ИмяРепозитория, АлиасКаталога);

БДД.СохранитьВКонтекст(Алиас, КаталогРепозитория);

КонецПроцедуры

// В каталоге "ИмяКаталога" репозитория "ИмяРепозитория" есть файл "ИмяФайла"
Процедура ВКаталогеРепозиторияЕстьФайл(ИмяКаталога, ИмяРепозитория, ИмяФайла)Экспорт

Expand Down Expand Up @@ -143,4 +152,18 @@

Ожидаем.Что(СодержимоеИсходногоФайла).Не_().Равно(СодержимоеКонечногоФайла);

КонецПроцедуры
КонецПроцедуры

Функция ИнициализироватьРепозиторий(РепозиторийGit, ИмяРепозитория, АлиасКаталога)

КаталогРепозиториев = БДД.ПолучитьИзКонтекста(АлиасКаталога);

КаталогРепозитория = ОбъединитьПути(КаталогРепозиториев, ИмяРепозитория);
СоздатьКаталог(КаталогРепозитория);

РепозиторийGit.УстановитьРабочийКаталог(КаталогРепозитория);
РепозиторийGit.Инициализировать();

Возврат КаталогРепозитория;

КонецФункции
18 changes: 18 additions & 0 deletions features/ВыполнениеПрекоммита.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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" в контексте
Expand Down
4 changes: 2 additions & 2 deletions features/Конфигурирование.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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" содержит "КаталогЛокальныхСценариев ="
Expand All @@ -24,7 +24,7 @@
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит
"""
precommit4onec v1.10.0
precommit4onec v1.11.1
Установленные настройки:
ИспользоватьСценарииРепозитория = Нет
КаталогЛокальныхСценариев =
Expand Down
6 changes: 3 additions & 3 deletions features/ПростыеКоманды.feature
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@
Сценарий: Получение версии продукта
Когда Я выполняю команду "oscript" с параметрами "src/main.os version"
Тогда Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "1.10.0"
И Вывод команды "oscript" содержит "1.11.1"
И Вывод команды "oscript" не содержит "precommit4onec v"
И Код возврата команды "oscript" равен 0

Сценарий: Получение помощи продукта
Когда Я выполняю команду "oscript" с параметрами "src/main.os help"
Тогда Вывод команды "oscript" содержит
"""
precommit4onec v1.10.0
precommit4onec v1.11.1
Возможные команды:
help - Выводит справку по командам
version - Выводит версию приложения
Expand All @@ -36,7 +36,7 @@
Когда Я выполняю команду "oscript" с параметрами "src/main.os"
Тогда Вывод команды "oscript" содержит
"""
precommit4onec v1.10.0
precommit4onec v1.11.1
Возможные команды:
help - Выводит справку по командам
version - Выводит версию приложения
Expand Down
26 changes: 21 additions & 5 deletions features/УстановкаПрекоммита.feature
Original file line number Diff line number Diff line change
Expand Up @@ -18,23 +18,39 @@
Когда Я выполняю команду "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"

Сценарий: precommit4onec не устанавливается в пустой каталог
Когда я создаю временный каталог и запоминаю его как "ПустойКаталог"
И я переключаюсь во временный каталог "ПустойКаталог"
И Я выполняю команду "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"
24 changes: 21 additions & 3 deletions src/Классы/КомандаИнсталл.os
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
Процедура НастроитьКоманду(Знач Команда, Знач Парсер) Экспорт

// Добавление параметров команды
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРепозитория", "Каталог репозитория, которому необходимо подключить precommit. При наличии флага -r устанавливает во вложенные в указанных каталог репозитории.");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРепозитория", "Каталог репозитория, к которому необходимо подключить precommit. Флаг -r, указанный после каталога репозитория, устанавливает во вложенные в указанный каталог репозитории.");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-source-dir", "Каталог расположения исходных файлов относительно корня репозитория. По умолчанию <src>");
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-from-path", "Установить с учетом того, что скрипт прописан в path");
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-r", "Устанавливает во вложенные каталоги. Если вложенный каталог не является репозиторием, то он пропускается.");
Expand All @@ -31,7 +31,17 @@

Лог = Приложение.ПолучитьЛог();
КаталогРепозитория = ПараметрыКоманды["КаталогРепозитория"];


Если НЕ ЗначениеЗаполнено(КаталогРепозитория) Тогда

Лог.Ошибка("Для установки прекоммита надо указать каталог");
Возврат Приложение.РезультатыКоманд().НеверныеПараметры;

КонецЕсли;

ФайлКаталогРепозитория = Новый Файл(КаталогРепозитория);

Если НЕ ФайлКаталогРепозитория.Существует() ИЛИ ФайлКаталогРепозитория.ЭтоФайл() Тогда

Лог.Ошибка("Каталог репозитория '%1' не существует или это файл", КаталогРепозитория);
Expand Down Expand Up @@ -86,7 +96,6 @@

РепозиторийGit = Новый ГитРепозиторий();
РепозиторийGit.УстановитьРабочийКаталог(КаталогРепозитория);
РепозиторийGit.УстановитьНастройку("core.quotePath", "false", РежимУстановкиНастроекGit.Локально);

// проверка каталога
Если НЕ РепозиторийGit.ЭтоРепозиторий() Тогда
Expand All @@ -95,7 +104,7 @@
Возврат;

КонецЕсли;

РепозиторийGit.УстановитьНастройку("core.quotePath", "false", РежимУстановкиНастроекGit.Локально); // решение проблемы с кириллическими путями
// установка
КаталогGitHook = ОбъединитьПути(КаталогРепозитория, ".git", "hooks");
ФайлКаталогGitHook = Новый Файл(КаталогGitHook);
Expand All @@ -109,6 +118,15 @@
ТекстPrecommtHook = Новый ТекстовыйДокумент;
ТекстPrecommtHook.УстановитьТекст(КомандаPrecommtHook);
ТекстPrecommtHook.Записать(ФайлPrecommtHook, КодировкаТекста.UTF8NoBOM, Символы.ПС);

СисИнфо = Новый СистемнаяИнформация;
ЭтоWindows = Найти(НРег(СисИнфо.ВерсияОС), "windows") > 0;

Если НЕ ЭтоWindows Тогда

ЗапуститьПриложение("chmod +x " + ФайлPrecommtHook);

КонецЕсли;

Лог.Информация("Pre-commit hook для %1 создан", КаталогРепозитория);

Expand Down
2 changes: 1 addition & 1 deletion src/Классы/КомандаПрекоммит.os
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@
Функция ПолучитьЖурналИзменений()

ПараметрыКомандыGit = Новый Массив;
ПараметрыКомандыGit.Добавить("diff-index --name-status --cached HEAD");
ПараметрыКомандыGit.Добавить("diff --name-status --staged --no-renames");
РепозиторийGit.ВыполнитьКоманду(ПараметрыКомандыGit);
РезультатВывода = РепозиторийGit.ПолучитьВыводКоманды();
СтрокиВывода = СтрРазделить(РезультатВывода, Символы.ПС);
Expand Down
2 changes: 1 addition & 1 deletion src/Модули/ПараметрыПриложения.os
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
//
Функция ВерсияПродукта() Экспорт

Возврат "1.10.0";
Возврат "1.11.1";

КонецФункции // ВерсияПродукта

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@

Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл

Если МассивИсключенийМетаданных.Найти(ОбъектМетаданных.Тип) <> Неопределено Тогда
Если МассивИсключенийМетаданных.Найти(ОбъектМетаданных.ТипМетаданных) <> Неопределено Тогда

Продолжить;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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]+>");
РегекспМетаданные.ИгнорироватьРегистр = ИСТИНА;
РегекспМетаданные.Многострочный = Истина;
ОбъектыМетаданныхСтроки = РегекспМетаданные.НайтиСовпадения(ИсходнаяСтрока);
Expand Down
Loading

0 comments on commit e0efd08

Please sign in to comment.