1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2024-11-24 08:32:25 +02:00

Merge branch 'release/22.11'

This commit is contained in:
Maximov Valery 2022-11-26 09:10:27 +03:00
commit 425ff6855d
8 changed files with 90 additions and 17 deletions

View File

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

View File

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

View File

@ -18,7 +18,7 @@
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v22.03"
И Вывод команды "oscript" содержит "precommit4onec v22.11"
И Вывод команды "oscript" содержит "Pre-commit hook для rep1 создан"
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
@ -28,14 +28,14 @@
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v22.03"
И Вывод команды "oscript" содержит "precommit4onec v22.11"
И Вывод команды "oscript" содержит "не является репозиторием git"
Сценарий: Установка precommit4onec во вложенные каталоги
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v22.03"
И Вывод команды "oscript" содержит "precommit4onec v22.11"
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit"
@ -51,6 +51,6 @@
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v22.03"
И Вывод команды "oscript" содержит "precommit4onec v22.11"
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit"

View File

@ -18,6 +18,9 @@
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-source-dir", "Каталог расположения исходных файлов относительно корня репозитория. По умолчанию <src>");
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-from-path", "Установить с учетом того, что скрипт прописан в path");
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-r", "Устанавливает во вложенные каталоги. Если вложенный каталог не является репозиторием, то он пропускается.");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-ibconnection", "Расположение БД для выполнения операций");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-u", "Имя пользователя для соединения с базой");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-p", "Пароль пользователя");
КонецПроцедуры // НастроитьКоманду
@ -56,13 +59,39 @@
КонецЕсли;
ПараметрыСоединенияСИБ = "";
РасположениеИБ = ПараметрыКоманды["-ibconnection"];
Если ЗначениеЗаполнено(РасположениеИБ) Тогда
ПараметрыСоединенияСИБИмяПользователя = "";
ПараметрыСоединенияСИБПарольПользователя = "";
ИмяПользователя = ПараметрыКоманды["-u"];
Если Не ПустаяСтрока(ИмяПользователя) Тогда
ПараметрыСоединенияСИБИмяПользователя = СтрШаблон(" -u ""%1""", ИмяПользователя);
ПарольПользователя = ПараметрыКоманды["-p"];
Если Не ПустаяСтрока(ПарольПользователя) Тогда
ПараметрыСоединенияСИБПарольПользователя = СтрШаблон(" -p ""%1""", ПарольПользователя);
КонецЕсли;
КонецЕсли;
ПараметрыСоединенияСИБ = СтрШаблон(" -ibconnection ""%1""%2%3", РасположениеИБ, ПараметрыСоединенияСИБИмяПользователя, ПараметрыСоединенияСИБПарольПользователя);
КонецЕсли;
КомандаЗапускаПриложения = Приложение.ИмяПродукта();
Если НЕ ПараметрыКоманды["-from-path"] Тогда
КомандаЗапускаПриложения = СтрШаблон("oscript -encoding=utf-8 ""%1""", Приложение.ПутьКИсполняемомуФайлу());
КонецЕсли;
КомандаPrecommtHook = СтрШаблон("#!/bin/sh
|%1 precommit ./ -source-dir ""%2""", КомандаЗапускаПриложения, КаталогИсходныхФайлов);
|%1 precommit ./ -source-dir ""%2""%3", КомандаЗапускаПриложения, КаталогИсходныхФайлов, ПараметрыСоединенияСИБ);
Лог.Отладка("Команда pre-commit hook %2`%1`", КомандаPrecommtHook, Символы.ПС);
Если ПараметрыКоманды["-r"] Тогда

View File

@ -19,6 +19,9 @@
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРепозитория", "Каталог анализируемого репозитория");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-source-dir",
"Каталог расположения исходных файлов относительно корня репозитория. По умолчанию <src>");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-ibconnection", "Расположение БД для выполнения операций");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-u", "Имя пользователя для соединения с базой");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-p", "Пароль пользователя");
КонецПроцедуры // НастроитьКоманду

View File

@ -1,3 +1,5 @@
#Использовать logos
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с набором служебных параметров приложения
@ -22,7 +24,7 @@
//
Функция ВерсияПродукта() Экспорт
Возврат "22.03";
Возврат "22.11";
КонецФункции // ВерсияПродукта

View File

@ -22,7 +22,7 @@
КонецЕсли;
Возврат СтрСравнить(Файл.Расширение, ".bsl") = 0;
Возврат СтрСравнить(Файл.Расширение, ".bsl") = 0 ИЛИ СтрСравнить(Файл.Расширение, ".os") = 0;
КонецФункции

View File

@ -61,7 +61,7 @@
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
ПаттернID = ?(EDT, "<id>([0-9-]+)<\/id>", "id=\""([0-9-]+)\""\/*>");
ПаттернID = ?(EDT, "<id>([0-9]+)<\/id>", "id=\""([0-9]+)\""\/*>");
Регексп = Новый РегулярноеВыражение(ПаттернID);
Регексп.ИгнорироватьРегистр = ИСТИНА;
@ -100,6 +100,16 @@
ТЧ.Сортировать("Значение УБЫВ");
ПоследнийНомер = ТЧ[0].Значение;
ТЧ.Сортировать("Количество УБЫВ");
Если ТЧ[0].Количество = 1 Тогда
Возврат Истина;
Иначе
СвободныеИдентификаторы = ВычислитьСвободныеИдентификаторы(ТЧ);
КонецЕсли;
Для каждого СтрокаТЧ Из ТЧ Цикл
Если СтрокаТЧ.Количество = 1 Тогда
@ -111,8 +121,8 @@
Пока СтрокаТЧ.Количество > 1 Цикл
ИсходнаяСтрока = ?(EDT, "<id>" + СтрокаТЧ.Значение + "<", "id=""" + СтрокаТЧ.Значение + """");
ПоследнийНомер = ПоследнийНомер + 1;
СтрокаЗамены = ?(EDT, "<id>" + ПоследнийНомер + "<", "id=""" + ПоследнийНомер + """");
СвободныйИдентификатор = ПолучитьСвободныйИдентификатор(СвободныеИдентификаторы, ПоследнийНомер);
СтрокаЗамены = ?(EDT, "<id>" + СвободныйИдентификатор + "<", "id=""" + СвободныйИдентификатор + """");
Поз = СтрНайти(СодержимоеФайла, ИсходнаяСтрока);
@ -130,3 +140,32 @@
Возврат Истина;
КонецФункции
Функция ВычислитьСвободныеИдентификаторы(ТЧ)
СписокЗначений = Новый СписокЗначений();
СписокЗначений.ЗагрузитьЗначения(ТЧ.ВыгрузитьКолонку("Значение"));
СписокЗначений.СортироватьПоЗначению();
СвободныеИдентификаторы = Новый Массив;
Для Ит = 0 По СписокЗначений.Количество() - 2 Цикл
Если СписокЗначений[Ит].Значение = СписокЗначений[Ит + 1].Значение Тогда
Продолжить;
КонецЕсли;
Для Ид = СписокЗначений[Ит].Значение + 1 По СписокЗначений[Ит + 1].Значение - 1 Цикл
СвободныеИдентификаторы.Добавить(Ид);
КонецЦикла;
КонецЦикла;
Возврат СвободныеИдентификаторы;
КонецФункции
Функция ПолучитьСвободныйИдентификатор(СвободныеИдентификаторы, ПоследнийНомер)
Если СвободныеИдентификаторы.Количество() Тогда
СвободныйИдентификатор = СвободныеИдентификаторы[0];
СвободныеИдентификаторы.Удалить(0);
Возврат СвободныйИдентификатор;
Иначе
ПоследнийНомер = ПоследнийНомер + 1;
Возврат ПоследнийНомер;
КонецЕсли;
КонецФункции