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:
commit
9ce9c387b3
@ -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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
@ -109,6 +109,10 @@ precommit4onec может читать настройки своей работ
|
||||
}
|
||||
```
|
||||
|
||||
## Принудительное выполнение для группы файлов
|
||||
|
||||
Команда `exec-rules` предназначена для запуска выбранных сценариев в указанном репозитории. [См. подробнее](/docs/КомандаВыполнитьСценарии.md)
|
||||
|
||||
## Расширение функциональности
|
||||
|
||||
Для создания нового сценария обработки файлов необходимо воспользоваться шаблоном, находящимся в каталоге `СценарииОбработки` скрипта.
|
||||
|
BIN
docs/img/GitExtensions_Interface.png
Normal file
BIN
docs/img/GitExtensions_Interface.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.6 KiB |
BIN
docs/img/GitExtensions_Settings.png
Normal file
BIN
docs/img/GitExtensions_Settings.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 47 KiB |
48
docs/КомандаВыполнитьСценарии.md
Normal file
48
docs/КомандаВыполнитьСценарии.md
Normal 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 подставит разделенные пробелом хэши выделенных в дереве коммитов.
|
@ -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 "ОтключениеРазрешенияИзменятьФорму,ПроверкаНецензурныхСлов"
|
||||
```
|
||||
|
@ -367,10 +367,10 @@
|
||||
Если СвободныеИдентификаторы.Количество() > 0 Тогда
|
||||
СвободныйИдентификатор = СвободныеИдентификаторы[0];
|
||||
СвободныеИдентификаторы.Удалить(0);
|
||||
Возврат СвободныйИдентификатор;
|
||||
Возврат СвободныйИдентификатор;
|
||||
Иначе
|
||||
ПоследнийИдентификатор = ПоследнийИдентификатор + 1;
|
||||
Возврат ПоследнийИдентификатор;
|
||||
Возврат ПоследнийИдентификатор;
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
|
@ -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;
|
||||
Возврат Коллекция.Количество() = ЗначениеСравнения;
|
||||
КонецФункции
|
||||
|
@ -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 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ РазрешеноДобавление Тогда
|
||||
Если НЕ РазрешеноДобавление Тогда
|
||||
Сообщить(Сообщение);
|
||||
КонецЕсли;
|
||||
|
||||
|
@ -74,7 +74,7 @@
|
||||
ФайлыКОбработке = Новый ТаблицаЗначений();
|
||||
ФайлыКОбработке.Колонки.Добавить("Файл");
|
||||
ФайлыКОбработке.Колонки.Добавить("ТипИзменения");
|
||||
|
||||
|
||||
Если НЕ СообщениеКоммитаСоответствуетМаске(НаборНастроек, ПараметрыОбработки) Тогда
|
||||
Возврат Приложение.РезультатыКоманд().ОшибкаВремениВыполнения;
|
||||
КонецЕсли;
|
||||
|
@ -68,7 +68,7 @@
|
||||
КонецФункции
|
||||
|
||||
Функция РодительскийЭлемент() Экспорт
|
||||
Возврат Новый Структура("Отступ, Имя, Завершение",
|
||||
Возврат Новый Структура("Отступ, Имя, Завершение",
|
||||
ОтступРодительскогоЭлемента, РодительскийЭлемент, РодительскийЭлементЗавершение);
|
||||
КонецФункции
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
// Конструктор создания на основании анализируемого файла
|
||||
Процедура ПриСозданииОбъекта(АнализируемыйФайл)
|
||||
ОписаниеПоФайлу = ТипыОбъектовДляСортировки.ПоФайлу(АнализируемыйФайл);
|
||||
Если ОписаниеПоФайлу.Тип = ТипыОбъектовДляСортировки.Неизвестный Тогда
|
||||
Если ОписаниеПоФайлу.Тип = ТипыОбъектовДляСортировки.Неизвестный Тогда
|
||||
Пустой = Истина;
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
@ -67,7 +67,7 @@
|
||||
КонецЕсли;
|
||||
|
||||
НастройкиСценария.УставитьШаблоныПоиска(ШаблонПоискаСостава, ШаблонПоискаЭлементов);
|
||||
Сценарии.Добавить(НастройкиСценария);
|
||||
Сценарии.Добавить(НастройкиСценария);
|
||||
КонецПроцедуры
|
||||
|
||||
Функция Сценарии() Экспорт
|
||||
|
@ -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 @@
|
||||
Изменен = "Изменен";
|
||||
Удален = "Удален";
|
||||
Переименован = "Переименован";
|
||||
Скопирован = "Скопирован";
|
||||
Скопирован = "Скопирован";
|
||||
|
@ -268,7 +268,7 @@
|
||||
КонецЕсли;
|
||||
|
||||
Результат = Новый Массив;
|
||||
Для каждого Группа Из Совпадение.Группы Цикл
|
||||
Для Каждого Группа Из Совпадение.Группы Цикл
|
||||
Результат.Добавить(Группа.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
|
@ -411,7 +411,7 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Для каждого Ключ Из Ключи Цикл
|
||||
Для Каждого Ключ Из Ключи Цикл
|
||||
|
||||
Значение = Значение.Получить(Ключ);
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
ТекущийКаталогСценариев = МенеджерПриложения.КаталогСценариев();
|
||||
ВсеЗагруженные = Новый Массив;
|
||||
ФайлыГлобальныхСценариев = НайтиФайлы(ТекущийКаталогСценариев, "*.os");
|
||||
ФайлыЛокальныхСценариев = Новый Массив;
|
||||
ФайлыЛокальныхСценариев = Новый Массив;
|
||||
|
||||
Лог = МенеджерПриложения.ПолучитьЛог();
|
||||
|
||||
|
@ -51,4 +51,4 @@
|
||||
ПланОбмена = "ПланОбмена";
|
||||
ФункциональнаяОпция = "ФункциональнаяОпция";
|
||||
Подсистема = "Подсистема";
|
||||
Неизвестный = "";
|
||||
Неизвестный = "";
|
||||
|
@ -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;
|
||||
КонецФункции
|
||||
|
@ -143,11 +143,11 @@
|
||||
Если КоллекцияСовпадений.Количество() = 0 Тогда
|
||||
|
||||
ТекстОшибки = "Нет копирайта в модуле";
|
||||
НовыйТекстМодуля = ТекстКопирайта + Символы.ПС + Символы.ПС + СокрЛП(ТекстМодуля);
|
||||
НовыйТекстМодуля = ТекстКопирайта + Символы.ПС + Символы.ПС + СокрЛП(ТекстМодуля);
|
||||
|
||||
ИначеЕсли КоллекцияСовпадений.Количество() <> 2 Тогда
|
||||
|
||||
Лог.Ошибка("Модуль '%1'
|
||||
Лог.Ошибка("Модуль '%1'
|
||||
|содержит несколько блоков, похожих на части копирайта.
|
||||
|Удалите лишние (либо все) блоки относящиеся к копирайту.", ПутьКФайлуМодуля);
|
||||
ВызватьИсключение "Копирайт не может быть проверен/скорректирован";
|
||||
@ -176,6 +176,6 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ложь;
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции
|
||||
|
@ -72,7 +72,7 @@
|
||||
ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла);
|
||||
Если ГруппыИндексов.Количество() = 0 Тогда
|
||||
|
||||
Возврат ЛОЖЬ;
|
||||
Возврат ЛОЖЬ;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
@ -51,7 +51,7 @@
|
||||
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Процедура ПроверитьНаОтсутствиеПерейти(ПутьКФайлуМодуля)
|
||||
Процедура ПроверитьНаОтсутствиеПерейти(ПутьКФайлуМодуля)
|
||||
|
||||
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
|
||||
Если НЕ ПустаяСтрока(ТекстМодуля) Тогда
|
||||
@ -91,8 +91,8 @@
|
||||
КонецЕсли;
|
||||
|
||||
ТекстОшибки = СтрШаблон(
|
||||
"В файле '%1' обнаружено использование Перейти (%2)",
|
||||
ПутьКФайлуМодуля,
|
||||
"В файле '%1' обнаружено использование Перейти (%2)",
|
||||
ПутьКФайлуМодуля,
|
||||
Совпадения.Количество());
|
||||
Лог.Ошибка(ТекстОшибки);
|
||||
ВызватьИсключение ТекстОшибки;
|
||||
|
@ -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].Значение;
|
||||
|
||||
Если ЗначениеЗаполнено(ИспользованиеПоиска) И Исключения.Найти(Таблица + "." + Реквизит) = Неопределено Тогда
|
||||
Если ЗначениеЗаполнено(ИспользованиеПоиска) И Исключения.Найти(Таблица + "." + Реквизит) = Неопределено Тогда
|
||||
|
||||
ПолнотекстовыйПоиск = СтрШаблон(ШаблонЗамены, Таблица, Реквизит);
|
||||
|
||||
|
@ -40,13 +40,12 @@
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ФайлДобавлен = ДополнительныеПараметры.Свойство("ТипИзменения") И
|
||||
ФайлДобавлен = ДополнительныеПараметры.Свойство("ТипИзменения") И
|
||||
ДополнительныеПараметры.ТипИзменения = ВариантИзмененийФайловGit.Добавлен;
|
||||
|
||||
// При передаче через параметр команды exec-rules т.к. поведение ТипИзменения лучше не переопределять,
|
||||
// ибо могут быть сайд эффекты
|
||||
ЯвныйЗапускСценария = ДополнительныеПараметры.Свойство("ЗатребованныеСценарии") И
|
||||
ЯвныйЗапускСценария = ДополнительныеПараметры.Свойство("ЗатребованныеСценарии") И
|
||||
ДополнительныеПараметры.ЗатребованныеСценарии.Найти(ИмяСценария()) <> Неопределено;
|
||||
|
||||
Если ФайлДобавлен ИЛИ ЯвныйЗапускСценария Тогда
|
||||
@ -79,8 +78,7 @@
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
|
||||
Если ЭтоЕДТ Тогда
|
||||
|
||||
Регексп = РегулярныеВыражения.Создать("(<allowFormCustomize>)(true)(<\/allowFormCustomize>)");
|
||||
@ -126,4 +124,4 @@
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецФункции
|
||||
КонецФункции
|
||||
|
@ -57,7 +57,7 @@
|
||||
// Параметры:
|
||||
// ПутьКФайлуМодуля - Строка - Путь до файла
|
||||
//
|
||||
Процедура ПроверитьНаДублированиеМетодов(ПутьКФайлуМодуля)
|
||||
Процедура ПроверитьНаДублированиеМетодов(ПутьКФайлуМодуля)
|
||||
|
||||
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
|
||||
|
||||
|
@ -127,7 +127,7 @@
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
Для каждого Часть Из ЧастиИнструкции Цикл
|
||||
Для Каждого Часть Из ЧастиИнструкции Цикл
|
||||
Токен = НРег(СокрЛП(Часть));
|
||||
Если Не ПустаяСтрока(Токен) И ВсеТокены.Найти(Токен) = Неопределено Тогда
|
||||
Ошибки.Добавить(СтрШаблон(
|
||||
@ -201,19 +201,19 @@
|
||||
|
||||
Результат = Новый Массив();
|
||||
|
||||
Для каждого Токен Из ТокеныОбласть() Цикл
|
||||
Для Каждого Токен Из ТокеныОбласть() Цикл
|
||||
Результат.Добавить(Токен);
|
||||
КонецЦикла;
|
||||
Для каждого Токен Из ТокеныЕсли() Цикл
|
||||
Для Каждого Токен Из ТокеныЕсли() Цикл
|
||||
Результат.Добавить(Токен);
|
||||
КонецЦикла;
|
||||
Для каждого Токен Из ТокеныИначеЕсли() Цикл
|
||||
Для Каждого Токен Из ТокеныИначеЕсли() Цикл
|
||||
Результат.Добавить(Токен);
|
||||
КонецЦикла;
|
||||
Для каждого Токен Из ТокеныИначе() Цикл
|
||||
Для Каждого Токен Из ТокеныИначе() Цикл
|
||||
Результат.Добавить(Токен);
|
||||
КонецЦикла;
|
||||
Для каждого Токен Из ТокеныКонецЕсли() Цикл
|
||||
Для Каждого Токен Из ТокеныКонецЕсли() Цикл
|
||||
Результат.Добавить(Токен);
|
||||
КонецЦикла;
|
||||
|
||||
|
@ -51,7 +51,7 @@
|
||||
|
||||
КонецФункции // ОбработатьФайл()
|
||||
|
||||
Процедура ПроверитьНаКорректностьОбластей(ПутьКФайлуМодуля)
|
||||
Процедура ПроверитьНаКорректностьОбластей(ПутьКФайлуМодуля)
|
||||
|
||||
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
|
||||
|
||||
|
@ -58,14 +58,14 @@
|
||||
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
|
||||
ФайлСНецензурнымиСловами = НастройкиСценария.Получить("ФайлСНецензурнымиСловами");
|
||||
// Если конфига нет, то и проверять в общем нечего
|
||||
Если НЕ ЗначениеЗаполнено(ФайлСНецензурнымиСловами) Тогда
|
||||
Если НЕ ЗначениеЗаполнено(ФайлСНецензурнымиСловами) Тогда
|
||||
Возврат Ложь;
|
||||
Иначе
|
||||
Файл = Новый Файл(ФайлСНецензурнымиСловами);
|
||||
// Если указан несуществующий файл, то ничего не делаем, но ругнемся в лог
|
||||
Если НЕ Файл.Существует() Тогда
|
||||
Лог.Предупреждение("Не обнаружен файл с нецензурными словами по пути %1", Файл.ПолноеИмя);
|
||||
Возврат Ложь;
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
@ -98,7 +98,6 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПроверкаНаНецензурныеСлова(СодержимоеФайла, ФайлСНецензурнымиСловами)
|
||||
@ -156,4 +155,4 @@
|
||||
|
||||
Возврат Регексп;
|
||||
|
||||
КонецФункции
|
||||
КонецФункции
|
||||
|
@ -98,7 +98,7 @@
|
||||
Иначе
|
||||
|
||||
ФайлыВКаталогеТВФ = НайтиФайлы(ИмяКаталогаВыгрузки, "*", ИСТИНА);
|
||||
Для каждого ФайлВКателогеТВФ Из ФайлыВКаталогеТВФ Цикл
|
||||
Для Каждого ФайлВКателогеТВФ Из ФайлыВКаталогеТВФ Цикл
|
||||
|
||||
Если НЕ ФайлВКателогеТВФ.Существует() Тогда
|
||||
|
||||
|
@ -40,7 +40,7 @@
|
||||
// Булево - Признак выполненной обработки файла
|
||||
//
|
||||
// BSLLS:UnusedParameters-off API
|
||||
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
|
||||
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
|
||||
// BSLLS:UnusedParameters-on
|
||||
ФайлОбработан = Ложь;
|
||||
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлПравРоли(АнализируемыйФайл) Тогда
|
||||
|
@ -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 По ТаблицыПоПрефиксам.ВГраница() Цикл
|
||||
ТаблицыПоПрефиксам[Индекс] = ТаблицаСортировки.СкопироватьКолонки();
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ТаблицыПоПрефиксам;
|
||||
|
||||
|
@ -80,7 +80,7 @@
|
||||
ПодчиненныеМетаданные = Регексп.НайтиСовпадения(СодержимоеФайла);
|
||||
Если ПодчиненныеМетаданные.Количество() = 0 Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
@ -151,7 +151,7 @@
|
||||
ПодчиненныеМетаданные = Регексп.НайтиСовпадения(СодержимоеФайла);
|
||||
Если ПодчиненныеМетаданные.Количество() = 0 Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
@ -71,7 +71,7 @@
|
||||
ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла);
|
||||
Если ГруппыИндексов.Количество() = 0 Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user