1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2025-06-17 00:07:35 +02:00

Merge branch 'release/1.0.5'

This commit is contained in:
Maxmov Valery
2017-12-07 11:40:30 +03:00
12 changed files with 271 additions and 46 deletions

View File

@ -6,7 +6,7 @@
Указанным продуктом пользовались долгое время, он очень хорош, но потребность в развитии и невозможность реализации некоторых сценариев работы в публичной версии сподвигли к реализации нового решения. Указанным продуктом пользовались долгое время, он очень хорош, но потребность в развитии и невозможность реализации некоторых сценариев работы в публичной версии сподвигли к реализации нового решения.
Особенности данного решения: ### Особенности данного решения:
- Возможность расширения функциональности под свои нужды без потери совместимости с публичной версией - Возможность расширения функциональности под свои нужды без потери совместимости с публичной версией
- Централизованная установка и обновление скриптов без необходимости утяжелять репозиторий проекта - Централизованная установка и обновление скриптов без необходимости утяжелять репозиторий проекта
@ -35,6 +35,8 @@
- `РазборОтчетОбработокРасширений` - при выполнении данного сценария, файлы внешних отчетов, обработок и расширений средствами платформы будут разложены на исходные файлы и помещены в каталог исходных файлов репозитория в подкаталоги, соответствующие расширениям. Например внешний отчет `ВнешнийОтчет1.erf` будет разложен в каталог `src\erf\ВнешнийОтчет1` - `РазборОтчетОбработокРасширений` - при выполнении данного сценария, файлы внешних отчетов, обработок и расширений средствами платформы будут разложены на исходные файлы и помещены в каталог исходных файлов репозитория в подкаталоги, соответствующие расширениям. Например внешний отчет `ВнешнийОтчет1.erf` будет разложен в каталог `src\erf\ВнешнийОтчет1`
- `РазборОбычныхФормНаИсходники` - при выполнении данного сценария, файлы обычных форм (`Form.bin`) раскладываются на исходные файлы с помощью инструмента `v8unpack` - `РазборОбычныхФормНаИсходники` - при выполнении данного сценария, файлы обычных форм (`Form.bin`) раскладываются на исходные файлы с помощью инструмента `v8unpack`
- `КорректировкаXMLФорм` - при выполнении данного сценария, файлы описаний форм (`Form.xml`) проверяются на наличие задублируровашихся ндексов элементов, которые образуются при объединениях. Если дубли есть, то они исправляются - `КорректировкаXMLФорм` - при выполнении данного сценария, файлы описаний форм (`Form.xml`) проверяются на наличие задублируровашихся ндексов элементов, которые образуются при объединениях. Если дубли есть, то они исправляются
- `ДобавлениеПробеловПередКлючевымиСловами` - при выполнении данного сценария, в файлах модулей перед ключевыми словами добавляются отсутсвующие пробелы. На данный момент обрабатывается только ключевое слово `Экспорт`.
- `УдалениеЛишнихКонцевыхПробелов` - при выполнении данного сценария, в файлах модулей удаляются лишние пробелы и табы в конце строки после `;`.
## Изменение настроек ## Изменение настроек
@ -46,6 +48,8 @@ precommit4onec может читать настройки своей работ
- Сброс настроек на заводские - `precommit4onec configure -global -reset` - Сброс настроек на заводские - `precommit4onec configure -global -reset`
- Интерактивное изменение настроек - `precommit4onec configure -global -config`. - Интерактивное изменение настроек - `precommit4onec configure -global -config`.
Предоставляется возможность в репозитории иметь свои, отличные от глобальных, настройки. Для этого необходимо вместо флага `-global` в указанных выше командах передавать параметр `-rep-path` с указанием пути к каталогу репозитория.
Конфигурирование дает возможности: Конфигурирование дает возможности:
- Изменить список сценариев обработки файлов - Изменить список сценариев обработки файлов

View File

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

View File

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

View File

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

View File

