1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2025-01-03 22:52:10 +02:00

#ONECICD-312

Интерактивная настройка:
* Тесты
* Исправлены выявленные ошибки
This commit is contained in:
aleksey.koryakin 2020-02-18 12:01:13 +03:00
parent f37213aef0
commit 6b2e4451ce
6 changed files with 180 additions and 68 deletions

View File

@ -21,6 +21,7 @@
ВсеШаги.Добавить("УФайлаЕстьМетка");
ВсеШаги.Добавить("СодержимоеФайлаИФайлаРазное");
ВсеШаги.Добавить("ЯСоздаюНовыйРепозиторийБезИнициализацииВКаталогеИЗапоминаюЕгоКак");
ВсеШаги.Добавить("ЯСоздаюФайлВКодировкеСТекстом");
Возврат ВсеШаги;
КонецФункции
@ -146,6 +147,15 @@
КонецПроцедуры
//Я создаю файл "СпециальныйКаталог/ФайлСТекстом.txt" в кодировке "cp866" с текстом "текст178"
Процедура ЯСоздаюФайлВКодировкеСТекстом(Знач ПутьФайла, Знач Кодировка, Знач ТекстФайла) Экспорт
ПутьФайла = БДД.ПолучитьПутьФайлаСУчетомПеременныхКонтекста(ПутьФайла);
ЗаписьТекста = Новый ЗаписьТекста(ПутьФайла, Кодировка);
ЗаписьТекста.ЗаписатьСтроку(ТекстФайла);
ЗаписьТекста.Закрыть();
КонецПроцедуры
Функция ИнициализироватьРепозиторий(РепозиторийGit, ИмяРепозитория, АлиасКаталога)
КаталогРепозиториев = БДД.ПолучитьИзКонтекста(АлиасКаталога);

View File

@ -0,0 +1,85 @@
# language: ru
Функциональность: Настройка конфигурации прекоммита
Как разработчик
Я хочу иметь возможность изменять настройки precommit4onec
Чтобы автоматически выполнять обработку исходников перед фиксацией изменений в репозитории
Контекст:
Допустим Я очищаю параметры команды "oscript" в контексте
И я очищаю параметры команды "git" в контексте
И Я устанавливаю кодировку вывода "utf-8" команды "git"
И я включаю отладку лога с именем "oscript.app.precommit4onec"
И я создаю временный каталог и запоминаю его как "КаталогРепозиториев"
И я переключаюсь во временный каталог "КаталогРепозиториев"
И я создаю новый репозиторий без инициализации "rep1" в каталоге "КаталогРепозиториев" и запоминаю его как "РабочийКаталог"
# И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
И я установил рабочий каталог как текущий каталог
Сценарий: Настройки глобальных сценариев
Когда Я создаю файл "answers.txt" в кодировке "cp866" с текстом
"""
y
y
y
y
y
y
y
y
y
y
y
y
y
y
y
y
local
n
"""
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -rep-path .\ -config < answers.txt"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Файл "v8config.json" содержит
"""
"ИспользоватьСценарииРепозитория": true,
"КаталогЛокальныхСценариев": "local",
"ГлобальныеСценарии": [
"ДобавлениеПробеловПередКлючевымиСловами.os",
"ЗапретИспользованияПерейти.os",
"ИсправлениеНеКаноническогоНаписания.os",
"КорректировкаXMLФорм.os",
"ОтключениеПолнотекстовогоПоиска.os",
"ПроверкаДублейПроцедурИФункций.os",
"ПроверкаКорректностиОбластей.os",
"РазборОбычныхФормНаИсходники.os",
"РазборОтчетовОбработокРасширений.os",
"СинхронизацияОбъектовМетаданныхИФайлов.os",
"СортировкаДереваМетаданных.os",
"УдалениеДублейМетаданных.os",
"УдалениеЛишнихКонцевыхПробелов.os",
"УдалениеЛишнихПустыхСтрок.os"
],
"""
Сценарий: Настройки подпроекта
Когда Я создаю файл "answers.txt" в кодировке "cp866" с текстом
"""
n
n
n
y
tests
n
n
n
n
"""
И Я создаю каталог "tests" в рабочем каталоге
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -rep-path .\ -config < answers.txt"
И Я сообщаю вывод команды "oscript"
Тогда Код возврата команды "oscript" равен 0
И Файл "v8config.json" содержит "tests\\"

View File

