Skip to content

Commit

Permalink
Merge branch 'release/24.03'
Browse files Browse the repository at this point in the history
  • Loading branch information
theshadowco committed Mar 13, 2024
2 parents c37730d + dec855d commit e0d6463
Show file tree
Hide file tree
Showing 45 changed files with 1,400 additions and 356 deletions.
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 v23.12"
И Вывод команды "oscript" содержит "precommit4onec v24.03"
И Вывод команды "oscript" содержит "Установленные настройки:"
И Вывод команды "oscript" содержит "ИспользоватьСценарииРепозитория ="
И Вывод команды "oscript" содержит "КаталогЛокальныхСценариев ="
Expand All @@ -33,7 +33,7 @@
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global"
И Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v23.12"
И Вывод команды "oscript" содержит "precommit4onec v24.03"
И Вывод команды "oscript" содержит "Установленные настройки: Базовые настройки"
И Вывод команды "oscript" содержит "КаталогЛокальныхСценариев ="
И Вывод команды "oscript" содержит "ГлобальныеСценарии = ВставкаКопирайтов.os,ДобавлениеПробеловПередКлючевымиСловами.os,ЗапретИспользованияПерейти.os,ИсправлениеНеКаноническогоНаписания.os,КорректировкаXMLФорм.os,ОбработкаЮнитТестов.os,ОтключениеПолнотекстовогоПоиска.os,ОтключениеРазрешенияИзменятьФорму.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиИнструкцийПрепроцессора.os,ПроверкаКорректностиОбластей.os,ПроверкаНецензурныхСлов.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаСостава.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os"
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" содержит "23.12"
И Вывод команды "oscript" содержит "24.03"
И Вывод команды "oscript" не содержит "precommit4onec v"
И Код возврата команды "oscript" равен 0

Сценарий: Получение помощи продукта
Когда Я выполняю команду "oscript" с параметрами "src/main.os help"
Тогда Вывод команды "oscript" содержит
"""
precommit4onec v23.12
precommit4onec v24.03
Возможные команды:
help - Выводит справку по командам
version - Выводит версию приложения
Expand All @@ -37,7 +37,7 @@
Когда Я выполняю команду "oscript" с параметрами "src/main.os"
Тогда Вывод команды "oscript" содержит
"""
precommit4onec v23.12
precommit4onec v24.03
Возможные команды:
help - Выводит справку по командам
version - Выводит версию приложения
Expand Down
8 changes: 4 additions & 4 deletions features/УстановкаПрекоммита.feature
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v23.12"
И Вывод команды "oscript" содержит "precommit4onec v24.03"
И Вывод команды "oscript" содержит "Pre-commit hook для rep1 создан"
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"

Expand All @@ -28,14 +28,14 @@
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v23.12"
И Вывод команды "oscript" содержит "precommit4onec v24.03"
И Вывод команды "oscript" содержит "не является репозиторием git"

Сценарий: Установка precommit4onec во вложенные каталоги
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v23.12"
И Вывод команды "oscript" содержит "precommit4onec v24.03"
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit"

Expand All @@ -51,6 +51,6 @@
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v23.12"
И Вывод команды "oscript" содержит "precommit4onec v24.03"
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit"
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
///////////////////////////////////////////////////////////////////
// Содержит настройки сценария для сортировки блока состав
// конкретного файла
//
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////

Перем ИмяЭлемента; // имя (или паттерн) для определения элемента
Перем РазделительЭлементов; // разделитель элементов между собой
Перем РодительскийЭлемент; // родительский элемент, внутри которого осуществляетсяя поиск
Перем РодительскийЭлементЗавершение; // Завершение родительского элемента, если отличается от начала
Перем ОтступРодительскогоЭлемента; // отступ родительского элемента от начала строки
Перем ШаблонПоискаСостава; // Шаблон (регулярное выражение) для поиска блока, содержащего состав
// для сортировки
Перем ШаблонПоискаЭлементов; // Шаблон (регулярное выражение) для поиска элементов внутри блока с составом
Перем ИмеетАтрибуты; // Признак-подсказка о наличии атрибутов у элемента
Перем ИмяВложенного; // Имя вложенного тега в теге элемента

Процедура ПриСозданииОбъекта(ПараметрИмяЭлемента)
ИмяЭлемента = ПараметрИмяЭлемента;
РазделительЭлементов = Символы.ПС;
РодительскийЭлемент = "";
ОтступРодительскогоЭлемента = "";
ШаблонПоискаСостава = "";
ШаблонПоискаЭлементов = "";
ИмеетАтрибуты = Ложь;
ИмяВложенного = "";
КонецПроцедуры