@ -15,7 +15,7 @@
// Добавление параметров команды // Добавление параметров команды
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-global", "Работа с глобальными настройками."); Парсер.ДобавитьПараметрФлагКоманды(Команда, "-global", "Работа с глобальными настройками.");
// TODO: пока оция не используется Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-rep-path", "Каталог репозитория, настройки которого интересуют."); Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-rep-path", "Каталог репозитория, настройки которого интересуют.");
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-reset", "Сброс настроек на значения по умолчанию. Если редактируются настройки репозитория, то происходит удаление файла настроек."); Парсер.ДобавитьПараметрФлагКоманды(Команда, "-reset", "Сброс настроек на значения по умолчанию. Если редактируются настройки репозитория, то происходит удаление файла настроек.");
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-config", "Интерактивное конфигурирование настроек."); Парсер.ДобавитьПараметрФлагКоманды(Команда, "-config", "Интерактивное конфигурирование настроек.");
@ -30,11 +30,10 @@
Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач Приложение) Экспорт Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач Приложение) Экспорт
Лог = Приложение.ПолучитьЛог(); Лог = Приложение.ПолучитьЛог();
Если НЕ ПараметрыКоманды["-global"] Тогда Если НЕ ПараметрыКоманды["-global"]
// TODO: Пока не используется И НЕ ЗначениеЗаполнено(ПараметрыКоманды["-rep-path"]) Тогда И НЕ ЗначениеЗаполнено(ПараметрыКоманды["-rep-path"]) Тогда
// TODO: пока не используется Лог.Ошибка("Для конфгурирования необходимо передать флаг -global или указать каталог репозитория параметром -rep-path"); Лог.Ошибка("Для конфгурирования необходимо передать флаг -global или указать каталог репозитория параметром -rep-path");
Лог.Ошибка("Для конфгурирования необходимо передать флаг -global");
Возврат Приложение.РезультатыКоманд().НеверныеПараметры; Возврат Приложение.РезультатыКоманд().НеверныеПараметры;
КонецЕсли; КонецЕсли;
@ -163,20 +162,32 @@
Процедура ИнтерактивнаяНастройка(КаталогРепозитория, УправлениеНастройками, ГлобальныеНастройки, КаталогГлобальныхСценариев) Процедура ИнтерактивнаяНастройка(КаталогРепозитория, УправлениеНастройками, ГлобальныеНастройки, КаталогГлобальныхСценариев)
ИмяПриложения = "Precommt4onecСценарии";
Сообщить("Настройка конфигурации precommit"); Сообщить("Настройка конфигурации precommit");
ГлобальныеСценарии = ПолучитьНастройкуМассив("Выберите подключаемые глобальные сценарии: ",
ПолучитьИменаСценариев(КаталогГлобальныхСценариев),
УправлениеНастройками.Настройка(ИмяПриложения + "\ГлобальныеСценарии"));
Если ГлобальныеНастройки Тогда Если ГлобальныеНастройки Тогда
ГлобальныеСценарии = ПолучитьНастройкуМассив("Выберите подключаемые глобальные сценарии: ", ПолучитьИменаСценариев(КаталогГлобальныхСценариев)); Подсказка = "Нужно использовать сценарии локальных репозиториев?";
ИспользоватьСценарииРепозитория = ПолучитьНастройкуБулево("Нужно использовать сценарии локальных репозиториев?", ЛОЖЬ);
Иначе
Подсказка = "Нужно использовать локальные сценарии?";
КонецЕсли;
ИспользоватьСценарииРепозитория = ПолучитьНастройкуБулево(Подсказка,
УправлениеНастройками.Настройка(ИмяПриложения + "\ИспользоватьСценарииРепозитория"));
КаталогЛокальныхСценариев = ""; КаталогЛокальныхСценариев = "";
Если ИспользоватьСценарииРепозитория Тогда Если ИспользоватьСценарииРепозитория Тогда
КаталогЛокальныхСценариев = ПолучитьНастройкуСтрока("Укажите относительный путь к сценариям в репозитории: "); КаталогЛокальныхСценариев = ПолучитьНастройкуСтрока("Укажите относительный путь к сценариям в репозитории: ",
УправлениеНастройками.Настройка(ИмяПриложения + "\КаталогЛокальныхСценариев"));
КонецЕсли; КонецЕсли;
ИмяПриложения = "Precommt4onecСценарии";
СброситьНастройкиРепозитория(УправлениеНастройками); СброситьНастройкиРепозитория(УправлениеНастройками);
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ИспользоватьСценарииРепозитория", ИспользоватьСценарииРепозитория); УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ИспользоватьСценарииРепозитория", ИспользоватьСценарииРепозитория);
@ -184,16 +195,15 @@
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии); УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии);
Иначе
// todo
// пока нет, будет в будущем
КонецЕсли;
КонецПроцедуры КонецПроцедуры
Функция ПолучитьНастройкуБулево(ТекстПодсказки, ЗначениеПоУмолчанию) Функция ПолучитьНастройкуБулево(ТекстПодсказки, Знач ЗначениеПоУмолчанию)
Если НЕ ЗначениеЗаполнено(ЗначениеПоУмолчанию) Тогда
ЗначениеПоУмолчанию = Истина;
КонецЕсли;
ВыбранноеЗначение = Формат(ЗначениеПоУмолчанию, "БЛ=n; БИ=y"); ВыбранноеЗначение = Формат(ЗначениеПоУмолчанию, "БЛ=n; БИ=y");
Пока ИСТИНА Цикл Пока ИСТИНА Цикл
@ -224,7 +234,13 @@
КонецФункции КонецФункции
Функция ПолучитьНастройкуМассив(ТекстПодсказки, ДоступныйМассив) Функция ПолучитьНастройкуМассив(ТекстПодсказки, ДоступныйМассив, Знач УстановленныеЗначения = Неопределено)
Если УстановленныеЗначения = Неопределено Тогда
УстановленныеЗначения = ДоступныйМассив;
КонецЕсли;
Сообщить(ТекстПодсказки); Сообщить(ТекстПодсказки);
ВыбранныеЭлементы = Новый Массив; ВыбранныеЭлементы = Новый Массив;
@ -232,7 +248,7 @@
ЗначениеМассива = ДоступныйМассив[Ит]; ЗначениеМассива = ДоступныйМассив[Ит];
ТекстПодсказкиМассив = Символы.Таб + ЗначениеМассива; ТекстПодсказкиМассив = Символы.Таб + ЗначениеМассива;
Если ПолучитьНастройкуБулево(ТекстПодсказкиМассив, ИСТИНА) Тогда Если ПолучитьНастройкуБулево(ТекстПодсказкиМассив, УстановленныеЗначения.Найти(ЗначениеМассива) <> Неопределено) Тогда
ВыбранныеЭлементы.Добавить(ЗначениеМассива); ВыбранныеЭлементы.Добавить(ЗначениеМассива);
@ -244,12 +260,12 @@
КонецФункции КонецФункции
Функция ПолучитьНастройкуСтрока(ТекстПодсказки) Функция ПолучитьНастройкуСтрока(ТекстПодсказки, ЗначениеПоУмолчанию = "")
ВыбранноеЗначение = ""; ВыбранноеЗначение = "";
Пока Истина Цикл Пока Истина Цикл
Сообщить(ТекстПодсказки); Сообщить(ТекстПодсказки + ?(ПустаяСтрока(ЗначениеПоУмолчанию), "", "[" + ЗначениеПоУмолчанию + "]"));
ВвестиСтроку(ВыбранноеЗначение); ВвестиСтроку(ВыбранноеЗначение);
ВыбранноеЗначение = СокрЛП(ВыбранноеЗначение); ВыбранноеЗначение = СокрЛП(ВыбранноеЗначение);
@ -257,6 +273,11 @@
Прервать; Прервать;
ИначеЕсли НЕ ПустаяСтрока(ЗначениеПоУмолчанию) Тогда
ВыбранноеЗначение = ЗначениеПоУмолчанию;
Прервать;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;

