From d99ad7863c2ef9ddcb60108f54d10daea68035e5 Mon Sep 17 00:00:00 2001 From: Maxmov Valery Date: Tue, 21 Nov 2017 09:40:45 +0300 Subject: [PATCH 1/6] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=B8=D0=BC=D1=8F=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4=D0=B0=20=D0=BD=D0=B0=20=D1=80=D1=83=D1=81=D1=81?= =?UTF-8?q?=D0=BA=D0=B8=D0=B9=20=D0=BF=D1=81=D0=B5=D0=B2=D0=B4=D0=BE=D0=BD?= =?UTF-8?q?=D0=B8=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/СценарииОбработки/РазборОбычныхФормНаИсходники.os | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/СценарииОбработки/РазборОбычныхФормНаИсходники.os b/src/СценарииОбработки/РазборОбычныхФормНаИсходники.os index ab31479..e95b474 100644 --- a/src/СценарииОбработки/РазборОбычныхФормНаИсходники.os +++ b/src/СценарииОбработки/РазборОбычныхФормНаИсходники.os @@ -48,7 +48,7 @@ Если Не ПустаяСтрока(КаталогаВыгрузки) Тогда ЧтениеФайла = Новый ЧтениеФайла8(АнализируемыйФайл.ПолноеИмя); - ЧтениеФайла.ExtractAll(КаталогаВыгрузки, Истина); + ЧтениеФайла.ИзвлечьВсе(КаталогаВыгрузки, Истина); ЧтениеФайла = Неопределено; ФайлыМодулей = НайтиФайлы(КаталогаВыгрузки, "module", ИСТИНА); From 18ba87b9ae509addfd7a90a6799394c39ad7dc5e Mon Sep 17 00:00:00 2001 From: Maxmov Valery Date: Wed, 6 Dec 2017 16:39:41 +0300 Subject: [PATCH 2/6] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B5=D0=B5=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20=D0=B3=D0=BB=D0=BE=D0=B1=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Классы/КомандаКонфигуратион.os | 36 +++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/Классы/КомандаКонфигуратион.os b/src/Классы/КомандаКонфигуратион.os index 8b2ad2f..0e1f69d 100644 --- a/src/Классы/КомандаКонфигуратион.os +++ b/src/Классы/КомандаКонфигуратион.os @@ -165,18 +165,23 @@ Сообщить("Настройка конфигурации precommit"); Если ГлобальныеНастройки Тогда - - ГлобальныеСценарии = ПолучитьНастройкуМассив("Выберите подключаемые глобальные сценарии: ", ПолучитьИменаСценариев(КаталогГлобальныхСценариев)); - ИспользоватьСценарииРепозитория = ПолучитьНастройкуБулево("Нужно использовать сценарии локальных репозиториев?", ЛОЖЬ); + + ИмяПриложения = "Precommt4onecСценарии"; + + ГлобальныеСценарии = ПолучитьНастройкуМассив("Выберите подключаемые глобальные сценарии: ", + ПолучитьИменаСценариев(КаталогГлобальныхСценариев), + УправлениеНастройками.Настройка(ИмяПриложения + "\ГлобальныеСценарии")); + ИспользоватьСценарииРепозитория = ПолучитьНастройкуБулево("Нужно использовать сценарии локальных репозиториев?", + УправлениеНастройками.Настройка(ИмяПриложения + "\ИспользоватьСценарииРепозитория")); КаталогЛокальныхСценариев = ""; Если ИспользоватьСценарииРепозитория Тогда - КаталогЛокальныхСценариев = ПолучитьНастройкуСтрока("Укажите относительный путь к сценариям в репозитории: "); + КаталогЛокальныхСценариев = ПолучитьНастройкуСтрока("Укажите относительный путь к сценариям в репозитории: ", + УправлениеНастройками.Настройка(ИмяПриложения + "\КаталогЛокальныхСценариев")); КонецЕсли; - ИмяПриложения = "Precommt4onecСценарии"; СброситьНастройкиРепозитория(УправлениеНастройками); УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ИспользоватьСценарииРепозитория", ИспользоватьСценарииРепозитория); @@ -224,7 +229,13 @@ КонецФункции -Функция ПолучитьНастройкуМассив(ТекстПодсказки, ДоступныйМассив) +Функция ПолучитьНастройкуМассив(ТекстПодсказки, ДоступныйМассив, Знач УстановленныеЗначения = Неопределено) + + Если УстановленныеЗначения = Неопределено Тогда + + УстановленныеЗначения = ДоступныйМассив; + + КонецЕсли; Сообщить(ТекстПодсказки); ВыбранныеЭлементы = Новый Массив; @@ -232,7 +243,7 @@ ЗначениеМассива = ДоступныйМассив[Ит]; ТекстПодсказкиМассив = Символы.Таб + ЗначениеМассива; - Если ПолучитьНастройкуБулево(ТекстПодсказкиМассив, ИСТИНА) Тогда + Если ПолучитьНастройкуБулево(ТекстПодсказкиМассив, УстановленныеЗначения.Найти(ЗначениеМассива) <> Неопределено) Тогда ВыбранныеЭлементы.Добавить(ЗначениеМассива); @@ -244,19 +255,24 @@ КонецФункции -Функция ПолучитьНастройкуСтрока(ТекстПодсказки) +Функция ПолучитьНастройкуСтрока(ТекстПодсказки, ЗначениеПоУмолчанию = "") ВыбранноеЗначение = ""; Пока Истина Цикл - Сообщить(ТекстПодсказки); + Сообщить(ТекстПодсказки + ?(ПустаяСтрока(ЗначениеПоУмолчанию), "", "[" + ЗначениеПоУмолчанию + "]")); ВвестиСтроку(ВыбранноеЗначение); ВыбранноеЗначение = СокрЛП(ВыбранноеЗначение); Если Не ПустаяСтрока(ВыбранноеЗначение) Тогда Прервать; - + + ИначеЕсли НЕ ПустаяСтрока(ЗначениеПоУмолчанию) Тогда + + ВыбранноеЗначение = ЗначениеПоУмолчанию; + Прервать; + КонецЕсли; КонецЦикла; From 684a0942f5c05a10ef79fe50bd05ae14c56d3197 Mon Sep 17 00:00:00 2001 From: Maxmov Valery Date: Wed, 6 Dec 2017 17:04:11 +0300 Subject: [PATCH 3/6] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA?= =?UTF-8?q?=20=D1=80=D0=B5=D0=BF=D0=BE=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Классы/КомандаКонфигуратион.os | 63 ++++++++++++++++-------------- src/Классы/КомандаПрекоммит.os | 13 +++++- src/Классы/НастройкиРепозитория.os | 4 +- 3 files changed, 48 insertions(+), 32 deletions(-) diff --git a/src/Классы/КомандаКонфигуратион.os b/src/Классы/КомандаКонфигуратион.os index 0e1f69d..248a4e7 100644 --- a/src/Классы/КомандаКонфигуратион.os +++ b/src/Классы/КомандаКонфигуратион.os @@ -15,7 +15,7 @@ // Добавление параметров команды Парсер.ДобавитьПараметрФлагКоманды(Команда, "-global", "Работа с глобальными настройками."); - // TODO: пока оция не используется Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-rep-path", "Каталог репозитория, настройки которого интересуют."); + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-rep-path", "Каталог репозитория, настройки которого интересуют."); Парсер.ДобавитьПараметрФлагКоманды(Команда, "-reset", "Сброс настроек на значения по умолчанию. Если редактируются настройки репозитория, то происходит удаление файла настроек."); Парсер.ДобавитьПараметрФлагКоманды(Команда, "-config", "Интерактивное конфигурирование настроек."); @@ -30,11 +30,10 @@ Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач Приложение) Экспорт Лог = Приложение.ПолучитьЛог(); - Если НЕ ПараметрыКоманды["-global"] Тогда - // TODO: Пока не используется И НЕ ЗначениеЗаполнено(ПараметрыКоманды["-rep-path"]) Тогда + Если НЕ ПараметрыКоманды["-global"] + И НЕ ЗначениеЗаполнено(ПараметрыКоманды["-rep-path"]) Тогда - // TODO: пока не используется Лог.Ошибка("Для конфгурирования необходимо передать флаг -global или указать каталог репозитория параметром -rep-path"); - Лог.Ошибка("Для конфгурирования необходимо передать флаг -global"); + Лог.Ошибка("Для конфгурирования необходимо передать флаг -global или указать каталог репозитория параметром -rep-path"); Возврат Приложение.РезультатыКоманд().НеверныеПараметры; КонецЕсли; @@ -163,42 +162,48 @@ Процедура ИнтерактивнаяНастройка(КаталогРепозитория, УправлениеНастройками, ГлобальныеНастройки, КаталогГлобальныхСценариев) + ИмяПриложения = "Precommt4onecСценарии"; Сообщить("Настройка конфигурации precommit"); - Если ГлобальныеНастройки Тогда - - ИмяПриложения = "Precommt4onecСценарии"; - - ГлобальныеСценарии = ПолучитьНастройкуМассив("Выберите подключаемые глобальные сценарии: ", + ГлобальныеСценарии = ПолучитьНастройкуМассив("Выберите подключаемые глобальные сценарии: ", ПолучитьИменаСценариев(КаталогГлобальныхСценариев), УправлениеНастройками.Настройка(ИмяПриложения + "\ГлобальныеСценарии")); - ИспользоватьСценарииРепозитория = ПолучитьНастройкуБулево("Нужно использовать сценарии локальных репозиториев?", - УправлениеНастройками.Настройка(ИмяПриложения + "\ИспользоватьСценарииРепозитория")); + Если ГлобальныеНастройки Тогда - КаталогЛокальныхСценариев = ""; - Если ИспользоватьСценарииРепозитория Тогда - - КаталогЛокальныхСценариев = ПолучитьНастройкуСтрока("Укажите относительный путь к сценариям в репозитории: ", - УправлениеНастройками.Настройка(ИмяПриложения + "\КаталогЛокальныхСценариев")); - - КонецЕсли; - - СброситьНастройкиРепозитория(УправлениеНастройками); - - УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ИспользоватьСценарииРепозитория", ИспользоватьСценарииРепозитория); - УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\КаталогЛокальныхСценариев", КаталогЛокальныхСценариев); - - УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии); + Подсказка = "Нужно использовать сценарии локальных репозиториев?"; Иначе + + Подсказка = "Нужно использовать локальные сценарии?"; - // todo - // пока нет, будет в будущем + КонецЕсли; + + ИспользоватьСценарииРепозитория = ПолучитьНастройкуБулево(Подсказка, + УправлениеНастройками.Настройка(ИмяПриложения + "\ИспользоватьСценарииРепозитория")); + + КаталогЛокальныхСценариев = ""; + Если ИспользоватьСценарииРепозитория Тогда + + КаталогЛокальныхСценариев = ПолучитьНастройкуСтрока("Укажите относительный путь к сценариям в репозитории: ", + УправлениеНастройками.Настройка(ИмяПриложения + "\КаталогЛокальныхСценариев")); КонецЕсли; + СброситьНастройкиРепозитория(УправлениеНастройками); + + УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ИспользоватьСценарииРепозитория", ИспользоватьСценарииРепозитория); + УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\КаталогЛокальныхСценариев", КаталогЛокальныхСценариев); + + УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии); + КонецПроцедуры -Функция ПолучитьНастройкуБулево(ТекстПодсказки, ЗначениеПоУмолчанию) +Функция ПолучитьНастройкуБулево(ТекстПодсказки, Знач ЗначениеПоУмолчанию) + + Если НЕ ЗначениеЗаполнено(ЗначениеПоУмолчанию) Тогда + + ЗначениеПоУмолчанию = Истина; + + КонецЕсли; ВыбранноеЗначение = Формат(ЗначениеПоУмолчанию, "БЛ=n; БИ=y"); Пока ИСТИНА Цикл diff --git a/src/Классы/КомандаПрекоммит.os b/src/Классы/КомандаПрекоммит.os index 87e2a45..205bc08 100644 --- a/src/Классы/КомандаПрекоммит.os +++ b/src/Классы/КомандаПрекоммит.os @@ -41,7 +41,18 @@ КонецЕсли; - УправлениеНастройками = Новый НастройкиРепозитория(Приложение.ПутьКРодительскомуКаталогу()); + УправлениеНастройками = Новый НастройкиРепозитория(КаталогРепозитория); + Если УправлениеНастройками.ЭтоНовый() ИЛИ УправлениеНастройками.НастройкиПриложения("Precommt4onecСценарии") = Неопределено Тогда + + Лог.Информация("Используем глобальные настройки"); + УправлениеНастройками = Новый НастройкиРепозитория(Приложение.ПутьКРодительскомуКаталогу()); + + Иначе + + Лог.Информация("Используем локальные настройки"); + + КонецЕсли; + ЗагрузитьСценарииОбработки(Приложение.КаталогСценариев(), УправлениеНастройками, КаталогРепозитория); КаталогИсходныхФайлов = ПараметрыКоманды["-source-dir"]; diff --git a/src/Классы/НастройкиРепозитория.os b/src/Классы/НастройкиРепозитория.os index e17e7e6..13c6b50 100644 --- a/src/Классы/НастройкиРепозитория.os +++ b/src/Классы/НастройкиРепозитория.os @@ -214,7 +214,7 @@ ПарсерJSON = Новый ПарсерJSON; ТекстКонфигурации = ПарсерJSON.ЗаписатьJSON(Конфигурация); - Запись = Новый ЗаписьТекста(АдресКонфигурационногоФайла); + Запись = Новый ЗаписьТекста(АдресКонфигурационногоФайла, КодировкаТекста.UTF8NoBOM); Запись.Записать(ТекстКонфигурации); Запись.Закрыть(); @@ -250,7 +250,7 @@ Файл = Новый Файл(АдресКонфигурационногоФайла); Если Файл.Существует() Тогда - Чтение = Новый ЧтениеТекста(АдресКонфигурационногоФайла); + Чтение = Новый ЧтениеТекста(АдресКонфигурационногоФайла, КодировкаТекста.UTF8NoBOM); ТекстКонфигурации = Чтение.Прочитать(); Чтение.Закрыть(); From bd07daf5570ccb5674035e4295dee64509d92058 Mon Sep 17 00:00:00 2001 From: Maxmov Valery Date: Wed, 6 Dec 2017 18:51:43 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8=D0=B9=20=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BB=D0=B8=D1=88?= =?UTF-8?q?=D0=BD=D0=B8=D1=85=20=D0=BA=D0=BE=D0=BD=D1=86=D0=B5=D0=B2=D1=8B?= =?UTF-8?q?=D1=85=20=D0=BF=D1=80=D0=BE=D0=B1=D0=B5=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Классы/КомандаПрекоммит.os | 2 +- .../УдалениеЛишнихКонцевыхПробелов.os | 93 +++++++++++++++++++ v8config.json | 5 +- 3 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 src/СценарииОбработки/УдалениеЛишнихКонцевыхПробелов.os diff --git a/src/Классы/КомандаПрекоммит.os b/src/Классы/КомандаПрекоммит.os index 205bc08..e91be6e 100644 --- a/src/Классы/КомандаПрекоммит.os +++ b/src/Классы/КомандаПрекоммит.os @@ -42,7 +42,7 @@ КонецЕсли; УправлениеНастройками = Новый НастройкиРепозитория(КаталогРепозитория); - Если УправлениеНастройками.ЭтоНовый() ИЛИ УправлениеНастройками.НастройкиПриложения("Precommt4onecСценарии") = Неопределено Тогда + Если УправлениеНастройками.ЭтоНовый() ИЛИ УправлениеНастройками.НастройкиПриложения("Precommt4onecСценарии").Количество() = 0 Тогда Лог.Информация("Используем глобальные настройки"); УправлениеНастройками = Новый НастройкиРепозитория(Приложение.ПутьКРодительскомуКаталогу()); diff --git a/src/СценарииОбработки/УдалениеЛишнихКонцевыхПробелов.os b/src/СценарииОбработки/УдалениеЛишнихКонцевыхПробелов.os new file mode 100644 index 0000000..08f843f --- /dev/null +++ b/src/СценарииОбработки/УдалениеЛишнихКонцевыхПробелов.os @@ -0,0 +1,93 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Служебный модуль с реализацией сценариев обработки файлов <УдалениеЛишнихКонцевыхПробелов> +// +/////////////////////////////////////////////////////////////////////////////// + +// ИмяСценария +// Возвращает имя сценария обработки файлов +// +// Возвращаемое значение: +// Строка - Имя текущего сценария обработки файлов +// +Функция ИмяСценария() Экспорт + + Возврат "УдалениеЛишнихКонцевыхПробелов"; + +КонецФункции // ИмяСценария() + +// ОбработатьФайл +// Выполняет обработку файла +// +// Параметры: +// АнализируемыйФайл - Файл - Файл из журнала git для анализа +// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория +// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать +// * Лог - Объект - Текущий лог +// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс +// * КаталогРепозитория - Строка - Адрес каталога репозитория +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// и которые необходимо дообработать +// +// Возвращаемое значение: +// Булево - Признак выполненной обработки файла +// +Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт + + Лог = ДополнительныеПараметры.Лог; + Если АнализируемыйФайл.Существует() И ЭтоФайлИсходников(АнализируемыйФайл) Тогда + + Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); + + Если ИсправитьКонцевыеПробелы(АнализируемыйФайл.ПолноеИмя) Тогда + + ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя); + + КонецЕсли; + + Возврат Истина; + + КонецЕсли; + + Возврат ЛОЖЬ; + +КонецФункции // ОбработатьФайл() + +Функция ЭтоФайлИсходников(Файл) + + Если ПустаяСтрока(Файл.Расширение) Тогда + + Возврат Ложь; + + КонецЕсли; + + Возврат СтрСравнить(Файл.Расширение, ".bsl") = 0; + +КонецФункции + +Функция ИсправитьКонцевыеПробелы(Знач ИмяФайла) + + Текст = Новый ЧтениеТекста(); + Текст.Открыть(ИмяФайла, "utf-8"); + СодержимоеФайла = Текст.Прочитать(); + Текст.Закрыть(); + + Регексп = Новый РегулярноеВыражение("^([^\n\/]*;)([\t ]+?)$"); + Регексп.ИгнорироватьРегистр = ИСТИНА; + Регексп.Многострочный = ИСТИНА; + ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла); + Если ГруппыИндексов.Количество() = 0 Тогда + + Возврат ЛОЖЬ; + + КонецЕсли; + + СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1"); + + ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла,,,, Символы.ПС); + ЗаписьТекста.Записать(СодержимоеФайла); + ЗаписьТекста.Закрыть(); + + Возврат Истина; + +КонецФункции \ No newline at end of file diff --git a/v8config.json b/v8config.json index 2e1221b..b868b80 100644 --- a/v8config.json +++ b/v8config.json @@ -1,11 +1,12 @@ -{ +{ "Precommt4onecСценарии": { "ИспользоватьСценарииРепозитория": false, "КаталогЛокальныхСценариев": "", "ГлобальныеСценарии": [ "КорректировкаXMLФорм.os", "РазборОбычныхФормНаИсходники.os", - "РазборОтчетовОбработокРасширений.os" + "РазборОтчетовОбработокРасширений.os", + "УдалениеЛишнихКонцевыхПробелов.os" ] } } \ No newline at end of file From 2765605fff459b53dba3f525b6da5f078a92ddca Mon Sep 17 00:00:00 2001 From: Maxmov Valery Date: Thu, 7 Dec 2017 11:29:24 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B1=D0=B5=D0=BB=D0=BE=D0=B2=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=B2=D1=8B?= =?UTF-8?q?=D0=BC=D0=B8=20=D1=81=D0=BB=D0=BE=D0=B2=D0=B0=D0=BC=D0=B8=20(?= =?UTF-8?q?=D0=BF=D0=BE=D0=BA=D0=B0=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE?= =?UTF-8?q?=20=D0=AD=D0=BA=D1=81=D0=BF=D0=BE=D1=80=D1=82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ДобавлениеПробеловПередКлючевымиСловами.os | 94 +++++++++++++++++++ v8config.json | 1 + 2 files changed, 95 insertions(+) create mode 100644 src/СценарииОбработки/ДобавлениеПробеловПередКлючевымиСловами.os diff --git a/src/СценарииОбработки/ДобавлениеПробеловПередКлючевымиСловами.os b/src/СценарииОбработки/ДобавлениеПробеловПередКлючевымиСловами.os new file mode 100644 index 0000000..f15a64f --- /dev/null +++ b/src/СценарииОбработки/ДобавлениеПробеловПередКлючевымиСловами.os @@ -0,0 +1,94 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Служебный модуль с реализацией сценариев обработки файлов +// <ДобавлениеПробеловПередКлючевымиСловами> +// +/////////////////////////////////////////////////////////////////////////////// + +// ИмяСценария +// Возвращает имя сценария обработки файлов +// +// Возвращаемое значение: +// Строка - Имя текущего сценария обработки файлов +// +Функция ИмяСценария() Экспорт + + Возврат "ДобавлениеПробеловПередКлючевымиСловами"; + +КонецФункции // ИмяСценария() + +// ОбработатьФайл +// Выполняет обработку файла +// +// Параметры: +// АнализируемыйФайл - Файл - Файл из журнала git для анализа +// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория +// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать +// * Лог - Объект - Текущий лог +// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс +// * КаталогРепозитория - Строка - Адрес каталога репозитория +// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария +// и которые необходимо дообработать +// +// Возвращаемое значение: +// Булево - Признак выполненной обработки файла +// +Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт + + Лог = ДополнительныеПараметры.Лог; + Если АнализируемыйФайл.Существует() И ЭтоФайлИсходников(АнализируемыйФайл) Тогда + + Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); + + Если ВставитьНужныеПробелы(АнализируемыйФайл.ПолноеИмя) Тогда + + ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя); + + КонецЕсли; + + Возврат Истина; + + КонецЕсли; + + Возврат ЛОЖЬ; + +КонецФункции // ОбработатьФайл() + +Функция ЭтоФайлИсходников(Файл) + + Если ПустаяСтрока(Файл.Расширение) Тогда + + Возврат Ложь; + + КонецЕсли; + + Возврат СтрСравнить(Файл.Расширение, ".bsl") = 0; + +КонецФункции + +Функция ВставитьНужныеПробелы(Знач ИмяФайла) + + Текст = Новый ЧтениеТекста(); + Текст.Открыть(ИмяФайла, "utf-8"); + СодержимоеФайла = Текст.Прочитать(); + Текст.Закрыть(); + + Регексп = Новый РегулярноеВыражение("(^[^\n\/]*\))(Экспорт)([\s]*?)([\/\/]+[^\n]*?)*?$"); + Регексп.ИгнорироватьРегистр = ИСТИНА; + Регексп.Многострочный = ИСТИНА; + ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла); + Если ГруппыИндексов.Количество() = 0 Тогда + + Возврат ЛОЖЬ; + + КонецЕсли; + + СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1 $2$3$4"); + + ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла,,,, Символы.ПС); + ЗаписьТекста.Записать(СодержимоеФайла); + ЗаписьТекста.Закрыть(); + + Возврат Истина; + +КонецФункции \ No newline at end of file diff --git a/v8config.json b/v8config.json index b868b80..56fd7c8 100644 --- a/v8config.json +++ b/v8config.json @@ -3,6 +3,7 @@ "ИспользоватьСценарииРепозитория": false, "КаталогЛокальныхСценариев": "", "ГлобальныеСценарии": [ + "ДобавлениеПробеловПередКлючевымиСловами.os", "КорректировкаXMLФорм.os", "РазборОбычныхФормНаИсходники.os", "РазборОтчетовОбработокРасширений.os", From 0ed11c7675cbfcc5d7797dbe3b4ded7d1c6e1dbb Mon Sep 17 00:00:00 2001 From: Maxmov Valery Date: Thu, 7 Dec 2017 11:39:04 +0300 Subject: [PATCH 6/6] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=B8=20?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- features/Конфигурирование.feature | 4 ++-- features/ПростыеКоманды.feature | 6 +++--- features/УстановкаПрекоммита.feature | 6 +++--- src/Модули/ПараметрыПриложения.os | 2 +- 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index fb64f90..6dcd268 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Указанным продуктом пользовались долгое время, он очень хорош, но потребность в развитии и невозможность реализации некоторых сценариев работы в публичной версии сподвигли к реализации нового решения. -Особенности данного решения: +### Особенности данного решения: - Возможность расширения функциональности под свои нужды без потери совместимости с публичной версией - Централизованная установка и обновление скриптов без необходимости утяжелять репозиторий проекта @@ -35,6 +35,8 @@ - `РазборОтчетОбработокРасширений` - при выполнении данного сценария, файлы внешних отчетов, обработок и расширений средствами платформы будут разложены на исходные файлы и помещены в каталог исходных файлов репозитория в подкаталоги, соответствующие расширениям. Например внешний отчет `ВнешнийОтчет1.erf` будет разложен в каталог `src\erf\ВнешнийОтчет1` - `РазборОбычныхФормНаИсходники` - при выполнении данного сценария, файлы обычных форм (`Form.bin`) раскладываются на исходные файлы с помощью инструмента `v8unpack` - `КорректировкаXMLФорм` - при выполнении данного сценария, файлы описаний форм (`Form.xml`) проверяются на наличие задублируровашихся ндексов элементов, которые образуются при объединениях. Если дубли есть, то они исправляются +- `ДобавлениеПробеловПередКлючевымиСловами` - при выполнении данного сценария, в файлах модулей перед ключевыми словами добавляются отсутсвующие пробелы. На данный момент обрабатывается только ключевое слово `Экспорт`. +- `УдалениеЛишнихКонцевыхПробелов` - при выполнении данного сценария, в файлах модулей удаляются лишние пробелы и табы в конце строки после `;`. ## Изменение настроек @@ -46,6 +48,8 @@ precommit4onec может читать настройки своей работ - Сброс настроек на заводские - `precommit4onec configure -global -reset` - Интерактивное изменение настроек - `precommit4onec configure -global -config`. +Предоставляется возможность в репозитории иметь свои, отличные от глобальных, настройки. Для этого необходимо вместо флага `-global` в указанных выше командах передавать параметр `-rep-path` с указанием пути к каталогу репозитория. + Конфигурирование дает возможности: - Изменить список сценариев обработки файлов diff --git a/features/Конфигурирование.feature b/features/Конфигурирование.feature index 0f51300..ff66fa8 100644 --- a/features/Конфигурирование.feature +++ b/features/Конфигурирование.feature @@ -10,7 +10,7 @@ Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os configure -global" Тогда Код возврата команды "oscript" равен 0 И Я сообщаю вывод команды "oscript" - И Вывод команды "oscript" содержит "precommit4onec v1.0.4" + И Вывод команды "oscript" содержит "precommit4onec v1.0.5" И Вывод команды "oscript" содержит "Установленные настройки:" И Вывод команды "oscript" содержит "ИспользоватьСценарииРепозитория =" И Вывод команды "oscript" содержит "КаталогЛокальныхСценариев =" @@ -24,7 +24,7 @@ И Я сообщаю вывод команды "oscript" И Вывод команды "oscript" содержит """ - precommit4onec v1.0.4 + precommit4onec v1.0.5 Установленные настройки: ИспользоватьСценарииРепозитория = Нет КаталогЛокальныхСценариев = diff --git a/features/ПростыеКоманды.feature b/features/ПростыеКоманды.feature index e826bd2..ff36573 100644 --- a/features/ПростыеКоманды.feature +++ b/features/ПростыеКоманды.feature @@ -14,7 +14,7 @@ Сценарий: Получение версии продукта Когда Я выполняю команду "oscript" c параметрами "src/main.os version" Тогда Я сообщаю вывод команды "oscript" - И Вывод команды "oscript" содержит "1.0.4" + И Вывод команды "oscript" содержит "1.0.5" И Вывод команды "oscript" не содержит "precommit4onec v" И Код возврата команды "oscript" равен 0 @@ -22,7 +22,7 @@ Когда Я выполняю команду "oscript" c параметрами "src/main.os help" Тогда Вывод команды "oscript" содержит """ - precommit4onec v1.0.4 + precommit4onec v1.0.5 Возможные команды: help - Выводит справку по командам version - Выводит версию приложения @@ -36,7 +36,7 @@ Когда Я выполняю команду "oscript" c параметрами "src/main.os" Тогда Вывод команды "oscript" содержит """ - precommit4onec v1.0.4 + precommit4onec v1.0.5 Возможные команды: help - Выводит справку по командам version - Выводит версию приложения diff --git a/features/УстановкаПрекоммита.feature b/features/УстановкаПрекоммита.feature index 89468a8..4b4df5d 100644 --- a/features/УстановкаПрекоммита.feature +++ b/features/УстановкаПрекоммита.feature @@ -18,7 +18,7 @@ Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os install rep1" Тогда Код возврата команды "oscript" равен 0 И Я сообщаю вывод команды "oscript" - И Вывод команды "oscript" содержит "precommit4onec v1.0.4" + И Вывод команды "oscript" содержит "precommit4onec v1.0.5" И Вывод команды "oscript" содержит "Pre-commit hook для rep1 создан" И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit" @@ -26,13 +26,13 @@ Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os install ./" Тогда Код возврата команды "oscript" равен 0 И Я сообщаю вывод команды "oscript" - И Вывод команды "oscript" содержит "precommit4onec v1.0.4" + И Вывод команды "oscript" содержит "precommit4onec v1.0.5" И Вывод команды "oscript" содержит "не является репозиторием git" Сценарий: Установка precommit4onec во вложенные каталоги Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os install ./ -r" Тогда Код возврата команды "oscript" равен 0 И Я сообщаю вывод команды "oscript" - И Вывод команды "oscript" содержит "precommit4onec v1.0.4" + И Вывод команды "oscript" содержит "precommit4onec v1.0.5" И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit" И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit" diff --git a/src/Модули/ПараметрыПриложения.os b/src/Модули/ПараметрыПриложения.os index 29436b9..9521c77 100644 --- a/src/Модули/ПараметрыПриложения.os +++ b/src/Модули/ПараметрыПриложения.os @@ -22,7 +22,7 @@ // Функция ВерсияПродукта() Экспорт - Возврат "1.0.4"; + Возврат "1.0.5"; КонецФункции // ВерсияПродукта