1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2024-12-28 21:09:06 +02:00

Merge branch 'feature/ORAIS-1429' into 'develop'

ORAIS-1429: Запуск прекоммита для списка файлов.

Closes ORAIS-1429

See merge request orais/precommit1C-fork-bia!73
This commit is contained in:
Максимов Валерий Валерьевич (000044217) 2024-11-26 06:47:30 +03:00
commit 9ce9c387b3
32 changed files with 375 additions and 183 deletions

View File

@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2014-2023 BIA-Technologies Limited Liability Company
// Copyright 2014-2024 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -14,4 +14,4 @@
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//
//©///////////////////////////////////////////////////////////////////////////©//

View File

@ -109,6 +109,10 @@ precommit4onec может читать настройки своей работ
}
```
## Принудительное выполнение для группы файлов
Команда `exec-rules` предназначена для запуска выбранных сценариев в указанном репозитории. [См. подробнее](/docs/КомандаВыполнитьСценарии.md)
## Расширение функциональности
Для создания нового сценария обработки файлов необходимо воспользоваться шаблоном, находящимся в каталоге `СценарииОбработки` скрипта.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@ -0,0 +1,48 @@
# Команда `exec-rules`
Команда предназначена для принудительного выполнения указанных сценариев в выбранном репозитории.
### Параметры команды
```
exec-rules -source-dir <Каталоги исходных файлов> -rules <Применяемые сценарии> -cfg-file <Файл настроек> <КаталогРепозитория> <Коммит1> <Коммит2>
```
Описание параметров:
- КаталогРепозитория - обязательный параметр, должен содержать абсолютный или относительный путь к каталогу репозитория, для файлов которого будут выполняться сценарии прекоммита;
- Коммит1, Коммит2 - необязательные параметры, если указаны, сценарии будут выполнены не для всех исходных файлов, а только для тех, которые были изменены между двумя коммитами. В качестве значения следует передавать хэш коммита. Если указано два хэша, будут составлен список измененных файлов между ними, если один, то он должен иметь двух родителей (как в случае коммита при merge-реквесте), иначе будет вызвано исключение;
- Каталоги исходных файлов - необязательный параметр, поддерживает перечисление через запятую относительных путей к каталогам внутри каталога репозитория, в которых расположены исходные файлы, для которых будут выполнять сценарии прекоммита. Значение по-умолчанию - "src";
- Применяемые сценарии - необязательный параметр, содержащий список сценариев, перечисленных через запятую, выполняемый для обрабатываемых файлов. Если не указан, выполняются все сценарии прекоммита;
- Файл настроек - необязательный параметр, путь к файлу настроек прекоммита. Если не указан, используется файл `v8config.json` репозитория или глобальные настройки, если файл в репозитории отсутствует.
### Примеры
1. Команда:
```shell
precommit4onec exec-rules "C:\МойРепозиторий" -source-dir "ПапкаИсходныхФайловSrc" -rules "ВставкаКопирайтов,ПроверкаНецензурныхСлов"
```
Для всех файлов в каталоге `C:\МойРепозиторий\ПапкаИсходныхФайловSrc` будут выполнены сценарии: `ВставкаКопирайтов`, `ПроверкаНецензурныхСлов`.
2. Команда:
```shell
precommit4onec exec-rules "C:\МойРепозиторий" 454474a414494f4b77c484939173e1d44678c96a 937f5cf1ebdda2eaadb1aa169cf066583f2763db
```
Для файлов в каталоге `C:\МойРепозиторий\src`, измененных между указанными коммитами, будут выполнены все сценарии прекоммита. Если файлы находятся вне каталога `src`, они будут проигнорированы.
### Вызов команды в Git Extensions
Возможности [Git Extension](https://gitextensions.github.io/) позволяют подключать пользовательские скрипты для работы с данными. Например, следующая настройка в разделе `Git Extensions\Scripts`:
![Settings](img/GitExtensions_Settings.png)
позволяет добавить на командную панель кнопку запуска прекоммита для выбранных в дереве коммитов:
![Button](img/GitExtensions_Interface.png)
В настройках указывается:
- Command - путь к скрипту запуска прекоммита;
- Arguments - параметры запуска по шаблону, описанному выше. Вместо `{sHashes}` Git Extensions подставит разделенные пробелом хэши выделенных в дереве коммитов.

View File

@ -6,9 +6,9 @@ Cнимает флаг `РазрешеноИзменятьФорму` в опи
При выполнении команды `exec-rules` не выполняется по умолчанию. Для выполнения этого сценария необходимо явно указать его при запуске команды в параметре `rules`
```bash
precommit4onec exec-rules C:\МойЛучшийРепозиторий -source-dir МойЛучшийИсходныйКод\НоваяПапка4 -rules ОтключениеРазрешенияИзменятьФорму
precommit4onec exec-rules C:\МойЛучшийРепозиторий -source-dir МойЛучшийИсходныйКод\ПапкаИсходныхФайловSrc -rules ОтключениеРазрешенияИзменятьФорму
```
```bash
precommit4onec exec-rules C:\МойЛучшийРепозиторий -source-dir МойЛучшийИсходныйКод\НоваяПапка4 -rules "ОтключениеРазрешенияИзменятьФорму,ПроверкаНецензурныхСлов"
precommit4onec exec-rules C:\МойЛучшийРепозиторий -source-dir МойЛучшийИсходныйКод\ПапкаИсходныхФайловSrc -rules "ОтключениеРазрешенияИзменятьФорму,ПроверкаНецензурныхСлов"
```

View File

@ -367,10 +367,10 @@
Если СвободныеИдентификаторы.Количество() > 0 Тогда
СвободныйИдентификатор = СвободныеИдентификаторы[0];
СвободныеИдентификаторы.Удалить(0);
Возврат СвободныйИдентификатор;
Возврат СвободныйИдентификатор;
Иначе
ПоследнийИдентификатор = ПоследнийИдентификатор + 1;
Возврат ПоследнийИдентификатор;
Возврат ПоследнийИдентификатор;
КонецЕсли;
КонецФункции

View File

@ -18,8 +18,14 @@
// Добавление параметров команды
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРепозитория",
"Каталог анализируемого репозитория");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Коммит1",
"Идентификатор коммита. Если указан, анализируются только файлы, измененные коммитом.
| Если это merge-request, то изменения между двумя родительскими коммитами.");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Коммит2",
"Идентификатор коммита. Если указан, то анализируются только файлы, которые отличаются
| между двумя указанными коммитами.");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-source-dir",
"Каталог расположения исходных файлов относительно корня репозитория.
"Каталог расположения исходных файлов относительно корня репозитория.
| Если сценариев несколько, указываются в кавычках через , . По умолчанию <src>");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-rules",
"Перечень правил для применения. Если сценариев несколько, указываются в кавычках через ,");
@ -35,67 +41,21 @@
// Приложение - Модуль - Модуль менеджера приложения
//
Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач Приложение) Экспорт
Лог = Приложение.ПолучитьЛог();
НастройкиИБ = Приложение.ПолучитьНастройкиИБ();
КаталогРепозитория = ПараметрыКоманды["КаталогРепозитория"];
ФайлКаталогРепозитория = Новый Файл(КаталогРепозитория);
КаталогРепозитория = ФайлКаталогРепозитория.ПолноеИмя;
Если НЕ ФайлКаталогРепозитория.Существует() ИЛИ ФайлКаталогРепозитория.ЭтоФайл() Тогда
Лог.Ошибка("Каталог репозитория '%1' не существует или это файл", КаталогРепозитория);
Возврат Приложение.РезультатыКоманд().НеверныеПараметры;
КонецЕсли;
АдресПоискаКонфигурационногоФайла = ПараметрыКоманды["-cfg-file"];
Если Не ЗначениеЗаполнено(АдресПоискаКонфигурационногоФайла) Тогда
АдресПоискаКонфигурационногоФайла = КаталогРепозитория;
КонецЕсли;
ПараметрКаталогиИсходныхФайлов = ПараметрыКоманды["-source-dir"];
Если Не ЗначениеЗаполнено(ПараметрКаталогиИсходныхФайлов) Тогда
ПараметрКаталогиИсходныхФайлов = "src";
КонецЕсли;
КаталогиИсходныхФайлов = СтрРазделить(ПараметрКаталогиИсходныхФайлов, ",", Ложь);
ОбрабатываемыеФайлы = Новый Массив();
КаталогиИсходныхПоФайлам = Новый Соответствие();
Для Каждого КаталогИсходныхФайлов Из КаталогиИсходныхФайлов Цикл
ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, СокрЛП(КаталогИсходныхФайлов));
ФайлТекущийКаталогИсходныхФайлов = Новый Файл(ТекущийКаталогИсходныхФайлов);
ТекущийКаталогИсходныхФайлов = ФайлТекущийКаталогИсходныхФайлов.ПолноеИмя;
Если Не ФайлТекущийКаталогИсходныхФайлов.Существует() Тогда
Лог.Ошибка("Каталога <%1> не существует", ТекущийКаталогИсходныхФайлов);
КонецЕсли;
ОбрабатываемыеФайлыКаталога = НайтиФайлы(ТекущийКаталогИсходныхФайлов, ПолучитьМаскуВсеФайлы(), Истина);
Для Каждого ОбрабатываемыйФайлКаталога Из ОбрабатываемыеФайлыКаталога Цикл
ОбрабатываемыеФайлы.Добавить(ОбрабатываемыйФайлКаталога);
КаталогиИсходныхПоФайлам.Вставить(ОбрабатываемыйФайлКаталога.ПолноеИмя, ТекущийКаталогИсходныхФайлов);
КонецЦикла;
КонецЦикла;
ИменаЗагружаемыхСценариев = Неопределено;
ПараметрИменаЗагружаемыхСценариев = ПараметрыКоманды["-rules"];
ЗатребованныеСценарии = Новый Массив;
Если ЗначениеЗаполнено(ПараметрИменаЗагружаемыхСценариев) Тогда
ПараметрИменаЗагружаемыхСценариев = СтрЗаменить(ПараметрИменаЗагружаемыхСценариев, " ", "");
ИменаЗагружаемыхСценариев = СтрРазделить(ПараметрИменаЗагружаемыхСценариев, ",", Ложь);
// Остаются только имена, чтобы сравнивать в сценариях по имени
ЗатребованныеСценарии = СтрРазделить(СтрЗаменить(ПараметрИменаЗагружаемыхСценариев, ".os", ""), ",", Ложь);
Параметры = ПараметрыВыполнения(ПараметрыКоманды, Приложение);
Если Параметры = Неопределено Тогда
Возврат Приложение.РезультатыКоманд().НеверныеПараметры;
КонецЕсли;
Лог = Параметры.Лог;
НастройкиИБ = Параметры.НастройкиИБ;
КаталогРепозитория = Параметры.КаталогРепозитория;
АдресПоискаКонфигурационногоФайла = Параметры.КаталогКонфигурационногоФайла;
ИменаЗагружаемыхСценариев = Параметры.Сценарии;
ЗатребованныеСценарии = Параметры.ИменаСценариев;
ОбрабатываемыеФайлы = Параметры.ОбрабатываемыеФайлы;
КаталогиИсходныхПоФайлам = Параметры.КаталогиФайлов;
УправлениеНастройками = МенеджерНастроек.НастройкиРепозитория(АдресПоискаКонфигурационногоФайла);
НаборНастроек = СценарииОбработки.ПолучитьСценарииСПараметрамиВыполнения(КаталогРепозитория, ИменаЗагружаемыхСценариев);
КритичныеОшибки = Новый Массив;
@ -106,9 +66,7 @@
Ит = 0;
Пока Ит < ОбрабатываемыеФайлы.Количество() Цикл
АнализируемыйФайл = ОбрабатываемыеФайлы[Ит];
Если АнализируемыйФайл.ЭтоКаталог() Тогда
Ит = Ит + 1;
Продолжить;
@ -118,15 +76,10 @@
ИмяФайла = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогРепозитория,
СтрЗаменить(АнализируемыйФайл.ПолноеИмя, КаталогРепозитория, ""));
ИмяПроекта = МенеджерНастроек.ИмяПроектаДляФайла(ИмяФайла);
НастройкаОбработки = НаборНастроек[ИмяПроекта];
Если НЕ ЗначениеЗаполнено(НастройкаОбработки) Тогда
ВызватьИсключение СтрШаблон("Не удалось получить настройки для %1", ИмяФайла);
КонецЕсли;
ПараметрыОбработки.Настройки = НастройкаОбработки.НастройкиСценариев.Получить("НастройкиСценариев");
@ -135,7 +88,6 @@
ПараметрыОбработки.ЗатребованныеСценарии = ЗатребованныеСценарии;
Для Каждого СценарийОбработки Из НастройкаОбработки.СценарииОбработки Цикл
Попытка
ФайлОбработан = СценарийОбработки.ОбработатьФайл(АнализируемыйФайл,
ПараметрыОбработки.ТекущийКаталогИсходныхФайлов,
@ -146,43 +98,225 @@
КонецЕсли;
Для Каждого ФайлДляДопОбработки Из ПараметрыОбработки.ФайлыДляПостОбработки Цикл
НовыйОбрабатываемыйФайл = ФайловыеОперации.НовыйФайл(ФайлДляДопОбработки);
ОбрабатываемыеФайлы.Добавить(НовыйОбрабатываемыйФайл);
КаталогиИсходныхПоФайлам.Вставить(НовыйОбрабатываемыйФайл.ПолноеИмя, ПараметрыОбработки.ТекущийКаталогИсходныхФайлов);
КонецЦикла;
ПараметрыОбработки.ФайлыДляПостОбработки.Очистить();
Исключение
Ошибка = ОписаниеОшибки();
КритичныеОшибки.Добавить(Ошибка);
Лог.Информация("Критичная ошибка: %1", Ошибка);
КонецПопытки;
КонецЦикла;
Ит = Ит + 1;
КонецЦикла;
// В отличие от прекоммита, здесь лучше вывести все криты в конце одним блоком еще раз.
Если КритичныеОшибки.Количество() Тогда
Лог.Ошибка("В результате выполнения возникли исключения:");
Для Каждого ОписаниеОшибки Из КритичныеОшибки Цикл
Лог.Ошибка(ОписаниеОшибки);
КонецЦикла;
КонецЕсли;
// При успешном выполнении возвращает код успеха
Возврат Приложение.РезультатыКоманд().Успех;
КонецФункции // ВыполнитьКоманду
Функция РепозиторийGit(КаталогРепозитория = "")
Если РепозиторийGit = Неопределено Тогда
РепозиторийGit = Новый ГитРепозиторий;
КонецЕсли;
Если НЕ ПустаяСтрока(КаталогРепозитория) И РепозиторийGit.ПолучитьРабочийКаталог() <> КаталогРепозитория Тогда
РепозиторийGit.УстановитьРабочийКаталог(КаталогРепозитория);
КонецЕсли;
Возврат РепозиторийGit;
КонецФункции
Функция ПараметрыВыполнения(ПараметрыКоманды, Приложение)
Лог = Приложение.ПолучитьЛог();
НастройкиИБ = Приложение.ПолучитьНастройкиИБ();
КаталогРепозитория = ЗначениеПараметра(ПараметрыКоманды, "КаталогРепозитория", "");
Если НЕ ЭтоСуществующийКаталог(КаталогРепозитория) Тогда
Возврат Неопределено;
КонецЕсли;
Коммиты = МассивКоммитов(ПараметрыКоманды, КаталогРепозитория);
КаталогКонфигурационногоФайла = ЗначениеПараметра(ПараметрыКоманды, "-cfg-file", КаталогРепозитория);
ПараметрКаталогиИсходныхФайлов = ЗначениеПараметра(ПараметрыКоманды, "-source-dir", "src");
КаталогиИсходныхФайлов = СтрРазделить(ПараметрКаталогиИсходныхФайлов, ",", Ложь);
ОбрабатываемыеОбъекты = ОбрабатываемыеОбъекты(КаталогРепозитория, КаталогиИсходныхФайлов, Коммиты);
Сценарии = Неопределено;
ИменаСценариев = Новый Массив;
ПараметрИменаЗагружаемыхСценариев = ЗначениеПараметра(ПараметрыКоманды, "-rules");
Если ЗначениеЗаполнено(ПараметрИменаЗагружаемыхСценариев) Тогда
ПараметрИменаЗагружаемыхСценариев = СтрЗаменить(ПараметрИменаЗагружаемыхСценариев, " ", "");
Сценарии = СтрРазделить(ПараметрИменаЗагружаемыхСценариев, ",", Ложь);
ИменаСценариев = СтрРазделить(СтрЗаменить(ПараметрИменаЗагружаемыхСценариев, ".os", ""), ",", Ложь);
КонецЕсли;
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("Лог", Лог);
ПараметрыВыполнения.Вставить("НастройкиИБ", НастройкиИБ);
ПараметрыВыполнения.Вставить("КаталогРепозитория", КаталогРепозитория);
ПараметрыВыполнения.Вставить("КаталогКонфигурационногоФайла", КаталогКонфигурационногоФайла);
ПараметрыВыполнения.Вставить("Сценарии", Сценарии);
ПараметрыВыполнения.Вставить("ИменаСценариев", ИменаСценариев);
ПараметрыВыполнения.Вставить("ОбрабатываемыеФайлы", ОбрабатываемыеОбъекты.Файлы);
ПараметрыВыполнения.Вставить("КаталогиФайлов", ОбрабатываемыеОбъекты.Каталоги);
Возврат ПараметрыВыполнения;
КонецФункции
Функция ЗначениеПараметра(НаборПараметров, ИмяПараметра, ЗначениеПоУмолчанию = Неопределено)
Значение = НаборПараметров[ИмяПараметра];
Возврат ?(ЗначениеЗаполнено(Значение), Значение, ЗначениеПоУмолчанию);
КонецФункции
Функция ОбрабатываемыеОбъекты(КаталогРепозитория, КаталогиИсходныхФайлов, Коммиты)
ОбрабатываемыеФайлы = Новый Массив();
КаталогиФайлов = Новый Соответствие();
Если Коммиты.Количество() > 0 Тогда
Изменения = СписокИзмененийМеждуКоммитами(Коммиты, КаталогРепозитория);
Для Каждого ИмяФайла Из Изменения Цикл
Для Каждого КаталогИсходныхФайлов Из КаталогиИсходныхФайлов Цикл
ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, СокрЛП(КаталогИсходныхФайлов));
ФайлПодлежитОбработке = ЭтоСуществующийКаталог(ТекущийКаталогИсходныхФайлов)
И ФайловыеОперации.ФайлНаходитсяВКаталоге(ИмяФайла, ТекущийКаталогИсходныхФайлов);
Если ФайлПодлежитОбработке Тогда
ОбрабатываемыйФайл = ФайловыеОперации.НовыйФайл(ИмяФайла);
ОбрабатываемыеФайлы.Добавить(ОбрабатываемыйФайл);
КаталогиФайлов.Вставить(ОбрабатываемыйФайл.ПолноеИмя, ТекущийКаталогИсходныхФайлов);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Иначе
Для Каждого КаталогИсходныхФайлов Из КаталогиИсходныхФайлов Цикл
ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогРепозитория, СокрЛП(КаталогИсходныхФайлов));
Если НЕ ЭтоСуществующийКаталог(ТекущийКаталогИсходныхФайлов) Тогда
Продолжить;
КонецЕсли;
ОбрабатываемыеФайлыКаталога = НайтиФайлы(ТекущийКаталогИсходныхФайлов, ПолучитьМаскуВсеФайлы(), Истина);
Для Каждого ОбрабатываемыйФайлКаталога Из ОбрабатываемыеФайлыКаталога Цикл
ОбрабатываемыеФайлы.Добавить(ОбрабатываемыйФайлКаталога);
КаталогиФайлов.Вставить(ОбрабатываемыйФайлКаталога.ПолноеИмя, ТекущийКаталогИсходныхФайлов);
КонецЦикла;
КонецЦикла;
КонецЕсли;
Результат = Новый Структура("Файлы, Каталоги", ОбрабатываемыеФайлы, КаталогиФайлов);
Возврат Результат;
КонецФункции
Функция ЭтоСуществующийКаталог(Каталог)
КаталогОбъект = Новый Файл(Каталог);
Если НЕ КаталогОбъект.Существует() Тогда
Лог.Ошибка("Каталог <%1> не существует", Каталог);
Возврат Ложь;
ИначеЕсли НЕ КаталогОбъект.ЭтоКаталог() Тогда
Лог.Ошибка("Каталог <%1> является файлов", Каталог);
Возврат Ложь;
Иначе
Каталог = КаталогОбъект.ПолноеИмя;
Возврат Истина;
КонецЕсли;
КонецФункции
Функция МассивКоммитов(ПараметрыКоманды, КаталогРепозитория)
Коммиты = Новый Массив;
Репозиторий = РепозиторийGit(КаталогРепозитория);
Если НЕ Репозиторий.ЭтоРепозиторий() Тогда
Возврат Коммиты;
КонецЕсли;
Коммит1 = ЗначениеПараметра(ПараметрыКоманды, "Коммит1", "");
Если НЕ ПустаяСтрока(Коммит1) Тогда
Коммит2 = ЗначениеПараметра(ПараметрыКоманды, "Коммит2", "");
Если ПустаяСтрока(Коммит2) Тогда
Коммиты = РодительскиеКоммиты(Коммит1);
Иначе
Коммиты.Добавить(Коммит1);
Коммиты.Добавить(Коммит2);
КонецЕсли;
КонецЕсли;
Возврат Коммиты;
КонецФункции
Функция РодительскиеКоммиты(Коммит)
Коммиты = Новый Массив;
Git = РепозиторийGit();
Git.ВыполнитьКоманду(МассивПараметров("cat-file", "-p", Коммит));
Результат = Git.ПолучитьВыводКоманды();
РегулярноеВыражение = Новый РегулярноеВыражение("parent (\w+)");
Совпадения = РегулярноеВыражение.НайтиСовпадения(Результат);
Если НЕ ДваЭлементаВКоллекции(Совпадения) Тогда
Лог.Ошибка("В команду необходимо передать два коммита или коммит с двумя родителями (объединение веток).");
ВызватьИсключение "Не удалось составить список измененных файлов коммита";
КонецЕсли;
Для Каждого Совпадение Из Совпадения Цикл
Группа = Совпадение.Группы[1];
Коммиты.Добавить(Группа.Значение);
КонецЦикла;
Возврат Коммиты;
КонецФункции
Функция МассивПараметров(Параметр1, Параметр2 = Неопределено, Параметр3 = Неопределено, Параметр4 = Неопределено)
Массив = Новый Массив;
Массив.Добавить(Параметр1);
Если Параметр2 <> Неопределено Тогда
Массив.Добавить(Параметр2);
КонецЕсли;
Если Параметр3 <> Неопределено Тогда
Массив.Добавить(Параметр3);
КонецЕсли;
Если Параметр4 <> Неопределено Тогда
Массив.Добавить(Параметр4);
КонецЕсли;
Возврат Массив;
КонецФункции
Функция СписокИзмененийМеждуКоммитами(Коммиты, КаталогРепозитория)
Если НЕ ДваЭлементаВКоллекции(Коммиты) Тогда
Возврат Новый Массив;
КонецЕсли;
Git = РепозиторийGit(КаталогРепозитория);
ПараметрыКоманды = МассивПараметров(СтрШаблон("diff --name-only %1 %2", Коммиты[0], Коммиты[1]));
Git.ВыполнитьКоманду(ПараметрыКоманды);
Результат = Git.ПолучитьВыводКоманды();
Если ПустаяСтрока(Результат) Тогда
Возврат Новый Массив;
КонецЕсли;
ИзмененныеФайлы = СтрРазделить(СокрЛП(Результат), Символы.ПС);
Для Индекс = 0 По ИзмененныеФайлы.ВГраница() Цикл
ИзмененныеФайлы[Индекс] = ОбъединитьПути(КаталогРепозитория, СокрЛП(ИзмененныеФайлы[Индекс]));
КонецЦикла;
Возврат ИзмененныеФайлы;
КонецФункции
Функция ДваЭлементаВКоллекции(Коллекция)
ЗначениеСравнения = 2;
Возврат Коллекция.Количество() = ЗначениеСравнения;
КонецФункции

View File

@ -111,7 +111,7 @@
ПроектыКонфигурации = МенеджерНастроек.ПроектыКонфигурации();
Для Каждого ИмяПроекта из ПроектыКонфигурации Цикл
Для Каждого ИмяПроекта Из ПроектыКонфигурации Цикл
НапечататьНастройкиПроекта(ИмяПроекта, ИмяПроекта);
@ -138,13 +138,11 @@
Процедура ВывестиНастройкиРекурсивно(НастройкиПрекоммита, Уровень = 1)
ПробельныеСимволы = "";
Для Счетчик = 1 по Уровень Цикл
ПробельныеСимволы = ПробельныеСимволы + Символы.Таб;
МассивТабуляций = Новый Массив(Уровень);
Для Индекс = 0 По МассивТабуляций.ВГраница() Цикл
МассивТабуляций[Индекс] = Символы.Таб;
КонецЦикла;
ПробельныеСимволы = СтрСоединить(МассивТабуляций);
Для Каждого НастройкаПрекоммита Из НастройкиПрекоммита Цикл
@ -164,7 +162,7 @@
ВывестиНастройкиРекурсивно(НастройкаПрекоммита.Значение, Уровень + 1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
@ -180,9 +178,9 @@
ОтключенныеСценарии = МенеджерНастроек.ЗначениеНастройки("ОтключенныеСценарии");
ИменаСценариев = СценарииОбработки.ГлобальныеСценарии();
Лог.Отладка("Сохраненные значения опции 'ГлобальныеСценарии': %1%2",
Лог.Отладка("Сохраненные значения опции 'ГлобальныеСценарии': %1%2",
Символы.ПС, ?(НЕ ЗначениеЗаполнено(ГлобальныеСценарии), "<пусто>", СтрСоединить(ГлобальныеСценарии, Символы.ПС)));
Лог.Отладка("Сохраненные значения опции 'ОтключенныеСценарии': %1%2",
Лог.Отладка("Сохраненные значения опции 'ОтключенныеСценарии': %1%2",
Символы.ПС, ?(НЕ ЗначениеЗаполнено(ОтключенныеСценарии), "<пусто>", СтрСоединить(ОтключенныеСценарии, Символы.ПС)));
Если ИнтерактивныйРедактор.ПолучитьНастройкуБулево("Проверять сообщение коммита на наличие номера задачи?", Ложь) Тогда
@ -196,10 +194,10 @@
КонецЕсли;
Если ИнтерактивныйРедактор.ПолучитьНастройкуБулево("Выполнить настройку подключенных глобальных сценариев?", Истина) Тогда
ГлобальныеСценарии = ИнтерактивныйРедактор.ПолучитьНастройкуМассив("Выберите подключаемые глобальные сценарии: ",
ГлобальныеСценарии = ИнтерактивныйРедактор.ПолучитьНастройкуМассив("Выберите подключаемые глобальные сценарии: ",
ИменаСценариев, ГлобальныеСценарии);
ИначеЕсли ИнтерактивныйРедактор.ПолучитьНастройкуБулево("Выполнить настройку отключенных глобальных сценариев?", Истина) Тогда
ОтключенныеСценарии = ИнтерактивныйРедактор.ПолучитьНастройкуМассив("Выберите отключаемые глобальные сценарии: ",
ОтключенныеСценарии = ИнтерактивныйРедактор.ПолучитьНастройкуМассив("Выберите отключаемые глобальные сценарии: ",
ИменаСценариев, ?(ОтключенныеСценарии = Неопределено, Новый Массив, ОтключенныеСценарии));
КонецЕсли;
@ -214,7 +212,7 @@
ЗначениеНастройки = МенеджерНастроек.ЗначениеНастройки("ИспользоватьСценарииРепозитория");
ИспользоватьСценарииРепозитория = ИнтерактивныйРедактор.ПолучитьНастройкуБулево(Подсказка, ЗначениеНастройки);
Если ИспользоватьСценарииРепозитория Тогда
КаталогЛокальныхСценариев = ИнтерактивныйРедактор.ПолучитьНастройкуСтрока("Укажите относительный путь к сценариям в репозитории: ",
КаталогЛокальныхСценариев = ИнтерактивныйРедактор.ПолучитьНастройкуСтрока("Укажите относительный путь к сценариям в репозитории: ",
МенеджерНастроек.ЗначениеНастройки("КаталогЛокальныхСценариев"));
КонецЕсли;
@ -260,7 +258,7 @@
АдресКаталога = ИнтерактивныйРедактор.ПолучитьНастройкуСтрока("Введите относительный путь в репозитории к каталогу", "");
Если ПроверитьАдресДополнительногоКаталога(КаталогРепозитория, АдресКаталога) Тогда
Если ПроверитьАдресДополнительногоКаталога(КаталогРепозитория, АдресКаталога) Тогда
АдресКаталога = МенеджерНастроек.НормализованноеИмяПроекта(АдресКаталога);
НастройкиПроекта = ИнтерактивнаяНастройка(АдресКаталога);
@ -310,7 +308,7 @@
КонецЕсли;
Если НЕ РазрешеноДобавление Тогда
Если НЕ РазрешеноДобавление Тогда
Сообщить(Сообщение);
КонецЕсли;

View File

@ -74,7 +74,7 @@
ФайлыКОбработке = Новый ТаблицаЗначений();
ФайлыКОбработке.Колонки.Добавить("Файл");
ФайлыКОбработке.Колонки.Добавить("ТипИзменения");
Если НЕ СообщениеКоммитаСоответствуетМаске(НаборНастроек, ПараметрыОбработки) Тогда
Возврат Приложение.РезультатыКоманд().ОшибкаВремениВыполнения;
КонецЕсли;

View File

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

View File

@ -16,7 +16,7 @@
// Конструктор создания на основании анализируемого файла
Процедура ПриСозданииОбъекта(АнализируемыйФайл)
ОписаниеПоФайлу = ТипыОбъектовДляСортировки.ПоФайлу(АнализируемыйФайл);
Если ОписаниеПоФайлу.Тип = ТипыОбъектовДляСортировки.Неизвестный Тогда
Если ОписаниеПоФайлу.Тип = ТипыОбъектовДляСортировки.Неизвестный Тогда
Пустой = Истина;
Возврат;
КонецЕсли;
@ -67,7 +67,7 @@
КонецЕсли;
НастройкиСценария.УставитьШаблоныПоиска(ШаблонПоискаСостава, ШаблонПоискаЭлементов);
Сценарии.Добавить(НастройкиСценария);
Сценарии.Добавить(НастройкиСценария);
КонецПроцедуры
Функция Сценарии() Экспорт

View File

@ -25,23 +25,23 @@
//
Функция ОпределитьВариантИзменения(СимволИзменения) Экспорт
Если СтрСравнить(СимволИзменения, "M") = 0 Тогда
Если СтрСравнить(СимволИзменения, "M") = 0 Тогда
Возврат Изменен;
ИначеЕсли СтрСравнить(СимволИзменения, "A") = 0 Тогда
ИначеЕсли СтрСравнить(СимволИзменения, "A") = 0 Тогда
Возврат Добавлен;
ИначеЕсли СтрСравнить(СимволИзменения, "D") = 0 Тогда
ИначеЕсли СтрСравнить(СимволИзменения, "D") = 0 Тогда
Возврат Удален;
ИначеЕсли СтрСравнить(СимволИзменения, "R") = 0 Тогда
ИначеЕсли СтрСравнить(СимволИзменения, "R") = 0 Тогда
Возврат Переименован;
ИначеЕсли СтрСравнить(СимволИзменения, "C") = 0 Тогда
ИначеЕсли СтрСравнить(СимволИзменения, "C") = 0 Тогда
Возврат Скопирован;
@ -57,4 +57,4 @@
Изменен = "Изменен";
Удален = "Удален";
Переименован = "Переименован";
Скопирован = "Скопирован";
Скопирован = "Скопирован";

View File

@ -268,7 +268,7 @@
КонецЕсли;
Результат = Новый Массив;
Для каждого Группа Из Совпадение.Группы Цикл
Для Каждого Группа Из Совпадение.Группы Цикл
Результат.Добавить(Группа.Значение);
КонецЦикла;

View File

@ -411,7 +411,7 @@
КонецЕсли;
Для каждого Ключ Из Ключи Цикл
Для Каждого Ключ Из Ключи Цикл
Значение = Значение.Получить(Ключ);

View File

@ -3,7 +3,7 @@
ТекущийКаталогСценариев = МенеджерПриложения.КаталогСценариев();
ВсеЗагруженные = Новый Массив;
ФайлыГлобальныхСценариев = НайтиФайлы(ТекущийКаталогСценариев, "*.os");
ФайлыЛокальныхСценариев = Новый Массив;
ФайлыЛокальныхСценариев = Новый Массив;
Лог = МенеджерПриложения.ПолучитьЛог();

View File

@ -51,4 +51,4 @@
ПланОбмена = "ПланОбмена";
ФункциональнаяОпция = "ФункциональнаяОпция";
Подсистема = "Подсистема";
Неизвестный = "";
Неизвестный = "";

View File

@ -17,7 +17,7 @@
//
Функция НовыйФайл(ПутьИлиФайл) Экспорт
Если ТипЗнч(ПутьИлиФайл) = Тип("Строка") Тогда
Если ТипЗнч(ПутьИлиФайл) = Тип("Строка") Тогда
НовыйФайл = Новый Файл(НормализоватьРазделители(ПутьИлиФайл));
@ -92,7 +92,7 @@
Буфер = ПрочитатьДвоичныеДанные(ПутьКФайлу, МаркерUTFBOM.Количество());
Сч = 0;
Для Каждого Байт ИЗ Буфер Цикл
Для Каждого Байт Из Буфер Цикл
Если МаркерUTFBOM[Сч] <> Строка(Байт) Тогда
Возврат Кодировка;
КонецЕсли;
@ -144,7 +144,7 @@
Рез = СтрЗаменить(ФайлВнутреннийКаталог.ПолноеИмя, ФайлКорень.ПолноеИмя, "");
Если Найти("\/", Лев(Рез, 1)) > 0 Тогда
Рез = Сред(Рез, 2);
Рез = Сред(Рез, 2);
КонецЕсли;
Если Найти("\/", Прав(Рез, 1)) > 0 Тогда
@ -227,7 +227,7 @@
Для Каждого Файл Из МассивФайлов Цикл
Если Файл.ЭтоКаталог() Тогда
Если Файл.ЭтоКаталог() Тогда
МассивКаталогов.Добавить(Файл);
@ -267,3 +267,16 @@
КонецЕсли;
КонецПроцедуры
// Проверяет, находится ли файл в указанном каталоге или вложенных каталогах.
//
// Параметры:
// Файл - Файл, Строка - проверяемый файл или путь к нему
// Каталог - Строка - каталог, в котором должен находиться файл
//
// Возвращаемое значение:
// Булево
Функция ФайлНаходитсяВКаталоге(Знач Файл, Знач Каталог) Экспорт
Файл = НовыйФайл(Файл);
Возврат СтрНайти(Файл.ПолноеИмя, Каталог) > 0;
КонецФункции

View File

@ -143,11 +143,11 @@
Если КоллекцияСовпадений.Количество() = 0 Тогда
ТекстОшибки = "Нет копирайта в модуле";
НовыйТекстМодуля = ТекстКопирайта + Символы.ПС + Символы.ПС + СокрЛП(ТекстМодуля);
НовыйТекстМодуля = ТекстКопирайта + Символы.ПС + Символы.ПС + СокрЛП(ТекстМодуля);
ИначеЕсли КоллекцияСовпадений.Количество() <> 2 Тогда
Лог.Ошибка("Модуль '%1'
Лог.Ошибка("Модуль '%1'
|содержит несколько блоков, похожих на части копирайта.
|Удалите лишние (либо все) блоки относящиеся к копирайту.", ПутьКФайлуМодуля);
ВызватьИсключение "Копирайт не может быть проверен/скорректирован";
@ -176,6 +176,6 @@
КонецЕсли;
Возврат Ложь;
Возврат Ложь;
КонецФункции

View File

@ -72,7 +72,7 @@
ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла);
Если ГруппыИндексов.Количество() = 0 Тогда
Возврат ЛОЖЬ;
Возврат ЛОЖЬ;
КонецЕсли;

View File

@ -51,7 +51,7 @@
КонецФункции // ОбработатьФайл()
Процедура ПроверитьНаОтсутствиеПерейти(ПутьКФайлуМодуля)
Процедура ПроверитьНаОтсутствиеПерейти(ПутьКФайлуМодуля)
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
Если НЕ ПустаяСтрока(ТекстМодуля) Тогда
@ -91,8 +91,8 @@
КонецЕсли;
ТекстОшибки = СтрШаблон(
"В файле '%1' обнаружено использование Перейти (%2)",
ПутьКФайлуМодуля,
"В файле '%1' обнаружено использование Перейти (%2)",
ПутьКФайлуМодуля,
Совпадения.Количество());
Лог.Ошибка(ТекстОшибки);
ВызватьИсключение ТекстОшибки;

View File

@ -105,7 +105,7 @@
КонецЕсли;
Если ЗначениеЗаполнено(МассивРеквизитов) Тогда
Если ЗначениеЗаполнено(МассивРеквизитов) Тогда
// получение текста файла до табличных частей
Регексп = Новый РегулярноеВыражение("(<\?xml version[\w\W]+?)(<TabularSection|<\/MetaDataObject>|<\/mdclass:Document>)([\w\W]+)?");
@ -166,7 +166,7 @@
Если ГруппыИндексов.Количество() <> 0 Тогда
Если ЗначениеЗаполнено(ПоискРеквизита) Тогда
Если ЗначениеЗаполнено(ПоискРеквизита) Тогда
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1$2DontUse$4");
@ -258,7 +258,7 @@
Реквизит = ?(ЗначениеЗаполнено(Совпадение.Группы[3].Значение), Совпадение.Группы[3].Значение, Реквизит);
ИспользованиеПоиска = Совпадение.Группы[4].Значение;
Если ЗначениеЗаполнено(ИспользованиеПоиска) И Исключения.Найти(Таблица + "." + Реквизит) = Неопределено Тогда
Если ЗначениеЗаполнено(ИспользованиеПоиска) И Исключения.Найти(Таблица + "." + Реквизит) = Неопределено Тогда
ПолнотекстовыйПоиск = СтрШаблон(ШаблонЗамены, Таблица, Реквизит);

View File

@ -40,13 +40,12 @@
Возврат Ложь;
КонецЕсли;
ФайлДобавлен = ДополнительныеПараметры.Свойство("ТипИзменения") И
ФайлДобавлен = ДополнительныеПараметры.Свойство("ТипИзменения") И
ДополнительныеПараметры.ТипИзменения = ВариантИзмененийФайловGit.Добавлен;
// При передаче через параметр команды exec-rules т.к. поведение ТипИзменения лучше не переопределять,
// ибо могут быть сайд эффекты
ЯвныйЗапускСценария = ДополнительныеПараметры.Свойство("ЗатребованныеСценарии") И
ЯвныйЗапускСценария = ДополнительныеПараметры.Свойство("ЗатребованныеСценарии") И
ДополнительныеПараметры.ЗатребованныеСценарии.Найти(ИмяСценария()) <> Неопределено;
Если ФайлДобавлен ИЛИ ЯвныйЗапускСценария Тогда
@ -79,8 +78,7 @@
Возврат Ложь;
КонецЕсли;
Если ЭтоЕДТ Тогда
Регексп = РегулярныеВыражения.Создать("(<allowFormCustomize>)(true)(<\/allowFormCustomize>)");
@ -126,4 +124,4 @@
Возврат Истина;
КонецФункции
КонецФункции

View File

@ -57,7 +57,7 @@
// Параметры:
// ПутьКФайлуМодуля - Строка - Путь до файла
//
Процедура ПроверитьНаДублированиеМетодов(ПутьКФайлуМодуля)
Процедура ПроверитьНаДублированиеМетодов(ПутьКФайлуМодуля)
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);

View File

@ -127,7 +127,7 @@
Прервать;
КонецЕсли;
Для каждого Часть Из ЧастиИнструкции Цикл
Для Каждого Часть Из ЧастиИнструкции Цикл
Токен = НРег(СокрЛП(Часть));
Если Не ПустаяСтрока(Токен) И ВсеТокены.Найти(Токен) = Неопределено Тогда
Ошибки.Добавить(СтрШаблон(
@ -201,19 +201,19 @@
Результат = Новый Массив();
Для каждого Токен Из ТокеныОбласть() Цикл
Для Каждого Токен Из ТокеныОбласть() Цикл
Результат.Добавить(Токен);
КонецЦикла;
Для каждого Токен Из ТокеныЕсли() Цикл
Для Каждого Токен Из ТокеныЕсли() Цикл
Результат.Добавить(Токен);
КонецЦикла;
Для каждого Токен Из ТокеныИначеЕсли() Цикл
Для Каждого Токен Из ТокеныИначеЕсли() Цикл
Результат.Добавить(Токен);
КонецЦикла;
Для каждого Токен Из ТокеныИначе() Цикл
Для Каждого Токен Из ТокеныИначе() Цикл
Результат.Добавить(Токен);
КонецЦикла;
Для каждого Токен Из ТокеныКонецЕсли() Цикл
Для Каждого Токен Из ТокеныКонецЕсли() Цикл
Результат.Добавить(Токен);
КонецЦикла;

View File

@ -51,7 +51,7 @@
КонецФункции // ОбработатьФайл()
Процедура ПроверитьНаКорректностьОбластей(ПутьКФайлуМодуля)
Процедура ПроверитьНаКорректностьОбластей(ПутьКФайлуМодуля)
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);

View File

@ -58,14 +58,14 @@
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
ФайлСНецензурнымиСловами = НастройкиСценария.Получить("ФайлСНецензурнымиСловами");
// Если конфига нет, то и проверять в общем нечего
Если НЕ ЗначениеЗаполнено(ФайлСНецензурнымиСловами) Тогда
Если НЕ ЗначениеЗаполнено(ФайлСНецензурнымиСловами) Тогда
Возврат Ложь;
Иначе
Файл = Новый Файл(ФайлСНецензурнымиСловами);
// Если указан несуществующий файл, то ничего не делаем, но ругнемся в лог
Если НЕ Файл.Существует() Тогда
Лог.Предупреждение("Не обнаружен файл с нецензурными словами по пути %1", Файл.ПолноеИмя);
Возврат Ложь;
Возврат Ложь;
КонецЕсли;
КонецЕсли;
@ -98,7 +98,6 @@
КонецЕсли;
КонецПроцедуры
Процедура ПроверкаНаНецензурныеСлова(СодержимоеФайла, ФайлСНецензурнымиСловами)
@ -156,4 +155,4 @@
Возврат Регексп;
КонецФункции
КонецФункции

View File

@ -98,7 +98,7 @@
Иначе
ФайлыВКаталогеТВФ = НайтиФайлы(ИмяКаталогаВыгрузки, "*", ИСТИНА);
Для каждого ФайлВКателогеТВФ Из ФайлыВКаталогеТВФ Цикл
Для Каждого ФайлВКателогеТВФ Из ФайлыВКаталогеТВФ Цикл
Если НЕ ФайлВКателогеТВФ.Существует() Тогда

View File

@ -40,7 +40,7 @@
// Булево - Признак выполненной обработки файла
//
// BSLLS:UnusedParameters-off API
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
// BSLLS:UnusedParameters-on
ФайлОбработан = Ложь;
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлПравРоли(АнализируемыйФайл) Тогда

View File

@ -31,7 +31,7 @@
// Булево - Признак выполненной обработки файла
//
// BSLLS:UnusedParameters-off API
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
// BSLLS:UnusedParameters-on
ФайлОбработан = Ложь;
@ -62,7 +62,7 @@
Функция ПараметрыСортировки(АнализируемыйФайл, НастройкиСценария)
НастройкиСортировкиСостава = Новый НастройкиСортировкиСостава(АнализируемыйФайл);
Если Не НастройкиСортировкиСостава.Пустой() Тогда
Если Не НастройкиСортировкиСостава.Пустой() Тогда
ОтключенныеОбъекты = ОтключенныеОбъекты(НастройкиСценария);
Если ОтключенныеОбъекты.Найти(НРег(НастройкиСортировкиСостава.Тип)) <> Неопределено Тогда
// Пропускаем
@ -70,7 +70,7 @@
КонецЕсли;
УстановитьУсловияОбработкиФайла(НастройкиСортировкиСостава);
ПрефиксыСортировки = ПрефиксыСортировки(НастройкиСценария);
ПрефиксыСортировки = ПрефиксыСортировки(НастройкиСценария);
НесортируемыеТипыМетаданных = НесортируемыеТипыМетаданных();
КонецЕсли;
Возврат НастройкиСортировкиСостава;
@ -99,7 +99,7 @@
Иначе
НастройкаСценарияСортировкиСостава.УстановитьРазделительЭлементов(" ");
НастройкаСценарияСортировкиСостава.УстановитьРодительскийЭлемент("ChildObjects", " ");
КонецЕсли;
КонецЕсли;
НастройкиСортировки.ДобавитьСценарий(НастройкаСценарияСортировкиСостава);
КонецПроцедуры
@ -133,25 +133,25 @@
Процедура УстановитьУсловияОбработкиФайлаОпределяемыйТип(НастройкиСортировки)
Если НастройкиСортировки.ЕДТ() Тогда
НастройкаСценарияСортировкиСостава = Новый НастройкаСценарияСортировкиСостава("types");
Если НастройкиСортировки.Заимствованный() Тогда
Если НастройкиСортировки.Заимствованный() Тогда
НастройкаСценарияСортировкиСостава.УстановитьРазделительЭлементов(" ");
НастройкаСценарияСортировкиСостава.УстановитьРодительскийЭлемент("typeExtension", " ");
НастройкаСценарияСортировкиСостава.УстановитьИмяВложенного("type");
Иначе
НастройкаСценарияСортировкиСостава.УстановитьРазделительЭлементов(" ");
НастройкаСценарияСортировкиСостава.УстановитьРазделительЭлементов(" ");
КонецЕсли;
НастройкиСортировки.ДобавитьСценарий(НастройкаСценарияСортировкиСостава);
Иначе
Если НастройкиСортировки.Заимствованный() Тогда
НастройкаСценарияСортировкиСостава = Новый НастройкаСценарияСортировкиСостава("v8:Type");
НастройкаСценарияСортировкиСостава.УстановитьРазделительЭлементов(" ");
НастройкаСценарияСортировкиСостава.УстановитьРодительскийЭлемент("xr:CheckValue xsi:type=""v8:TypeDescription""",
" ", "xr:CheckValue");
НастройкаСценарияСортировкиСостава.УстановитьРодительскийЭлемент("xr:CheckValue xsi:type=""v8:TypeDescription""",
" ", "xr:CheckValue");
НастройкиСортировки.ДобавитьСценарий(НастройкаСценарияСортировкиСостава);
НастройкаСценарияСортировкиСостава = Новый НастройкаСценарияСортировкиСостава("v8:Type");
НастройкаСценарияСортировкиСостава.УстановитьРазделительЭлементов(" ");
НастройкаСценарияСортировкиСостава.УстановитьРодительскийЭлемент("xr:ExtendValue xsi:type=""v8:TypeDescription""",
" ", "xr:ExtendValue");
НастройкаСценарияСортировкиСостава.УстановитьРодительскийЭлемент("xr:ExtendValue xsi:type=""v8:TypeDescription""",
" ", "xr:ExtendValue");
НастройкиСортировки.ДобавитьСценарий(НастройкаСценарияСортировкиСостава);
КонецЕсли;
НастройкаСценарияСортировкиСостава = Новый НастройкаСценарияСортировкиСостава("v8:Type");
@ -166,7 +166,7 @@
НастройкаСценарияСортировкиСостава = Новый НастройкаСценарияСортировкиСостава("extendedConfigurationObject");
НастройкаСценарияСортировкиСостава.УстановитьРазделительЭлементов(" ");
НастройкаСценарияСортировкиСостава.УстановитьРодительскийЭлемент(
"extension xsi:type=""mdclassExtension:ExchangePlanExtension""", " ", "extension");
"extension xsi:type=""mdclassExtension:ExchangePlanExtension""", " ", "extension");
НастройкиСортировки.ДобавитьСценарий(НастройкаСценарияСортировкиСостава);
КонецЕсли;
НастройкаСценарияСортировкиСостава = Новый НастройкаСценарияСортировкиСостава("content");
@ -176,16 +176,16 @@
Иначе
Если НастройкиСортировки.Заимствованный() Тогда
НастройкаСценарияСортировкиСостава = Новый НастройкаСценарияСортировкиСостава("Item");
НастройкаСценарияСортировкиСостава.УстановитьРодительскийЭлемент("ExtensionProperty", " ");
НастройкаСценарияСортировкиСостава.УстановитьРодительскийЭлемент("ExtensionProperty", " ");
НастройкаСценарияСортировкиСостава.УстановитьРазделительЭлементов(" ");
НастройкаСценарияСортировкиСостава.УстановитьИмяВложенного("Metadata");
НастройкиСортировки.ДобавитьСценарий(НастройкаСценарияСортировкиСостава);
КонецЕсли;
КонецЕсли;
НастройкаСценарияСортировкиСостава = Новый НастройкаСценарияСортировкиСостава("Item");
НастройкаСценарияСортировкиСостава.УстановитьРазделительЭлементов(" ");
НастройкаСценарияСортировкиСостава.УстановитьИмяВложенного("Metadata");
НастройкиСортировки.ДобавитьСценарий(НастройкаСценарияСортировкиСостава);
НастройкиСортировки.ДобавитьСценарий(НастройкаСценарияСортировкиСостава);
КонецЕсли;
КонецПроцедуры
@ -249,7 +249,7 @@
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ПолноеИмяФайла);
Замены = Новый Массив;
Для каждого Сценарий Из ПараметрыСортировки.Сценарии() Цикл
Для Каждого Сценарий Из ПараметрыСортировки.Сценарии() Цикл
ПоискСостава = Сценарий.ШаблонПоискаСостава();
СовпаденияСостава = ПоискСостава.НайтиСовпадения(СодержимоеФайла);
Если СовпаденияСостава.Количество() = 0 Тогда
@ -264,7 +264,7 @@
НовыйТекст = СодержимоеФайла;
Для Ит = 0 По Замены.Количество() - 1 Цикл
НовыйТекст = СтрЗаменить(НовыйТекст, "_____ЗАМЕНА____" + Ит, Замены.Получить(Ит));
КонецЦикла;
КонецЦикла;
НовыйТекст = СтрЗаменить(НовыйТекст, Символы.ПС + Символы.ПС, Символы.ПС);
Если СтрСравнить(НовыйТекст, СодержимоеФайла) <> 0 Тогда
@ -283,8 +283,8 @@
Если ПараметрыСортировки.Тип = ТипыОбъектовДляСортировки.Конфигурация Тогда
СортированныеОбъекты = Новый Массив;
Для каждого ТипМетаданных Из ИменаВсехЭлементовПоПорядку(СоставОбъектов) Цикл
СортированныеОбъекты = Новый Массив;
Для Каждого ТипМетаданных Из ИменаВсехЭлементовПоПорядку(СоставОбъектов) Цикл
СоставТипа = ВырезатьЭлемент(СоставОбъектов, ТипМетаданных, Сценарий.РазделительЭлементов());
Если НесортируемыеТипыМетаданных.Найти(НРег(ТипМетаданных)) = Неопределено Тогда
@ -332,7 +332,7 @@
Элементы = Новый ТаблицаЗначений;
Элементы.Колонки.Добавить("ИмяЭлемента");
Для каждого СовпадениеЭлемента Из ПоискЭлементов.НайтиСовпадения(ТекстХМЛ) Цикл
Для Каждого СовпадениеЭлемента Из ПоискЭлементов.НайтиСовпадения(ТекстХМЛ) Цикл
Элементы.Добавить().ИмяЭлемента = СовпадениеЭлемента.Группы.ПоИмени("name").Значение;
КонецЦикла;
Элементы.Свернуть("ИмяЭлемента");
@ -348,7 +348,7 @@
Если СовпаденияЭлемента.Количество() > 0 Тогда
СтрокиЭлемента = Новый Массив;
Для каждого СовпадениеЭлемента Из СовпаденияЭлемента Цикл
Для Каждого СовпадениеЭлемента Из СовпаденияЭлемента Цикл
СтрокиЭлемента.Добавить(СовпадениеЭлемента.Группы[1].Значение);
КонецЦикла;
@ -363,7 +363,7 @@
Функция СортированныеЭлементы(Знач СтрокаСостава, ШаблонПоискаЭлементов, РазделительЭлементов) Экспорт
ТаблицыПоПрефиксам = ТаблицыПоПрефиксам();
ПоискЭлементов = РегулярныеВыражения.Создать(ШаблонПоискаЭлементов);
Для Каждого СовпадениеЭлемента Из ПоискЭлементов.НайтиСовпадения(СтрокаСостава) Цикл
Для Каждого СовпадениеЭлемента Из ПоискЭлементов.НайтиСовпадения(СтрокаСостава) Цикл
ЗначениеЭлемента = СовпадениеЭлемента.Группы[1].Значение;
СтрокаСостава = СтрЗаменить(СтрокаСостава, СовпадениеЭлемента.Группы[0].Значение, "");
Если СтрНайти(ЗначениеЭлемента, "-") > 0 Тогда // Вероятно это UID (битая ссылка)
@ -379,7 +379,7 @@
КонецЦикла;
СортированныеЭлементыПоПрефиксами = Новый Массив();
Для каждого ТаблицаПрефикса Из ТаблицыПоПрефиксам Цикл
Для Каждого ТаблицаПрефикса Из ТаблицыПоПрефиксам Цикл
Если ТаблицаПрефикса.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
@ -408,24 +408,22 @@
Если НЕ ПустаяСтрока(Строка) Тогда
СтрокиНовые.Добавить(Строка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
СтрокаСостава = СтрСоединить(СтрокиНовые, Символы.ПС);
КонецПроцедуры
Функция ТаблицыПоПрефиксам()
ТаблицыПоПрефиксам = Новый Массив();
КоличествоЭлементов = ?(ЗначениеЗаполнено(ПрефиксыСортировки), ПрефиксыСортировки.Количество() + 1, 1);
ТаблицыПоПрефиксам = Новый Массив(КоличествоЭлементов);
ТаблицаСортировки = Новый ТаблицаЗначений;
ТаблицаСортировки.Колонки.Добавить("СтрокаЭлемента");
ТаблицаСортировки.Колонки.Добавить("СтрокаСортировки");
ТаблицыПоПрефиксам.Добавить(ТаблицаСортировки);
Если ЗначениеЗаполнено(ПрефиксыСортировки) Тогда
Для каждого Префикс Из ПрефиксыСортировки Цикл // BSLLS:UseLessForEach-off служебный итератор
ТаблицыПоПрефиксам.Добавить(ТаблицаСортировки.СкопироватьКолонки());
КонецЦикла;
КонецЕсли;
Для Индекс = 0 По ТаблицыПоПрефиксам.ВГраница() Цикл
ТаблицыПоПрефиксам[Индекс] = ТаблицаСортировки.СкопироватьКолонки();
КонецЦикла;
Возврат ТаблицыПоПрефиксам;

View File

@ -80,7 +80,7 @@
ПодчиненныеМетаданные = Регексп.НайтиСовпадения(СодержимоеФайла);
Если ПодчиненныеМетаданные.Количество() = 0 Тогда
Возврат Ложь;
Возврат Ложь;
КонецЕсли;
@ -151,7 +151,7 @@
ПодчиненныеМетаданные = Регексп.НайтиСовпадения(СодержимоеФайла);
Если ПодчиненныеМетаданные.Количество() = 0 Тогда
Возврат Ложь;
Возврат Ложь;
КонецЕсли;

View File

@ -71,7 +71,7 @@
ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла);
Если ГруппыИндексов.Количество() = 0 Тогда
Возврат Ложь;
Возврат Ложь;
КонецЕсли;