View File

@ -41,7 +41,18 @@
КонецЕсли; КонецЕсли;
УправлениеНастройками = Новый НастройкиРепозитория(КаталогРепозитория);
Если УправлениеНастройками.ЭтоНовый() ИЛИ УправлениеНастройками.НастройкиПриложения("Precommt4onecСценарии").Количество() = 0 Тогда
Лог.Информация("Используем глобальные настройки");
УправлениеНастройками = Новый НастройкиРепозитория(Приложение.ПутьКРодительскомуКаталогу()); УправлениеНастройками = Новый НастройкиРепозитория(Приложение.ПутьКРодительскомуКаталогу());
Иначе
Лог.Информация("Используем локальные настройки");
КонецЕсли;
ЗагрузитьСценарииОбработки(Приложение.КаталогСценариев(), УправлениеНастройками, КаталогРепозитория); ЗагрузитьСценарииОбработки(Приложение.КаталогСценариев(), УправлениеНастройками, КаталогРепозитория);
КаталогИсходныхФайлов = ПараметрыКоманды["-source-dir"]; КаталогИсходныхФайлов = ПараметрыКоманды["-source-dir"];

View File

@ -214,7 +214,7 @@
ПарсерJSON = Новый ПарсерJSON; ПарсерJSON = Новый ПарсерJSON;
ТекстКонфигурации = ПарсерJSON.ЗаписатьJSON(Конфигурация); ТекстКонфигурации = ПарсерJSON.ЗаписатьJSON(Конфигурация);
Запись = Новый ЗаписьТекста(АдресКонфигурационногоФайла); Запись = Новый ЗаписьТекста(АдресКонфигурационногоФайла, КодировкаТекста.UTF8NoBOM);
Запись.Записать(ТекстКонфигурации); Запись.Записать(ТекстКонфигурации);
Запись.Закрыть(); Запись.Закрыть();
@ -250,7 +250,7 @@
Файл = Новый Файл(АдресКонфигурационногоФайла); Файл = Новый Файл(АдресКонфигурационногоФайла);
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
Чтение = Новый ЧтениеТекста(АдресКонфигурационногоФайла); Чтение = Новый ЧтениеТекста(АдресКонфигурационногоФайла, КодировкаТекста.UTF8NoBOM);
ТекстКонфигурации = Чтение.Прочитать(); ТекстКонфигурации = Чтение.Прочитать();
Чтение.Закрыть(); Чтение.Закрыть();

