1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2025-02-11 13:38:37 +02:00

Merge branch 'release/1.20'

This commit is contained in:
Maxmov Valery 2019-10-01 09:12:25 +03:00
commit d572e59f85
30 changed files with 1237 additions and 333 deletions

View File

@ -46,6 +46,7 @@
- `ПроверкаКорректностиОбластей` - выполняет проверку на корректность скобок областей: `на парность` и `перед окончание области должно быть ее определение`
- `ПроверкаДублейПроцедурИФункций` - выполняет поиск одинаковых названий процедур и функций в модуле.
- `ОтключениеПолнотекстовогоПоиска` - По умолчанию отключает полнотекстовый поиск в файлах описания метаданных. Имеет настройку для исключения файлов из обработки. Для исключения необходимо указать относительный путь в репозитории до файла описания метаданного. Можно выключать из обработки отдельные реквизиты метаданного, для этого надо задать массив реквизитов в конфигурационном файле.
- `ИсправлениеНеКаноническогоНаписания` - Проверяет модули на каноничность написания ключевых слов и исправляет найденное
## Изменение настроек

View File

@ -64,7 +64,7 @@
ТекстовыйДокумент.Записать(ИмяФайлаreadme);
РепозиторийGit.ДобавитьФайлВИндекс(ИмяФайлаreadme);
РепозиторийGit.Закоммитить("init", ИСТИНА);
РепозиторийGit.Закоммитить("init", Истина);
БДД.СохранитьВКонтекст(Алиас, КаталогРепозитория);

View File

@ -146,4 +146,70 @@
"""
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
Тогда Файл "\src\Документ.mdo" в рабочем каталоге содержит "fullTextSearch>Use<"
И Файл "\src\Документ.xml" в рабочем каталоге не содержит "FullTextSearch>Use<"
И Файл "\src\Документ.xml" в рабочем каталоге не содержит "FullTextSearch>Use<"
Сценарий: Прекоммит, анализируя исходники исправляет неканоничкое написание ключевых слов на каноническое
Когда Я копирую файл "tests\fixtures\ИсправлениеНеКаноническогоНаписания.bsl" в каталог репозитория "РабочийКаталог"
И я выполняю команду "git" с параметрами "add --all"
И я выполняю команду "git" с параметрами "commit -m addFile"
Тогда Вывод команды "git" содержит """
ИНФОРМАЦИЯ - В строке 5 найдено ключевое слово '#область' заменено на '#Область'
ИНФОРМАЦИЯ - В строке 7 найдено ключевое слово 'ПЕРЕМ' заменено на 'Перем'
ИНФОРМАЦИЯ - В строке 8 найдено ключевое слово 'перем' заменено на 'Перем'
ИНФОРМАЦИЯ - В строке 14 найдено ключевое слово '#КонецОБласти' заменено на '#КонецОбласти'
ИНФОРМАЦИЯ - В строке 16 найдено ключевое слово '&НаКлиентенаСервере' заменено на '&НаКлиентеНаСервере'
ИНФОРМАЦИЯ - В строке 17 найдено ключевое слово 'ПРоцедура' заменено на 'Процедура'
ИНФОРМАЦИЯ - В строке 18 найдено ключевое слово 'конецпроцедуры' заменено на 'КонецПроцедуры'
ИНФОРМАЦИЯ - В строке 20 найдено ключевое слово '&Насервере' заменено на '&НаСервере'
ИНФОРМАЦИЯ - В строке 21 найдено ключевое слово 'процедура' заменено на 'Процедура'
ИНФОРМАЦИЯ - В строке 24 найдено ключевое слово '&Наклиенте' заменено на '&НаКлиенте'
ИНФОРМАЦИЯ - В строке 25 найдено ключевое слово 'функция' заменено на 'Функция'
ИНФОРМАЦИЯ - В строке 26 найдено ключевое слово '#если' заменено на '#Если'
ИНФОРМАЦИЯ - В строке 26 найдено ключевое слово '#тогда' заменено на '#Тогда'
ИНФОРМАЦИЯ - В строке 26 найдено ключевое слово 'КлиенТ' заменено на 'Клиент'
ИНФОРМАЦИЯ - В строке 26 найдено ключевое слово 'сервер' заменено на 'Сервер'
ИНФОРМАЦИЯ - В строке 27 найдено ключевое слово 'перейти' заменено на 'Перейти'
ИНФОРМАЦИЯ - В строке 28 найдено ключевое слово '#Конецесли' заменено на '#КонецЕсли'
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'если' заменено на 'Если'
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'тогда' заменено на 'Тогда'
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'иначе' заменено на 'Иначе'
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'конецесли' заменено на 'КонецЕсли'
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'возврат' заменено на 'Возврат'
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'и' заменено на 'И'
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'не' заменено на 'НЕ'
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'истина' заменено на 'Истина'
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'ложь' заменено на 'Ложь'
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'НеОпределено' заменено на 'Неопределено'
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'null' заменено на 'NULL'
ИНФОРМАЦИЯ - В строке 32 найдено ключевое слово 'цикл' заменено на 'Цикл'
ИНФОРМАЦИЯ - В строке 32 найдено ключевое слово 'пока' заменено на 'Пока'
ИНФОРМАЦИЯ - В строке 33 найдено ключевое слово 'прервать' заменено на 'Прервать'
ИНФОРМАЦИЯ - В строке 34 найдено ключевое слово 'конеццикла' заменено на 'КонецЦикла'
ИНФОРМАЦИЯ - В строке 38 найдено ключевое слово 'иначеЕсли' заменено на 'ИначеЕсли'
ИНФОРМАЦИЯ - В строке 39 найдено ключевое слово 'попытка' заменено на 'Попытка'
ИНФОРМАЦИЯ - В строке 40 найдено ключевое слово 'новый' заменено на 'Новый'
ИНФОРМАЦИЯ - В строке 41 найдено ключевое слово 'исключение' заменено на 'Исключение'
ИНФОРМАЦИЯ - В строке 42 найдено ключевое слово 'вызватьИсключение' заменено на 'ВызватьИсключение'
ИНФОРМАЦИЯ - В строке 43 найдено ключевое слово 'конецпопытки' заменено на 'КонецПопытки'
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'ТолстыйКлиентОбычноеприложение' заменено на 'ТолстыйКлиентОбычноеПриложение'
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'толстыйКлиентУправляемоеПриложение' заменено на 'ТолстыйКлиентУправляемоеПриложение'
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'Тонкийклиент' заменено на 'ТонкийКлиент'
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'вебклиент' заменено на 'ВебКлиент'
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'и' заменено на 'И'
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'не' заменено на 'НЕ'
ИНФОРМАЦИЯ - В строке 51 найдено ключевое слово 'для' заменено на 'Для'
ИНФОРМАЦИЯ - В строке 51 найдено ключевое слово 'каждого' заменено на 'Каждого'
ИНФОРМАЦИЯ - В строке 51 найдено ключевое слово 'из' заменено на 'Из'
ИНФОРМАЦИЯ - В строке 52 найдено ключевое слово 'выполнить' заменено на 'Выполнить'
ИНФОРМАЦИЯ - В строке 55 найдено ключевое слово 'по' заменено на 'По'
ИНФОРМАЦИЯ - В строке 58 найдено ключевое слово 'добавитьОбработчик' заменено на 'ДобавитьОбработчик'
ИНФОРМАЦИЯ - В строке 58 найдено ключевое слово 'Удалитьобработчик' заменено на 'УдалитьОбработчик'
ИНФОРМАЦИЯ - В строке 59 найдено ключевое слово 'истина' заменено на 'Истина'
ИНФОРМАЦИЯ - В строке 59 найдено ключевое слово 'истина' заменено на 'Истина'
ИНФОРМАЦИЯ - В строке 59 найдено ключевое слово 'истина' заменено на 'Истина'
ИНФОРМАЦИЯ - В строке 59 найдено ключевое слово 'ложь' заменено на 'Ложь'
ИНФОРМАЦИЯ - В строке 60 найдено ключевое слово 'конецфункции' заменено на 'КонецФункции'
ИНФОРМАЦИЯ - В строке 62 найдено ключевое слово '&НасерверебезКонтекста' заменено на '&НаСервереБезКонтекста'
ИНФОРМАЦИЯ - В строке 68 найдено ключевое слово '&наКлиентеНаСервереБезКонтекста' заменено на '&НаКлиентеНаСервереБезКонтекста'
ИНФОРМАЦИЯ - В строке 72 найдено ключевое слово '&наКлиентенаСервере' заменено на '&НаКлиентеНаСервере'
"""

View File

@ -10,11 +10,12 @@
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global"
Тогда Код возврата команды "oscript" равен 0
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "precommit4onec v1.11.1"
И Вывод команды "oscript" содержит "precommit4onec v1.20"
И Вывод команды "oscript" содержит "Установленные настройки:"
И Вывод команды "oscript" содержит "ИспользоватьСценарииРепозитория ="
И Вывод команды "oscript" содержит "КаталогЛокальныхСценариев ="
И Вывод команды "oscript" содержит "ГлобальныеСценарии ="
И Вывод команды "oscript" содержит "НастройкиСценариев ="
Сценарий: Сброс настроек к значениям по умолчанию
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global -reset"
@ -24,9 +25,17 @@
И Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит
"""
precommit4onec v1.11.1
Установленные настройки:
precommit4onec v1.20
Установленные настройки: Precommt4onecСценарии
ИспользоватьСценарииРепозитория = Нет
КаталогЛокальныхСценариев =
ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ЗапретИспользованияПерейти.os,КорректировкаXMLФорм.os,ОтключениеПолнотекстовогоПоиска.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиОбластей.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os
"""
ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ЗапретИспользованияПерейти.os,ИсправлениеНеКаноническогоНаписания.os,КорректировкаXMLФорм.os,ОтключениеПолнотекстовогоПоиска.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиОбластей.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os
НастройкиСценариев = Соответствие
ОтключениеПолнотекстовогоПоиска = Соответствие
МетаданныеДляИсключения = Соответствие
src\_example.xml = Номер,ТабличнаяЧасть1.Реквизит
src\_example2.xml =
РазборОтчетовОбработокРасширений = Соответствие
ИспользоватьНастройкиПоУмолчанию = Да
ВерсияПлатформы =
"""