@ -69,6 +69,9 @@
ИначеЕсли ПараметрыКоманды["-config"] Тогда
НастройкиПроектов = Новый Соответствие();
БазовыеНастройки = Неопределено;
Если ЗначениеЗаполнено(ПараметрыКоманды["-child-path"]) Тогда
УказанныйПуть = ПараметрыКоманды["-child-path"];
@ -76,21 +79,20 @@
Если ПроверитьАдресДополнительногоКаталога(КаталогРепозитория, УказанныйПуть, УправлениеНастройками) Тогда
УказанныйПуть = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория, УказанныйПуть);
НовыеНастройки = ИнтерактивнаяНастройка(УказанныйПуть, УправлениеНастройками, Ложь, Приложение.КаталогСценариев(), Истина);
УправлениеНастройками.ОбновитьКонфигурацию();
УправлениеНастройками.ЗаписатьНастройкиПриложения(УказанныйПуть, НовыеНастройки.Получить(УказанныйПуть));
НовыеНастройки = ИнтерактивнаяНастройка(УказанныйПуть, Ложь, Приложение.КаталогСценариев());
НастройкиПроектов.Вставить(УказанныйПуть, НовыеНастройки);
КонецЕсли;
Иначе
НовыеНастройки = ИнтерактивнаяНастройка(КаталогРепозитория, УправлениеНастройками, РаботаСГлобальнымиНастройками, Приложение.КаталогСценариев());
СконфигурироватьДополнительныеКаталоги(УправлениеНастройками, НовыеНастройки, Приложение.КаталогСценариев(), КаталогРепозитория);
РедакторНастроек.СброситьНастройкиРепозитория();
РедакторНастроек.ЗаписатьНастройкиРепозитория(НовыеНастройки);
БазовыеНастройки = ИнтерактивнаяНастройка(КаталогРепозитория, РаботаСГлобальнымиНастройками, Приложение.КаталогСценариев());
СконфигурироватьДополнительныеКаталоги(УправлениеНастройками, НастройкиПроектов, Приложение.КаталогСценариев(), КаталогРепозитория);
КонецЕсли;
РедакторНастроек.ОбновитьНастройки(БазовыеНастройки, НастройкиПроектов);
Иначе
НапечататьНастройки(УправлениеНастройками);
@ -193,9 +195,11 @@
КонецПроцедуры
Функция ИнтерактивнаяНастройка(КаталогРепозитория, УправлениеНастройками, ГлобальныеНастройки, КаталогГлобальныхСценариев, ЭтоДопПроект = Ложь)
Функция ИнтерактивнаяНастройка(КаталогРепозитория, ГлобальныеНастройки, КаталогГлобальныхСценариев)
ИмяПриложения = УправлениеНастройками.ИмяПоУмолчанию();
УправлениеНастройками = МенеджерНастроек.Настройки();
ИмяПриложения = МенеджерНастроек.КлючНастройкиPrecommit();
ПолныеНастройки = Новый Соответствие;
Сообщить(СтрШаблон("Настройка конфигурации precommit %1%2", Символы.ПС, КаталогРепозитория));
@ -255,7 +259,7 @@
Лог.Отладка("Итоговый список исполняемых сценариев: %1%2", Символы.ПС, СтрСоединить(ИсполняемыеСценарии, Символы.ПС));
НастройкиСценариев = СценарииОбработки.СформироватьНастройкиСценариев(ИсполняемыеСценарии, КаталогГлобальныхСценариев);
НастройкиСценариев = СценарииОбработки.НастройкиСценариев(ИсполняемыеСценарии, КаталогГлобальныхСценариев);
НастройкиПриложения.Вставить("ИспользоватьСценарииРепозитория", ИспользоватьСценарииРепозитория);
НастройкиПриложения.Вставить("КаталогЛокальныхСценариев", КаталогЛокальныхСценариев);
@ -277,28 +281,22 @@
НастройкиПриложения.Вставить("НастройкиСценариев", НастройкиСценариев);
Если ЭтоДопПроект Тогда
НастройкиКаталога = Новый Соответствие;
ПолныеНастройки.Вставить(КаталогРепозитория, НастройкиПриложения);
КонецЕсли;
ПолныеНастройки.Вставить(ИмяПриложения, НастройкиПриложения);
Возврат ПолныеНастройки;
Возврат НастройкиПриложения;
КонецФункции
Процедура СконфигурироватьДополнительныеКаталоги(УправлениеНастройками, ОсновныеНастройки, КаталогГлобальныхСценариев, КаталогРепозитория)
Процедура СконфигурироватьДополнительныеКаталоги(УправлениеНастройками, НастройкиПроектов, КаталогГлобальныхСценариев, КаталогРепозитория)
Пока ИнтерактивныйРедактор.ПолучитьНастройкуБулево("Сконфигурировать дополнительный каталог со своими правилами обработки?", Ложь) Цикл
АдресКаталога = ИнтерактивныйРедактор.ПолучитьНастройкуСтрока("Введите относительный путь в репозитории к каталогу", "");
Если ПроверитьАдресДополнительногоКаталога(КаталогРепозитория, АдресКаталога, УправлениеНастройками) Тогда
АдресКаталога = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория, АдресКаталога);
НастройкиДополнительные = ИнтерактивнаяНастройка(АдресКаталога, УправлениеНастройками, Ложь, КаталогГлобальныхСценариев, Истина);
ОсновныеНастройки.Вставить(АдресКаталога, НастройкиДополнительные.Получить(АдресКаталога));
АдресКаталога = МенеджерНастроек.НормализованноеИмяПроекта(АдресКаталога);
НастройкиПроекта = ИнтерактивнаяНастройка(АдресКаталога, Ложь, КаталогГлобальныхСценариев);
НастройкиПроектов.Вставить(АдресКаталога, НастройкиПроекта);
КонецЕсли;