Процедура УстановитьРазделительЭлементов(Разделитель) Экспорт
РазделительЭлементов = Символы.ПС + Разделитель;
КонецПроцедуры

Процедура УстановитьРодительскийЭлемент(Имя, Отступ, ИмяЗавершение = "") Экспорт
РодительскийЭлемент = Имя;
ОтступРодительскогоЭлемента = Отступ;
Если ПустаяСтрока(ИмяЗавершение) Тогда
РодительскийЭлементЗавершение = РодительскийЭлемент;
Иначе
РодительскийЭлементЗавершение = ИмяЗавершение;
КонецЕсли;
КонецПроцедуры

Процедура УставитьШаблоныПоиска(ШаблонСостава, ШаблонЭлементов) Экспорт
ШаблонПоискаСостава = ШаблонСостава;
ШаблонПоискаЭлементов = ШаблонЭлементов;
КонецПроцедуры

Функция ШаблонПоискаСостава() Экспорт
Возврат РегулярныеВыражения.Создать(ШаблонПоискаСостава);
КонецФункции

Функция ШаблонПоискаЭлементов() Экспорт
Возврат ШаблонПоискаЭлементов;
КонецФункции

Функция ИмяЭлемента() Экспорт
Возврат ИмяЭлемента;
КонецФункции

Функция РазделительЭлементов() Экспорт
Возврат РазделительЭлементов;
КонецФункции

Функция ЕстьРодительскийЭлемент() Экспорт
Возврат ЗначениеЗаполнено(РодительскийЭлемент);
КонецФункции

Функция РодительскийЭлемент() Экспорт
Возврат Новый Структура("Отступ, Имя, Завершение",
ОтступРодительскогоЭлемента, РодительскийЭлемент, РодительскийЭлементЗавершение);
КонецФункции

Процедура УстановитьЕстьАтрибуты() Экспорт
ИмеетАтрибуты = Истина;
КонецПроцедуры

Функция САтрибутами() Экспорт
Возврат ИмеетАтрибуты;
КонецФункции

Процедура УстановитьИмяВложенного(Имя) Экспорт
ИмяВложенного = Имя;
КонецПроцедуры

Функция ЕстьВложенный() Экспорт
Возврат ЗначениеЗаполнено(ИмяВложенного);
КонецФункции

Функция ИмяВложенного() Экспорт
Возврат ИмяВложенного;
КонецФункции
21 changes: 9 additions & 12 deletions src/Классы/НастройкиРепозитория.os
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
//
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
// Работает с настройками в конфигурационном файле репозитория 1С
// в Git
//
Expand Down Expand Up @@ -171,9 +170,9 @@
ВызватьИсключение "Не указано имя приложения";

КонецЕсли;
тмп = Конфигурация.Получить(ИмяПриложения);
Тмп.Удалить(ИмяНастройки);
Конфигурация.Вставить(ИмяПриложения,Тмп);
Временный = Конфигурация.Получить(ИмяПриложения);
Временный.Удалить(ИмяНастройки);
Конфигурация.Вставить(ИмяПриложения, Временный);
ОбновитьКонфигурационныйФайл();

КонецПроцедуры // УдалитьНастройкиПриложения()
Expand All @@ -189,6 +188,8 @@
ВызватьИсключение "Необходимо выполнить инициализацию";

КонецЕсли;

Возврат Истина;

КонецФункции // ПроверкаИнициализации()

Expand Down Expand Up @@ -216,9 +217,7 @@

ПарсерJSON = Новый ПарсерJSON;
ТекстКонфигурации = ПарсерJSON.ЗаписатьJSON(Конфигурация);
Запись = Новый ЗаписьТекста(АдресКонфигурационногоФайла, КодировкаТекста.UTF8NoBOM);
Запись.Записать(ТекстКонфигурации);
Запись.Закрыть();
ФайловыеОперации.ЗаписатьТекстФайла(АдресКонфигурационногоФайла, ТекстКонфигурации);

НовыйКонфиг = Ложь;

Expand Down Expand Up @@ -259,9 +258,7 @@
Файл = Новый Файл(АдресКонфигурационногоФайла);
Если Файл.Существует() Тогда