View File

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

View File

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

View File

@ -12,12 +12,14 @@
///////////////////////////////////////////////////////////////////////////////
Процедура НастроитьКоманду(Знач Команда, Знач Парсер) Экспорт
// Добавление параметров команды
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-global", "Работа с глобальными настройками.");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-rep-path", "Каталог репозитория, настройки которого интересуют.");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-child-path", "Относительный путь к каталогу с исходниками внутри каталога rep-path, для которого нужна отдельная настройка");
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-reset", "Сброс настроек на значения по умолчанию. Если редактируются настройки репозитория, то происходит удаление файла настроек.");
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-config", "Интерактивное конфигурирование настроек.");
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-child", "Указывает на работу с настройками подпроектов в репозитории, вместе с командой -reset удалит только подпроекты");
КонецПроцедуры // НастроитьКоманду
@ -30,143 +32,234 @@
Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач Приложение) Экспорт
Лог = Приложение.ПолучитьЛог();
Если НЕ ПараметрыКоманды["-global"]
И НЕ ЗначениеЗаполнено(ПараметрыКоманды["-rep-path"]) Тогда
Лог.Ошибка("Для конфигурирования необходимо передать флаг -global или указать каталог репозитория параметром -rep-path");
ОшибкаВводаПараметров = ПроверитьВалидностьПараметров(ПараметрыКоманды);
Если ЗначениеЗаполнено(ОшибкаВводаПараметров) Тогда
Лог.Ошибка(ОшибкаВводаПараметров);
Возврат Приложение.РезультатыКоманд().НеверныеПараметры;
КонецЕсли;
Если ПараметрыКоманды["-global"] Тогда
КаталогРепозитория = Приложение.ПутьКРодительскомуКаталогу();
Иначе
КаталогРепозитория = ПараметрыКоманды["-rep-path"];
КонецЕсли;
УправлениеНастройками = Новый НастройкиРепозитория(КаталогРепозитория);
Если ПараметрыКоманды["-reset"] Тогда
Если ПараметрыКоманды["-global"] Тогда
ЗаписатьГлобальныеНастройкиПоУмолчанию(УправлениеНастройками, Приложение.КаталогСценариев());
Иначе
СброситьНастройкиРепозитория(УправлениеНастройками);
КонецЕсли;
ИначеЕсли ПараметрыКоманды["-config"] Тогда
ИнтерактивнаяНастройка(КаталогРепозитория, УправлениеНастройками, ПараметрыКоманды["-global"], Приложение.КаталогСценариев());
УправлениеНастройками = Новый НастройкиРепозитория(КаталогРепозитория);
Если ПараметрыКоманды["-reset"] Тогда
Если ПараметрыКоманды["-global"] Тогда
ЗаписатьГлобальныеНастройкиПоУмолчанию(УправлениеНастройками, Приложение.КаталогСценариев());
Иначе
СброситьНастройкиРепозитория(УправлениеНастройками, ПараметрыКоманды["-child"], ПараметрыКоманды["-child-path"], КаталогРепозитория);
КонецЕсли;
ИначеЕсли ПараметрыКоманды["-config"] Тогда
Если ЗначениеЗаполнено(ПараметрыКоманды["-child-path"]) Тогда
УказанныйПуть = ПараметрыКоманды["-child-path"];
Если ПроверитьАдресДополнительногоКаталога(КаталогРепозитория, УказанныйПуть, УправлениеНастройками) Тогда
УказанныйПуть = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория, УказанныйПуть);
НовыеНастройки = ИнтерактивнаяНастройка(УказанныйПуть, УправлениеНастройками, Ложь, Приложение.КаталогСценариев(), Истина);
УправлениеНастройками.ОбновитьКонфигурацию();
УправлениеНастройками.ЗаписатьНастройкиПриложения(УказанныйПуть, НовыеНастройки.Получить(УказанныйПуть));
КонецЕсли;
Иначе
НовыеНастройки = ИнтерактивнаяНастройка(КаталогРепозитория, УправлениеНастройками, ПараметрыКоманды["-global"], Приложение.КаталогСценариев());
СконфигурироватьДополнительныеКаталоги(УправлениеНастройками, НовыеНастройки, Приложение.КаталогСценариев(), КаталогРепозитория);
СброситьНастройкиРепозитория(УправлениеНастройками);
ЗаписатьНастройкиРепозитория(УправлениеНастройками, НовыеНастройки);
КонецЕсли;
Иначе
НапечататьНастройки(УправлениеНастройками);
КонецЕсли;
// При успешном выполнении возвращает код успеха
Возврат Приложение.РезультатыКоманд().Успех;
КонецФункции // ВыполнитьКоманду
Функция ПроверитьВалидностьПараметров(ПараметрыКоманды)
ОшибкаПараметров = "";
Если НЕ ПараметрыКоманды["-global"]
И НЕ ЗначениеЗаполнено(ПараметрыКоманды["-rep-path"]) Тогда
ОшибкаПараметров ="Для конфигурирования необходимо передать флаг -global или указать каталог репозитория параметром -rep-path";
ИначеЕсли ПараметрыКоманды["-global"] И ЗначениеЗаполнено(ПараметрыКоманды["-child-path"]) Тогда
ОшибкаПараметров = "Нельзя конфигурировать дополнительные проекты глобально";
КонецЕсли;
Возврат ОшибкаПараметров;
КонецФункции
Процедура НапечататьНастройки(УправлениеНастройками)
Если УправлениеНастройками.ЭтоНовый() Тогда
Лог.Информация("Файл настроек не обнаружен");
Возврат;
КонецЕсли;
НастройкиПрекоммита = УправлениеНастройками.НастройкиПриложения("Precommt4onecСценарии");
Если НЕ ЗначениеЗаполнено(НастройкиПрекоммита) Тогда
Лог.Информация("Настройки в файле отсутствуют");
Возврат;
КонецЕсли;
Сообщить("Установленные настройки: ");
Для Каждого НастройкаПрекоммита Из НастройкиПрекоммита Цикл
Если ТипЗнч(НастройкаПрекоммита.Значение) = Тип("Массив") Тогда
ЗначениеПараметра = СтрСоединить(НастройкаПрекоммита.Значение, ",");
Иначе
ЗначениеПараметра = НастройкаПрекоммита.Значение;
ВсеНастройки = УправлениеНастройками.ПолучитьПроектыКонфигурации();
Для Каждого Настройка из ВсеНастройки Цикл
НастройкиПрекоммита = УправлениеНастройками.НастройкиПриложения(Настройка);
Если НЕ ЗначениеЗаполнено(НастройкиПрекоммита) Тогда
Лог.Информация(СтрШаблон("Настройки %1 в файле отсутствуют", Настройка));
Продолжить;
КонецЕсли;
Сообщить(Символы.Таб + НастройкаПрекоммита.Ключ + " = " + ЗначениеПараметра);
Сообщить("Установленные настройки: " + Настройка);
ВывестиНастройкиРекурсивно(НастройкиПрекоммита);
КонецЦикла;
КонецПроцедуры
Процедура ВывестиНастройкиРекурсивно(НастройкиПрекоммита, Уровень = 1)
ПробельныеСимволы = "";
Для Счетчик = 1 по Уровень Цикл
ПробельныеСимволы = ПробельныеСимволы + Символы.Таб;
КонецЦикла;
Для Каждого НастройкаПрекоммита Из НастройкиПрекоммита Цикл
Если ТипЗнч(НастройкаПрекоммита.Значение) = Тип("Массив") Тогда
ЗначениеПараметра = СтрСоединить(НастройкаПрекоммита.Значение, ",");
Иначе
ЗначениеПараметра = НастройкаПрекоммита.Значение;
КонецЕсли;
Сообщить(ПробельныеСимволы + НастройкаПрекоммита.Ключ + " = " + ЗначениеПараметра);
Если ТипЗнч(НастройкаПрекоммита.Значение) = Тип("Соответствие") Тогда
ВывестиНастройкиРекурсивно(НастройкаПрекоммита.Значение, Уровень + 1);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаписатьГлобальныеНастройкиПоУмолчанию(УправлениеНастройками, ТекущийКаталогСценариев)
ИмяПриложения = "Precommt4onecСценарии";
ИмяПриложения = УправлениеНастройками.ИмяПоУмолчанию();
СброситьНастройкиРепозитория(УправлениеНастройками);
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ИспользоватьСценарииРепозитория", Ложь);
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\КаталогЛокальныхСценариев", "");
Настройки = УправлениеНастройками.ПолучитьСтандартнуюСтруктуруНастроек();
ГлобальныеСценарии = ПолучитьИменаСценариев(ТекущийКаталогСценариев);
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии);
НастройкиСценариев = СформироватьНастройкиСценариев(ГлобальныеСценарии, ТекущийКаталогСценариев);
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\НастройкиСценариев", НастройкиСценариев);
Настройки.Вставить("ГлобальныеСценарии", ГлобальныеСценарии);
Настройки.Вставить("НастройкиСценариев", НастройкиСценариев);
УправлениеНастройками.ЗаписатьНастройкиПриложения(ИмяПриложения, Настройки);
КонецПроцедуры
Процедура СброситьНастройкиРепозитория(УправлениеНастройками)
Процедура СброситьНастройкиРепозитория(УправлениеНастройками, ТолькоДополнительные = Ложь, ПутьКаталога = "", КаталогРепозитория = "")
Если УправлениеНастройками.ЭтоНовый() Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ПутьКаталога) Тогда
ПутьКаталога = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория, ПутьКаталога);
УправлениеНастройками.УдалитьНастройкиПриложения(ПутьКаталога);
Иначе
ВсеНастройки = УправлениеНастройками.ПолучитьПроектыКонфигурации(ТолькоДополнительные);
Для Каждого Настройка Из ВсеНастройки Цикл
УправлениеНастройками.УдалитьНастройкиПриложения(Настройка);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
ИмяПриложения = "Precommt4onecСценарии";
УправлениеНастройками.УдалитьНастройкиПриложения(ИмяПриложения);
Процедура ЗаписатьНастройкиРепозитория(УправлениеНастройками, НовыеНастройки)
Для каждого НоваяНастройка Из НовыеНастройки Цикл
УправлениеНастройками.ЗаписатьНастройкиПриложения(НоваяНастройка.Ключ, НоваяНастройка.Значение);
КонецЦикла;
КонецПроцедуры
Функция ПолучитьИменаСценариев(КаталогСценариев)
НайденныеСценарии = Новый Массив;
ФайлыСценариев = НайтиФайлы(КаталогСценариев, "*.os");
Для Каждого ФайлСценария Из ФайлыСценариев Цикл
Если СтрСравнить(ФайлСценария.ИмяБезРасширения, "ШаблонСценария") = 0 Тогда
Для Каждого ФайлСценария Из ФайлыСценариев Цикл
Если СтрСравнить(ФайлСценария.ИмяБезРасширения, "ШаблонСценария") = 0 Тогда
Продолжить;
КонецЕсли;
НайденныеСценарии.Добавить(ФайлСценария.Имя);
КонецЦикла;
Возврат НайденныеСценарии;
КонецФункции
Функция СформироватьНастройкиСценариев(МассивСценариев, КаталогСценариев)
НастройкиСценариев = Новый Соответствие;
Рефлектор = Новый Рефлектор;
Для Каждого Сценарий Из МассивСценариев Цикл
ОбъектСценария = ЗагрузитьСценарий(ОбъединитьПути(КаталогСценариев, Сценарий));
@ -175,139 +268,209 @@
СтруктураНастроек = Рефлектор.ВызватьМетод(ОбъектСценария, "ПолучитьСтандартныеНастройкиСценария");
НастройкиСценариев.Вставить(СтруктураНастроек.ИмяСценария, СтруктураНастроек.Настройка);
КонецЕсли;
КонецЦикла;
Возврат НастройкиСценариев;
КонецФункции
Процедура ИнтерактивнаяНастройка(КаталогРепозитория, УправлениеНастройками, ГлобальныеНастройки, КаталогГлобальныхСценариев)
ИмяПриложения = "Precommt4onecСценарии";
Сообщить("Настройка конфигурации precommit");
Функция ИнтерактивнаяНастройка(КаталогРепозитория, УправлениеНастройками, ГлобальныеНастройки, КаталогГлобальныхСценариев, ЭтоДопПроект = Ложь)
ИмяПриложения = УправлениеНастройками.ИмяПоУмолчанию();
ПолныеНастройки = Новый Соответствие;
Сообщить(СтрШаблон("Настройка конфигурации precommit %1%2", Символы.ПС, КаталогРепозитория));
ГлобальныеСценарии = ПолучитьНастройкуМассив("Выберите подключаемые глобальные сценарии: ",
ПолучитьИменаСценариев(КаталогГлобальныхСценариев),
УправлениеНастройками.Настройка(ИмяПриложения + "\ГлобальныеСценарии"));
ПолучитьИменаСценариев(КаталогГлобальныхСценариев), УправлениеНастройками.Настройка(ИмяПриложения + "\ГлобальныеСценарии"));
Если ГлобальныеНастройки Тогда
Подсказка = "Нужно использовать сценарии локальных репозиториев?";
Иначе
Подсказка = "Нужно использовать локальные сценарии?";
КонецЕсли;
ИспользоватьСценарииРепозитория = ПолучитьНастройкуБулево(Подсказка,
УправлениеНастройками.Настройка(ИмяПриложения + "\ИспользоватьСценарииРепозитория"));
УправлениеНастройками.Настройка(ИмяПриложения + "\ИспользоватьСценарииРепозитория"));
КаталогЛокальныхСценариев = "";
Если ИспользоватьСценарииРепозитория Тогда
КаталогЛокальныхСценариев = ПолучитьНастройкуСтрока("Укажите относительный путь к сценариям в репозитории: ",
УправлениеНастройками.Настройка(ИмяПриложения + "\КаталогЛокальныхСценариев"));
УправлениеНастройками.Настройка(ИмяПриложения + "\КаталогЛокальныхСценариев"));
КонецЕсли;
НастройкиПриложения = УправлениеНастройками.ПолучитьСтандартнуюСтруктуруНастроек();
НастройкиСценариев = СформироватьНастройкиСценариев(ГлобальныеСценарии, КаталогГлобальныхСценариев);
НастройкиПриложения.Вставить("ИспользоватьСценарииРепозитория", ИспользоватьСценарииРепозитория);
НастройкиПриложения.Вставить("КаталогЛокальныхСценариев", КаталогЛокальныхСценариев);
НастройкиПриложения.Вставить("ГлобальныеСценарии", ГлобальныеСценарии);
НастройкиПриложения.Вставить("НастройкиСценариев", НастройкиСценариев);
ИмяПриложения = ?(ЭтоДопПроект,КаталогРепозитория, УправлениеНастройками.ИмяПоУмолчанию());
ПолныеНастройки.Вставить(ИмяПриложения, НастройкиПриложения);
Возврат ПолныеНастройки;
КонецФункции
СброситьНастройкиРепозитория(УправлениеНастройками);
Процедура СконфигурироватьДополнительныеКаталоги(УправлениеНастройками, ОсновныеНастройки, КаталогГлобальныхСценариев, КаталогРепозитория)
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ИспользоватьСценарииРепозитория", ИспользоватьСценарииРепозитория);
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\КаталогЛокальныхСценариев", КаталогЛокальныхСценариев);
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии);
НастройкиСценариев = СформироватьНастройкиСценариев(ГлобальныеСценарии, КаталогГлобальныхСценариев);
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\НастройкиСценариев", );
Пока ПолучитьНастройкуБулево("Сконфигурировать дополнительный каталог со своими правилами обработки?", Ложь) Цикл
АдресКаталога = ПолучитьНастройкуСтрока("Введите относительный путь в репозитории к каталогу", "");
Если ПроверитьАдресДополнительногоКаталога(КаталогРепозитория, АдресКаталога, УправлениеНастройками) Тогда
АдресКаталога = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория, АдресКаталога);
НастройкиДополнительные = ИнтерактивнаяНастройка(АдресКаталога, УправлениеНастройками, Ложь, КаталогГлобальныхСценариев, Истина);
ОсновныеНастройки.Вставить(АдресКаталога, НастройкиДополнительные.Получить(АдресКаталога));
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ПолучитьНастройкуБулево(ТекстПодсказки, Знач ЗначениеПоУмолчанию)
Функция ПроверитьАдресДополнительногоКаталога(КаталогРепозитория, АдресКаталога, УправлениеНастройками)
РазрешеноДобавление = Истина;
КаталогВРепо = ФайловыеОперации.ПолучитьНормализованныйПолныйПуть(КаталогРепозитория, АдресКаталога);
НастроенныеПроекты = УправлениеНастройками.ПолучитьПроектыКонфигурации(Истина);
Файл = Новый Файл(КаталогВРепо);
Сообщение = "";
Если Файл.Существует() И Файл.ЭтоКаталог() Тогда
Для Каждого Проект Из НастроенныеПроекты Цикл
КаталогНастроенныйВКонфигурации = ФайловыеОперации.ПолучитьНормализованныйПолныйПуть(КаталогРепозитория, Проект);
Если КаталогВРепо = КаталогНастроенныйВКонфигурации Тогда
Сообщение = "Каталог уже добавлен";
РазрешеноДобавление = Ложь;
Прервать;
ИначеЕсли СтрНачинаетсяС(КаталогВРепо, КаталогНастроенныйВКонфигурации) ИЛИ СтрНачинаетсяС(КаталогНастроенныйВКонфигурации, КаталогВРепо) Тогда
РазрешеноДобавление = Ложь;
Сообщение = "Невозможно добавить вложенный каталог";
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ ЗначениеЗаполнено(ЗначениеПоУмолчанию) Тогда
ЗначениеПоУмолчанию = Истина;
Иначе
РазрешеноДобавление = Ложь;
Сообщение = "Каталога не существует или это файл";
КонецЕсли;
Если НЕ РазрешеноДобавление Тогда
Сообщить(Сообщение);
КонецЕсли;
Возврат РазрешеноДобавление;
КонецФункции
Функция ПолучитьНастройкуБулево(ТекстПодсказки, Знач ЗначениеПоУмолчанию)
Если НЕ ЗначениеЗаполнено(ЗначениеПоУмолчанию) Тогда
ЗначениеПоУмолчанию = Истина;
КонецЕсли;
ВыбранноеЗначение = Формат(ЗначениеПоУмолчанию, "БЛ=n; БИ=y");
Пока ИСТИНА Цикл
Пока Истина Цикл
Сообщить(ТекстПодсказки + " [" + Формат(ЗначениеПоУмолчанию, "БЛ=n; БИ=y") + "]. Введите y[es]/n[o]");
ВвестиСтроку(ВыбранноеЗначение);
Если СтрНайти("yY", ВыбранноеЗначение) Тогда
ВыбранноеЗначение = ИСТИНА;
ВыбранноеЗначение = Истина;
Прервать;
ИначеЕсли СтрНайти("nN", ВыбранноеЗначение) Тогда
ВыбранноеЗначение = ЛОЖЬ;
ВыбранноеЗначение = Ложь;
Прервать;
ИначеЕсли ВыбранноеЗначение = Символы.ПС Тогда
ВыбранноеЗначение = ИСТИНА;
ВыбранноеЗначение = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ВыбранноеЗначение;
КонецФункции
Функция ПолучитьНастройкуМассив(ТекстПодсказки, ДоступныйМассив, Знач УстановленныеЗначения = Неопределено)
Если УстановленныеЗначения = Неопределено Тогда
УстановленныеЗначения = ДоступныйМассив;
КонецЕсли;
Сообщить(ТекстПодсказки);
ВыбранныеЭлементы = Новый Массив;
Для Ит = 0 По ДоступныйМассив.Количество() - 1 Цикл
ЗначениеМассива = ДоступныйМассив[Ит];
ТекстПодсказкиМассив = Символы.Таб + ЗначениеМассива;
Если ПолучитьНастройкуБулево(ТекстПодсказкиМассив, УстановленныеЗначения.Найти(ЗначениеМассива) <> Неопределено) Тогда
ВыбранныеЭлементы.Добавить(ЗначениеМассива);
КонецЕсли;
КонецЦикла;
Возврат ВыбранныеЭлементы;
КонецФункции
Функция ПолучитьНастройкуСтрока(ТекстПодсказки, ЗначениеПоУмолчанию = "")
ВыбранноеЗначение = "";
Пока Истина Цикл
Сообщить(ТекстПодсказки + ?(ПустаяСтрока(ЗначениеПоУмолчанию), "", "[" + ЗначениеПоУмолчанию + "]"));
ВвестиСтроку(ВыбранноеЗначение);
ВыбранноеЗначение = СокрЛП(ВыбранноеЗначение);
Если Не ПустаяСтрока(ВыбранноеЗначение) Тогда
Прервать;
ИначеЕсли НЕ ПустаяСтрока(ЗначениеПоУмолчанию) Тогда
ВыбранноеЗначение = ЗначениеПоУмолчанию;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ВыбранноеЗначение;
КонецФункции