View File

@ -221,21 +221,9 @@
Запись.Закрыть();
НовыйКонфиг = Ложь;
КонецПроцедуры // ОбновитьКонфигурационныйФайл()
Функция ИмяПоУмолчанию() Экспорт
Возврат "Precommt4onecСценарии";
КонецФункции
Функция ИмяБазовойНастройки() Экспорт
Возврат "General";
КонецФункции
///////////////////////////////////////////////////////////////////
// ПриСозданииОбъекта
@ -289,18 +277,6 @@
КонецПроцедуры // ПриСозданииОбъекта()
Процедура ЗаписатьСтруктуруНастроек(Настройки) Экспорт
ШаблонНастройки = "%1\%2";
Для Каждого Настройка Из Настройки Цикл
ЗаписатьНастройку(СтрШаблон(ШаблонНастройки, ИмяПоУмолчанию(), Настройка.Ключ), Настройка.Значение);
КонецЦикла;
КонецПроцедуры
Процедура ОбновитьКонфигурацию() Экспорт
ОбновлятьКонфигурацию = Истина;
КонецПроцедуры

View File

@ -225,6 +225,25 @@
КонецФункции
Процедура УдалитьПроекты() Экспорт
ЗначениеНастройки("").Удалить(КлючПроекты()); // Удаляем ветку "Проекты" из корня настроек прекоммит
КонецПроцедуры
Процедура УдалитьПроект(Подпроект) Экспорт
ИмяПроекта = ИмяПроектаДляФайла(Подпроект);
Если НЕ ЗначениеЗаполнено(ИмяПроекта) ИЛИ СтрДлина(ИмяПроекта) <> СтрДлина(Подпроект) Тогда
МенеджерПриложения.ПолучитьЛог().Предупреждение("Не найден проект %1", Подпроект);
Возврат;
КонецЕсли;
ЗначениеНастройки(КлючПроекты()).Удалить(ИмяПроекта);
КонецПроцедуры
#КонецОбласти
Функция ЭтоНовый() Экспорт
@ -251,25 +270,6 @@
КонецПроцедуры
Процедура УдалитьПроекты() Экспорт
ЗначениеНастройки("").Удалить(КлючПроекты()); // Удаляем ветку "Проекты" из корня настроек прекоммит
КонецПроцедуры
Процедура УдалитьПроект(Подпроект) Экспорт
ИмяПроекта = ИмяПроектаДляФайла(Подпроект);
Если НЕ ЗначениеЗаполнено(ИмяПроекта) ИЛИ СтрДлина(ИмяПроекта) <> СтрДлина(Подпроект) Тогда
МенеджерПриложения.ПолучитьЛог().Предупреждение("Не найден проект %1", Подпроект);
Возврат;
КонецЕсли;
ЗначениеНастройки(КлючПроекты()).Удалить(ИмяПроекта);
КонецПроцедуры
///////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЙ ФУНКЦИОНАЛ
///////////////////////////////////////////////////////////////////

View File

@ -71,4 +71,47 @@
УправлениеНастройками.ЗаписатьНастройкиПриложения(НоваяНастройка.Ключ, НоваяНастройка.Значение);
КонецЦикла;
КонецПроцедуры
Процедура ОбновитьНастройки(БазовыеНастройки, НастройкиПроектов) Экспорт
Лог = МенеджерПриложения.ПолучитьЛог();
Лог.Отладка("Обновление настроек");
КлючПроекты = МенеджерНастроек.КлючПроекты();
Если БазовыеНастройки = Неопределено Тогда
БазовыеНастройки = МенеджерНастроек.НастройкиПроекта("");
Иначе
БазовыеНастройки.Вставить(КлючПроекты, Новый Соответствие());
Для Каждого ИмяПроекта Из МенеджерНастроек.ПроектыКонфигурации() Цикл
БазовыеНастройки[КлючПроекты].Вставить(ИмяПроекта, МенеджерНастроек.НастройкиПроекта(ИмяПроекта));
КонецЦикла;
КонецЕсли;
Если ЗначениеЗаполнено(НастройкиПроектов) Тогда
Если БазовыеНастройки[КлючПроекты] = Неопределено Тогда
БазовыеНастройки.Вставить(КлючПроекты, Новый Соответствие());
КонецЕсли;
Для Каждого Элемент Из НастройкиПроектов Цикл
БазовыеНастройки[КлючПроекты].Вставить(Элемент.Ключ, Элемент.Значение);
КонецЦикла;
КонецЕсли;
МенеджерНастроек.Настройки().ЗаписатьНастройкиПриложения(МенеджерНастроек.КлючНастройкиPrecommit(), БазовыеНастройки);
КонецПроцедуры