View File

@ -22,7 +22,7 @@
// //
Функция ВерсияПродукта() Экспорт Функция ВерсияПродукта() Экспорт
Возврат "1.0.4"; Возврат "1.0.5";
КонецФункции // ВерсияПродукта КонецФункции // ВерсияПродукта

View File

@ -0,0 +1,94 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией сценариев обработки файлов
// <ДобавлениеПробеловПередКлючевымиСловами>
//
///////////////////////////////////////////////////////////////////////////////
// ИмяСценария
// Возвращает имя сценария обработки файлов
//
// Возвращаемое значение:
// Строка - Имя текущего сценария обработки файлов
//
Функция ИмяСценария() Экспорт
Возврат "ДобавлениеПробеловПередКлючевымиСловами";
КонецФункции // ИмяСценария()
// ОбработатьФайл
// Выполняет обработку файла
//
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
Если АнализируемыйФайл.Существует() И ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если ВставитьНужныеПробелы(АнализируемыйФайл.ПолноеИмя) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат Истина;
КонецЕсли;
Возврат ЛОЖЬ;
КонецФункции // ОбработатьФайл()
Функция ЭтоФайлИсходников(Файл)
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Расширение, ".bsl") = 0;
КонецФункции
Функция ВставитьНужныеПробелы(Знач ИмяФайла)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, "utf-8");
СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть();
Регексп = Новый РегулярноеВыражение("(^[^\n\/]*\))(Экспорт)([\s]*?)([\/\/]+[^\n]*?)*?$");
Регексп.ИгнорироватьРегистр = ИСТИНА;
Регексп.Многострочный = ИСТИНА;
ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла);
Если ГруппыИндексов.Количество() = 0 Тогда
Возврат ЛОЖЬ;
КонецЕсли;
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1 $2$3$4");
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла,,,, Символы.ПС);
ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть();
Возврат Истина;
КонецФункции

