mirror of
https://github.com/bia-technologies/precommit4onec.git
synced 2025-02-07 13:31:49 +02:00
Merge branch 'release/1.10'
This commit is contained in:
commit
cac83e0463
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,6 +1,6 @@
|
||||
bdd-log.xml
|
||||
*.ospx
|
||||
|
||||
/*.orig
|
||||
|
||||
/exec.log
|
||||
*.orig
|
||||
exec.log
|
||||
|
||||
/tests.xml
|
||||
|
9
.vscode/settings.json
vendored
9
.vscode/settings.json
vendored
@ -1,9 +0,0 @@
|
||||
// Place your settings in this file to overwrite default and user settings.
|
||||
{
|
||||
"language-1c-bsl.linterEntryPoint": "src/console-entry-point.os",
|
||||
"editor.rulers": [ 120 ],
|
||||
"files.associations": {
|
||||
"*.os-template" : "bsl"
|
||||
, "packagedef" : "bsl"
|
||||
}
|
||||
}
|
240
.vscode/tasks.json
vendored
240
.vscode/tasks.json
vendored
@ -1,240 +0,0 @@
|
||||
// Available variables which can be used inside of strings.
|
||||
// ${workspaceRoot}: the root folder of the team
|
||||
// ${file}: the current opened file
|
||||
// ${fileBasename}: the current opened file's basename
|
||||
// ${fileDirname}: the current opened file's dirname
|
||||
// ${fileExtname}: the current opened file's extension
|
||||
// ${cwd}: the current working directory of the spawned process
|
||||
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"_runner": "terminal",
|
||||
"windows": {
|
||||
"command": "cmd",
|
||||
"args": ["/c", "chcp 65001 ;"]
|
||||
},
|
||||
"linux": {
|
||||
"command": "sh",
|
||||
"args": ["-c"]
|
||||
},
|
||||
"isShellCommand": true,
|
||||
// "showOutput": "silent",
|
||||
"_runner": "terminal",
|
||||
"tasks": [
|
||||
{
|
||||
"taskName": "Testing project",
|
||||
"args": [
|
||||
"1testrunner",
|
||||
"-runall",
|
||||
"${workspaceRoot}/tests"
|
||||
],
|
||||
"echoCommand": true,
|
||||
"showOutput": "always",
|
||||
"suppressTaskName": true,
|
||||
// "isBuildCommand": false,
|
||||
"isTestCommand": false,
|
||||
"problemMatcher": {
|
||||
"fileLocation": "absolute",
|
||||
"pattern": {
|
||||
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
|
||||
"file": 1,
|
||||
"location": 2,
|
||||
"message": 3
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"taskName": "Testing current test-file",
|
||||
"args": [
|
||||
"1testrunner",
|
||||
"-run",
|
||||
"${file}",
|
||||
],
|
||||
"echoCommand": true,
|
||||
"showOutput": "always",
|
||||
"suppressTaskName": true,
|
||||
"isBuildCommand": false,
|
||||
"isTestCommand": true,
|
||||
"problemMatcher": {
|
||||
"fileLocation": "absolute",
|
||||
"pattern": {
|
||||
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
|
||||
"file": 1,
|
||||
"location": 2,
|
||||
"message": 3
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"taskName": "Exec all features",
|
||||
"args": [
|
||||
"1bdd",
|
||||
"${workspaceRoot}/features",
|
||||
"-out",
|
||||
"${workspaceRoot}/exec.log"
|
||||
],
|
||||
"echoCommand": true,
|
||||
"showOutput": "always",
|
||||
"suppressTaskName": true,
|
||||
"isBuildCommand": true,
|
||||
"isTestCommand": false,
|
||||
"problemMatcher": {
|
||||
"fileLocation": "absolute",
|
||||
"pattern": {
|
||||
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
|
||||
"file": 1,
|
||||
"location": 2,
|
||||
"message": 3
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"taskName": "Exec feature",
|
||||
"args": [
|
||||
"1bdd",
|
||||
"${file}",
|
||||
"-out",
|
||||
"${workspaceRoot}/exec.log"
|
||||
],
|
||||
"echoCommand": true,
|
||||
"showOutput": "always",
|
||||
"suppressTaskName": true,
|
||||
"isBuildCommand": false,
|
||||
"isTestCommand": true,
|
||||
"problemMatcher": {
|
||||
"fileLocation": "absolute",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
|
||||
"file": 1,
|
||||
"location": 2,
|
||||
"message": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"taskName": "Exec feature for current step def",
|
||||
"args": [
|
||||
"1bdd",
|
||||
"${fileDirname}/../${fileBasenameNoExtension}.feature",
|
||||
"-fail-fast",
|
||||
"-out",
|
||||
"${workspaceRoot}/exec.log"
|
||||
],
|
||||
"echoCommand": true,
|
||||
"showOutput": "always",
|
||||
"suppressTaskName": true,
|
||||
"isBuildCommand": false,
|
||||
"isTestCommand": true,
|
||||
"problemMatcher": {
|
||||
"fileLocation": "absolute",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
|
||||
"file": 1,
|
||||
"location": 2,
|
||||
"message": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"taskName": "Generate feature steps",
|
||||
"args": [
|
||||
"1bdd",
|
||||
"gen",
|
||||
"${file}",
|
||||
"-out",
|
||||
"${workspaceRoot}/exec.log"
|
||||
],
|
||||
"echoCommand": true,
|
||||
"showOutput": "always",
|
||||
"suppressTaskName": true,
|
||||
"isBuildCommand": false,
|
||||
"isTestCommand": false,
|
||||
"problemMatcher": {
|
||||
"fileLocation": "absolute",
|
||||
"pattern": {
|
||||
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
|
||||
"file": 1,
|
||||
"location": 2,
|
||||
"message": 3
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"taskName": "Opm: package build",
|
||||
"args": [
|
||||
"opm",
|
||||
"build",
|
||||
"${workspaceRoot}"
|
||||
],
|
||||
"echoCommand": true,
|
||||
"showOutput": "always",
|
||||
"suppressTaskName": true,
|
||||
"isBuildCommand": false
|
||||
},
|
||||
{
|
||||
"taskName": "OneScript: compile",
|
||||
"args": [
|
||||
"oscript",
|
||||
"-encoding=utf-8",
|
||||
"-compile",
|
||||
"${file}"
|
||||
],
|
||||
"echoCommand": true,
|
||||
"showOutput": "always",
|
||||
"suppressTaskName": true,
|
||||
"isBuildCommand": false
|
||||
},
|
||||
{
|
||||
"taskName": "OneScript: check",
|
||||
"args": [
|
||||
"oscript",
|
||||
"-encoding=utf-8",
|
||||
"-check",
|
||||
"${file}"
|
||||
],
|
||||
"echoCommand": true,
|
||||
"showOutput": "always",
|
||||
"suppressTaskName": true,
|
||||
"isBuildCommand": false
|
||||
},
|
||||
{
|
||||
"taskName": "OneScript: make",
|
||||
"args": [
|
||||
"oscript",
|
||||
"-encoding=utf-8",
|
||||
"-make",
|
||||
"${file}",
|
||||
"${fileBasename}.exe"
|
||||
],
|
||||
"echoCommand": true,
|
||||
"showOutput": "always",
|
||||
"suppressTaskName": true,
|
||||
"isBuildCommand": false
|
||||
},
|
||||
{
|
||||
"taskName": "OneScript: run",
|
||||
"args": [
|
||||
"oscript",
|
||||
"-encoding=utf-8",
|
||||
"${file}"
|
||||
],
|
||||
"echoCommand": true,
|
||||
"showOutput": "always",
|
||||
"suppressTaskName": true,
|
||||
"isBuildCommand": true,
|
||||
"problemMatcher": {
|
||||
"fileLocation": "absolute",
|
||||
"pattern": {
|
||||
"regexp": "^{Модуль\\s+(.*)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+(.*)}$",
|
||||
"file": 1,
|
||||
"location": 2,
|
||||
"message": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
2
LICENSE
2
LICENSE
@ -1,7 +1,7 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Andrei Ovsiankin
|
||||
Copyright (c) 2017-2018 BIA Technologies, LLC
|
||||
Copyright (c) 2017-2019 BIA Technologies, LLC
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
10
README.md
10
README.md
@ -36,14 +36,16 @@
|
||||
- `РазборОтчетОбработокРасширений` - при выполнении данного сценария, файлы внешних отчетов, обработок и расширений средствами платформы будут разложены на исходные файлы и помещены в каталог исходных файлов репозитория в подкаталоги, соответствующие расширениям. Например внешний отчет `ВнешнийОтчет1.erf` будет разложен в каталог `src\erf\ВнешнийОтчет1`
|
||||
- `РазборОбычныхФормНаИсходники` - при выполнении данного сценария, файлы обычных форм (`Form.bin`) раскладываются на исходные файлы с помощью инструмента `v8unpack`
|
||||
- `КорректировкаXMLФорм` - при выполнении данного сценария, файлы описаний форм (`Form.xml`) проверяются на наличие задублировавшихся индексов элементов, которые образуются при объединениях. Если дубли есть, то они исправляются
|
||||
- `ДобавлениеПробеловПередКлючевымиСловами` - при выполнении данного сценария, в файлах модулей перед ключевыми словами добавляются отсутсвующие пробелы. На данный момент обрабатывается только ключевое слово `Экспорт`.
|
||||
- `ДобавлениеПробеловПередКлючевымиСловами` - при выполнении данного сценария, в файлах модулей перед ключевыми словами добавляются отсутствующие пробелы. На данный момент обрабатывается только ключевое слово `Экспорт`.
|
||||
- `УдалениеЛишнихКонцевыхПробелов` - при выполнении данного сценария, в файлах модулей удаляются лишние пробелы и табы в конце не пустой строки.
|
||||
- `СортировкаДереваМетаданных` - при выполнении данного сценария, выполняется упорядочивание объектов метаданных в дереве за исключением подсистем, они остаются в том порядке, который задал разработчик.
|
||||
- `СинхронизацияОбъектовМетаданныхИФайлов` - анализирует наличие файлов и объектов конфигурации.
|
||||
- `УдалениеДублейМетаданных` - удаляет задублированные объекты метаданных (результат кривого мерджа)
|
||||
- `ЗапретИспользованияПерейти` - проверяет модуль на использование методоа `Перейти`
|
||||
- `ЗапретИспользованияПерейти` - проверяет модуль на использование методов `Перейти`
|
||||
- `УдалениеЛишнихПустыхСтрок` - выполняет очистку модуля от лишних пустых строк (лишними считаются 2 и более идущих подряд пустых строках)
|
||||
- `ПроверкаКорректностиОбластей` - выполняет проверку на корректность скобок областей: `на парность` и `перед окончание области должно быть ее определение`
|
||||
- `ПроверкаДублейПроцедурИФункций` - выполняет поиск одинаковых названий процедур и функций в модуле.
|
||||
- `ОтключениеПолнотекстовогоПоиска` - По умолчанию отключает полнотекстовый поиск в файлах описания метаданных. Имеет настройку для исключения файлов из обработки. Для исключения необходимо указать относительный путь в репозитории до файла описания метаданного. Можно выключать из обработки отдельные реквизиты метаданного, для этого надо задать массив реквизитов в конфигурационном файле.
|
||||
|
||||
## Изменение настроек
|
||||
|
||||
@ -60,13 +62,13 @@ precommit4onec может читать настройки своей работ
|
||||
Конфигурирование дает возможности:
|
||||
|
||||
- Изменить список сценариев обработки файлов
|
||||
- Активизировать алгоритм подключния сценариев из каталогов репозитория
|
||||
- Активизировать алгоритм подключения сценариев из каталогов репозитория
|
||||
|
||||
Некоторые сценарии поддерживают возможность изменения своих настроек со значений по умолчанию на установленные в конфигурационном файле. На данный момент реализована возможность указывать необходимую версию платформы 1С:Предприятие в сценарии `РазборОтчетОбработокРасширений`.
|
||||
|
||||
## Расширение функциональности
|
||||
|
||||
Для создания нового сценария обработки файлов необходимо воспользваться шаблоном, находящимся в каталоге `СценарииОбработки` скрипта.
|
||||
Для создания нового сценария обработки файлов необходимо воспользоваться шаблоном, находящимся в каталоге `СценарииОбработки` скрипта.
|
||||
|
||||
### Установка сценария для всех репозиториев
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
#Использовать gitrunner
|
||||
#Использовать tempfiles
|
||||
#Использовать asserts
|
||||
#Использовать "../../src"
|
||||
|
||||
Перем БДД;
|
||||
|
||||
@ -17,6 +18,9 @@
|
||||
ВсеШаги.Добавить("ВКаталогеРепозиторияЕстьФайл");
|
||||
ВсеШаги.Добавить("ЯКопируюФайлВКаталогРепозитория");
|
||||
ВсеШаги.Добавить("ЯФиксируюИзмененияВРепозиторииСКомментарием");
|
||||
ВсеШаги.Добавить("ЯУстанавливаюКодировкуВыводаКоманды");
|
||||
ВсеШаги.Добавить("УФайлаЕстьМетка");
|
||||
ВсеШаги.Добавить("СодержимоеФайлаИФайлаРазное");
|
||||
|
||||
Возврат ВсеШаги;
|
||||
КонецФункции
|
||||
@ -102,4 +106,41 @@
|
||||
|
||||
РепозиторийGit.Закоммитить(ТекстКомментария, ИСТИНА);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// я устанавливаю кодировку вывода "Кодировка" команды "ИмяКоманды"
|
||||
Процедура ЯУстанавливаюКодировкуВыводаКоманды(Кодировка, ИмяКоманды) Экспорт
|
||||
КлючКонтекста = КлючКоманды(ИмяКоманды);
|
||||
Команда = БДД.ПолучитьИзКонтекста(КлючКонтекста);
|
||||
Команда.УстановитьКодировкуВывода(Кодировка);
|
||||
КонецПроцедуры
|
||||
|
||||
Функция КлючКоманды(Знач ИмяКоманды)
|
||||
Возврат "Команда-" + ИмяКоманды;
|
||||
КонецФункции
|
||||
|
||||
// у файла <Файл> есть метка <Bom>
|
||||
Процедура УФайлаЕстьМетка(Файл, Метка) Экспорт
|
||||
|
||||
КаталогРепозитория = БДД.ПолучитьИзКонтекста("РабочийКаталог");
|
||||
КонечныйФайл = ОбъединитьПути(КаталогРепозитория, Файл);
|
||||
|
||||
Кодировка = ФайловыеОперации.ОпределитьКодировку(КонечныйФайл);
|
||||
ЕстьМетка = Кодировка = КодировкаТекста.UTF8;
|
||||
|
||||
Ожидаем.Что(ЕстьМетка).Равно(Булево(Метка));
|
||||
|
||||
КонецПроцедуры //ОпределитьКодировку
|
||||
|
||||
// Содержимое файла "ИсходныйФайл" и файла "КонечныйФайл" разное
|
||||
Процедура СодержимоеФайлаИФайлаРазное(ИсходныйФайл, КонечныйФайл) Экспорт
|
||||
|
||||
ИсходныйФайл = ОбъединитьПути(БДД.ПолучитьИзКонтекста("КаталогПроекта"), ИсходныйФайл);
|
||||
КонечныйФайл = ОбъединитьПути(БДД.ПолучитьИзКонтекста("РабочийКаталог"), КонечныйФайл);
|
||||
|
||||
СодержимоеКонечногоФайла = ФайловыеОперации.ПрочитатьТекстФайла(КонечныйФайл);
|
||||
СодержимоеИсходногоФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИсходныйФайл);
|
||||
|
||||
Ожидаем.Что(СодержимоеИсходногоФайла).Не_().Равно(СодержимоеКонечногоФайла);
|
||||
|
||||
КонецПроцедуры
|
@ -7,36 +7,125 @@
|
||||
|
||||
Контекст:
|
||||
Допустим Я очищаю параметры команды "oscript" в контексте
|
||||
И я очищаю параметры команды "git" в контексте
|
||||
И Я устанавливаю кодировку вывода "utf-8" команды "git"
|
||||
И я включаю отладку лога с именем "oscript.app.precommit4onec"
|
||||
И я создаю временный каталог и запоминаю его как "КаталогРепозиториев"
|
||||
И я переключаюсь во временный каталог "КаталогРепозиториев"
|
||||
И я создаю новый репозиторий "rep1" в каталоге "КаталогРепозиториев" и запоминаю его как "Репозиторий1"
|
||||
И я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os install rep1"
|
||||
И я создаю новый репозиторий "rep1" в каталоге "КаталогРепозиториев" и запоминаю его как "РабочийКаталог"
|
||||
И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
|
||||
И я установил рабочий каталог как текущий каталог
|
||||
|
||||
Сценарий: Разбор отчетов, обработок, конфигурации на исходники.
|
||||
Когда Я копирую файл "tests/fixtures/demo/DemoОбработка.epf" в каталог репозитория "РабочийКаталог"
|
||||
И я копирую файл "tests/fixtures/demo/DemoОтчет.erf" в каталог репозитория "РабочийКаталог"
|
||||
И я копирую файл "tests/fixtures/demo/DemoРасширение.cfe" в каталог репозитория "РабочийКаталог"
|
||||
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
|
||||
Тогда В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form\Module.bsl"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form\form"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Templates\ОсновнаяСхемаКомпоновкиДанных.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Templates\ОсновнаяСхемаКомпоновкиДанных\Ext\Template.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form.bin"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяУФ.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяУФ\Ext\Form.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form.bin"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяУФ.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяУФ\Ext\Form.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form\Module.bsl"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form\form"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "cfe\DemoРасширение\ConfigDumpInfo.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "cfe\DemoРасширение\Configuration.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "cfe\DemoРасширение\CommonModules\DemoРасш_Demo.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "cfe\DemoРасширение\CommonModules\DemoРасш_Demo\Ext\Module.bsl"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "cfe\DemoРасширение\Subsystems\DemoРасш_Demo.xml"
|
||||
И В каталоге "src" репозитория "РабочийКаталог" есть файл "cfe\DemoРасширение\Languages\Русский.xml"
|
||||
|
||||
Сценарий: Фиксация изменений
|
||||
Когда Я копирую файл "features/demo/DemoОбработка.epf" в каталог репозитория "Репозиторий1"
|
||||
И я копирую файл "features/demo/DemoОтчет.erf" в каталог репозитория "Репозиторий1"
|
||||
И я копирую файл "features/demo/DemoРасширение.cfe" в каталог репозитория "Репозиторий1"
|
||||
И я фиксирую изменения в репозитории "Репозиторий1" с комментарием "demo коммит"
|
||||
Тогда В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form\Module.bsl"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form\form"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Templates\ОсновнаяСхемаКомпоновкиДанных.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Templates\ОсновнаяСхемаКомпоновкиДанных\Ext\Template.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяОФ\Ext\Form.bin"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяУФ.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "erf\DemoОтчет\DemoОтчет\Forms\ОсновнаяУФ\Ext\Form.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form.bin"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяУФ.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяУФ\Ext\Form.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form\Module.bsl"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form\form"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "cfe\DemoРасширение\ConfigDumpInfo.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "cfe\DemoРасширение\Configuration.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "cfe\DemoРасширение\CommonModules\DemoРасш_Demo.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "cfe\DemoРасширение\CommonModules\DemoРасш_Demo\Ext\Module.bsl"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "cfe\DemoРасширение\Subsystems\DemoРасш_Demo.xml"
|
||||
И В каталоге "src" репозитория "Репозиторий1" есть файл "cfe\DemoРасширение\Languages\Русский.xml"
|
||||
Сценарий: Успешный коммит в репозиторий
|
||||
Когда Я копирую файл "tests\fixtures\ПроверкаДублейПроцедурПоложительныйТест.bsl" в каталог репозитория "РабочийКаталог"
|
||||
И Я установил рабочий каталог как текущий каталог
|
||||
И Я выполняю команду "git" с параметрами "add --all"
|
||||
И Я выполняю команду "git" с параметрами "commit -m addProcedure"
|
||||
Тогда Вывод команды "git" не содержит "обнаружены неуникальные имена методов"
|
||||
|
||||
Сценарий: Прекоммит заблокировал коммит в репозиторий
|
||||
Когда Я копирую файл "tests\fixtures\ПроверкаДублейПроцедурНегативныйТест.bsl" в каталог репозитория "РабочийКаталог"
|
||||
И Я установил рабочий каталог как текущий каталог
|
||||
И Я выполняю команду "git" с параметрами "add --all"
|
||||
И Я выполняю команду "git" с параметрами "commit -m addProcedure"
|
||||
Тогда Вывод команды "git" содержит "обнаружены неуникальные имена методов"
|
||||
|
||||
Сценарий: Прекоммит использует локальные настройки репозитория вместо глобальных
|
||||
Когда Я копирую каталог "localscenario" из каталога "tests\fixtures" проекта в рабочий каталог
|
||||
И Я копирую файл "v8config.json" из каталога "tests\fixtures" проекта в рабочий каталог
|
||||
И я выполняю команду "git" с параметрами "add --all"
|
||||
И я выполняю команду "git" с параметрами "commit -m addFile"
|
||||
Тогда я вижу в консоли вывод "Используем локальные настройки"
|
||||
|
||||
Сценарий: Выполнение локальных сценариев к каталоге репозитория
|
||||
Когда Я копирую файл "tests\fixtures\demo\DemoОбработка.epf" в каталог репозитория "РабочийКаталог"
|
||||
И Я копирую каталог "localscenario" из каталога "tests\fixtures" проекта в рабочий каталог
|
||||
И Я копирую файл "v8config.json" из каталога "tests\fixtures" проекта в рабочий каталог
|
||||
И я выполняю команду "git" с параметрами "add --all"
|
||||
И я выполняю команду "git" с параметрами "commit -m addFile"
|
||||
Тогда я вижу в консоли вывод "ДобавлениеHelloWorld"
|
||||
|
||||
Сценарий: Когда выключены глобальные сценарии и нет локальных прекоммит выдает ошибку
|
||||
Когда Я копирую файл "v8config.json" из каталога "tests\fixtures" проекта в рабочий каталог
|
||||
И я выполняю команду "git" с параметрами "add --all"
|
||||
И я выполняю команду "git" с параметрами "commit -m addFile"
|
||||
Тогда я вижу в консоли вывод "Нет доступных сценариев обработки файлов"
|
||||
|
||||
Сценарий: В коммит попадают только проиндексированные файлы
|
||||
Когда Я копирую файл "tests\fixtures\demo\DemoОбработка.epf" в каталог репозитория "РабочийКаталог"
|
||||
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
|
||||
И в каталоге "src" репозитория "РабочийКаталог" есть файл "epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form\Module.bsl"
|
||||
И я создаю файл "РабочийКаталог/src/ФайлСТекстом.bsl" с текстом "текст178"
|
||||
И я выполняю команду "git" с параметрами "add --all"
|
||||
И я создаю файл "РабочийКаталог\src\epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form\Module.bsl" с текстом "текст178"
|
||||
И я выполняю команду "git" с параметрами "commit -m addFile"
|
||||
Тогда Вывод команды "git" не содержит "Module.bsl"
|
||||
|
||||
Сценарий: По умолчанию прекоммит убирает полнотекстовый поиск в исходниках конфигуратора
|
||||
Когда Я копирую файл "tests\fixtures\Документ.xml" в каталог репозитория "РабочийКаталог"
|
||||
И Файл "Документ.xml" в рабочем каталоге содержит "FullTextSearch>Use<"
|
||||
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
|
||||
Тогда Файл "Документ.xml" в рабочем каталоге не содержит "FullTextSearch>Use<"
|
||||
|
||||
Сценарий: По умолчанию прекоммит убирает полнотекстовый поиск в исходниках EDT
|
||||
Когда Я копирую файл "tests\fixtures\Документ.mdo" в каталог репозитория "РабочийКаталог"
|
||||
И Файл "Документ.mdo" в рабочем каталоге содержит "fullTextSearch>Use<"
|
||||
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
|
||||
Тогда Файл "Документ.mdo" в рабочем каталоге не содержит "fullTextSearch>Use<"
|
||||
|
||||
Сценарий: Отключение полнотекстового поиска игнорирует файл в исключении
|
||||
Когда Я создаю каталог "src" в рабочем каталоге
|
||||
И Я копирую файл "Документ.mdo" из каталога "tests\fixtures" проекта в подкаталог "src" рабочего каталога
|
||||
И Я копирую файл "Документ.xml" из каталога "tests\fixtures" проекта в подкаталог "src" рабочего каталога
|
||||
И Файл "src\Документ.mdo" в рабочем каталоге содержит "fullTextSearch>Use<"
|
||||
И Файл "src\Документ.xml" в рабочем каталоге содержит "FullTextSearch>Use<"
|
||||
И я создаю файл "РабочийКаталог\v8config.json" с текстом
|
||||
"""
|
||||
{
|
||||
"Precommt4onecСценарии": {
|
||||
"ИспользоватьСценарииРепозитория": false,
|
||||
"КаталогЛокальныхСценариев": "",
|
||||
"ГлобальныеСценарии": [
|
||||
"ОтключениеПолнотекстовогоПоиска.os"
|
||||
],
|
||||
"НастройкиСценариев": {
|
||||
"ОтключениеПолнотекстовогоПоиска": {
|
||||
"МетаданныеДляИсключения": {
|
||||
"src\\Документ.mdo": []
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
|
||||
Тогда Файл "\src\Документ.mdo" в рабочем каталоге содержит "fullTextSearch>Use<"
|
||||
И Файл "\src\Документ.xml" в рабочем каталоге не содержит "FullTextSearch>Use<"
|
@ -7,26 +7,26 @@
|
||||
Чтобы автоматически выполнять обработку исходников перед фиксацией изменений в репозитории
|
||||
|
||||
Сценарий: Печать текущих настроек precommit4onec
|
||||
Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os configure -global"
|
||||
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global"
|
||||
Тогда Код возврата команды "oscript" равен 0
|
||||
И Я сообщаю вывод команды "oscript"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v1.0.12.2"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v1.10.0"
|
||||
И Вывод команды "oscript" содержит "Установленные настройки:"
|
||||
И Вывод команды "oscript" содержит "ИспользоватьСценарииРепозитория ="
|
||||
И Вывод команды "oscript" содержит "КаталогЛокальныхСценариев ="
|
||||
И Вывод команды "oscript" содержит "ГлобальныеСценарии ="
|
||||
|
||||
Сценарий: Сброс настроек к значениям по умолчанию
|
||||
Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os configure -global -reset"
|
||||
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global -reset"
|
||||
Тогда Код возврата команды "oscript" равен 0
|
||||
И Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os configure -global"
|
||||
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global"
|
||||
И Код возврата команды "oscript" равен 0
|
||||
И Я сообщаю вывод команды "oscript"
|
||||
И Вывод команды "oscript" содержит
|
||||
"""
|
||||
precommit4onec v1.0.12.2
|
||||
precommit4onec v1.10.0
|
||||
Установленные настройки:
|
||||
ИспользоватьСценарииРепозитория = Нет
|
||||
КаталогЛокальныхСценариев =
|
||||
ГлобальныеСценарии = КорректировкаXMLФорм.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os
|
||||
ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ЗапретИспользованияПерейти.os,КорректировкаXMLФорм.os,ОтключениеПолнотекстовогоПоиска.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиОбластей.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os
|
||||
"""
|
||||
|
@ -12,17 +12,17 @@
|
||||
# И я включаю отладку лога с именем "bdd"
|
||||
|
||||
Сценарий: Получение версии продукта
|
||||
Когда Я выполняю команду "oscript" c параметрами "src/main.os version"
|
||||
Когда Я выполняю команду "oscript" с параметрами "src/main.os version"
|
||||
Тогда Я сообщаю вывод команды "oscript"
|
||||
И Вывод команды "oscript" содержит "1.0.12.2"
|
||||
И Вывод команды "oscript" содержит "1.10.0"
|
||||
И Вывод команды "oscript" не содержит "precommit4onec v"
|
||||
И Код возврата команды "oscript" равен 0
|
||||
|
||||
Сценарий: Получение помощи продукта
|
||||
Когда Я выполняю команду "oscript" c параметрами "src/main.os help"
|
||||
Когда Я выполняю команду "oscript" с параметрами "src/main.os help"
|
||||
Тогда Вывод команды "oscript" содержит
|
||||
"""
|
||||
precommit4onec v1.0.12.2
|
||||
precommit4onec v1.10.0
|
||||
Возможные команды:
|
||||
help - Выводит справку по командам
|
||||
version - Выводит версию приложения
|
||||
@ -33,10 +33,10 @@
|
||||
И Код возврата команды "oscript" равен 0
|
||||
|
||||
Сценарий: Вызов исполняемого файла без параметров
|
||||
Когда Я выполняю команду "oscript" c параметрами "src/main.os"
|
||||
Когда Я выполняю команду "oscript" с параметрами "src/main.os"
|
||||
Тогда Вывод команды "oscript" содержит
|
||||
"""
|
||||
precommit4onec v1.0.12.2
|
||||
precommit4onec v1.10.0
|
||||
Возможные команды:
|
||||
help - Выводит справку по командам
|
||||
version - Выводит версию приложения
|
||||
|
@ -15,24 +15,26 @@
|
||||
И я создаю новый репозиторий "rep2" в каталоге "КаталогРепозиториев" и запоминаю его как "Репозиторий2"
|
||||
|
||||
Сценарий: Установка precommit4onec в репозиторий
|
||||
Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os install rep1"
|
||||
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
|
||||
Тогда Код возврата команды "oscript" равен 0
|
||||
И Я сообщаю вывод команды "oscript"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v1.0.12.2"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v1.10.0"
|
||||
И Вывод команды "oscript" содержит "Pre-commit hook для rep1 создан"
|
||||
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
|
||||
|
||||
Сценарий: precommit4onec не устанавливается в пустой каталог
|
||||
Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os install ./"
|
||||
Тогда Код возврата команды "oscript" равен 0
|
||||
Когда я создаю временный каталог и запоминаю его как "ПустойКаталог"
|
||||
И я переключаюсь во временный каталог "ПустойКаталог"
|
||||
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./"
|
||||
Тогда Код возврата команды "oscript" равен 1
|
||||
И Я сообщаю вывод команды "oscript"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v1.0.12.2"
|
||||
И Вывод команды "oscript" содержит "не является репозиторием git"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v1.10.0"
|
||||
И Вывод команды "oscript" содержит "can only be used inside a git repository"
|
||||
|
||||
Сценарий: Установка precommit4onec во вложенные каталоги
|
||||
Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>/src/main.os install ./ -r"
|
||||
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
|
||||
Тогда Код возврата команды "oscript" равен 0
|
||||
И Я сообщаю вывод команды "oscript"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v1.0.12.2"
|
||||
И Вывод команды "oscript" содержит "precommit4onec v1.10.0"
|
||||
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
|
||||
И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit"
|
||||
|
27
features/ФайловыеОперации.feature
Normal file
27
features/ФайловыеОперации.feature
Normal file
@ -0,0 +1,27 @@
|
||||
# language: ru
|
||||
|
||||
Функциональность: Работа с файлами в прекоммите
|
||||
|
||||
Как разработчик
|
||||
Я хочу иметь возможность коммитить свой код и при выполнении прекоммита кодировка
|
||||
файла с исходником не должна измениться
|
||||
|
||||
Контекст:
|
||||
Допустим Я очищаю параметры команды "oscript" в контексте
|
||||
И я включаю отладку лога с именем "oscript.app.precommit4onec"
|
||||
И я создаю временный каталог и запоминаю его как "КаталогРепозиториев"
|
||||
И я переключаюсь во временный каталог "КаталогРепозиториев"
|
||||
И я создаю новый репозиторий "rep1" в каталоге "КаталогРепозиториев" и запоминаю его как "РабочийКаталог"
|
||||
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
|
||||
И Я установил рабочий каталог как текущий каталог
|
||||
|
||||
Структура сценария: Кодировка файла после коммита остается прежней
|
||||
Когда Я копирую файл <Исходный файл> в каталог репозитория "РабочийКаталог"
|
||||
И У файла <Конечный файл> есть метка <Bom>
|
||||
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "Добавил файл процедур"
|
||||
Тогда У файла <Конечный файл> есть метка <Bom>
|
||||
И Содержимое файла <Исходный файл> и файла <Конечный файл> разное
|
||||
Примеры:
|
||||
| Исходный файл | Конечный файл | Bom |
|
||||
| tests\fixtures\NoBom.bsl| NoBom.bsl | Нет |
|
||||
| tests\fixtures\Bom.bsl | Bom.bsl | Да |
|
@ -1,4 +1,12 @@
|
||||
@ECHO OFF
|
||||
@echo off
|
||||
call del "*.ospx"
|
||||
call opm build . -mf ./packagedef -out .
|
||||
call opm install -f precommit4onec-1.0.12.2.ospx
|
||||
|
||||
for /f %%i in ('"oscript -version"') do set result=%%i
|
||||
|
||||
if %result%==1.0.19.105 (
|
||||
call opm build . -mf ./packagedef -out .
|
||||
) else (
|
||||
call opm build -m ./packagedef -o .
|
||||
)
|
||||
|
||||
call opm install -f *.ospx
|
||||
|
18
packagedef
18
packagedef
@ -1,4 +1,4 @@
|
||||
ПутьКСценариюПараметров = ОбъединитьПути(ТекущийСценарий().Каталог, "src", "Модули", "ПараметрыПриложения.os");
|
||||
ПутьКСценариюПараметров = ОбъединитьПути(ТекущийСценарий().Каталог, "src", "Модули", "ПараметрыПриложения.os");
|
||||
ПараметрыСистемы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюПараметров);
|
||||
|
||||
ИмяПродукта = НРег(ПараметрыСистемы_ЛокальнаяВерсия.ИмяПродукта());
|
||||
@ -6,14 +6,14 @@
|
||||
Описание.Имя(ИмяПродукта)
|
||||
.ВерсияСреды("1.0.17")
|
||||
.Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта())
|
||||
.ЗависитОт("logos", "0.5")
|
||||
.ЗависитОт("cmdline", "0.4.1")
|
||||
.ЗависитОт("1bdd", "1.5.2")
|
||||
.ЗависитОт("gitrunner", "1.4.0")
|
||||
.ЗависитОт("v8runner", "0.4.1")
|
||||
.ЗависитОт("v8unpack", "1.0.1")
|
||||
.ЗависитОт("logos", "1.2.0")
|
||||
.ЗависитОт("cmdline", "1.0.0")
|
||||
.ЗависитОт("1bdd", "1.9.0")
|
||||
.ЗависитОт("gitrunner", "1.6.0")
|
||||
.ЗависитОт("v8runner", "1.3.0")
|
||||
.ЗависитОт("v8unpack", "1.0.3")
|
||||
.ВключитьФайл("src")
|
||||
.ВключитьФайл("features")
|
||||
.ВключитьФайл("tasks")
|
||||
.ВключитьФайл("v8config.json")
|
||||
.ВключитьФайл("LICENSE")
|
||||
.ВключитьФайл("README.md")
|
||||
.ИсполняемыйФайл("src/main.os", ИмяПродукта);
|
||||
|
@ -33,7 +33,7 @@
|
||||
Если НЕ ПараметрыКоманды["-global"]
|
||||
И НЕ ЗначениеЗаполнено(ПараметрыКоманды["-rep-path"]) Тогда
|
||||
|
||||
Лог.Ошибка("Для конфгурирования необходимо передать флаг -global или указать каталог репозитория параметром -rep-path");
|
||||
Лог.Ошибка("Для конфигурирования необходимо передать флаг -global или указать каталог репозитория параметром -rep-path");
|
||||
Возврат Приложение.РезультатыКоманд().НеверныеПараметры;
|
||||
|
||||
КонецЕсли;
|
||||
@ -124,7 +124,7 @@
|
||||
|
||||
ГлобальныеСценарии = ПолучитьИменаСценариев(ТекущийКаталогСценариев);
|
||||
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии);
|
||||
НастройкиСценариев = СформироватьНастройкиСценариев();
|
||||
НастройкиСценариев = СформироватьНастройкиСценариев(ГлобальныеСценарии, ТекущийКаталогСценариев);
|
||||
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\НастройкиСценариев", НастройкиСценариев);
|
||||
|
||||
КонецПроцедуры
|
||||
@ -162,17 +162,23 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СформироватьНастройкиСценариев()
|
||||
Функция СформироватьНастройкиСценариев(МассивСценариев, КаталогСценариев)
|
||||
|
||||
// todo: Надо будет доработать таким образом, чтобы настройки считывались из сценария
|
||||
НастройкиСценариев = Новый Соответствие;
|
||||
Рефлектор = Новый Рефлектор;
|
||||
|
||||
// для сценария РазборОтчетовОбработокРасширений
|
||||
НастройкиСценария = Новый Соответствие;
|
||||
НастройкиСценария.Вставить("ИспользоватьНастройкиПоУмолчанию", Истина);
|
||||
НастройкиСценария.Вставить("ВерсияПлатформы", "");
|
||||
Для Каждого Сценарий Из МассивСценариев Цикл
|
||||
|
||||
ОбъектСценария = ЗагрузитьСценарий(ОбъединитьПути(КаталогСценариев, Сценарий));
|
||||
|
||||
Если Рефлектор.МетодСуществует(ОбъектСценария, "ПолучитьСтандартныеНастройкиСценария") Тогда
|
||||
|
||||
СтруктураНастроек = Рефлектор.ВызватьМетод(ОбъектСценария, "ПолучитьСтандартныеНастройкиСценария");
|
||||
НастройкиСценариев.Вставить(СтруктураНастроек.ИмяСценария, СтруктураНастроек.Настройка);
|
||||
|
||||
НастройкиСценариев = Новый Соответствие;
|
||||
НастройкиСценариев.Вставить("РазборОтчетовОбработокРасширений", НастройкиСценария);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат НастройкиСценариев;
|
||||
|
||||
@ -212,8 +218,8 @@
|
||||
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\КаталогЛокальныхСценариев", КаталогЛокальныхСценариев);
|
||||
|
||||
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии);
|
||||
|
||||
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\НастройкиСценариев", СформироватьНастройкиСценариев());
|
||||
НастройкиСценариев = СформироватьНастройкиСценариев(ГлобальныеСценарии, КаталогГлобальныхСценариев);
|
||||
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\НастройкиСценариев", );
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
@ -46,13 +46,13 @@
|
||||
|
||||
Лог.Информация("Используем глобальные настройки");
|
||||
УправлениеНастройками = Новый НастройкиРепозитория(Приложение.ПутьКРодительскомуКаталогу());
|
||||
|
||||
|
||||
Иначе
|
||||
|
||||
|
||||
Лог.Информация("Используем локальные настройки");
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ЗагрузитьСценарииОбработки(Приложение.КаталогСценариев(), УправлениеНастройками, КаталогРепозитория);
|
||||
|
||||
КаталогИсходныхФайлов = ПараметрыКоманды["-source-dir"];
|
||||
@ -86,7 +86,7 @@
|
||||
|
||||
Ит = 0;
|
||||
ПараметрыОбработки = Новый Структура("Лог, ФайлыДляПостОбработки, ИзмененныеКаталоги, КаталогРепозитория, УправлениеНастройками",
|
||||
Лог, Новый Массив, Новый Массив, КаталогРепозитория, УправлениеНастройками);
|
||||
Лог, Новый Массив, Новый Массив, КаталогРепозитория, УправлениеНастройками);
|
||||
Пока Ит < ЖурналИзменений.Количество() Цикл
|
||||
|
||||
АнализируемыйФайл = Новый Файл(ОбъединитьПути(КаталогРепозитория, ЖурналИзменений[Ит].ИмяФайла));
|
||||
@ -135,44 +135,22 @@
|
||||
ПараметрыКомандыGit = Новый Массив;
|
||||
ПараметрыКомандыGit.Добавить("diff-index --name-status --cached HEAD");
|
||||
РепозиторийGit.ВыполнитьКоманду(ПараметрыКомандыGit);
|
||||
ПараметрыКомандыGit = Новый Массив;
|
||||
ПараметрыКомандыGit.Добавить("status --porcelain");
|
||||
РепозиторийGit.ВыполнитьКоманду(ПараметрыКомандыGit);
|
||||
РезультатВывода = РепозиторийGit.ПолучитьВыводКоманды();
|
||||
СтрокиВывода = СтрРазделить(РезультатВывода, Символы.ПС);
|
||||
РезультатВывода = РепозиторийGit.ПолучитьВыводКоманды();
|
||||
СтрокиВывода = СтрРазделить(РезультатВывода, Символы.ПС);
|
||||
ЖурналИзменений = Новый Массив;
|
||||
|
||||
ЖурналИзменений = Новый Массив;
|
||||
Для Каждого СтрокаВывода Из СтрокиВывода Цикл
|
||||
|
||||
Лог.Отладка(" <%1>", СтрокаВывода);
|
||||
СтрокаВывода = СокрЛП(СтрокаВывода);
|
||||
ПозицияПробела = СтрНайти(СтрокаВывода, " ");
|
||||
СимволИзменения = Лев(СтрокаВывода, 1);
|
||||
Если СимволИзменения = "?" Тогда
|
||||
|
||||
Продолжить;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ТипИзменения = ВариантИзмененийФайловGit.ОпределитьВариантИзменения(СимволИзменения);
|
||||
|
||||
ИмяФайла = СокрЛП(СтрЗаменить(Сред(СтрокаВывода, ПозицияПробела + 1), """", ""));
|
||||
|
||||
Если ТипИзменения = ВариантИзмененийФайловGit.Переименован
|
||||
ИЛИ ТипИзменения = ВариантИзмененийФайловGit.Скопирован Тогда
|
||||
|
||||
// это два события - удален и добавлен
|
||||
ПозицияСтрелки = СтрНайти(ИмяФайла, "->");
|
||||
ИмяФайлаУдален = СокрЛП(Лев(ИмяФайла, ПозицияСтрелки - 1));
|
||||
ЖурналИзменений.Добавить(Новый Структура("ИмяФайла, ТипИзменения", ИмяФайлаУдален, ВариантИзмененийФайловGit.Удален));
|
||||
Лог.Отладка(" В журнале git %2 файл <%1>", ИмяФайлаУдален, ВариантИзмененийФайловGit.Удален);
|
||||
|
||||
ИмяФайла = СокрЛП(Сред(ИмяФайла, ПозицияСтрелки + 2));
|
||||
ТипИзменения = ВариантИзмененийФайловGit.Добавлен;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СтрокаВывода = СокрЛП(СтрокаВывода);
|
||||
ПозицияПробела = СтрНайти(СтрокаВывода, Символы.Таб);
|
||||
СимволИзменения = Лев(СтрокаВывода, 1);
|
||||
|
||||
ТипИзменения = ВариантИзмененийФайловGit.ОпределитьВариантИзменения(СимволИзменения);
|
||||
ИмяФайла = СокрЛП(СтрЗаменить(Сред(СтрокаВывода, ПозицияПробела + 1), """", ""));
|
||||
ЖурналИзменений.Добавить(Новый Структура("ИмяФайла, ТипИзменения", ИмяФайла, ТипИзменения));
|
||||
|
||||
Лог.Отладка(" В журнале git %2 файл <%1>", ИмяФайла, ТипИзменения);
|
||||
|
||||
КонецЦикла;
|
||||
@ -189,7 +167,7 @@
|
||||
ИменаЗагружаемыхСценариев = Новый Массив;
|
||||
|
||||
Если НЕ УправлениеНастройками.ЭтоНовый() Тогда
|
||||
|
||||
|
||||
Лог.Информация("Читаем настройки");
|
||||
ИменаЗагружаемыхСценариев = УправлениеНастройками.Настройка("Precommt4onecСценарии\ГлобальныеСценарии");
|
||||
Если УправлениеНастройками.Настройка("Precommt4onecСценарии\ИспользоватьСценарииРепозитория") Тогда
|
||||
@ -197,15 +175,15 @@
|
||||
ЛокальныйКаталог = УправлениеНастройками.Настройка("Precommt4onecСценарии\КаталогЛокальныхСценариев");
|
||||
ПутьКЛокальнымСценариям = ОбъединитьПути(КаталогРепозитория, ЛокальныйКаталог);
|
||||
ФайлПутьКЛокальнымСценариям = Новый Файл(ПутьКЛокальнымСценариям);
|
||||
|
||||
Если Не ФайлПутьКЛокальнымСценариям.Существует() ИЛИ ФайлПутьКЛокальнымСценариям.ЭтоФайл() Тогда
|
||||
|
||||
Лог.Ошибка("Сценарии из репозитория не загружены т.к. отсутствует каталог %1", ЛокальныйКаталог);
|
||||
|
||||
Иначе
|
||||
|
||||
Если Не ФайлПутьКЛокальнымСценариям.Существует() ИЛИ ФайлПутьКЛокальнымСценариям.ЭтоФайл() Тогда
|
||||
|
||||
Лог.Ошибка("Сценарии из репозитория не загружены т.к. отсутствует каталог %1", ЛокальныйКаталог);
|
||||
|
||||
Иначе
|
||||
|
||||
ФайлыЛокальныхСценариев = НайтиФайлы(ФайлПутьКЛокальнымСценариям.ПолноеИмя, "*.os");
|
||||
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
@ -213,7 +191,7 @@
|
||||
КонецЕсли;
|
||||
|
||||
ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыГлобальныхСценариев, ИменаЗагружаемыхСценариев);
|
||||
ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыЛокальныхСценариев);
|
||||
ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыЛокальныхСценариев, , Истина);
|
||||
|
||||
Если СценарииОбработки.Количество() = 0 Тогда
|
||||
|
||||
@ -223,14 +201,14 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыСценариев, Знач ИменаЗагружаемыхСценариев = Неопределено)
|
||||
Процедура ЗагрузитьСценарииИзКаталога(СценарииОбработки, ФайлыСценариев, Знач ИменаЗагружаемыхСценариев = Неопределено, ЗагрузитьВсе = Ложь)
|
||||
|
||||
Если ИменаЗагружаемыхСценариев = Неопределено Тогда
|
||||
|
||||
|
||||
ИменаЗагружаемыхСценариев = Новый Массив;
|
||||
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Для Каждого ФайлСценария Из ФайлыСценариев Цикл
|
||||
|
||||
Если СтрСравнить(ФайлСценария.ИмяБезРасширения, "ШаблонСценария") = 0 Тогда
|
||||
@ -238,8 +216,8 @@
|
||||
Продолжить;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ИменаЗагружаемыхСценариев.Найти(ФайлСценария.Имя) = Неопределено Тогда
|
||||
|
||||
Если НЕ ЗагрузитьВсе И ИменаЗагружаемыхСценариев.Найти(ФайлСценария.Имя) = Неопределено Тогда
|
||||
|
||||
Продолжить;
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
Перем ИнициализацияВыпонена; // содержит признак инициализации репозитория
|
||||
Перем ИнициализацияВыполнена; // содержит признак инициализации репозитория
|
||||
Перем НовыйКонфиг; // содержит признак нового конфига
|
||||
Перем Конфигурация; // описание конфигурации
|
||||
Перем АдресКонфигурационногоФайла; // адрес нахождения конфигурационного файла
|
||||
@ -34,31 +34,31 @@
|
||||
КонецФункции // ЭтоНовый()
|
||||
|
||||
// ГлобальныеНастройки
|
||||
// Возврает набор глобальных настроек
|
||||
// Возвращает набор глобальных настроек
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие - Набор глобальных настроек при их наличии, если настроек нет то будет возвращено пустое соответствие
|
||||
//
|
||||
Функция ГлобальныеНастройки() Экспорт
|
||||
|
||||
ПроверкаИницализации();
|
||||
ПроверкаИнициализации();
|
||||
|
||||
Возврат НастройкиПриложения("GLOBAL");
|
||||
|
||||
КонецФункции // ГлобальныеНастройки() Экспорт
|
||||
|
||||
// НастройкиПриложения
|
||||
// Возврает набор настроек для приложения
|
||||
// Возвращает набор настроек для приложения
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяПриложения - Строка - Имя приложения
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие - Набор гнастроек при их наличии, если настроек нет то будет возвращено пустое соответствие
|
||||
// Соответствие - Набор настроек при их наличии, если настроек нет то будет возвращено пустое соответствие
|
||||
//
|
||||
Функция НастройкиПриложения(ИмяПриложения) Экспорт
|
||||
|
||||
ПроверкаИницализации();
|
||||
ПроверкаИнициализации();
|
||||
Если ПустаяСтрока(ИмяПриложения) Тогда
|
||||
|
||||
ВызватьИсключение "Не указано имя приложения";
|
||||
@ -89,7 +89,7 @@
|
||||
//
|
||||
Функция Настройка(ИмяНастройки)Экспорт
|
||||
|
||||
ПроверкаИницализации();
|
||||
ПроверкаИнициализации();
|
||||
|
||||
РазложенноеИмяНастройки = РазобратьИмяНастройки(ИмяНастройки);
|
||||
ИскомоеПриложение = НастройкиПриложения(РазложенноеИмяНастройки.ИмяПриложения);
|
||||
@ -109,7 +109,7 @@
|
||||
//
|
||||
Процедура ЗаписатьНастройку(ИмяНастройки, Значение) Экспорт
|
||||
|
||||
ПроверкаИницализации();
|
||||
ПроверкаИнициализации();
|
||||
|
||||
РазложенноеИмяНастройки = РазобратьИмяНастройки(ИмяНастройки);
|
||||
ИскомоеПриложение = НастройкиПриложения(РазложенноеИмяНастройки.ИмяПриложения);
|
||||
@ -133,7 +133,7 @@
|
||||
//
|
||||
Процедура ЗаписатьНастройкиПриложения(ИмяПриложения, Значение) Экспорт
|
||||
|
||||
ПроверкаИницализации();
|
||||
ПроверкаИнициализации();
|
||||
|
||||
Если ПустаяСтрока(ИмяПриложения) Тогда
|
||||
|
||||
@ -161,7 +161,7 @@
|
||||
//
|
||||
Процедура УдалитьНастройкиПриложения(ИмяПриложения) Экспорт
|
||||
|
||||
ПроверкаИницализации();
|
||||
ПроверкаИнициализации();
|
||||
|
||||
Если ПустаяСтрока(ИмяПриложения) Тогда
|
||||
|
||||
@ -179,15 +179,15 @@
|
||||
// Служебный функционал
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
Функция ПроверкаИницализации()
|
||||
Функция ПроверкаИнициализации()
|
||||
|
||||
Если Не ИнициализацияВыпонена Тогда
|
||||
Если Не ИнициализацияВыполнена Тогда
|
||||
|
||||
ВызватьИсключение "Необходимо выполнить инициализацию"
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции // ПроверкаИницализации()
|
||||
КонецФункции // ПроверкаИнициализации()
|
||||
|
||||
Функция РазобратьИмяНастройки(Знач ИмяНастройки)
|
||||
|
||||
@ -233,7 +233,7 @@
|
||||
//
|
||||
Процедура ПриСозданииОбъекта(КаталогРепозитория, ОбновлятьКонф = ЛОЖЬ)
|
||||
|
||||
ИнициализацияВыпонена = ЛОЖЬ;
|
||||
ИнициализацияВыполнена = ЛОЖЬ;
|
||||
НовыйКонфиг = ЛОЖЬ;
|
||||
Конфигурация = Неопределено;
|
||||
АдресКонфигурационногоФайла = "";
|
||||
@ -264,6 +264,6 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ИнициализацияВыпонена = ИСТИНА;
|
||||
ИнициализацияВыполнена = ИСТИНА;
|
||||
|
||||
КонецПроцедуры // ПриСозданииОбъекта()
|
@ -22,7 +22,7 @@
|
||||
//
|
||||
Функция ВерсияПродукта() Экспорт
|
||||
|
||||
Возврат "1.0.12.2";
|
||||
Возврат "1.10.0";
|
||||
|
||||
КонецФункции // ВерсияПродукта
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
// ЭтоФайлИсходников
|
||||
// Возвращает истину, если файл является файлом исходных кодов
|
||||
// Параметры:
|
||||
// Файл - Строка - Полный путь к файлу
|
||||
// Файл - Файл - Полный путь к файлу
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак
|
||||
@ -29,7 +29,7 @@
|
||||
// ЭтоФайлОписанияКонфигурации
|
||||
// Возвращает истину, если файл является файлом описания конфигурации
|
||||
// Параметры:
|
||||
// Файл - Строка - Полный путь к файлу
|
||||
// Файл - Файл - Полный путь к файлу
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак
|
||||
@ -49,7 +49,7 @@
|
||||
// ЭтоФайлОписанияКонфигурацииEDT
|
||||
// Возвращает истину, если файл является файлом описания конфигурации в формате EDT
|
||||
// Параметры:
|
||||
// Файл - Строка - Полный путь к файлу
|
||||
// Файл - Файл - Полный путь к файлу
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак
|
||||
@ -65,3 +65,135 @@
|
||||
Возврат СтрСравнить(Файл.Имя, "Configuration.mdo") = 0;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ЭтоФайлОбычнойФормы
|
||||
// Возвращает истину, если файл является файлом обычной формы
|
||||
// Параметры:
|
||||
// Файл - Файл - Полный путь к файлу
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак
|
||||
//
|
||||
Функция ЭтоФайлОбычнойФормы(Файл) Экспорт
|
||||
|
||||
Если ПустаяСтрока(Файл.Расширение) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтрСравнить(Файл.Имя, "Form.bin") = 0;
|
||||
|
||||
КонецФункции // ЭтоФайлОбычнойФормы
|
||||
|
||||
// ЭтоФайлОписанияМетаданных
|
||||
// Возвращает истину, если файл является описанием метаданных, исключая файлы описания конфигурации.
|
||||
// Параметры:
|
||||
// Файл - Файл - Полный путь к файлу
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак
|
||||
//
|
||||
Функция ЭтоФайлОписанияМетаданных(Файл) Экспорт
|
||||
|
||||
Если ПустаяСтрока(Файл.Расширение) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЭтоФайлОписанияМетаданныхКонфигуратора(Файл) ИЛИ ЭтоФайлОписанияМетаданныхEDT(Файл);
|
||||
|
||||
КонецФункции // ЭтоФайлОписанияМетаданных
|
||||
|
||||
// ЭтоФайлОписанияМетаданныхКонфигуратора
|
||||
// Возвращает истину, если файл является описанием метаданных конфигуратора, исключая Configuration.xml
|
||||
// Параметры:
|
||||
// Файл - Файл - Полный путь к файлу
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак
|
||||
//
|
||||
Функция ЭтоФайлОписанияМетаданныхКонфигуратора(Файл) Экспорт
|
||||
|
||||
Если ПустаяСтрока(Файл.Расширение) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ЭтоФайлОписанияКонфигурации(Файл) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтрСравнить(Файл.Расширение, ".xml") = 0;
|
||||
|
||||
КонецФункции // ЭтоФайлОписанияМетаданныхКонфигуратора
|
||||
|
||||
// ЭтоФайлОписанияМетаданныхEDT
|
||||
// Возвращает истину, если файл является описанием метаданных конфигуратора, исключая Configuration.mdo
|
||||
// Параметры:
|
||||
// Файл - Файл - Полный путь к файлу
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак
|
||||
//
|
||||
Функция ЭтоФайлОписанияМетаданныхEDT(Файл) Экспорт
|
||||
|
||||
Если ПустаяСтрока(Файл.Расширение) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ЭтоФайлОписанияКонфигурацииEDT(Файл) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтрСравнить(Файл.Расширение, ".mdo") = 0;
|
||||
|
||||
КонецФункции // ЭтоФайлОписанияМетаданныхEDT
|
||||
|
||||
// ЭтоФайлОписанияФормы
|
||||
// Возвращает истину, если файл является файлом описания формы
|
||||
// Параметры:
|
||||
// Файл - Файл - Полный путь к файлу
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак
|
||||
//
|
||||
Функция ЭтоФайлОписанияФормы(Файл) Экспорт
|
||||
|
||||
Если ПустаяСтрока(Файл.Расширение) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтрСравнить(Файл.Имя, "Form.xml") = 0;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ЭтоФайлОписанияФормыEDT
|
||||
// Возвращает истину, если файл является файлом описания формы в формате EDT
|
||||
// Параметры:
|
||||
// Файл - Файл - Полный путь к файлу
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак
|
||||
//
|
||||
Функция ЭтоФайлОписанияФормыEDT(Файл) Экспорт
|
||||
|
||||
Если ПустаяСтрока(Файл.Расширение) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтрСравнить(Файл.Имя, "Form.form") = 0;
|
||||
|
||||
КонецФункции
|
83
src/Модули/ФайловыеОперации.os
Normal file
83
src/Модули/ФайловыеОперации.os
Normal file
@ -0,0 +1,83 @@
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Служебный модуль с набором методов для работы с файлами
|
||||
//
|
||||
// (с) BIA Technologies, LLC
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// ПрочитатьТекстФайла
|
||||
// Возвращает содержимое файла, читая его в правильной кодировке
|
||||
// Параметры:
|
||||
// ПутьКФайлу - Строка - Полный путь к файлу
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Содержимое файла
|
||||
//
|
||||
Функция ПрочитатьТекстФайла(ПутьКФайлу) Экспорт
|
||||
|
||||
Кодировка = ОпределитьКодировку(ПутьКФайлу);
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ПутьКФайлу, Кодировка);
|
||||
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
|
||||
Текст.Закрыть();
|
||||
|
||||
Возврат СодержимоеФайла;
|
||||
|
||||
КонецФункции // ПрочитатьТекстФайла
|
||||
|
||||
// ЗаписатьТекстФайла
|
||||
// Определяет кодировку файла и записывает содержимое в файл
|
||||
//
|
||||
// Параметры:
|
||||
// ПутьКФайлу - Строка - Полный путь к файлу
|
||||
// СодержимоеФайла - Строка - Текст для записи
|
||||
Процедура ЗаписатьТекстФайла(ПутьКФайлу, СодержимоеФайла) Экспорт
|
||||
|
||||
Кодировка = ОпределитьКодировку(ПутьКФайлу);
|
||||
ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, Кодировка, , , Символы.ПС);
|
||||
|
||||
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
|
||||
КонецПроцедуры // ЗаписатьТекстФайла
|
||||
|
||||
// ОпределитьКодировку
|
||||
// Читает первые 3 байта файла и ищет маркер BOM кодировки UTF-8
|
||||
// Параметры:
|
||||
// ПутьКФайлу - Строка - Полный путь к файлу
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Перечисление - Кодировка файла
|
||||
//
|
||||
Функция ОпределитьКодировку(ПутьКФайлу) Экспорт
|
||||
|
||||
МаркерUTFBOM = СтрРазделить("239 187 191", " ");
|
||||
ЧтениеДанных = Новый ЧтениеДанных(ПутьКФайлу);
|
||||
Буфер = Новый БуферДвоичныхДанных(МаркерUTFBOM.Количество());
|
||||
|
||||
ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных(Буфер, , МаркерUTFBOM.Количество());
|
||||
Cч = 0;
|
||||
ЕстьBOM = Истина;
|
||||
|
||||
Для Каждого Байт ИЗ Буфер Цикл
|
||||
|
||||
Если МаркерUTFBOM[Cч] <> Строка(Байт) Тогда
|
||||
|
||||
ЕстьBOM = Ложь;
|
||||
Прервать;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Cч = Cч + 1;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЧтениеДанных.Закрыть();
|
||||
|
||||
Возврат ?(ЕстьBOM, КодировкаТекста.UTF8, КодировкаТекста.UTF8NoBOM);
|
||||
|
||||
КонецФункции // ОпределитьКодировку
|
@ -27,7 +27,7 @@
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
@ -57,10 +57,7 @@
|
||||
|
||||
Функция ВставитьНужныеПробелы(Знач ИмяФайла)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||
|
||||
@ -79,10 +76,7 @@
|
||||
КонецЕсли;
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1 $2$3$4");
|
||||
|
||||
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
|
||||
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
|
@ -28,7 +28,7 @@
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
@ -53,11 +53,7 @@
|
||||
|
||||
Процедура ПроверитьНаОтсутствиеПерейти(ПутьКФайлуМодуля)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ПутьКФайлуМодуля, КодировкаТекста.UTF8NoBOM);
|
||||
|
||||
ТекстМодуля = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
|
||||
|
||||
ТекстОшибки = "";
|
||||
ШаблонПоиска = Новый РегулярноеВыражение("[\s;]+?Перейти\s+?~[a-zA-ZА-Яа-я0-9_]+");
|
||||
|
@ -26,7 +26,7 @@
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
@ -36,17 +36,33 @@
|
||||
|
||||
Лог = ДополнительныеПараметры.Лог;
|
||||
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
|
||||
Если АнализируемыйФайл.Существует() И ЭтоФайлОписанияФормы(АнализируемыйФайл) Тогда
|
||||
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
Если ОбновитьИндексыЭлементовВФорме(АнализируемыйФайл.ПолноеИмя) Тогда
|
||||
Если АнализируемыйФайл.Существует() Тогда
|
||||
|
||||
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
|
||||
Если ТипыФайлов.ЭтоФайлОписанияФормы(АнализируемыйФайл) Тогда
|
||||
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
Если ОбновитьИндексыЭлементовВФорме(АнализируемыйФайл.ПолноеИмя) Тогда
|
||||
|
||||
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ИСТИНА;
|
||||
|
||||
ИначеЕсли ТипыФайлов.ЭтоФайлОписанияФормыEDT(АнализируемыйФайл) Тогда
|
||||
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
Если ОбновитьИндексыЭлементовВФорме(АнализируемыйФайл.ПолноеИмя, Истина) Тогда
|
||||
|
||||
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ИСТИНА;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ИСТИНА;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
@ -54,26 +70,13 @@
|
||||
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Функция ЭтоФайлОписанияФормы(Файл)
|
||||
|
||||
Если ПустаяСтрока(Файл.Расширение) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтрСравнить(Файл.Имя, "Form.xml") = 0;
|
||||
|
||||
КонецФункции
|
||||
Функция ОбновитьИндексыЭлементовВФорме(Знач ИмяФайла, EDT = Ложь)
|
||||
|
||||
Функция ОбновитьИндексыЭлементовВФорме(Знач ИмяФайла)
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
ПаттернID = ?(EDT, "<id>([0-9-]+)<\/id>", "id=\""([0-9-]+)\""\/*>");
|
||||
|
||||
Регексп = Новый РегулярноеВыражение("id=\""([0-9-]+)\""\/*>");
|
||||
Регексп = Новый РегулярноеВыражение(ПаттернID);
|
||||
Регексп.ИгнорироватьРегистр = ИСТИНА;
|
||||
Регексп.Многострочный = ИСТИНА;
|
||||
ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла);
|
||||
@ -114,9 +117,9 @@
|
||||
|
||||
Пока СтрокаТЧ.Количество > 1 Цикл
|
||||
|
||||
ИсходнаяСтрока = "id=""" + СтрокаТЧ.Значение + """";
|
||||
ИсходнаяСтрока = ?(EDT, "<id>" + СтрокаТЧ.Значение + "<", "id=""" + СтрокаТЧ.Значение + """");
|
||||
ПоследнийНомер = ПоследнийНомер + 1;
|
||||
СтрокаЗамены = "id=""" + ПоследнийНомер + """";
|
||||
СтрокаЗамены = ?(EDT, "<id>" + ПоследнийНомер + "<", "id=""" + ПоследнийНомер + """");
|
||||
|
||||
Поз = СтрНайти(СодержимоеФайла, ИсходнаяСтрока);
|
||||
|
||||
@ -129,9 +132,7 @@
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
|
||||
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
Возврат ИСТИНА;
|
||||
|
||||
|
274
src/СценарииОбработки/ОтключениеПолнотекстовогоПоиска.os
Normal file
274
src/СценарииОбработки/ОтключениеПолнотекстовогоПоиска.os
Normal file
@ -0,0 +1,274 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Служебный модуль с реализацией сценариев обработки файлов <ОтключениеПолнотекстовогоПоиска>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Перем ЗначениеПоиска;
|
||||
|
||||
// ИмяСценария
|
||||
// Возвращает имя сценария обработки файлов
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Имя текущего сценария обработки файлов
|
||||
//
|
||||
Функция ИмяСценария() Экспорт
|
||||
|
||||
Возврат "ОтключениеПолнотекстовогоПоиска";
|
||||
|
||||
КонецФункции // ИмяСценария()
|
||||
|
||||
// ПолучитьСтандартныеНастройкиСценария
|
||||
// Возвращает структуру настроек сценария
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Структура с настройками сценария
|
||||
// * ИмяСценария - Строка - Имя, с которым сохранятся настройки
|
||||
// * Настройка - Соответствие - настройки
|
||||
//
|
||||
Функция ПолучитьСтандартныеНастройкиСценария() Экспорт
|
||||
|
||||
НастройкиСценария = Новый Соответствие;
|
||||
ПутьИРеквизиты = Новый Соответствие;
|
||||
МассивРеквизитов = Новый Массив;
|
||||
МассивРеквизитов.Добавить("Номер");
|
||||
МассивРеквизитов.Добавить("ТабличнаяЧасть1.Реквизит");
|
||||
|
||||
ПутьИРеквизиты.Вставить("src\_example.xml", МассивРеквизитов);
|
||||
ПутьИРеквизиты.Вставить("src\_example2.xml", Новый Массив);
|
||||
|
||||
НастройкиСценария.Вставить("МетаданныеДляИсключения", ПутьИРеквизиты);
|
||||
|
||||
Возврат Новый Структура("ИмяСценария, Настройка", ИмяСценария(), НастройкиСценария);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ОбработатьФайл
|
||||
// Выполняет обработку файла
|
||||
//
|
||||
// Параметры:
|
||||
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
|
||||
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
|
||||
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак выполненной обработки файла
|
||||
//
|
||||
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Лог = ДополнительныеПараметры.Лог;
|
||||
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
|
||||
|
||||
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлОписанияМетаданных(АнализируемыйФайл) Тогда
|
||||
|
||||
МетаданныеДляИсключения = НастройкиСценария.Получить("МетаданныеДляИсключения");
|
||||
|
||||
ОтносительныйПуть = СтрЗаменить(АнализируемыйФайл.ПолноеИмя, ДополнительныеПараметры.КаталогРепозитория, "");
|
||||
МассивРеквизитов = МетаданныеДляИсключения.Получить(ОтносительныйПуть);
|
||||
|
||||
Если МассивРеквизитов = Неопределено ИЛИ ЗначениеЗаполнено(МассивРеквизитов) Тогда
|
||||
//Неопределено - нет файла в исключении, массив не пустой - исключение только по реквизитам
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
ЭтоEDT = ТипыФайлов.ЭтоФайлОписанияМетаданныхEDT(АнализируемыйФайл);
|
||||
|
||||
Если ОтключитьПолнотекстовыйПоиск(АнализируемыйФайл.ПолноеИмя, МассивРеквизитов, ЭтоEDT) Тогда
|
||||
|
||||
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Функция ОтключитьПолнотекстовыйПоиск(Знач ИмяФайла, МассивРеквизитов, ЭтоEDT)
|
||||
|
||||
ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
СодержимоеФайла = ТекстФайла;
|
||||
|
||||
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(МассивРеквизитов) Тогда
|
||||
|
||||
// получение текста файла до табличных частей
|
||||
Регексп = Новый РегулярноеВыражение("(<\?xml version[\w\W]+?)(<TabularSection|<\/MetaDataObject>|<\/mdclass:Document>)([\w\W]+)?");
|
||||
Регексп.ИгнорироватьРегистр = Истина;
|
||||
Регексп.Многострочный = Истина;
|
||||
Совпадения = Регексп.НайтиСовпадения(СодержимоеФайла);
|
||||
|
||||
Если Совпадения.Количество() = 0 Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СекцияДоТаблиц = Совпадения[0].Группы[1].Значение;
|
||||
ЗакрывающаяСекция = Совпадения[0].Группы[2].Значение;
|
||||
СекцияТаблиц = Совпадения[0].Группы[3].Значение;
|
||||
|
||||
СекцияДоТаблиц = ОбработатьСтандартныеАтрибуты(СекцияДоТаблиц, МассивРеквизитов);
|
||||
СекцияДоТаблиц = ОбработатьРеквизиты(СекцияДоТаблиц, МассивРеквизитов);
|
||||
|
||||
ЕстьСекцияТаблиц = СекцияТаблиц <> "";
|
||||
|
||||
Если ЕстьСекцияТаблиц Тогда
|
||||
|
||||
ОбработатьТабличныеЧасти(СекцияТаблиц, МассивРеквизитов, ЭтоEDT);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СодержимоеФайла = СекцияДоТаблиц + ?(ЕстьСекцияТаблиц, ЗакрывающаяСекция + СекцияТаблиц, ЗакрывающаяСекция);
|
||||
|
||||
Иначе // Обработается весь файл целиком
|
||||
|
||||
СодержимоеФайла = ЗаменитьПоиск(СодержимоеФайла);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если СтрСравнить(ТекстФайла, СодержимоеФайла) = 0 Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗаменитьПоиск(СодержимоеФайла, Знач ПоискРеквизита = "")
|
||||
|
||||
ПолнотекстовыйПоиск = "(<(?:xr\:)?fullTextSearch>)(Use)(<\/(?:xr\:)?fullTextSearch>)";
|
||||
Выражение = ПоискРеквизита + ПолнотекстовыйПоиск;
|
||||
|
||||
Регексп = Новый РегулярноеВыражение(Выражение);
|
||||
Регексп.ИгнорироватьРегистр = Истина;
|
||||
Регексп.Многострочный = Истина;
|
||||
ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла);
|
||||
|
||||
Если ГруппыИндексов.Количество() <> 0 Тогда
|
||||
|
||||
Если ЗначениеЗаполнено(ПоискРеквизита) Тогда
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1$2DontUse$4");
|
||||
|
||||
Иначе
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1DontUse$3");
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СодержимоеФайла;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОбработатьСтандартныеАтрибуты(СодержимоеФайла, Исключения)
|
||||
|
||||
СтандартныеАтрибуты = "Attribute name=""([а-яa-zA-ZА-Я0-9_]+)"">[\w\W]+?((<xr:FullTextSearch>(Use)<\/xr:FullTextSearch>)|<\/xr:StandardAttribute>)";
|
||||
|
||||
Регексп = Новый РегулярноеВыражение(СтандартныеАтрибуты);
|
||||
Регексп.ИгнорироватьРегистр = Истина;
|
||||
Регексп.Многострочный = Истина;
|
||||
КоллекцияСовпадений = Регексп.НайтиСовпадения(СодержимоеФайла);
|
||||
|
||||
Для Каждого Совпадение Из КоллекцияСовпадений Цикл
|
||||
|
||||
Если Совпадение.Группы[4].Значение = ЗначениеПоиска.Use И Исключения.Найти(Совпадение.Группы[1].Значение) = Неопределено Тогда
|
||||
|
||||
ПоискРеквизита = СтрШаблон("(Attribute name=""%1"">[\w\W]+?)", Совпадение.Группы[1].Значение);
|
||||
СодержимоеФайла = ЗаменитьПоиск(СодержимоеФайла, ПоискРеквизита);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СодержимоеФайла;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОбработатьРеквизиты(СодержимоеФайла, Исключения)
|
||||
|
||||
ПоискРеквизиты = "<Name>([а-яa-zA-ZА-Я0-9_]+)<\/Name>[\w\W]+?(<FullTextSearch>(Use)<\/FullTextSearch>)|<\/Properties>|<\/attributes>";
|
||||
|
||||
Регексп = Новый РегулярноеВыражение(ПоискРеквизиты);
|
||||
Регексп.ИгнорироватьРегистр = Истина;
|
||||
Регексп.Многострочный = Истина;
|
||||
КоллекцияСовпадений = Регексп.НайтиСовпадения(СодержимоеФайла);
|
||||
|
||||
Для Каждого Совпадение Из КоллекцияСовпадений Цикл
|
||||
|
||||
Если Совпадение.Группы[3].Значение = ЗначениеПоиска.Use И Исключения.Найти(Совпадение.Группы[1].Значение) = Неопределено Тогда
|
||||
|
||||
ПоискРеквизита = СтрШаблон("(<Name>%1<\/Name>[\w\W]+?)", Совпадение.Группы[1].Значение);
|
||||
СодержимоеФайла = ЗаменитьПоиск(СодержимоеФайла, ПоискРеквизита);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СодержимоеФайла;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОбработатьТабличныеЧасти(ТекстФайла, Исключения, ЭтоEDT)
|
||||
|
||||
Если ЭтоEDT Тогда
|
||||
|
||||
Шаблон = "<\/producedTypes>\s+<name>([а-яa-zA-ZА-Я0-9_]+)<\/name>|(<Name>)([а-яa-zA-ZА-Я0-9_]+)<\/Name>|(<FullTextSearch>)(Use)<\/FullTextSearch>";
|
||||
ШаблонЗамены = "(<\/producedTypes>\s+<name>%1<\/name>[\w\W]+?<Name>%2<\/Name>[\w\W]+?)";
|
||||
|
||||
Иначе
|
||||
|
||||
Шаблон = "TabularSection\.[\w\W]+?\.([\w\W]+?)""|(<Name>)([а-яa-zA-ZА-Я0-9_]+)<\/Name>|(<FullTextSearch>)(Use)<\/FullTextSearch>";
|
||||
ШаблонЗамены = "(TabularSection\.[\w\W]+?\.%1""[\w\W]+?<Name>%2<\/Name>[\w\W]+?)";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Регексп = Новый РегулярноеВыражение(Шаблон);
|
||||
Регексп.ИгнорироватьРегистр = Истина;
|
||||
Регексп.Многострочный = Истина;
|
||||
КоллекцияСовпадений = Регексп.НайтиСовпадения(ТекстФайла);
|
||||
|
||||
Таблица = "";
|
||||
Реквизит = "";
|
||||
|
||||
Для Каждого Совпадение Из КоллекцияСовпадений Цикл
|
||||
|
||||
Таблица = ?(ЗначениеЗаполнено(Совпадение.Группы[1].Значение), Совпадение.Группы[1].Значение, Таблица);
|
||||
Реквизит = ?(ЗначениеЗаполнено(Совпадение.Группы[3].Значение), Совпадение.Группы[3].Значение, Реквизит);
|
||||
ИспользованиеПоиска = Совпадение.Группы[4].Значение;
|
||||
|
||||
Если ЗначениеЗаполнено(ИспользованиеПоиска) И Исключения.Найти(Таблица + "." + Реквизит) = Неопределено Тогда
|
||||
|
||||
ПолнотекстовыйПоиск = СтрШаблон(ШаблонЗамены, Таблица, Реквизит);
|
||||
|
||||
ТекстФайла = ЗаменитьПоиск(ТекстФайла, ПолнотекстовыйПоиск)
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ТекстФайла;
|
||||
|
||||
КонецФункции
|
||||
|
||||
ЗначениеПоиска = Новый Структура ("Use, DontUse", "Use", "DontUse");
|
115
src/СценарииОбработки/ПроверкаДублейПроцедурИФункций.os
Normal file
115
src/СценарииОбработки/ПроверкаДублейПроцедурИФункций.os
Normal file
@ -0,0 +1,115 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Служебный модуль с реализацией сценариев обработки файлов <ИмяСценария>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
Перем Лог;
|
||||
|
||||
// ИмяСценария
|
||||
// Возвращает имя сценария обработки файлов
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Имя текущего сценария обработки файлов
|
||||
//
|
||||
Функция ИмяСценария() Экспорт
|
||||
|
||||
Возврат "ПроверкаДублейПроцедурИФункций";
|
||||
|
||||
КонецФункции // ИмяСценария()
|
||||
|
||||
// ОбработатьФайл
|
||||
// Выполняет обработку файла
|
||||
//
|
||||
// Параметры:
|
||||
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
|
||||
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
|
||||
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак выполненной обработки файла
|
||||
//
|
||||
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Лог = ДополнительныеПараметры.Лог;
|
||||
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
|
||||
|
||||
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
|
||||
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
ПроверитьНаДублированиеМетодов(АнализируемыйФайл.ПолноеИмя);
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
// ПроверитьНаДублированиеМетодов
|
||||
// Выполняет поиск дублей имен процедур и функций файла
|
||||
//
|
||||
// Параметры:
|
||||
// ПутьКФайлуМодуля - Строка - Путь до файла
|
||||
//
|
||||
Процедура ПроверитьНаДублированиеМетодов(ПутьКФайлуМодуля)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ПутьКФайлуМодуля, КодировкаТекста.UTF8NoBOM);
|
||||
|
||||
ТекстМодуля = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
|
||||
ТекстОшибки = "";
|
||||
|
||||
ШаблонПоиска = Новый РегулярноеВыражение("^\s*(?:Процедура|Функция|procedure|function)\s+?([а-яА-ЯёЁ0-9_\w]+?)\s*?\(");
|
||||
ШаблонПоиска.Многострочный = Истина;
|
||||
ШаблонПоиска.ИгнорироватьРегистр = Истина;
|
||||
|
||||
Если НЕ ПустаяСтрока(ТекстМодуля) Тогда
|
||||
|
||||
Совпадения = ШаблонПоиска.НайтиСовпадения(ТекстМодуля);
|
||||
|
||||
Если Совпадения.Количество() Тогда
|
||||
|
||||
ТЗПроцедуры = Новый ТаблицаЗначений;
|
||||
ТЗПроцедуры.Колонки.Добавить("ИмяПроцедуры");
|
||||
ТЗПроцедуры.Колонки.Добавить("Количество");
|
||||
|
||||
Для Каждого Совпадение Из Совпадения Цикл
|
||||
|
||||
СтрокаТЗ = ТЗПроцедуры.Добавить();
|
||||
СтрокаТЗ.ИмяПроцедуры = НРЕГ(Совпадение.Группы[1].Значение);
|
||||
СтрокаТЗ.Количество = 1;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КоличествоПроцедур = ТЗПроцедуры.Количество();
|
||||
ТЗПроцедуры.Свернуть("ИмяПроцедуры", "Количество");
|
||||
КоличествоУникальных = ТЗПроцедуры.Количество();
|
||||
|
||||
Если КоличествоПроцедур <> КоличествоУникальных Тогда
|
||||
|
||||
ТекстОшибки = СтрШаблон("В файле '%1' обнаружены неуникальные имена методов " + Символы.ПС, ПутьКФайлуМодуля);
|
||||
|
||||
Для Каждого СтрокаТЗ Из ТЗПроцедуры Цикл
|
||||
|
||||
ТекстОшибки = ТекстОшибки + ?(СтрокаТЗ.Количество > 1, СтрокаТЗ.ИмяПроцедуры + Символы.ПС, "");
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Лог.Ошибка(ТекстОшибки);
|
||||
ВызватьИсключение ТекстОшибки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры // ПроверитьНаДублированиеМетодов()
|
@ -28,7 +28,7 @@
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
@ -53,12 +53,8 @@
|
||||
|
||||
Процедура ПроверитьНаКорректностьОбластей(ПутьКФайлуМодуля)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ПутьКФайлуМодуля, КодировкаТекста.UTF8NoBOM);
|
||||
|
||||
ТекстМодуля = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
|
||||
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
|
||||
|
||||
ТекстОшибки = "";
|
||||
ШаблонПоиска = Новый РегулярноеВыражение("^[\t ]*?#[\t ]*?(?:(?:Область[\t ]+?([a-zA-Zа-яА-Я0-9_]+?))|(?:КонецОбласти))[\t ]*?(?:\/\/.*)*$");
|
||||
ШаблонПоиска.Многострочный = Истина;
|
||||
|
@ -31,7 +31,7 @@
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
@ -42,7 +42,7 @@
|
||||
Лог = ДополнительныеПараметры.Лог;
|
||||
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
|
||||
|
||||
Если ЭтоФайлОбычнойФормы(АнализируемыйФайл) Тогда
|
||||
Если ТипыФайлов.ЭтоФайлОбычнойФормы(АнализируемыйФайл) Тогда
|
||||
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
@ -78,18 +78,6 @@
|
||||
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Функция ЭтоФайлОбычнойФормы(Файл)
|
||||
|
||||
Если ПустаяСтрока(Файл.Расширение) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтрСравнить(Файл.Имя, "Form.bin") = 0;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПодготовитьКаталогВыгрузки(КаталогИсходныхФайлов, ОбрабатываемыйФайл, ДополнительныеПараметры)
|
||||
|
||||
ФайлУдален = НЕ ОбрабатываемыйФайл.Существует();
|
||||
|
@ -27,6 +27,24 @@
|
||||
|
||||
КонецФункции // ИмяСценария()
|
||||
|
||||
// ПолучитьСтандартныеНастройкиСценария
|
||||
// Возвращает структуру настроек сценария
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Структура с настройками сценария
|
||||
// * ИмяСценария - Строка - Имя, с которым сохранятся настройки
|
||||
// * Настройка - Соответствие - настройки
|
||||
//
|
||||
Функция ПолучитьСтандартныеНастройкиСценария() Экспорт
|
||||
|
||||
НастройкиСценария = Новый Соответствие;
|
||||
НастройкиСценария.Вставить("ИспользоватьНастройкиПоУмолчанию", Истина);
|
||||
НастройкиСценария.Вставить("ВерсияПлатформы", "");
|
||||
|
||||
Возврат Новый Структура("ИмяСценария, Настройка", ИмяСценария(), НастройкиСценария);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ОбработатьФайл
|
||||
// Выполняет обработку файла
|
||||
//
|
||||
@ -37,7 +55,7 @@
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
|
@ -26,7 +26,7 @@
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
@ -56,11 +56,7 @@
|
||||
|
||||
Функция СинхронизироватьМетаданныеиФайлы(Знач ИмяФайла, УдаленныеФайлы)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, "utf-8");
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
Регексп = Новый РегулярноеВыражение("(<ChildObjects>\s+?)([\w\W]+?)(\s+<\/ChildObjects>)");
|
||||
Регексп.ИгнорироватьРегистр = ИСТИНА;
|
||||
Регексп.Многострочный = ИСТИНА;
|
||||
@ -172,11 +168,19 @@
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
МассивИсключенийМетаданных = ПолучитьМассивИсключенийМетаданных();
|
||||
|
||||
// проверка наличия объектов, для которых нет каталогов
|
||||
Если ОбъектыМетаданных.Количество() Тогда
|
||||
|
||||
Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл
|
||||
|
||||
Если МассивИсключенийМетаданных.Найти(ОбъектМетаданных.Тип) <> Неопределено Тогда
|
||||
|
||||
Продолжить;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ЕдиныйТекстОшибки = ЕдиныйТекстОшибки + ?(ПустаяСтрока(ЕдиныйТекстОшибки), "", Символы.ПС)
|
||||
+ "Отсутствуют файлы для " + ОбъектМетаданных.ТипМетаданных + "." + ОбъектМетаданных.ИмяМетаданных;
|
||||
|
||||
@ -201,6 +205,15 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьМассивИсключенийМетаданных()
|
||||
|
||||
МассивИсключений = Новый Массив();
|
||||
МассивИсключений.Добавить("Sequence");
|
||||
|
||||
Возврат МассивИсключений;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СписокКаталоговТиповМетаданных()
|
||||
|
||||
Список = Новый СписокЗначений();
|
||||
@ -238,6 +251,7 @@
|
||||
Список.Добавить("SessionParameters", "SessionParameter");
|
||||
Список.Добавить("SettingsStorages", "SettingsStorage");
|
||||
Список.Добавить("StyleItems", "StyleItem");
|
||||
Список.Добавить("Sequences", "Sequence");
|
||||
Список.Добавить("Styles", "Style");
|
||||
Список.Добавить("Subsystems", "Subsystem");
|
||||
Список.Добавить("Tasks", "Task");
|
||||
|
@ -26,7 +26,7 @@
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
@ -72,10 +72,7 @@
|
||||
|
||||
Функция ОтсортироватьДеревоМетаданных(Знач ИмяФайла)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, "utf-8");
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Регексп = Новый РегулярноеВыражение("(<ChildObjects>\s+?)([\w\W]+?)(\s+<\/ChildObjects>)");
|
||||
Регексп.ИгнорироватьРегистр = ИСТИНА;
|
||||
@ -136,12 +133,9 @@
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СтрокаЗамены + "$3");
|
||||
ЗаписьТекста = Новый ЗаписьТекста;
|
||||
ЗаписьТекста.Открыть(ИмяФайла, КодировкаТекста.UTF8);
|
||||
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
@ -215,10 +209,7 @@
|
||||
КонецЕсли;
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СокрЛП(СтрокаЗамены) + Символы.ПС + "$3");
|
||||
ЗаписьТекста = Новый ЗаписьТекста;
|
||||
ЗаписьТекста.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
|
||||
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
@ -72,10 +72,7 @@
|
||||
|
||||
Функция УдалитьДублиВМетаданных(Знач ИмяФайла)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, "utf-8");
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Регексп = Новый РегулярноеВыражение("(<ChildObjects>\s+?)([\w\W]+?)(\s+<\/ChildObjects>)");
|
||||
Регексп.ИгнорироватьРегистр = ИСТИНА;
|
||||
@ -139,10 +136,7 @@
|
||||
КонецЕсли;
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СтрокаЗамены + "$3");
|
||||
ЗаписьТекста = Новый ЗаписьТекста;
|
||||
ЗаписьТекста.Открыть(ИмяФайла, КодировкаТекста.UTF8);
|
||||
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
@ -56,10 +56,7 @@
|
||||
|
||||
Функция ИсправитьКонцевыеПробелы(Знач ИмяФайла)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||
|
||||
@ -79,9 +76,7 @@
|
||||
|
||||
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1");
|
||||
|
||||
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
|
||||
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
@ -55,11 +55,8 @@
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Функция УдалитьЛишниеПустыеСтроки(Знач ИмяФайла)
|
||||
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
Текст.Закрыть();
|
||||
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||
|
||||
@ -73,9 +70,7 @@
|
||||
НовоеСодержимоеФайла = РегекспОчистка.Заменить(СодержимоеФайла, Символы.ПС);
|
||||
Если СтрСравнить(СодержимоеФайла, НовоеСодержимоеФайла) <> 0 Тогда
|
||||
|
||||
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
|
||||
ЗаписьТекста.Записать(НовоеСодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, НовоеСодержимоеФайла);
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
@ -14,9 +14,31 @@
|
||||
|
||||
ВызватьИсключение "Имя сценария не установлено";
|
||||
Возврат "ИмяСценария";
|
||||
|
||||
|
||||
КонецФункции // ИмяСценария()
|
||||
|
||||
// ПолучитьСтандартныеНастройкиСценария
|
||||
// Возвращает структуру настроек сценария
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Структура с настройками сценария
|
||||
// * ИмяСценария - Строка - Имя, с которым сохранятся настройки
|
||||
// * Настройка - Соответствие - настройки
|
||||
//
|
||||
Функция ПолучитьСтандартныеНастройкиСценария() Экспорт
|
||||
|
||||
ВызватьИсключение "Настройки отсутствуют";
|
||||
|
||||
НастройкиСценария = Новый Соответствие;
|
||||
НастройкиСценария.Вставить("ИспользоватьПоУмолчанию", Истина);
|
||||
НастройкиСценария.Вставить("Версия", "");
|
||||
НастройкиСценария.Вставить("КоличествоПопыток", 5);
|
||||
НастройкиСценария.Вставить("МассивПараметров", Новый Массив);
|
||||
|
||||
Возврат Новый Структура("ИмяСценария, Настройка", ИмяСценария(), НастройкиСценария);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ОбработатьФайл
|
||||
// Выполняет обработку файла
|
||||
//
|
||||
@ -27,8 +49,9 @@
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги / файлы которые необходимо добавить в индекс
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак выполненной обработки файла
|
||||
@ -38,7 +61,71 @@
|
||||
ВызватьИсключение "Обработка файла не реализована";
|
||||
Лог = ДополнительныеПараметры.Лог;
|
||||
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
Возврат ЛОЖЬ;
|
||||
|
||||
|
||||
// анализ файла без изменения его содержимого
|
||||
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
|
||||
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
ШаблоннаяОбработкаФайла(АнализируемыйФайл);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
// анализ файла с изменением его содержимого
|
||||
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
|
||||
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
Если ШаблоннаяОбработкаФайлаСИзменением(АнализируемыйФайл) Тогда
|
||||
|
||||
//Добавим измененный каталог или файл в индекс, чтобы он закоммитился с изменениями
|
||||
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
|
||||
|
||||
//Добавим измененный файл в журнал изменений без добавления в индекс, чтобы сценарии прошли снова
|
||||
ДополнительныеПараметры.ФайлыДляПостОбработки.Добавить(АнализируемыйФайл.ПолноеИмя);
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Процедура ШаблоннаяОбработкаФайла(ИмяФайла)
|
||||
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||
|
||||
Возврат;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если СодержимоеФайла = СодержимоеФайла Тогда
|
||||
|
||||
ВызватьИсключение "Содержимое файла равно содержимому файла";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ШаблоннаяОбработкаФайлаСИзменением(ИмяФайла)
|
||||
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||
|
||||
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла + "1");
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецФункции
|
12
tests/fixtures/BOM.bsl
vendored
Normal file
12
tests/fixtures/BOM.bsl
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
Процедура Имя ()
|
||||
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Имя1 ()
|
||||
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
12
tests/fixtures/NoBom.bsl
vendored
Normal file
12
tests/fixtures/NoBom.bsl
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
Процедура Имя ()
|
||||
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Имя1 ()
|
||||
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
62
tests/fixtures/localscenario/ДобавлениеHelloWorld.os
vendored
Normal file
62
tests/fixtures/localscenario/ДобавлениеHelloWorld.os
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Служебный модуль с реализацией сценариев обработки файлов <ИмяСценария>
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
Перем Лог;
|
||||
|
||||
// ИмяСценария
|
||||
// Возвращает имя сценария обработки файлов
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Имя текущего сценария обработки файлов
|
||||
//
|
||||
Функция ИмяСценария() Экспорт
|
||||
|
||||
Возврат "ПроверкаДублейПроцедурИФункций";
|
||||
|
||||
КонецФункции // ИмяСценария()
|
||||
|
||||
// ОбработатьФайл
|
||||
// Выполняет обработку файла
|
||||
//
|
||||
// Параметры:
|
||||
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
|
||||
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
|
||||
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
|
||||
// * Лог - Объект - Текущий лог
|
||||
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
|
||||
// и которые необходимо дообработать
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Признак выполненной обработки файла
|
||||
//
|
||||
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Лог = ДополнительныеПараметры.Лог;
|
||||
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
|
||||
|
||||
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
|
||||
|
||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||
|
||||
ДобавитьПриветМир(АнализируемыйФайл.ПолноеИмя);
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Процедура ДобавитьПриветМир(ПутьКФайлуМодуля)
|
||||
|
||||
Текст = Новый ЗаписьТекста();
|
||||
Текст.Открыть(ПутьКФайлуМодуля, КодировкаТекста.UTF8NoBOM);
|
||||
|
||||
ТекстМодуля = Текст.ЗаписатьСтроку("HelloWorld", Символы.ПС);
|
||||
Текст.Закрыть();
|
||||
|
||||
КонецПроцедуры
|
13
tests/fixtures/v8config.json
vendored
Normal file
13
tests/fixtures/v8config.json
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"Precommt4onecСценарии": {
|
||||
"ИспользоватьСценарииРепозитория": true,
|
||||
"КаталогЛокальныхСценариев": "localscenario",
|
||||
"ГлобальныеСценарии": [],
|
||||
"НастройкиСценариев": {
|
||||
"РазборОтчетовОбработокРасширений": {
|
||||
"ИспользоватьНастройкиПоУмолчанию": true,
|
||||
"ВерсияПлатформы": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
105
tests/fixtures/Документ.mdo
vendored
Normal file
105
tests/fixtures/Документ.mdo
vendored
Normal file
@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:Document xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="385df754-ca61-4a33-891e-85a76740ce8c">
|
||||
<producedTypes>
|
||||
<objectType typeId="dfd6d675-7224-48e1-9f73-27c877f4ebe7" valueTypeId="dc7923eb-814f-4270-94e4-b90e09ba69cc"/>
|
||||
<refType typeId="514db708-6540-4aac-9572-7bc815a489cd" valueTypeId="e83fcebe-b881-4ea1-ab4f-66ac8b6a9125"/>
|
||||
<selectionType typeId="cc0398a5-fb11-4964-a2cc-660199555a1a" valueTypeId="cccce58b-d552-4b60-b68b-6d67a46b1241"/>
|
||||
<listType typeId="f48dffcb-19af-4486-ac12-06c56992a664" valueTypeId="2504943b-5617-4e14-80a4-a5da48ad3ae8"/>
|
||||
<managerType typeId="5efb0435-af92-4b42-ae5a-411d9fb5250f" valueTypeId="3843301c-ad40-42c1-9e49-1b6bd6f90d32"/>
|
||||
</producedTypes>
|
||||
<name>Документ</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Документ</value>
|
||||
</synonym>
|
||||
<useStandardCommands>true</useStandardCommands>
|
||||
<inputByString>Document.Документ.StandardAttribute.Number</inputByString>
|
||||
<createOnInput>Use</createOnInput>
|
||||
<dataLockControlMode>Managed</dataLockControlMode>
|
||||
<fullTextSearch>Use</fullTextSearch>
|
||||
<numberType>String</numberType>
|
||||
<numberLength>9</numberLength>
|
||||
<numberAllowedLength>Variable</numberAllowedLength>
|
||||
<checkUnique>true</checkUnique>
|
||||
<autonumbering>true</autonumbering>
|
||||
<postInPrivilegedMode>true</postInPrivilegedMode>
|
||||
<unpostInPrivilegedMode>true</unpostInPrivilegedMode>
|
||||
<attributes uuid="01eea830-71a8-4902-b017-62a4d83a4740">
|
||||
<name>Реквизит</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Реквизит</value>
|
||||
</synonym>
|
||||
<type>
|
||||
<types>String</types>
|
||||
<stringQualifiers>
|
||||
<length>10</length>
|
||||
</stringQualifiers>
|
||||
</type>
|
||||
<fullTextSearch>Use</fullTextSearch>
|
||||
</attributes>
|
||||
<tabularSections uuid="2c6232da-69cb-4df3-8edb-266590e0b802">
|
||||
<producedTypes>
|
||||
<objectType typeId="09b7654a-ee86-421d-af11-ebf35b735f4a" valueTypeId="8550bec4-2626-4a90-9ba4-157e89f19e2d"/>
|
||||
<rowType typeId="692d5e88-96ff-4bc9-bb0d-3294edbbf1bc" valueTypeId="2ae0c435-e1ea-4b69-8cfc-9bb34e8db960"/>
|
||||
</producedTypes>
|
||||
<name>ТабличнаяЧасть</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Табличная часть</value>
|
||||
</synonym>
|
||||
<attributes uuid="1ebe77fa-0796-4dfe-b378-32e7bb78452c">
|
||||
<name>Реквизит</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Реквизит</value>
|
||||
</synonym>
|
||||
<type>
|
||||
<types>String</types>
|
||||
<stringQualifiers>
|
||||
<length>10</length>
|
||||
</stringQualifiers>
|
||||
</type>
|
||||
<fullTextSearch>Use</fullTextSearch>
|
||||
</attributes>
|
||||
<attributes uuid="adbb4501-d947-4486-a88d-6a02a30e5f98">
|
||||
<name>Реквизит1</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Реквизит1</value>
|
||||
</synonym>
|
||||
<type>
|
||||
<types>String</types>
|
||||
<stringQualifiers>
|
||||
<length>10</length>
|
||||
</stringQualifiers>
|
||||
</type>
|
||||
<fullTextSearch>Use</fullTextSearch>
|
||||
</attributes>
|
||||
</tabularSections>
|
||||
<tabularSections uuid="bb551f9f-818a-4572-b64d-9b1b34e714a6">
|
||||
<producedTypes>
|
||||
<objectType typeId="5e9118b2-a4a0-4748-9386-763b9731c2cf" valueTypeId="75025611-4968-4d40-84e2-748123f73818"/>
|
||||
<rowType typeId="1adafac5-71fd-45a0-9814-c5de37e5f917" valueTypeId="e37fc074-f327-4900-b612-6f0510e85636"/>
|
||||
</producedTypes>
|
||||
<name>ТабличнаяЧасть1</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Табличная часть1</value>
|
||||
</synonym>
|
||||
<attributes uuid="cabdb765-3400-4065-8c71-7c355202c9da">
|
||||
<name>Реквизит</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Реквизит</value>
|
||||
</synonym>
|
||||
<type>
|
||||
<types>String</types>
|
||||
<stringQualifiers>
|
||||
<length>10</length>
|
||||
</stringQualifiers>
|
||||
</type>
|
||||
<fullTextSearch>Use</fullTextSearch>
|
||||
</attributes>
|
||||
</tabularSections>
|
||||
</mdclass:Document>
|
376
tests/fixtures/Документ.xml
vendored
Normal file
376
tests/fixtures/Документ.xml
vendored
Normal file
@ -0,0 +1,376 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.7">
|
||||
<Document uuid="931ff8b9-d808-49bc-a47c-8e3f2faa223f">
|
||||
<InternalInfo>
|
||||
<xr:GeneratedType name="DocumentObject.Документ" category="Object">
|
||||
<xr:TypeId>0a63ee71-6357-4a50-b082-35f60b3be0e0</xr:TypeId>
|
||||
<xr:ValueId>10bc61a2-ef43-4627-9748-ae6089c9bde1</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
<xr:GeneratedType name="DocumentRef.Документ" category="Ref">
|
||||
<xr:TypeId>e1fe1cb5-e8cb-441e-b2e3-a72ee43a4038</xr:TypeId>
|
||||
<xr:ValueId>6e4dfc1f-8cc4-4fd9-9331-532a9b25b94a</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
<xr:GeneratedType name="DocumentSelection.Документ" category="Selection">
|
||||
<xr:TypeId>86597e09-2004-4fcc-9c8f-7b1e35aa1431</xr:TypeId>
|
||||
<xr:ValueId>0dc19544-4f64-4479-ad60-e06dda1298ee</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
<xr:GeneratedType name="DocumentList.Документ" category="List">
|
||||
<xr:TypeId>855d48d4-5dce-4629-9998-d7a693d9d8d2</xr:TypeId>
|
||||
<xr:ValueId>c74d8db3-5efd-4832-b863-6f8678445184</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
<xr:GeneratedType name="DocumentManager.Документ" category="Manager">
|
||||
<xr:TypeId>0cb5077c-9a73-4650-b93c-9d489b897d3b</xr:TypeId>
|
||||
<xr:ValueId>5d3b3e0c-fb2e-45a8-b528-d257f903e7bc</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
</InternalInfo>
|
||||
<Properties>
|
||||
<Name>Документ</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Документ</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment>Документ</Comment>
|
||||
<UseStandardCommands>true</UseStandardCommands>
|
||||
<Numerator/>
|
||||
<NumberType>String</NumberType>
|
||||
<NumberLength>10</NumberLength>
|
||||
<NumberAllowedLength>Fixed</NumberAllowedLength>
|
||||
<NumberPeriodicity>Year</NumberPeriodicity>
|
||||
<CheckUnique>true</CheckUnique>
|
||||
<Autonumbering>true</Autonumbering>
|
||||
<StandardAttributes>
|
||||
<xr:StandardAttribute name="Posted">
|
||||
<xr:LinkByType/>
|
||||
<xr:FillChecking>DontCheck</xr:FillChecking>
|
||||
<xr:MultiLine>false</xr:MultiLine>
|
||||
<xr:FillFromFillingValue>false</xr:FillFromFillingValue>
|
||||
<xr:CreateOnInput>Auto</xr:CreateOnInput>
|
||||
<xr:MaxValue xsi:nil="true"/>
|
||||
<xr:ToolTip/>
|
||||
<xr:ExtendedEdit>false</xr:ExtendedEdit>
|
||||
<xr:Format/>
|
||||
<xr:ChoiceForm/>
|
||||
<xr:QuickChoice>Auto</xr:QuickChoice>
|
||||
<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>
|
||||
<xr:EditFormat/>
|
||||
<xr:PasswordMode>false</xr:PasswordMode>
|
||||
<xr:DataHistory>Use</xr:DataHistory>
|
||||
<xr:MarkNegatives>false</xr:MarkNegatives>
|
||||
<xr:MinValue xsi:nil="true"/>
|
||||
<xr:Synonym/>
|
||||
<xr:Comment/>
|
||||
<xr:FullTextSearch>Use</xr:FullTextSearch>
|
||||
<xr:ChoiceParameterLinks/>
|
||||
<xr:FillValue xsi:nil="true"/>
|
||||
<xr:Mask/>
|
||||
<xr:ChoiceParameters/>
|
||||
</xr:StandardAttribute>
|
||||
<xr:StandardAttribute name="Ref">
|
||||
<xr:LinkByType/>
|
||||
<xr:FillChecking>DontCheck</xr:FillChecking>
|
||||
<xr:MultiLine>false</xr:MultiLine>
|
||||
<xr:FillFromFillingValue>false</xr:FillFromFillingValue>
|
||||
<xr:CreateOnInput>Auto</xr:CreateOnInput>
|
||||
<xr:MaxValue xsi:nil="true"/>
|
||||
<xr:ToolTip/>
|
||||
<xr:ExtendedEdit>false</xr:ExtendedEdit>
|
||||
<xr:Format/>
|
||||
<xr:ChoiceForm/>
|
||||
<xr:QuickChoice>Auto</xr:QuickChoice>
|
||||
<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>
|
||||
<xr:EditFormat/>
|
||||
<xr:PasswordMode>false</xr:PasswordMode>
|
||||
<xr:DataHistory>Use</xr:DataHistory>
|
||||
<xr:MarkNegatives>false</xr:MarkNegatives>
|
||||
<xr:MinValue xsi:nil="true"/>
|
||||
<xr:Synonym/>
|
||||
<xr:Comment/>
|
||||
<xr:FullTextSearch>Use</xr:FullTextSearch>
|
||||
<xr:ChoiceParameterLinks/>
|
||||
<xr:FillValue xsi:nil="true"/>
|
||||
<xr:Mask/>
|
||||
<xr:ChoiceParameters/>
|
||||
</xr:StandardAttribute>
|
||||
<xr:StandardAttribute name="DeletionMark">
|
||||
<xr:LinkByType/>
|
||||
<xr:FillChecking>DontCheck</xr:FillChecking>
|
||||
<xr:MultiLine>false</xr:MultiLine>
|
||||
<xr:FillFromFillingValue>false</xr:FillFromFillingValue>
|
||||
<xr:CreateOnInput>Auto</xr:CreateOnInput>
|
||||
<xr:MaxValue xsi:nil="true"/>
|
||||
<xr:ToolTip/>
|
||||
<xr:ExtendedEdit>false</xr:ExtendedEdit>
|
||||
<xr:Format/>
|
||||
<xr:ChoiceForm/>
|
||||
<xr:QuickChoice>Auto</xr:QuickChoice>
|
||||
<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>
|
||||
<xr:EditFormat/>
|
||||
<xr:PasswordMode>false</xr:PasswordMode>
|
||||
<xr:DataHistory>Use</xr:DataHistory>
|
||||
<xr:MarkNegatives>false</xr:MarkNegatives>
|
||||
<xr:MinValue xsi:nil="true"/>
|
||||
<xr:Synonym/>
|
||||
<xr:Comment/>
|
||||
<xr:FullTextSearch>Use</xr:FullTextSearch>
|
||||
<xr:ChoiceParameterLinks/>
|
||||
<xr:FillValue xsi:nil="true"/>
|
||||
<xr:Mask/>
|
||||
<xr:ChoiceParameters/>
|
||||
</xr:StandardAttribute>
|
||||
<xr:StandardAttribute name="Date">
|
||||
<xr:LinkByType/>
|
||||
<xr:FillChecking>ShowError</xr:FillChecking>
|
||||
<xr:MultiLine>false</xr:MultiLine>
|
||||
<xr:FillFromFillingValue>false</xr:FillFromFillingValue>
|
||||
<xr:CreateOnInput>Auto</xr:CreateOnInput>
|
||||
<xr:MaxValue xsi:nil="true"/>
|
||||
<xr:ToolTip/>
|
||||
<xr:ExtendedEdit>false</xr:ExtendedEdit>
|
||||
<xr:Format/>
|
||||
<xr:ChoiceForm/>
|
||||
<xr:QuickChoice>Auto</xr:QuickChoice>
|
||||
<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>
|
||||
<xr:EditFormat/>
|
||||
<xr:PasswordMode>false</xr:PasswordMode>
|
||||
<xr:DataHistory>Use</xr:DataHistory>
|
||||
<xr:MarkNegatives>false</xr:MarkNegatives>
|
||||
<xr:MinValue xsi:nil="true"/>
|
||||
<xr:Synonym/>
|
||||
<xr:Comment/>
|
||||
<xr:FullTextSearch>Use</xr:FullTextSearch>
|
||||
<xr:ChoiceParameterLinks/>
|
||||
<xr:FillValue xsi:nil="true"/>
|
||||
<xr:Mask/>
|
||||
<xr:ChoiceParameters/>
|
||||
</xr:StandardAttribute>
|
||||
<xr:StandardAttribute name="Number">
|
||||
<xr:LinkByType/>
|
||||
<xr:FillChecking>DontCheck</xr:FillChecking>
|
||||
<xr:MultiLine>false</xr:MultiLine>
|
||||
<xr:FillFromFillingValue>false</xr:FillFromFillingValue>
|
||||
<xr:CreateOnInput>Auto</xr:CreateOnInput>
|
||||
<xr:MaxValue xsi:nil="true"/>
|
||||
<xr:ToolTip/>
|
||||
<xr:ExtendedEdit>false</xr:ExtendedEdit>
|
||||
<xr:Format/>
|
||||
<xr:ChoiceForm/>
|
||||
<xr:QuickChoice>Auto</xr:QuickChoice>
|
||||
<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>
|
||||
<xr:EditFormat/>
|
||||
<xr:PasswordMode>false</xr:PasswordMode>
|
||||
<xr:DataHistory>Use</xr:DataHistory>
|
||||
<xr:MarkNegatives>false</xr:MarkNegatives>
|
||||
<xr:MinValue xsi:nil="true"/>
|
||||
<xr:Synonym/>
|
||||
<xr:Comment/>
|
||||
<xr:FullTextSearch>Use</xr:FullTextSearch>
|
||||
<xr:ChoiceParameterLinks/>
|
||||
<xr:FillValue xsi:type="xs:string"> </xr:FillValue>
|
||||
<xr:Mask/>
|
||||
<xr:ChoiceParameters/>
|
||||
</xr:StandardAttribute>
|
||||
</StandardAttributes>
|
||||
<Characteristics/>
|
||||
<BasedOn>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">Document.ВводНачальныхОстатков</xr:Item>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">Document.РКО</xr:Item>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">Document.ПКО</xr:Item>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">Document.АвансовыйОтчет</xr:Item>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">Document.ВозмещениеШтрафы</xr:Item>
|
||||
</BasedOn>
|
||||
<InputByString>
|
||||
<xr:Field>Document.РКО.StandardAttribute.Number</xr:Field>
|
||||
</InputByString>
|
||||
<CreateOnInput>Use</CreateOnInput>
|
||||
<SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString>
|
||||
<FullTextSearchOnInputByString>Use</FullTextSearchOnInputByString>
|
||||
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
|
||||
<DefaultObjectForm>Document.РКО.Form.ФормаДокумента</DefaultObjectForm>
|
||||
<DefaultListForm>Document.РКО.Form.ФормаСписка</DefaultListForm>
|
||||
<DefaultChoiceForm>Document.РКО.Form.ФормаСписка</DefaultChoiceForm>
|
||||
<AuxiliaryObjectForm/>
|
||||
<AuxiliaryListForm/>
|
||||
<AuxiliaryChoiceForm/>
|
||||
<Posting>Allow</Posting>
|
||||
<RealTimePosting>Deny</RealTimePosting>
|
||||
<RegisterRecordsDeletion>AutoDeleteOff</RegisterRecordsDeletion>
|
||||
<RegisterRecordsWritingOnPost>WriteModified</RegisterRecordsWritingOnPost>
|
||||
<SequenceFilling>AutoFill</SequenceFilling>
|
||||
<RegisterRecords></RegisterRecords>
|
||||
<PostInPrivilegedMode>false</PostInPrivilegedMode>
|
||||
<UnpostInPrivilegedMode>false</UnpostInPrivilegedMode>
|
||||
<IncludeHelpInContents>true</IncludeHelpInContents>
|
||||
<DataLockFields/>
|
||||
<DataLockControlMode>Automatic</DataLockControlMode>
|
||||
<FullTextSearch>Use</FullTextSearch>
|
||||
<ObjectPresentation/>
|
||||
<ExtendedObjectPresentation/>
|
||||
<ListPresentation/>
|
||||
<ExtendedListPresentation/>
|
||||
<Explanation/>
|
||||
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||
<DataHistory>DontUse</DataHistory>
|
||||
</Properties>
|
||||
<ChildObjects>
|
||||
<Attribute uuid="8fa5eded-c1ec-4edc-b0fe-dc673c7486c7">
|
||||
<Properties>
|
||||
<Name>UID</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>UID</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<Type>
|
||||
<v8:Type>xs:string</v8:Type>
|
||||
<v8:StringQualifiers>
|
||||
<v8:Length>36</v8:Length>
|
||||
<v8:AllowedLength>Variable</v8:AllowedLength>
|
||||
</v8:StringQualifiers>
|
||||
</Type>
|
||||
<PasswordMode>false</PasswordMode>
|
||||
<Format/>
|
||||
<EditFormat/>
|
||||
<ToolTip/>
|
||||
<MarkNegatives>false</MarkNegatives>
|
||||
<Mask/>
|
||||
<MultiLine>false</MultiLine>
|
||||
<ExtendedEdit>false</ExtendedEdit>
|
||||
<MinValue xsi:nil="true"/>
|
||||
<MaxValue xsi:nil="true"/>
|
||||
<FillFromFillingValue>false</FillFromFillingValue>
|
||||
<FillValue xsi:nil="true"/>
|
||||
<FillChecking>DontCheck</FillChecking>
|
||||
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||
<ChoiceParameterLinks/>
|
||||
<ChoiceParameters/>
|
||||
<QuickChoice>Auto</QuickChoice>
|
||||
<CreateOnInput>Auto</CreateOnInput>
|
||||
<ChoiceForm/>
|
||||
<LinkByType/>
|
||||
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||
<Indexing>Index</Indexing>
|
||||
<FullTextSearch>Use</FullTextSearch>
|
||||
<DataHistory>Use</DataHistory>
|
||||
</Properties>
|
||||
</Attribute>
|
||||
<Attribute uuid="d39a6a5c-73a0-4df9-a3b1-b62fb0c2041a">
|
||||
<Properties>
|
||||
<Name>Автор</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Автор</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<Type>
|
||||
<v8:Type>cfg:CatalogRef.Пользователи</v8:Type>
|
||||
</Type>
|
||||
<PasswordMode>false</PasswordMode>
|
||||
<Format/>
|
||||
<EditFormat/>
|
||||
<ToolTip/>
|
||||
<MarkNegatives>false</MarkNegatives>
|
||||
<Mask/>
|
||||
<MultiLine>false</MultiLine>
|
||||
<ExtendedEdit>false</ExtendedEdit>
|
||||
<MinValue xsi:nil="true"/>
|
||||
<MaxValue xsi:nil="true"/>
|
||||
<FillFromFillingValue>false</FillFromFillingValue>
|
||||
<FillValue xsi:nil="true"/>
|
||||
<FillChecking>DontCheck</FillChecking>
|
||||
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||
<ChoiceParameterLinks/>
|
||||
<ChoiceParameters/>
|
||||
<QuickChoice>Auto</QuickChoice>
|
||||
<CreateOnInput>Auto</CreateOnInput>
|
||||
<ChoiceForm/>
|
||||
<LinkByType/>
|
||||
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||
<Indexing>Index</Indexing>
|
||||
<FullTextSearch>DontUse</FullTextSearch>
|
||||
<DataHistory>Use</DataHistory>
|
||||
</Properties>
|
||||
</Attribute>
|
||||
<Form>ФормаДокумента</Form>
|
||||
<Form>ФормаСписка</Form>
|
||||
<TabularSection uuid="95245065-867e-4d1f-a8f9-ebed62cd0489">
|
||||
<InternalInfo>
|
||||
<xr:GeneratedType name="DocumentTabularSection.РКО.ТабличнаяЧасть1" category="TabularSection">
|
||||
<xr:TypeId>80865b81-ba79-4e7f-bbb6-c9817e08f4dd</xr:TypeId>
|
||||
<xr:ValueId>3608b01d-e050-453f-ae0a-93e3eea243c3</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
<xr:GeneratedType name="DocumentTabularSectionRow.РКО.ТабличнаяЧасть1" category="TabularSectionRow">
|
||||
<xr:TypeId>7720174e-1f6c-4639-98d8-9a488f6488a5</xr:TypeId>
|
||||
<xr:ValueId>73fe98f8-8875-49ef-ac49-37806daf575b</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
</InternalInfo>
|
||||
<Properties>
|
||||
<Name>ТабличнаяЧасть1</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>ТабличнаяЧасть1</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment>ТабличнаяЧасть1</Comment>
|
||||
<ToolTip/>
|
||||
<FillChecking>DontCheck</FillChecking>
|
||||
</Properties>
|
||||
<ChildObjects>
|
||||
<Attribute uuid="b04234e4-d0ca-4a9c-9735-794e9e798f7c">
|
||||
<Properties>
|
||||
<Name>Субконто</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Субконто</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<Type>
|
||||
<v8:Type>cfg:CatalogRef.ВидыОпераций</v8:Type>
|
||||
<v8:Type>cfg:CatalogRef.Сотрудники</v8:Type>
|
||||
<v8:Type>cfg:CatalogRef.СтатьиЗатрат</v8:Type>
|
||||
<v8:Type>cfg:CatalogRef.Пользователи</v8:Type>
|
||||
<v8:Type>cfg:CatalogRef.Контрагенты</v8:Type>
|
||||
<v8:Type>cfg:CatalogRef.ЕдиницыИзмерения</v8:Type>
|
||||
<v8:Type>cfg:CatalogRef.БанковскиеСчета</v8:Type>
|
||||
<v8:Type>cfg:CatalogRef.Номенклатура</v8:Type>
|
||||
<v8:Type>cfg:CatalogRef.Кассы</v8:Type>
|
||||
<v8:Type>cfg:CatalogRef.Машины</v8:Type>
|
||||
<v8:Type>cfg:CatalogRef.Подразделения</v8:Type>
|
||||
</Type>
|
||||
<PasswordMode>false</PasswordMode>
|
||||
<Format/>
|
||||
<EditFormat/>
|
||||
<ToolTip/>
|
||||
<MarkNegatives>false</MarkNegatives>
|
||||
<Mask/>
|
||||
<MultiLine>false</MultiLine>
|
||||
<ExtendedEdit>false</ExtendedEdit>
|
||||
<MinValue xsi:nil="true"/>
|
||||
<MaxValue xsi:nil="true"/>
|
||||
<FillChecking>DontCheck</FillChecking>
|
||||
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||
<ChoiceParameterLinks/>
|
||||
<ChoiceParameters/>
|
||||
<QuickChoice>Auto</QuickChoice>
|
||||
<CreateOnInput>Auto</CreateOnInput>
|
||||
<ChoiceForm/>
|
||||
<LinkByType/>
|
||||
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||
<Indexing>Index</Indexing>
|
||||
<FullTextSearch>Use</FullTextSearch>
|
||||
<DataHistory>Use</DataHistory>
|
||||
</Properties>
|
||||
</Attribute>
|
||||
</ChildObjects>
|
||||
</TabularSection>
|
||||
</ChildObjects>
|
||||
</Document>
|
||||
</MetaDataObject>
|
34
tests/fixtures/ПроверкаДублейПроцедурНегативныйТест.bsl
vendored
Normal file
34
tests/fixtures/ПроверкаДублейПроцедурНегативныйТест.bsl
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
Процедура Проц() Экспорт
|
||||
КонецПроцедуры
|
||||
|
||||
//ПРоцедура Проц()
|
||||
Функция Проц() Экспорт
|
||||
КонецПроцедуры // Процедура проц()
|
||||
|
||||
Процедура УпроститьLevel() Экспорт
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура level_Forma1t() Экспорт
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Проц1_() Экспорт
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура _Проц12() Экспорт
|
||||
КонецПроцедуры
|
||||
|
||||
пРоцедура проц2 (парам1)
|
||||
КонецПроцедуры;
|
||||
|
||||
Функция функё1() Экспорт
|
||||
КонецФункции
|
||||
|
||||
Процедура ПРоц3()
|
||||
КонецПроцедуры
|
||||
|
||||
Функция Функ1()
|
||||
КонецФункции
|
||||
|
||||
Функция _Функ1()
|
||||
КонецФункции
|
||||
|
30
tests/fixtures/ПроверкаДублейПроцедурПоложительныйТест.bsl
vendored
Normal file
30
tests/fixtures/ПроверкаДублейПроцедурПоложительныйТест.bsl
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
Процедура Проц() Экспорт
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УпроститьLevel() Экспорт
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура level_Forma1t() Экспорт
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Проц1_() Экспорт
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура _Проц12() Экспорт
|
||||
КонецПроцедуры
|
||||
|
||||
пРоцедура проц2 (парам1)
|
||||
КонецПроцедуры;
|
||||
|
||||
Функция функё1() Экспорт
|
||||
КонецФункции
|
||||
|
||||
Процедура ПРоц3()
|
||||
КонецПроцедуры
|
||||
|
||||
Функция Функ1()
|
||||
КонецФункции
|
||||
|
||||
Функция _Функ1()
|
||||
КонецФункции
|
||||
|
16
tests/fixtures/ПроверкаДублейПроцедурСПараметрами.bsl
vendored
Normal file
16
tests/fixtures/ПроверкаДублейПроцедурСПараметрами.bsl
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
Процедура РадномныеВычисления (парам1)
|
||||
КонецПроцедуры;
|
||||
|
||||
Функция РадномныеВычисления() Экспорт
|
||||
КонецФункции
|
||||
|
||||
Процедура Изменить(Парам1, Парам2)
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Изменить(Парам 1 = Неопределено)
|
||||
КонецФункции
|
||||
|
||||
Функция _Функ1()
|
||||
КонецФункции
|
||||
|
191
tests/ПроверкаСцераниевОбработки.os
Normal file
191
tests/ПроверкаСцераниевОбработки.os
Normal file
@ -0,0 +1,191 @@
|
||||
#Использовать asserts
|
||||
#Использовать logos
|
||||
#Использовать tempfiles
|
||||
|
||||
Перем юТест;
|
||||
Перем Лог;
|
||||
Перем МенеджерВременныхФайлов;
|
||||
|
||||
// Основная точка входа
|
||||
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
|
||||
|
||||
юТест = ЮнитТестирование;
|
||||
|
||||
ВсеТесты = Новый Массив;
|
||||
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки");
|
||||
|
||||
Возврат ВсеТесты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ПередЗапускомТеста() Экспорт
|
||||
|
||||
ВремТестер = Новый Тестер;
|
||||
Лог = Логирование.ПолучитьЛог(ВремТестер.ИмяЛога());
|
||||
|
||||
ВключитьПоказОтладки();
|
||||
|
||||
МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеЗапускаТеста() Экспорт
|
||||
|
||||
МенеджерВременныхФайлов.Удалить();
|
||||
МенеджерВременныхФайлов = Неопределено;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек() Экспорт
|
||||
|
||||
ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os");
|
||||
|
||||
СценарийИмеетМетод(ОбъектСценария, НазваниеМетодаНастроек());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек() Экспорт
|
||||
|
||||
ОбъектСценария = ПолучитьСценарий("РазборОтчетовОбработокРасширений.os");
|
||||
|
||||
СценарийИмеетМетод(ОбъектСценария, НазваниеМетодаНастроек());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки() Экспорт
|
||||
|
||||
ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os");
|
||||
|
||||
СценарийВозвращаетНастройки(ОбъектСценария, "ОтключениеПолнотекстовогоПоиска");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки() Экспорт
|
||||
|
||||
ОбъектСценария = ПолучитьСценарий("РазборОтчетовОбработокРасширений.os");
|
||||
|
||||
СценарийВозвращаетНастройки(ОбъектСценария, "РазборОтчетовОбработокРасширений");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение() Экспорт
|
||||
|
||||
ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
|
||||
Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурНегативныйТест.bsl"));
|
||||
СПараметрами = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурСПараметрами.bsl"));
|
||||
|
||||
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "обнаружены неуникальные имена методов");
|
||||
ВызываетсяИсключениеСТекстом(ОбъектСценария, СПараметрами, "обнаружены неуникальные имена методов");
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл() Экспорт
|
||||
|
||||
Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурПоложительныйТест.bsl"));
|
||||
ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
|
||||
|
||||
Ожидаем.Что(Результат, Истина).ЭтоИстина();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл() Экспорт
|
||||
|
||||
Файл = Новый Файл(ПолучитьИмяВременногоФайла("bsl"));
|
||||
ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
|
||||
|
||||
Ожидаем.Что(Результат, Истина).ЭтоЛожь();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник() Экспорт
|
||||
|
||||
Файл = Новый Файл(МенеджерВременныхФайлов.СоздатьФайл("xml"));
|
||||
ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
|
||||
|
||||
Ожидаем.Что(Результат, Истина).ЭтоЛожь();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, ТекстИсключения)
|
||||
|
||||
ДополнительныеНастройки = ПолучитьДополнительныеНастройки();
|
||||
ПараметрыМетода = Новый Массив;
|
||||
|
||||
ПараметрыМетода.Добавить(Файл);
|
||||
ПараметрыМетода.Добавить(Файл.Путь);
|
||||
ПараметрыМетода.Добавить(ДополнительныеНастройки);
|
||||
|
||||
Ожидаем.Что(ОбъектСценария).Метод("ОбработатьФайл", ПараметрыМетода).ВыбрасываетИсключение(ТекстИсключения);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СценарийИмеетМетод(ОбъектСценария, ИмяМетода)
|
||||
|
||||
Рефлектор = Новый Рефлектор;
|
||||
ЕстьМетод = Рефлектор.МетодСуществует(ОбъектСценария, ИмяМетода);
|
||||
|
||||
Ожидаем.Что(ЕстьМетод, Истина).ЭтоИстина();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПолучитьСценарий(ИмяСценария)
|
||||
|
||||
Сценарий = ОбъединитьПути(КаталогИсходников(), "src", "СценарииОбработки", ИмяСценария);
|
||||
ОбъектСценария = ЗагрузитьСценарий(Сценарий);
|
||||
|
||||
Возврат ОбъектСценария;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура СценарийВозвращаетНастройки(ОбъектСценария, ИмяНастройки)
|
||||
|
||||
Рефлектор = Новый Рефлектор;
|
||||
СтруктураНастроек = Рефлектор.ВызватьМетод(ОбъектСценария, НазваниеМетодаНастроек());
|
||||
|
||||
Утверждения.ПроверитьРавенство(СтруктураНастроек.ИмяСценария, ИмяНастройки);
|
||||
Утверждения.ПроверитьРавенство(ТипЗнч(СтруктураНастроек.Настройка), Тип("Соответствие"));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВключитьПоказОтладки()
|
||||
Лог.УстановитьУровень(УровниЛога.Отладка);
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВыключитьПоказОтладки()
|
||||
Лог.УстановитьУровень(УровниЛога.Информация);
|
||||
КонецПроцедуры
|
||||
|
||||
Функция КаталогТестовыхФикстур()
|
||||
Возврат ОбъединитьПути(КаталогИсходников(), "tests\fixtures");
|
||||
КонецФункции
|
||||
|
||||
Функция КаталогИсходников()
|
||||
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..");
|
||||
КонецФункции
|
||||
|
||||
Функция НазваниеМетодаНастроек()
|
||||
|
||||
Возврат "ПолучитьСтандартныеНастройкиСценария";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьДополнительныеНастройки()
|
||||
|
||||
УправлениеНастройками = Новый НастройкиРепозитория(ТекущийКаталог());
|
||||
ДополнительныеНастройки = Новый Структура("Лог, УправлениеНастройками", Лог, УправлениеНастройками);
|
||||
|
||||
Возврат ДополнительныеНастройки;
|
||||
|
||||
КонецФункции
|
77
tests/ТестФайловыеОперации.os
Normal file
77
tests/ТестФайловыеОперации.os
Normal file
@ -0,0 +1,77 @@
|
||||
#Использовать asserts
|
||||
#Использовать logos
|
||||
#Использовать tempfiles
|
||||
#Использовать "../src"
|
||||
|
||||
Перем юТест;
|
||||
Перем Лог;
|
||||
Перем МенеджерВременныхФайлов;
|
||||
|
||||
// Основная точка входа
|
||||
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
|
||||
|
||||
юТест = ЮнитТестирование;
|
||||
|
||||
ВсеТесты = Новый Массив;
|
||||
|
||||
ВсеТесты.Добавить("ТестДолжен_ПрочитатьФайл");
|
||||
ВсеТесты.Добавить("ТестДолжен_ЗаписатьФайл");
|
||||
|
||||
Возврат ВсеТесты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ТестДолжен_ПрочитатьФайл() Экспорт
|
||||
|
||||
ПутьКФайлу = ОбъединитьПути(КаталогТестовыхФикстур(), "NoBom.bsl");
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлу);
|
||||
|
||||
Утверждения.ПроверитьЗаполненность(СодержимоеФайла);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ЗаписатьФайл() Экспорт
|
||||
|
||||
Файл = Новый Файл(МенеджерВременныхФайлов.СоздатьФайл("bsl"));
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(Файл.ПолноеИмя, Файл.ПолноеИмя);
|
||||
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
|
||||
|
||||
Утверждения.ПроверитьРавенство(СодержимоеФайла, Файл.ПолноеИмя);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередЗапускомТеста() Экспорт
|
||||
|
||||
ВремТестер = Новый Тестер;
|
||||
Лог = Логирование.ПолучитьЛог(ВремТестер.ИмяЛога());
|
||||
|
||||
ВключитьПоказОтладки();
|
||||
|
||||
МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеЗапускаТеста() Экспорт
|
||||
|
||||
МенеджерВременныхФайлов.Удалить();
|
||||
МенеджерВременныхФайлов = Неопределено;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
Процедура ВключитьПоказОтладки()
|
||||
Лог.УстановитьУровень(УровниЛога.Отладка);
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВыключитьПоказОтладки()
|
||||
Лог.УстановитьУровень(УровниЛога.Информация);
|
||||
КонецПроцедуры
|
||||
|
||||
Функция КаталогТестовыхФикстур()
|
||||
Возврат ОбъединитьПути(КаталогИсходников(), "tests\fixtures");
|
||||
КонецФункции
|
||||
|
||||
Функция КаталогИсходников()
|
||||
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..");
|
||||
КонецФункции
|
@ -6,6 +6,8 @@
|
||||
"ДобавлениеПробеловПередКлючевымиСловами.os",
|
||||
"ЗапретИспользованияПерейти.os",
|
||||
"КорректировкаXMLФорм.os",
|
||||
"ОтключениеПолнотекстовогоПоиска.os",
|
||||
"ПроверкаДублейПроцедурИФункций.os",
|
||||
"ПроверкаКорректностиОбластей.os",
|
||||
"РазборОбычныхФормНаИсходники.os",
|
||||
"РазборОтчетовОбработокРасширений.os",
|
||||
@ -16,6 +18,14 @@
|
||||
"УдалениеЛишнихПустыхСтрок.os"
|
||||
],
|
||||
"НастройкиСценариев": {
|
||||
"ОтключениеПолнотекстовогоПоиска": {
|
||||
"МетаданныеДляИсключения": {
|
||||
"src\\_example.xml": [
|
||||
"Номер"
|
||||
],
|
||||
"src\\_example2.xml": []
|
||||
}
|
||||
},
|
||||
"РазборОтчетовОбработокРасширений": {
|
||||
"ИспользоватьНастройкиПоУмолчанию": true,
|
||||
"ВерсияПлатформы": ""
|
||||
|
Loading…
x
Reference in New Issue
Block a user