View File

@ -10,7 +10,6 @@
Перем Лог;
Перем РепозиторийGit;
Перем СценарииОбработки;
///////////////////////////////////////////////////////////////////////////////
@ -18,7 +17,8 @@
// Добавление параметров команды
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРепозитория", "Каталог анализируемого репозитория");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-source-dir", "Каталог расположения исходных файлов относительно корня репозитория. По умолчанию <src>");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-source-dir",
"Каталог расположения исходных файлов относительно корня репозитория. По умолчанию <src>");
КонецПроцедуры // НастроитьКоманду
@ -42,7 +42,8 @@
КонецЕсли;
УправлениеНастройками = Новый НастройкиРепозитория(КаталогРепозитория);
Если УправлениеНастройками.ЭтоНовый() ИЛИ УправлениеНастройками.НастройкиПриложения("Precommt4onecСценарии").Количество() = 0 Тогда
Если УправлениеНастройками.ЭтоНовый()
ИЛИ УправлениеНастройками.НастройкиПриложения("Precommt4onecСценарии").Количество() = 0 Тогда
Лог.Информация("Используем глобальные настройки");
УправлениеНастройками = Новый НастройкиРепозитория(Приложение.ПутьКРодительскомуКаталогу());
@ -53,8 +54,6 @@
КонецЕсли;
ЗагрузитьСценарииОбработки(Приложение.КаталогСценариев(), УправлениеНастройками, КаталогРепозитория);
КаталогИсходныхФайлов = ПараметрыКоманды["-source-dir"];
Если Не ЗначениеЗаполнено(КаталогИсходныхФайлов) Тогда
@ -65,6 +64,7 @@
ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, КаталогИсходныхФайлов);
ФайлТекущийКаталогИсходныхФайлов = Новый Файл(ТекущийКаталогИсходныхФайлов);
ТекущийКаталогИсходныхФайлов = ФайлТекущийКаталогИсходныхФайлов.ПолноеИмя;
Если НЕ ФайлТекущийКаталогИсходныхФайлов.Существует() Тогда
СоздатьКаталог(ТекущийКаталогИсходныхФайлов);
@ -81,33 +81,58 @@
Возврат Приложение.РезультатыКоманд().НеверныеПараметры;
КонецЕсли;
НастройкиПроектов = УправлениеНастройками.ПолучитьПроектыКонфигурации();
НаборНастроек = Новый Соответствие;
Для Каждого ЭлементНастройки из НастройкиПроектов Цикл
Настройка = Новый Структура("СценарииОбработки, НастройкиСценариев");
Настройка.СценарииОбработки = ЗагрузитьСценарииОбработки(Приложение.КаталогСценариев(),
УправлениеНастройками,
КаталогРепозитория,
ЭлементНастройки);
Настройка.НастройкиСценариев = УправлениеНастройками.НастройкиПриложения(ЭлементНастройки);
НаборНастроек.Вставить(ЭлементНастройки, Настройка);
КонецЦикла;
ЖурналИзменений = ПолучитьЖурналИзменений();
Ит = 0;
ПараметрыОбработки = Новый Структура("Лог, ФайлыДляПостОбработки, ИзмененныеКаталоги, КаталогРепозитория, УправлениеНастройками",
Лог, Новый Массив, Новый Массив, КаталогРепозитория, УправлениеНастройками);
ПараметрыОбработки = Новый Структура("ФайлыДляПостОбработки, ИзмененныеКаталоги, КаталогРепозитория, Настройки",
Новый Массив, Новый Массив, КаталогРепозитория);
ПараметрыОбработки.Вставить("Лог", Лог);
Пока Ит < ЖурналИзменений.Количество() Цикл
АнализируемыйФайл = Новый Файл(ОбъединитьПути(КаталогРепозитория, ЖурналИзменений[Ит].ИмяФайла));
Лог.Отладка("Анализируется файл <%1>", АнализируемыйФайл.Имя);
ИмяФайла = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория,
ЖурналИзменений[Ит].ИмяФайла);
НастройкаОбработки = ПолучитьПараметрыОбработкиФайла(ИмяФайла, УправлениеНастройками, НаборНастроек);
СценарииОбработки = НастройкаОбработки.СценарииОбработки;
НастройкиСценариев = НастройкаОбработки.НастройкиСценариев;
ПараметрыОбработки.Настройки = НастройкиСценариев.Получить("НастройкиСценариев");
Для Каждого СценарийОбработки Из СценарииОбработки Цикл
ФайлОбработан = СценарийОбработки.Сценарий.ОбработатьФайл(АнализируемыйФайл, ТекущийКаталогИсходныхФайлов, ПараметрыОбработки);
Если ФайлОбработан Тогда
Для каждого ФайлДляДопОбработки Из ПараметрыОбработки.ФайлыДляПостОбработки Цикл
ЖурналИзменений.Добавить(Новый Структура("ИмяФайла, ТипИзменения", СтрЗаменить(ФайлДляДопОбработки, КаталогРепозитория, ""), ВариантИзмененийФайловGit.Изменен));
КонецЦикла;
ПараметрыОбработки.ФайлыДляПостОбработки.Очистить();
ФайлОбработан = СценарийОбработки.Сценарий.ОбработатьФайл(АнализируемыйФайл,
ТекущийКаталогИсходныхФайлов,
ПараметрыОбработки);
Если НЕ ФайлОбработан Тогда
Продолжить;
КонецЕсли;
Для Каждого ФайлДляДопОбработки Из ПараметрыОбработки.ФайлыДляПостОбработки Цикл
ЖурналИзменений.Добавить(Новый Структура("ИмяФайла, ТипИзменения",
СтрЗаменить(ФайлДляДопОбработки, КаталогРепозитория, ""),
ВариантИзмененийФайловGit.Изменен));
КонецЦикла;
ПараметрыОбработки.ФайлыДляПостОбработки.Очистить();
КонецЦикла;
@ -130,6 +155,31 @@
///////////////////////////////////////////////////////////////////////////////
Функция ПолучитьПараметрыОбработкиФайла(ИмяФайла, УправлениеНастройками, НастройкиПроектов)
ИмяОбщейНастройки = УправлениеНастройками.ИмяПоУмолчанию();
НайденнаяНастройка = НастройкиПроектов.Получить(ИмяОбщейНастройки);
Для Каждого ЭлементНастройки Из НастройкиПроектов Цикл
Если ЭлементНастройки.Ключ = ИмяОбщейНастройки Тогда
Продолжить;
ИначеЕсли СтрНачинаетсяС(ИмяФайла, ЭлементНастройки.Ключ) Тогда
НайденнаяНастройка = ЭлементНастройки.Значение;
Иначе
// ничего
КонецЕсли;
КонецЦикла;
Возврат НайденнаяНастройка;
КонецФункции
Функция ПолучитьЖурналИзменений()
ПараметрыКомандыGit = Новый Массив;
@ -146,7 +196,7 @@
СтрокаВывода = СокрЛП(СтрокаВывода);
ПозицияПробела = СтрНайти(СтрокаВывода, Символы.Таб);
СимволИзменения = Лев(СтрокаВывода, 1);
ТипИзменения = ВариантИзмененийФайловGit.ОпределитьВариантИзменения(СимволИзменения);
ИмяФайла = СокрЛП(СтрЗаменить(Сред(СтрокаВывода, ПозицияПробела + 1), """", ""));
ЖурналИзменений.Добавить(Новый Структура("ИмяФайла, ТипИзменения", ИмяФайла, ТипИзменения));
@ -159,7 +209,7 @@
КонецФункции
Процедура ЗагрузитьСценарииОбработки(ТекущийКаталогСценариев, УправлениеНастройками, КаталогРепозитория)
Функция ЗагрузитьСценарииОбработки(ТекущийКаталогСценариев, УправлениеНастройками, КаталогРепозитория, КлючНастройки)
СценарииОбработки = Новый Массив;
ФайлыГлобальныхСценариев = НайтиФайлы(ТекущийКаталогСценариев, "*.os");
@ -168,11 +218,11 @@
Если НЕ УправлениеНастройками.ЭтоНовый() Тогда
Лог.Информация("Читаем настройки");
ИменаЗагружаемыхСценариев = УправлениеНастройками.Настройка("Precommt4onecСценарии\ГлобальныеСценарии");
Если УправлениеНастройками.Настройка("Precommt4onecСценарии\ИспользоватьСценарииРепозитория") Тогда
Лог.Информация("Читаем настройки " + КлючНастройки);
ИменаЗагружаемыхСценариев = УправлениеНастройками.Настройка(КлючНастройки + "\ГлобальныеСценарии");
Если УправлениеНастройками.Настройка(КлючНастройки + "\ИспользоватьСценарииРепозитория") Тогда
ЛокальныйКаталог = УправлениеНастройками.Настройка("Precommt4onecСценарии\КаталогЛокальныхСценариев");
ЛокальныйКаталог = УправлениеНастройками.Настройка(КлючНастройки + "\КаталогЛокальныхСценариев");
ПутьКЛокальнымСценариям = ОбъединитьПути(КаталогРепозитория, ЛокальныйКаталог);
ФайлПутьКЛокальнымСценариям = Новый Файл(ПутьКЛокальнымСценариям);
@ -198,10 +248,12 @@
ВызватьИсключение "Нет доступных сценариев обработки файлов";
КонецЕсли;
КонецПроцедуры
Возврат СценарииОбработки;
КонецФункции
Процедура ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыСценариев, Знач ИменаЗагружаемыхСценариев = Неопределено, ЗагрузитьВсе = Ложь)
Процедура ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыСценариев,
Знач ИменаЗагружаемыхСценариев = Неопределено,
ЗагрузитьВсе = Ложь)
Если ИменаЗагружаемыхСценариев = Неопределено Тогда
@ -226,7 +278,8 @@
Попытка
СценарийОбработки = ЗагрузитьСценарий(ФайлСценария.ПолноеИмя);
СценарииОбработки.Добавить(Новый Структура("ИмяСценария, Сценарий", СценарийОбработки.ИмяСценария(), СценарийОбработки));
СценарииОбработки.Добавить(Новый Структура("ИмяСценария, Сценарий",
СценарийОбработки.ИмяСценария(), СценарийОбработки));
Исключение

View File

@ -16,7 +16,6 @@
Перем Конфигурация; // описание конфигурации
Перем АдресКонфигурационногоФайла; // адрес нахождения конфигурационного файла
Перем ОбновлятьКонфигурацию; // флаг необходимости обновления конфигурации / затирания
///////////////////////////////////////////////////////////////////
// Программный интерфейс
///////////////////////////////////////////////////////////////////
@ -30,23 +29,9 @@
Функция ЭтоНовый() Экспорт
Возврат НовыйКонфиг;
КонецФункции // ЭтоНовый()
// ГлобальныеНастройки
// Возвращает набор глобальных настроек
//
// Возвращаемое значение:
// Соответствие - Набор глобальных настроек при их наличии, если настроек нет то будет возвращено пустое соответствие
//
Функция ГлобальныеНастройки() Экспорт
ПроверкаИнициализации();
Возврат НастройкиПриложения("GLOBAL");
КонецФункции // ГлобальныеНастройки() Экспорт
// НастройкиПриложения
// Возвращает набор настроек для приложения
//
@ -60,20 +45,20 @@
ПроверкаИнициализации();
Если ПустаяСтрока(ИмяПриложения) Тогда
ВызватьИсключение "Не указано имя приложения";
КонецЕсли;
ИскомыеНастройки = Конфигурация.Получить(ИмяПриложения);
Если ИскомыеНастройки = Неопределено Тогда
ИскомыеНастройки = Новый Соответствие;
КонецЕсли;
Возврат ИскомыеНастройки;
КонецФункции // НастройкиПриложения()
// Настройка
@ -87,16 +72,32 @@
// Возвращаемое значение:
// Произвольный - Значение настройки
//
Функция Настройка(ИмяНастройки)Экспорт
Функция Настройка(ИмяНастройки) Экспорт
ПроверкаИнициализации();
РазложенноеИмяНастройки = РазобратьИмяНастройки(ИмяНастройки);
ИскомоеПриложение = НастройкиПриложения(РазложенноеИмяНастройки.ИмяПриложения);
Возврат ИскомоеПриложение.Получить(РазложенноеИмяНастройки.ИмяНастройки);
КонецФункции // Настройка(ИмяНастройки)
Функция ПолучитьПроектыКонфигурации(ТолькоДополнительные = Ложь) Экспорт
Массив = Новый Массив;
Для Каждого Элемент из Конфигурация Цикл
Если ТолькоДополнительные И Элемент.Ключ = ИмяПоУмолчанию() Тогда
Продолжить;
КонецЕсли;
Массив.Добавить(Элемент.Ключ);
КонецЦикла;
Возврат Массив;
КонецФункции
// ЗаписатьНастройку
// Записывает настройку в конфигурационный файл
//
@ -110,18 +111,18 @@
Процедура ЗаписатьНастройку(ИмяНастройки, Значение) Экспорт
ПроверкаИнициализации();
РазложенноеИмяНастройки = РазобратьИмяНастройки(ИмяНастройки);
ИскомоеПриложение = НастройкиПриложения(РазложенноеИмяНастройки.ИмяПриложения);
Если ОбновлятьКонфигурацию ИЛИ ИскомоеПриложение.Получить(РазложенноеИмяНастройки.ИмяНастройки) = Неопределено Тогда
ИскомоеПриложение.Вставить(РазложенноеИмяНастройки.ИмяНастройки, Значение);
КонецЕсли;
Конфигурация.Вставить(РазложенноеИмяНастройки.ИмяПриложения, ИскомоеПриложение);
ОбновитьКонфигурационныйФайл();
КонецПроцедуры // ЗаписатьНастройку(ИмяНастройки, Значение)
// ЗаписатьНастройкиПриложения
@ -134,23 +135,23 @@
Процедура ЗаписатьНастройкиПриложения(ИмяПриложения, Значение) Экспорт
ПроверкаИнициализации();
Если ПустаяСтрока(ИмяПриложения) Тогда
Если ПустаяСтрока(ИмяПриложения) Тогда
ВызватьИсключение "Не указано имя приложения";
КонецЕсли;
Если ТипЗнч(Значение) <> Тип("Соответствие") Тогда
ВызватьИсключение "Тип значения должен быть Соответствие";
КонецЕсли;
Конфигурация.Вставить(ИмяПриложения, Значение);
ОбновитьКонфигурационныйФайл();
КонецПроцедуры // ЗаписатьНастройкиПриложения()
// УдалитьНастройкиПриложения
@ -162,17 +163,17 @@
Процедура УдалитьНастройкиПриложения(ИмяПриложения) Экспорт
ПроверкаИнициализации();
Если ПустаяСтрока(ИмяПриложения) Тогда
ВызватьИсключение "Не указано имя приложения";
КонецЕсли;
Конфигурация.Удалить(ИмяПриложения);
ОбновитьКонфигурационныйФайл();
КонецПроцедуры // УдалитьНастройкиПриложения()
///////////////////////////////////////////////////////////////////
@ -182,9 +183,9 @@
Функция ПроверкаИнициализации()
Если Не ИнициализацияВыполнена Тогда
ВызватьИсключение "Необходимо выполнить инициализацию"
КонецЕсли;
КонецФункции // ПроверкаИнициализации()
@ -192,22 +193,21 @@
Функция РазобратьИмяНастройки(Знач ИмяНастройки)
Если ПустаяСтрока(ИмяНастройки) Тогда
ВызватьИсключение "Не передано имя настройки"
КонецЕсли;
ИмяПриложения = "GLOBAL";
ПозицияРазделителя = СтрНайти(ИмяНастройки, "\");
ПозицияРазделителя = СтрНайти(ИмяНастройки, "\",НаправлениеПоиска.СКонца);
Если ПозицияРазделителя > 0 Тогда
ИмяПриложения = Лев(ИмяНастройки, ПозицияРазделителя - 1);
ИмяНастройки = Сред(ИмяНастройки, ПозицияРазделителя + 1);
КонецЕсли;
Возврат Новый Структура("ИмяПриложения, ИмяНастройки", ИмяПриложения, ИмяНастройки);
КонецФункции // РазобратьИмяНастройки()
Функция ОбновитьКонфигурационныйФайл()
@ -217,11 +217,16 @@
Запись = Новый ЗаписьТекста(АдресКонфигурационногоФайла, КодировкаТекста.UTF8NoBOM);
Запись.Записать(ТекстКонфигурации);
Запись.Закрыть();
НовыйКонфиг = ЛОЖЬ;
НовыйКонфиг = Ложь;
КонецФункции // ОбновитьКонфигурационныйФайл()
Функция ИмяПоУмолчанию() Экспорт
Возврат "Precommt4onecСценарии";
КонецФункции
///////////////////////////////////////////////////////////////////
// ПриСозданииОбъекта
@ -231,14 +236,13 @@
// КаталогРепозитория - Строка - Адрес каталога репозитория
// ОбновлятьКонф - Булево - флаг необходимости обновления конфигурации / затирания
//
Процедура ПриСозданииОбъекта(КаталогРепозитория, ОбновлятьКонф = ЛОЖЬ)
Процедура ПриСозданииОбъекта(КаталогРепозитория, ОбновлятьКонф = Ложь)
ИнициализацияВыполнена = ЛОЖЬ;
НовыйКонфиг = ЛОЖЬ;
ИнициализацияВыполнена = Ложь;
НовыйКонфиг = Ложь;
Конфигурация = Неопределено;
АдресКонфигурационногоФайла = "";
ОбновлятьКонфигурацию = ?(ОбновлятьКонф = Неопределено, ЛОЖЬ, ОбновлятьКонф);
ОбновлятьКонфигурацию = ?(ОбновлятьКонф = Неопределено, Ложь, ОбновлятьКонф);
Файл = Новый Файл(КаталогРепозитория);
Если НЕ (Файл.Существует() И Файл.ЭтоКаталог()) Тогда
@ -256,14 +260,42 @@
ПарсерJSON = Новый ПарсерJSON;
Конфигурация = ПарсерJSON.ПрочитатьJSON(ТекстКонфигурации);
Иначе
НовыйКонфиг = ИСТИНА;
НовыйКонфиг = Истина;
Конфигурация = Новый Соответствие;
КонецЕсли;
ИнициализацияВыполнена = ИСТИНА;
ИнициализацияВыполнена = Истина;
КонецПроцедуры // ПриСозданииОбъекта()
КонецПроцедуры // ПриСозданииОбъекта()
Функция ПолучитьСтандартнуюСтруктуруНастроек() Экспорт
Настройки = Новый Соответствие();
Настройки.Вставить("ИспользоватьСценарииРепозитория", Ложь);
Настройки.Вставить("КаталогЛокальныхСценариев", "");
Настройки.Вставить("ГлобальныеСценарии", Новый Массив);
Настройки.Вставить("НастройкиСценариев", Новый Соответствие());
Возврат Настройки;
КонецФункции
Процедура ЗаписатьСтруктуруНастроек(Настройки) Экспорт
ШаблонНастройки = "%1\%2";
Для Каждого Настройка Из Настройки Цикл
ЗаписатьНастройку(СтрШаблон(ШаблонНастройки, ИмяПоУмолчанию(), Настройка.Ключ), Настройка.Значение);
КонецЦикла;
КонецПроцедуры
Процедура ОбновитьКонфигурацию() Экспорт
ОбновлятьКонфигурацию = Истина;
КонецПроцедуры

View File

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

View File

@ -1,4 +1,3 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с набором методов для работы с файлами
@ -80,4 +79,96 @@
Возврат ?(ЕстьBOM, КодировкаТекста.UTF8, КодировкаТекста.UTF8NoBOM);
КонецФункции // ОпределитьКодировку
КонецФункции // ОпределитьКодировку
// Возвращает путь файла относительно корневого каталога
//
// Параметры:
// ПутьКорневогоКаталога - Строка - путь корневого каталога
// ПутьВнутреннегоФайла - Строка - путь файла
// РазделительПути - Строка или Неопределено - все разделители в пути заменяются на указанный разделитель пути
// если Неопределено, то разделители пути не заменяются
//
// Возвращаемое значение:
// Строка - относительный путь файла
//
Функция ОтносительныйПуть(Знач ПутьКорневогоКаталога, Знач ПутьВнутреннегоФайла, Знач РазделительПути = Неопределено) Экспорт
ПроверитьКорневойКаталог(ПутьКорневогоКаталога);
ФайлКорень = Новый Файл(ПутьКорневогоКаталога);
ФайлВнутреннийКаталог = Новый Файл(ПутьВнутреннегоФайла);
Рез = СтрЗаменить(ФайлВнутреннийКаталог.ПолноеИмя, ФайлКорень.ПолноеИмя, "");
Если Найти("\/", Лев(Рез, 1)) > 0 Тогда
Рез = Сред(Рез, 2);
КонецЕсли;
Если Найти("\/", Прав(Рез, 1)) > 0 Тогда
Рез = Лев(Рез, СтрДлина(Рез)-1);
КонецЕсли;
Если РазделительПути <> Неопределено Тогда
Рез = СтрЗаменить(Рез, "\", РазделительПути);
Рез = СтрЗаменить(Рез, "/", РазделительПути);
КонецЕсли;
Если ПустаяСтрока(Рез) Тогда
Рез = ".";
КонецЕсли;
Возврат Рез;
КонецФункции
// Возвращает относительный путь файла по относительному пути, обрезая разделители. Приводит разделители пути к формату ОС
//
// Параметры:
// ПутьКорневогоКаталога - Строка - путь корневого каталога
// ОтносительныйПутьФайла - Строка - относительный путь в корне каталога
//
// Возвращаемое значение:
// Строка - относительный путь файла
//
Функция ПолучитьНормализованныйОтносительныйПуть(Знач ПутьКорневогоКаталога, Знач ОтносительныйПутьФайла) Экспорт
ПроверитьКорневойКаталог(ПутьКорневогоКаталога);
ПолныйПутьФайла = ОбъединитьПути(ПутьКорневогоКаталога, ОтносительныйПутьФайла);
ОтносительныйПуть = ОтносительныйПуть(ПутьКорневогоКаталога, ПолныйПутьФайла, ПолучитьРазделительПути());
Файл = Новый Файл(ПолныйПутьФайла);
ЭтоКаталог = Файл.Существует() И Файл.ЭтоКаталог();
Результат = ?(ЭтоКаталог, ОтносительныйПуть + ПолучитьРазделительПути(), ОтносительныйПуть);
Возврат Результат;
КонецФункции
// Возвращает полный путь файла по относительному пути, обрезая лишние разделители, приводит разделители пути к формату ОС
//
// Параметры:
// ПутьКорневогоКаталога - Строка - путь корневого каталога
// ОтносительныйПутьФайла - Строка - относительный путь в корне каталога
//
// Возвращаемое значение:
// Строка - полный путь файла
//
Функция ПолучитьНормализованныйПолныйПуть(Знач ПутьКорневогоКаталога, Знач ОтносительныйПутьФайла) Экспорт
ПроверитьКорневойКаталог(ПутьКорневогоКаталога);
ОтносительныйПуть = ПолучитьНормализованныйОтносительныйПуть(ПутьКорневогоКаталога, ОтносительныйПутьФайла);
Результат = ОбъединитьПути(ПутьКорневогоКаталога, ОтносительныйПуть);
Возврат Результат;
КонецФункции
Процедура ПроверитьКорневойКаталог(ПутьКорневогоКаталога)
Если ПустаяСтрока(ПутьКорневогоКаталога) Тогда
ВызватьИсключение "Не указан корневой путь в методе ОтносительныйПуть";
КонецЕсли;
КонецПроцедуры

View File

@ -36,7 +36,7 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());

View File

@ -37,7 +37,7 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());

View File

@ -0,0 +1,389 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией сценариев обработки файлов
// <ИсправлениеНеКаноническогоНаписания>
//
///////////////////////////////////////////////////////////////////////////////
Перем Лог;
// ИмяСценария
// Возвращает имя сценария обработки файлов
//
// Возвращаемое значение:
// Строка - Имя текущего сценария обработки файлов
//
Функция ИмяСценария() Экспорт
Возврат "ИсправлениеНеКаноническогоНаписания";
КонецФункции // ИмяСценария()
// ОбработатьФайл
// Выполняет обработку файла
//
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если ИсправитьНаКаноническоеНаписание(АнализируемыйФайл.ПолноеИмя) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции // ОбработатьФайл()
Функция ИсправитьНаКаноническоеНаписание(Знач ИмяФайла)
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
Возврат Ложь;
КонецЕсли;
Эталоны = Эталоны();
КлючевыеСлова = КлючевыеСлова(Эталоны);
РазбираемоеСодержимоеФайла = СтрЗаменить(СодержимоеФайла, """""", "***ЗАМЕНА_ДВОЙНЫХ_КАВЫЧЕК***");
РазбираемоеСодержимоеФайла = СтрЗаменить(РазбираемоеСодержимоеФайла, "://", "***ЗАМЕНА_ЧАСТИ_URL***"); // например, URLСтрока = "http://my.domain.com"
НовоеСодержимоеФайла = Новый ТекстовыйДокумент;
ТекстРазбора = Новый ТекстовыйДокумент;
ТекстРазбора.УстановитьТекст(РазбираемоеСодержимоеФайла);
ВсегоСтрок = ТекстРазбора.КоличествоСтрок();
СтрокаОткрыта = Ложь;
// символы, которые будут использоваться для нормализации строки
ЗаменяемыеСимволы = "; = ( ) , " + Символы.Таб;
ЗаменяемыеСимволы = СтрРазделить(ЗаменяемыеСимволы, " ", Истина);
// Построчная проверка
Для Ит = 1 По ВсегоСтрок Цикл
СтрокаМодуля = ТекстРазбора.ПолучитьСтроку(Ит);
// оставим строки, которые обрабатывать не нужно
Если ПустаяСтрока(СтрокаМодуля)
ИЛИ СтрНачинаетсяС(СокрЛ(СтрокаМодуля), "//") Тогда
ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, СтрокаМодуля);
Продолжить;
КонецЕсли;
НоваяСтрокаМодуля = СтрокаМодуля;
Если НЕ СтрокаОткрыта Тогда
НоваяСтрокаМодуля = УдалитьКомИКавИзСтроки(НоваяСтрокаМодуля);
КонецЕсли;
// Вырезаем часть строки в кавычках
ПоследняяПозиция = 0;
ПозицияКавычек = СтрНайти(НоваяСтрокаМодуля, """");
НоваяСтрокаМодуля = ВырезатьТекстВКавычках(НоваяСтрокаМодуля, ПозицияКавычек, ПоследняяПозиция, СтрокаОткрыта);
// ничего интересного не осталось
Если СтрокаОткрыта И ПозицияКавычек = 0
ИЛИ ПустаяСтрока(НоваяСтрокаМодуля) Тогда
ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, СтрокаМодуля);
Продолжить;
КонецЕсли;
// Проверяем правильное использование каждого ключевого слова
ВРегНоваяСтрокаМодуля = НормализоватьСтроку(НоваяСтрокаМодуля, ЗаменяемыеСимволы);
ДлинаСтроки = СтрДлина(ВРегНоваяСтрокаМодуля);
Для Каждого ЭлементТаблицы Из КлючевыеСлова Цикл
Эталон = ЭлементТаблицы.Наименование;
ПозицияЭталона = СтрНайти(ВРегНоваяСтрокаМодуля, " " + Эталон + " ");
Если НЕ ПозицияЭталона Тогда
Продолжить;
КонецЕсли;
ДлинаЭталона = СтрДлина(Эталон);
// Нашли ключевое слово, проверяем каноническое написание
Пока ПозицияЭталона > 0 Цикл
СтартоваяПозиция = ПозицияЭталона - 1;
Написание = СокрЛП(Сред(СтрокаМодуля, ПозицияЭталона, ДлинаЭталона));
Если Эталоны.Найти(Написание) = Неопределено Тогда // Ключевое слово написано не канонически
СтрокаМодуля = Лев(СтрокаМодуля, СтартоваяПозиция)
+ ЭлементТаблицы.Значение
+ Сред(СтрокаМодуля, СтартоваяПозиция + ДлинаЭталона + 1);
СтрокаСообщения = СтрШаблон("В строке %1 найдено ключевое слово '%2' заменено на '%3'",
Ит, Написание, ЭлементТаблицы.Значение);
Лог.Информация(СтрокаСообщения);
КонецЕсли;
ПозицияЭталона = СтрНайти(ВРегНоваяСтрокаМодуля, " " + Эталон + " ", , ПозицияЭталона + ДлинаЭталона);
КонецЦикла;
КонецЦикла;
ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, СтрокаМодуля);
КонецЦикла;
Если НовоеСодержимоеФайла.ПолучитьТекст() <> СодержимоеФайла Тогда
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, НовоеСодержимоеФайла.ПолучитьТекст());
Возврат Истина; // переиндексируем
КонецЕсли;
Возврат Ложь;
КонецФункции
Функция НормализоватьСтроку(Знач Строка, ЗаменяемыеСимволы)
Строка = " " + ВРег(Строка) + " ";
Для Каждого Символ Из ЗаменяемыеСимволы Цикл
Строка = СтрЗаменить(Строка, Символ, " ");
КонецЦикла;
Возврат Строка;
КонецФункции
Процедура ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, Знач СтрокаМодуля)
СтрокаМодуля = СтрЗаменить(СтрокаМодуля, "***ЗАМЕНА_ДВОЙНЫХ_КАВЫЧЕК***", """""");
СтрокаМодуля = СтрЗаменить(СтрокаМодуля, "***ЗАМЕНА_ЧАСТИ_URL***", "://");
НовоеСодержимоеФайла.ДобавитьСтроку(СтрокаМодуля);
КонецПроцедуры
Функция ВырезатьТекстВКавычках(Знач СтрокаМодуля, ПозицияКавычек, ПоследняяПозиция, СтрокаОткрыта)
Пока ПозицияКавычек > 0 Цикл
Если СтрокаОткрыта Тогда
// кавычки закрывают строку, вырезаем часть в кавычках
СтрокаМодуляВКавычках = Сред(СтрокаМодуля, ПозицияКавычек + 1);
СтрокаМодуля = Лев(СтрокаМодуля, ПоследняяПозиция - 1)
+ ДополнитьСтроку("", ПозицияКавычек - ПоследняяПозиция + 1, " ")
+ СтрокаМодуляВКавычках;
СтрокаОткрыта = Ложь;
ПоследняяПозиция = 0;
Иначе
// позиция кавычек начинают строку
ПоследняяПозиция = ПозицияКавычек;
СтрокаОткрыта = Истина;
СтрокаМодуля = Лев(СтрокаМодуля, ПозицияКавычек - 1) + " " + Сред(СтрокаМодуля, ПозицияКавычек + 1);
КонецЕсли;
ПозицияКавычек = Найти(СтрокаМодуля, """");
КонецЦикла;
Возврат СтрокаМодуля;
КонецФункции
Функция УдалитьКомИКавИзСтроки(Знач СтрокаМодуля)
ПозицияКомментария = СтрНайти(СтрокаМодуля, "//");
Если ПозицияКомментария > 0 Тогда // есть комментарий
ДлинаСтроки = СтрДлина(СтрокаМодуля);
ПозицияКавычек = СтрНайти(СтрокаМодуля, """");
Если ПозицияКавычек = 0 // нет кавычек, удаляем комментарий
ИЛИ ПозицияКавычек > ПозицияКомментария Тогда // кавычки после комментария, удаляем комментарий
СтрокаМодуля = ДополнитьСтроку(Лев(СтрокаМодуля, ПозицияКомментария - 1), ДлинаСтроки, " ", "Справа");
Иначе
КоличествоКавычекДоКомментария = СтрЧислоВхождений(Лев(СтрокаМодуля, ПозицияКомментария), """");
Если КоличествоКавычекДоКомментария % 2 = 0 Тогда // строка открывается и закрывается до комментария, удаляем комментарий
СтрокаМодуля = ДополнитьСтроку(Лев(СтрокаМодуля, ПозицияКомментария - 1), ДлинаСтроки, " ", "Справа");
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат СтрокаМодуля;
КонецФункции
Функция КлючевыеСлова(Эталоны)
КлючевыеСлова = Новый ТаблицаЗначений;
КлючевыеСлова.Колонки.Добавить("Наименование");
КлючевыеСлова.Колонки.Добавить("Значение");
Для Каждого Эталон Из Эталоны Цикл
Если КлючевыеСлова.НайтиСтроки(Новый Структура("Наименование", ВРег(Эталон))).Количество() = 0 Тогда
СтрокаТаблицы = КлючевыеСлова.Добавить();
СтрокаТаблицы.Наименование = ВРег(Эталон);
СтрокаТаблицы.Значение = Эталон;
КонецЕсли;
КонецЦикла;
Возврат КлючевыеСлова;
КонецФункции
Функция Эталоны()
Эталоны = Новый Массив;
Эталоны.Добавить("Если");
Эталоны.Добавить("#Если");
Эталоны.Добавить("Тогда");
Эталоны.Добавить("#Тогда");
Эталоны.Добавить("Иначе");
Эталоны.Добавить("#Иначе");
Эталоны.Добавить("ИначеЕсли");
Эталоны.Добавить("#ИначеЕсли");
Эталоны.Добавить("КонецЕсли");
Эталоны.Добавить("#КонецЕсли");
Эталоны.Добавить("#Область");
Эталоны.Добавить("#КонецОбласти");
Эталоны.Добавить("Клиент");
Эталоны.Добавить("НаКлиенте");
Эталоны.Добавить("НаСервере");
Эталоны.Добавить("ТолстыйКлиентОбычноеПриложение");
Эталоны.Добавить("ТолстыйКлиентУправляемоеПриложение");
Эталоны.Добавить("Сервер");
Эталоны.Добавить("ВнешнееСоединение");
Эталоны.Добавить("ТонкийКлиент");
Эталоны.Добавить("ВебКлиент");
Эталоны.Добавить("&НаКлиенте");
Эталоны.Добавить("&НаСервере");
Эталоны.Добавить("&НаСервереБезКонтекста");
Эталоны.Добавить("&НаКлиентеНаСервереБезКонтекста");
Эталоны.Добавить("&НаКлиентеНаСервере");
Эталоны.Добавить("Для");
Эталоны.Добавить("Каждого");
Эталоны.Добавить("Цикл");
Эталоны.Добавить("КонецЦикла");
Эталоны.Добавить("Выполнить");
Эталоны.Добавить("По");
Эталоны.Добавить("Прервать");
Эталоны.Добавить("Продолжить");
Эталоны.Добавить("Из");
Эталоны.Добавить("Новый");
Эталоны.Добавить("Перейти");
Эталоны.Добавить("Перем");
Эталоны.Добавить("Пока");
Эталоны.Добавить("Попытка");
Эталоны.Добавить("Исключение");
Эталоны.Добавить("КонецПопытки");
Эталоны.Добавить("ВызватьИсключение");
Эталоны.Добавить("Процедура");
Эталоны.Добавить("КонецПроцедуры");
Эталоны.Добавить("Функция");
Эталоны.Добавить("КонецФункции");
Эталоны.Добавить("Возврат");
Эталоны.Добавить("ДобавитьОбработчик");
Эталоны.Добавить("УдалитьОбработчик");
Эталоны.Добавить("И");
Эталоны.Добавить("ИЛИ");
Эталоны.Добавить("НЕ");
Эталоны.Добавить("Или");
Эталоны.Добавить("Не");
Эталоны.Добавить("Истина");
Эталоны.Добавить("ИСТИНА");
Эталоны.Добавить("Ложь");
Эталоны.Добавить("ЛОЖЬ");
Эталоны.Добавить("Знач");
Эталоны.Добавить("ЗНАЧ");
Эталоны.Добавить("Неопределено");
Эталоны.Добавить("НЕОПРЕДЕЛЕНО");
Эталоны.Добавить("NULL");
Эталоны.Добавить("Null");
Возврат Эталоны;
КонецФункции
// перенесено из строковых ф-ий ибо там ошибка
Функция СформироватьСтрокуСимволов(Знач Символ, Знач ДлинаСтроки)
Результат = "";
Для Счетчик = 1 По ДлинаСтроки Цикл
Результат = Результат + Символ;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ДополнитьСтроку(Знач Строка, Знач ДлинаСтроки, Знач Символ = "0", Знач Режим = "Слева")
// Длина символа не должна превышать единицы.
Символ = Лев(Символ, 1);
КоличествоСимволовНадоДобавить = ДлинаСтроки - СтрДлина(Строка);
Если КоличествоСимволовНадоДобавить > 0 Тогда
СтрокаДляДобавления = СформироватьСтрокуСимволов(Символ, КоличествоСимволовНадоДобавить);
Если ВРег(Режим) = "СЛЕВА" Тогда
Строка = СтрокаДляДобавления + Строка;
ИначеЕсли ВРег(Режим) = "СПРАВА" Тогда
Строка = Строка + СтрокаДляДобавления;
Иначе
// ничего
КонецЕсли;
КонецЕсли;
Возврат Строка;
КонецФункции

View File

@ -35,39 +35,26 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() Тогда
Если ТипыФайлов.ЭтоФайлОписанияФормы(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если ОбновитьИндексыЭлементовВФорме(АнализируемыйФайл.ПолноеИмя) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат ИСТИНА;
ИначеЕсли ТипыФайлов.ЭтоФайлОписанияФормыEDT(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если ОбновитьИндексыЭлементовВФорме(АнализируемыйФайл.ПолноеИмя, Истина) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат ИСТИНА;
КонецЕсли;
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если НЕ АнализируемыйФайл.Существует() Тогда
Возврат Ложь;
КонецЕсли;
ФорматEDT = ТипыФайлов.ЭтоФайлОписанияФормыEDT(АнализируемыйФайл);
Если ТипыФайлов.ЭтоФайлОписанияФормы(АнализируемыйФайл) ИЛИ ФорматEDT Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если ОбновитьИндексыЭлементовВФорме(АнализируемыйФайл.ПолноеИмя, ФорматEDT) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат ЛОЖЬ;
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции // ОбработатьФайл()
Функция ОбновитьИндексыЭлементовВФорме(Знач ИмяФайла, EDT = Ложь)
@ -100,44 +87,42 @@
СтрокиФайла.Вставить(СтрокаТЧ.Значение, ГруппаИндексов.Группы[1].Индекс);
КонецЦикла;
ТЧ.Свернуть("Значение", "Количество");
Если ТЧ.Количество() <> ГруппыИндексов.Количество() Тогда
ТЧ.Сортировать("Значение УБЫВ");
ПоследнийНомер = ТЧ[0].Значение;
ТЧ.Сортировать("Количество УБЫВ");
Для каждого СтрокаТЧ Из ТЧ Цикл
Если СтрокаТЧ.Количество = 1 Тогда
Прервать;
КонецЕсли;
Пока СтрокаТЧ.Количество > 1 Цикл
ИсходнаяСтрока = ?(EDT, "<id>" + СтрокаТЧ.Значение + "<", "id=""" + СтрокаТЧ.Значение + """");
ПоследнийНомер = ПоследнийНомер + 1;
СтрокаЗамены = ?(EDT, "<id>" + ПоследнийНомер + "<", "id=""" + ПоследнийНомер + """");
Поз = СтрНайти(СодержимоеФайла, ИсходнаяСтрока);
НоваяСтрока = Лев(СодержимоеФайла, Поз - 1) + СтрокаЗамены;
СодержимоеФайла = НоваяСтрока + Сред(СодержимоеФайла, Поз + СтрДлина(ИсходнаяСтрока));
СтрокаТЧ.Количество = СтрокаТЧ.Количество - 1;
КонецЦикла;
КонецЦикла;
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
Возврат ИСТИНА;
Если ТЧ.Количество() = ГруппыИндексов.Количество() Тогда
Возврат Ложь;
КонецЕсли;
Возврат ЛОЖЬ;
ТЧ.Сортировать("Значение УБЫВ");
ПоследнийНомер = ТЧ[0].Значение;
ТЧ.Сортировать("Количество УБЫВ");
Для каждого СтрокаТЧ Из ТЧ Цикл
Если СтрокаТЧ.Количество = 1 Тогда
Прервать;
КонецЕсли;
Пока СтрокаТЧ.Количество > 1 Цикл
ИсходнаяСтрока = ?(EDT, "<id>" + СтрокаТЧ.Значение + "<", "id=""" + СтрокаТЧ.Значение + """");
ПоследнийНомер = ПоследнийНомер + 1;
СтрокаЗамены = ?(EDT, "<id>" + ПоследнийНомер + "<", "id=""" + ПоследнийНомер + """");
Поз = СтрНайти(СодержимоеФайла, ИсходнаяСтрока);
НоваяСтрока = Лев(СодержимоеФайла, Поз - 1) + СтрокаЗамены;
СодержимоеФайла = НоваяСтрока + Сред(СодержимоеФайла, Поз + СтрДлина(ИсходнаяСтрока));
СтрокаТЧ.Количество = СтрокаТЧ.Количество - 1;
КонецЦикла;
КонецЦикла;
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
Возврат ИСТИНА;
КонецФункции

View File

@ -62,7 +62,7 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлОписанияМетаданных(АнализируемыйФайл) Тогда

View File

@ -36,7 +36,7 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда

View File

@ -37,7 +37,7 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());

View File

@ -40,7 +40,7 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если ТипыФайлов.ЭтоФайлОбычнойФормы(АнализируемыйФайл) Тогда

View File

@ -64,7 +64,7 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если ТипФайлаПоддерживается(АнализируемыйФайл) Тогда

View File

@ -35,7 +35,7 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлОписанияКонфигурации(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());

View File

@ -35,7 +35,7 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() Тогда
Если ТипыФайлов.ЭтоФайлОписанияКонфигурации(АнализируемыйФайл) Тогда

View File

@ -35,7 +35,7 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() Тогда
Если ТипыФайлов.ЭтоФайлОписанияКонфигурации(АнализируемыйФайл) Тогда

View File

@ -35,7 +35,7 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());

View File

@ -35,7 +35,7 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());

View File

@ -60,7 +60,7 @@
ВызватьИсключение "Обработка файла не реализована";
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
// анализ файла без изменения его содержимого
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда

View File

@ -36,7 +36,7 @@
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда

View File

@ -0,0 +1,74 @@
#Область ХорошихПеременных
Перем пер1
#КонецОбласти
#область ПлохихПеременных
ПЕРЕМ пер1;
перем пер3;
//ПEрем пер4
// ПEрем пер5
Перем пер6; //если тут будет текст его не заменит
#КонецОБласти
&НаКлиентенаСервере
ПРоцедура тест()
конецпроцедуры
&Насервере
процедура СКомментарием() // Комментарий
КонецПроцедуры
&Наклиенте
функция ТестовыйУжас(ЗНАЧ пар)
#если КлиенТ ИЛИ сервер #тогда
перейти МеткаВыход :
#Конецесли
если истина тогда Сообщить(не(ложь и null=НеОпределено)); возврат Неопределено; иначе конецесли;
пока п1 = п2 цикл // если тогда иначе конецесли;
прервать;
конеццикла;
Если ИСТИНА Тогда
Сообщить();
иначеЕсли ЛОЖЬ Тогда
попытка
Переменная1 = новый Массив;
исключение
вызватьИсключение "сложно набирать такой код"
конецпопытки;
КонецЕсли;
#Если НЕ вебклиент и не Тонкийклиент ИЛИ ТолстыйКлиентОбычноеприложение ИЛИ толстыйКлиентУправляемоеПриложение ИЛИ ВнешнееСоединение
#КонецЕсли
для каждого Элемент из Переменная1 Цикл
выполнить("Сообщить(""Привет"")");
КонецЦикла;
Для i = 1 по 10 Цикл
КонецЦикла;
Соообщить("тут пример однострочника");добавитьОбработчик Накладная.ПриЗаписи Обработка.ПриЗаписиДокумента;Удалитьобработчик Накладная.ПриЗаписи, Обработка.ПриЗаписиДокумента;
Возврат ?(истина=истина,ложь,истина);
конецфункции
&НасерверебезКонтекста
Процедура тест(Пар1,
Пар2,
ЗНАЧ пар3)// Комментарий
КонецПроцедуры
&наКлиентеНаСервереБезКонтекста
Процедура тест() // Комментарий
КонецПроцедуры
&наКлиентенаСервере
Процедура тест() // Комментарий
КонецПроцедуры

View File

@ -21,7 +21,8 @@
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетФайл");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияНеИндексируетНеизмененные");
Возврат ВсеТесты;
КонецФункции
@ -44,6 +45,33 @@
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетФайл() Экспорт
ОбъектСценария = ПолучитьСценарий("ИсправлениеНеКаноническогоНаписания.os");
ИмяФайла = "ИсправлениеНеКаноническогоНаписания.bsl";
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла);
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоИстина();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияНеИндексируетНеизмененные() Экспорт
ОбъектСценария = ПолучитьСценарий("ИсправлениеНеКаноническогоНаписания.os");
ИмяФайла = "ИсправлениеНеКаноническогоНаписания.bsl";
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла);
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
ДопНастройки = ПолучитьДополнительныеНастройки();
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ДопНастройки);
Ожидаем.Что(ДопНастройки.ИзмененныеКаталоги.Количество(), Истина).Равно(0);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек() Экспорт
ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os");
@ -84,7 +112,6 @@
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "обнаружены неуникальные имена методов");
ВызываетсяИсключениеСТекстом(ОбъектСценария, СПараметрами, "обнаружены неуникальные имена методов");
КонецПроцедуры
@ -184,8 +211,21 @@
Функция ПолучитьДополнительныеНастройки()
УправлениеНастройками = Новый НастройкиРепозитория(ТекущийКаталог());
ДополнительныеНастройки = Новый Структура("Лог, УправлениеНастройками", Лог, УправлениеНастройками);
Настройка = УправлениеНастройками.НастройкиПриложения(УправлениеНастройками.ИмяПоУмолчанию())
.Получить("НастройкиСценариев");
ДополнительныеНастройки = Новый Структура("Лог, Настройки, ИзмененныеКаталоги", Лог, Настройка, Новый Массив());
Возврат ДополнительныеНастройки;
КонецФункции
Функция ПодготовитьИзменяемыйТестовыйФайл(Знач ИмяТестовогоФайла)
ПутьКТесту = ОбъединитьПути(КаталогТестовыхФикстур(), ИмяТестовогоФайла);
ПутьКФайлу = МенеджерВременныхФайлов.СоздатьФайл(ИмяТестовогоФайла);
КопироватьФайл(ПутьКТесту, ПутьКФайлу);
Файл = Новый Файл(ПутьКФайлу);
Возврат Файл;
КонецФункции

View File

@ -5,6 +5,7 @@
"ГлобальныеСценарии": [
"ДобавлениеПробеловПередКлючевымиСловами.os",
"ЗапретИспользованияПерейти.os",
"ИсправлениеНеКаноническогоНаписания.os",
"КорректировкаXMLФорм.os",
"ОтключениеПолнотекстовогоПоиска.os",
"ПроверкаДублейПроцедурИФункций.os",