View File

@ -48,7 +48,7 @@
Если Не ПустаяСтрока(КаталогаВыгрузки) Тогда Если Не ПустаяСтрока(КаталогаВыгрузки) Тогда
ЧтениеФайла = Новый ЧтениеФайла8(АнализируемыйФайл.ПолноеИмя); ЧтениеФайла = Новый ЧтениеФайла8(АнализируемыйФайл.ПолноеИмя);
ЧтениеФайла.ExtractAll(КаталогаВыгрузки, Истина); ЧтениеФайла.ИзвлечьВсе(КаталогаВыгрузки, Истина);
ЧтениеФайла = Неопределено; ЧтениеФайла = Неопределено;
ФайлыМодулей = НайтиФайлы(КаталогаВыгрузки, "module", ИСТИНА); ФайлыМодулей = НайтиФайлы(КаталогаВыгрузки, "module", ИСТИНА);

View File

@ -0,0 +1,93 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией сценариев обработки файлов <УдалениеЛишнихКонцевыхПробелов>
//
///////////////////////////////////////////////////////////////////////////////
// ИмяСценария
// Возвращает имя сценария обработки файлов
//
// Возвращаемое значение:
// Строка - Имя текущего сценария обработки файлов
//
Функция ИмяСценария() Экспорт
Возврат "УдалениеЛишнихКонцевыхПробелов";
КонецФункции // ИмяСценария()
// ОбработатьФайл
// Выполняет обработку файла
//
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
Если АнализируемыйФайл.Существует() И ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если ИсправитьКонцевыеПробелы(АнализируемыйФайл.ПолноеИмя) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат Истина;
КонецЕсли;
Возврат ЛОЖЬ;
КонецФункции // ОбработатьФайл()
Функция ЭтоФайлИсходников(Файл)
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Расширение, ".bsl") = 0;
КонецФункции
Функция ИсправитьКонцевыеПробелы(Знач ИмяФайла)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, "utf-8");
СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть();
Регексп = Новый РегулярноеВыражение("^([^\n\/]*;)([\t ]+?)$");
Регексп.ИгнорироватьРегистр = ИСТИНА;
Регексп.Многострочный = ИСТИНА;
ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла);
Если ГруппыИндексов.Количество() = 0 Тогда
Возврат ЛОЖЬ;
КонецЕсли;
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1");
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла,,,, Символы.ПС);
ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть();
Возврат Истина;
КонецФункции

View File

@ -1,11 +1,13 @@
{ {
"Precommt4onecСценарии": { "Precommt4onecСценарии": {
"ИспользоватьСценарииРепозитория": false, "ИспользоватьСценарииРепозитория": false,
"КаталогЛокальныхСценариев": "", "КаталогЛокальныхСценариев": "",
"ГлобальныеСценарии": [ "ГлобальныеСценарии": [
"ДобавлениеПробеловПередКлючевымиСловами.os",
"КорректировкаXMLФорм.os", "КорректировкаXMLФорм.os",
"РазборОбычныхФормНаИсходники.os", "РазборОбычныхФормНаИсходники.os",
"РазборОтчетовОбработокРасширений.os" "РазборОтчетовОбработокРасширений.os",
"УдалениеЛишнихКонцевыхПробелов.os"
] ]
} }
} }