diff --git a/features/Конфигурирование.feature b/features/Конфигурирование.feature index 8446e4f..edf34fa 100644 --- a/features/Конфигурирование.feature +++ b/features/Конфигурирование.feature @@ -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 Установленные настройки: Базовые настройки ИспользоватьСценарииРепозитория = Нет КаталогЛокальныхСценариев = diff --git a/features/ПростыеКоманды.feature b/features/ПростыеКоманды.feature index 7de9bf1..86a4b8f 100644 --- a/features/ПростыеКоманды.feature +++ b/features/ПростыеКоманды.feature @@ -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 - Выводит версию приложения diff --git a/features/УстановкаПрекоммита.feature b/features/УстановкаПрекоммита.feature index ade35cd..6890b89 100644 --- a/features/УстановкаПрекоммита.feature +++ b/features/УстановкаПрекоммита.feature @@ -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" diff --git a/src/Классы/КомандаИнсталл.os b/src/Классы/КомандаИнсталл.os index 9979145..b08d85c 100644 --- a/src/Классы/КомандаИнсталл.os +++ b/src/Классы/КомандаИнсталл.os @@ -18,6 +18,9 @@ Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-source-dir", "Каталог расположения исходных файлов относительно корня репозитория. По умолчанию "); Парсер.ДобавитьПараметрФлагКоманды(Команда, "-from-path", "Установить с учетом того, что скрипт прописан в path"); Парсер.ДобавитьПараметрФлагКоманды(Команда, "-r", "Устанавливает во вложенные каталоги. Если вложенный каталог не является репозиторием, то он пропускается."); + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-ibconnection", "Расположение БД для выполнения операций"); + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-u", "Имя пользователя для соединения с базой"); + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-p", "Пароль пользователя"); КонецПроцедуры // НастроитьКоманду @@ -55,6 +58,32 @@ КаталогИсходныхФайлов = "src"; КонецЕсли; + + ПараметрыСоединенияСИБ = ""; + + РасположениеИБ = ПараметрыКоманды["-ibconnection"]; + Если ЗначениеЗаполнено(РасположениеИБ) Тогда + + ПараметрыСоединенияСИБИмяПользователя = ""; + ПараметрыСоединенияСИБПарольПользователя = ""; + + ИмяПользователя = ПараметрыКоманды["-u"]; + + Если Не ПустаяСтрока(ИмяПользователя) Тогда + + ПараметрыСоединенияСИБИмяПользователя = СтрШаблон(" -u ""%1""", ИмяПользователя); + + ПарольПользователя = ПараметрыКоманды["-p"]; + + Если Не ПустаяСтрока(ПарольПользователя) Тогда + ПараметрыСоединенияСИБПарольПользователя = СтрШаблон(" -p ""%1""", ПарольПользователя); + КонецЕсли; + + КонецЕсли; + + ПараметрыСоединенияСИБ = СтрШаблон(" -ibconnection ""%1""%2%3", РасположениеИБ, ПараметрыСоединенияСИБИмяПользователя, ПараметрыСоединенияСИБПарольПользователя); + + КонецЕсли; КомандаЗапускаПриложения = Приложение.ИмяПродукта(); Если НЕ ПараметрыКоманды["-from-path"] Тогда @@ -62,7 +91,7 @@ КонецЕсли; КомандаPrecommtHook = СтрШаблон("#!/bin/sh - |%1 precommit ./ -source-dir ""%2""", КомандаЗапускаПриложения, КаталогИсходныхФайлов); + |%1 precommit ./ -source-dir ""%2""%3", КомандаЗапускаПриложения, КаталогИсходныхФайлов, ПараметрыСоединенияСИБ); Лог.Отладка("Команда pre-commit hook %2`%1`", КомандаPrecommtHook, Символы.ПС); Если ПараметрыКоманды["-r"] Тогда diff --git a/src/Классы/КомандаПрекоммит.os b/src/Классы/КомандаПрекоммит.os index 67852de..62f486b 100644 --- a/src/Классы/КомандаПрекоммит.os +++ b/src/Классы/КомандаПрекоммит.os @@ -19,7 +19,10 @@ Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРепозитория", "Каталог анализируемого репозитория"); Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-source-dir", "Каталог расположения исходных файлов относительно корня репозитория. По умолчанию "); - + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-ibconnection", "Расположение БД для выполнения операций"); + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-u", "Имя пользователя для соединения с базой"); + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-p", "Пароль пользователя"); + КонецПроцедуры // НастроитьКоманду // Выполняет логику команды diff --git a/src/Модули/ПараметрыПриложения.os b/src/Модули/ПараметрыПриложения.os index 56c0a03..847213a 100644 --- a/src/Модули/ПараметрыПриложения.os +++ b/src/Модули/ПараметрыПриложения.os @@ -1,3 +1,5 @@ +#Использовать logos + /////////////////////////////////////////////////////////////////////////////// // // Служебный модуль с набором служебных параметров приложения @@ -22,7 +24,7 @@ // Функция ВерсияПродукта() Экспорт - Возврат "22.03"; + Возврат "22.11"; КонецФункции // ВерсияПродукта diff --git a/src/Модули/ТипыФайлов.os b/src/Модули/ТипыФайлов.os index 221d9f5..6f71868 100644 --- a/src/Модули/ТипыФайлов.os +++ b/src/Модули/ТипыФайлов.os @@ -22,7 +22,7 @@ КонецЕсли; - Возврат СтрСравнить(Файл.Расширение, ".bsl") = 0; + Возврат СтрСравнить(Файл.Расширение, ".bsl") = 0 ИЛИ СтрСравнить(Файл.Расширение, ".os") = 0; КонецФункции diff --git a/src/СценарииОбработки/КорректировкаXMLФорм.os b/src/СценарииОбработки/КорректировкаXMLФорм.os index 3825a21..b4132c4 100644 --- a/src/СценарииОбработки/КорректировкаXMLФорм.os +++ b/src/СценарииОбработки/КорректировкаXMLФорм.os @@ -61,7 +61,7 @@ СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла); - ПаттернID = ?(EDT, "([0-9-]+)<\/id>", "id=\""([0-9-]+)\""\/*>"); + ПаттернID = ?(EDT, "([0-9]+)<\/id>", "id=\""([0-9]+)\""\/*>"); Регексп = Новый РегулярноеВыражение(ПаттернID); Регексп.ИгнорироватьРегистр = ИСТИНА; @@ -100,6 +100,16 @@ ТЧ.Сортировать("Значение УБЫВ"); ПоследнийНомер = ТЧ[0].Значение; ТЧ.Сортировать("Количество УБЫВ"); + Если ТЧ[0].Количество = 1 Тогда + + Возврат Истина; + + Иначе + + СвободныеИдентификаторы = ВычислитьСвободныеИдентификаторы(ТЧ); + + КонецЕсли; + Для каждого СтрокаТЧ Из ТЧ Цикл Если СтрокаТЧ.Количество = 1 Тогда @@ -111,8 +121,8 @@ Пока СтрокаТЧ.Количество > 1 Цикл ИсходнаяСтрока = ?(EDT, "" + СтрокаТЧ.Значение + "<", "id=""" + СтрокаТЧ.Значение + """"); - ПоследнийНомер = ПоследнийНомер + 1; - СтрокаЗамены = ?(EDT, "" + ПоследнийНомер + "<", "id=""" + ПоследнийНомер + """"); + СвободныйИдентификатор = ПолучитьСвободныйИдентификатор(СвободныеИдентификаторы, ПоследнийНомер); + СтрокаЗамены = ?(EDT, "" + СвободныйИдентификатор + "<", "id=""" + СвободныйИдентификатор + """"); Поз = СтрНайти(СодержимоеФайла, ИсходнаяСтрока); @@ -129,4 +139,33 @@ Возврат Истина; -КонецФункции \ No newline at end of file +КонецФункции + +Функция ВычислитьСвободныеИдентификаторы(ТЧ) + СписокЗначений = Новый СписокЗначений(); + СписокЗначений.ЗагрузитьЗначения(ТЧ.ВыгрузитьКолонку("Значение")); + СписокЗначений.СортироватьПоЗначению(); + + СвободныеИдентификаторы = Новый Массив; + Для Ит = 0 По СписокЗначений.Количество() - 2 Цикл + Если СписокЗначений[Ит].Значение = СписокЗначений[Ит + 1].Значение Тогда + Продолжить; + КонецЕсли; + Для Ид = СписокЗначений[Ит].Значение + 1 По СписокЗначений[Ит + 1].Значение - 1 Цикл + СвободныеИдентификаторы.Добавить(Ид); + КонецЦикла; + КонецЦикла; + + Возврат СвободныеИдентификаторы; +КонецФункции + +Функция ПолучитьСвободныйИдентификатор(СвободныеИдентификаторы, ПоследнийНомер) + Если СвободныеИдентификаторы.Количество() Тогда + СвободныйИдентификатор = СвободныеИдентификаторы[0]; + СвободныеИдентификаторы.Удалить(0); + Возврат СвободныйИдентификатор; + Иначе + ПоследнийНомер = ПоследнийНомер + 1; + Возврат ПоследнийНомер; + КонецЕсли; +КонецФункции