Чтение = Новый ЧтениеТекста(АдресКонфигурационногоФайла, КодировкаТекста.UTF8NoBOM);
ТекстКонфигурации = Чтение.Прочитать();
Чтение.Закрыть();
ТекстКонфигурации = ФайловыеОперации.ПрочитатьТекстФайла(АдресКонфигурационногоФайла);

ПарсерJSON = Новый ПарсерJSON;
Конфигурация = ПарсерJSON.ПрочитатьJSON(ТекстКонфигурации);
Expand All @@ -279,4 +276,4 @@

Процедура ОбновитьКонфигурацию() Экспорт
ОбновлятьКонфигурацию = Истина;
КонецПроцедуры
КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
///////////////////////////////////////////////////////////////////
// Содержит настройки для сортировки конкретного файла
//
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////

// BSLLS:ExportVariables-off Геттер не создать
Перем Тип Экспорт; // Тип обрабатываемого файла
// BSLLS:ExportVariables-on
Перем ЕДТ; // Признак формата ЕДТ содержимого
Перем Заимствованный; // Признак отношения файла к расширению и заимствованности из основной конфигурации
Перем Сценарии; // Сценарии обработки файла
Перем Пустой; // Признак отсутствия настроек

// Конструктор создания на основании анализируемого файла
Процедура ПриСозданииОбъекта(АнализируемыйФайл)
ОписаниеПоФайлу = ТипыОбъектовДляСортировки.ПоФайлу(АнализируемыйФайл);
Если ОписаниеПоФайлу.Тип = ТипыОбъектовДляСортировки.Неизвестный Тогда
Пустой = Истина;
Возврат;
КонецЕсли;

Пустой = Ложь;
Тип = ОписаниеПоФайлу.Тип;
ЕДТ = ОписаниеПоФайлу.ЕДТ;
Заимствованный = ОписаниеПоФайлу.Заимствованный;
Сценарии = Новый Массив;
КонецПроцедуры

Функция Пустой() Экспорт
Возврат Пустой;
КонецФункции

Функция ЕДТ() Экспорт
Возврат ЕДТ;
КонецФункции

Функция Заимствованный() Экспорт
Возврат Заимствованный;
КонецФункции

Процедура ДобавитьСценарий(НастройкиСценария) Экспорт

// 1-я группа: состав объектов
ШаблонПоискаСостава = "";
Если Тип = ТипыОбъектовДляСортировки.Конфигурация И ЕДТ Тогда
// 2-я группа: завершающий блок ЕДТ
ШаблонПоискаСостава = "\s*(<languages[\w\W]*)(<\/mdclass\:Configuration>)[ \t]*\n*";
ИначеЕсли НастройкиСценария.ЕстьРодительскийЭлемент() Тогда
РодительскийЭлемент = НастройкиСценария.РодительскийЭлемент();
ШаблонПоискаСостава = СтрШаблон("\s*<%1>([\w\W]*?)<\/%2>[ \t]*\n*",
РодительскийЭлемент.Имя, РодительскийЭлемент.Завершение);
Иначе
ШаблонПоискаСостава = СтрШаблон("\s*(<%1>[\w\W]*<\/%1>)[ \t]*\n*", НастройкиСценария.ИмяЭлемента());
КонецЕсли;

// 1-я группа: имя объекта состава
ШаблонПоискаЭлементов = "";
ТекстАтрибутов = ?(НастройкиСценария.САтрибутами(), "\s+[^>]+", "");
Если НастройкиСценария.ЕстьВложенный() Тогда
ШаблонПоискаЭлементов = СтрШаблон( // BSLLS:NestedFunctionInParameters-off используются геттеры
"<%1%2>[\w\W]*?<%3>([^<]*?)<\/%3>[\w\W]*?<\/%1>",
НастройкиСценария.ИмяЭлемента(), ТекстАтрибутов, НастройкиСценария.ИмяВложенного());
Иначе
ШаблонПоискаЭлементов = СтрШаблон("<%1%2>([^<]*?)<\/%1>", НастройкиСценария.ИмяЭлемента(), ТекстАтрибутов);
КонецЕсли;

НастройкиСценария.УставитьШаблоныПоиска(ШаблонПоискаСостава, ШаблонПоискаЭлементов);
Сценарии.Добавить(НастройкиСценария);
КонецПроцедуры

Функция Сценарии() Экспорт
Возврат Сценарии;
КонецФункции
Loading

0 comments on commit e0d6463

Please sign in to comment.