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.
|
||||
|
@ -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 "ОтключениеРазрешенияИзменятьФорму,ПроверкаНецензурныхСлов"
|
||||
```
|
||||
|
@ -18,6 +18,12 @@
|
||||
// Добавление параметров команды
|
||||
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРепозитория",
|
||||
"Каталог анализируемого репозитория");
|
||||
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Коммит1",
|
||||
"Идентификатор коммита. Если указан, анализируются только файлы, измененные коммитом.
|
||||
| Если это merge-request, то изменения между двумя родительскими коммитами.");
|
||||
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Коммит2",
|
||||
"Идентификатор коммита. Если указан, то анализируются только файлы, которые отличаются
|
||||
| между двумя указанными коммитами.");
|
||||
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-source-dir",
|
||||
"Каталог расположения исходных файлов относительно корня репозитория.
|
||||
| Если сценариев несколько, указываются в кавычках через , . По умолчанию <src>");
|
||||
@ -36,65 +42,19 @@
|
||||
//
|
||||
Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач Приложение) Экспорт
|
||||
|
||||
Лог = Приложение.ПолучитьЛог();
|
||||
НастройкиИБ = Приложение.ПолучитьНастройкиИБ();
|
||||
|
||||
КаталогРепозитория = ПараметрыКоманды["КаталогРепозитория"];
|
||||
ФайлКаталогРепозитория = Новый Файл(КаталогРепозитория);
|
||||
КаталогРепозитория = ФайлКаталогРепозитория.ПолноеИмя;
|
||||
Если НЕ ФайлКаталогРепозитория.Существует() ИЛИ ФайлКаталогРепозитория.ЭтоФайл() Тогда
|
||||
|
||||
Лог.Ошибка("Каталог репозитория '%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 По МассивТабуляций.ВГраница() Цикл
|
||||
МассивТабуляций[Индекс] = Символы.Таб;
|
||||
КонецЦикла;
|
||||
ПробельныеСимволы = СтрСоединить(МассивТабуляций);
|
||||
|
||||
Для Каждого НастройкаПрекоммита Из НастройкиПрекоммита Цикл
|
||||
|
||||
|
@ -268,7 +268,7 @@
|
||||
КонецЕсли;
|
||||
|
||||
Результат = Новый Массив;
|
||||
Для каждого Группа Из Совпадение.Группы Цикл
|
||||
Для Каждого Группа Из Совпадение.Группы Цикл
|
||||
Результат.Добавить(Группа.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
|
@ -411,7 +411,7 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Для каждого Ключ Из Ключи Цикл
|
||||
Для Каждого Ключ Из Ключи Цикл
|
||||
|
||||
Значение = Значение.Получить(Ключ);
|
||||
|
||||
|
@ -92,7 +92,7 @@
|
||||
Буфер = ПрочитатьДвоичныеДанные(ПутьКФайлу, МаркерUTFBOM.Количество());
|
||||
|
||||
Сч = 0;
|
||||
Для Каждого Байт ИЗ Буфер Цикл
|
||||
Для Каждого Байт Из Буфер Цикл
|
||||
Если МаркерUTFBOM[Сч] <> Строка(Байт) Тогда
|
||||
Возврат Кодировка;
|
||||
КонецЕсли;
|
||||
@ -267,3 +267,16 @@
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Проверяет, находится ли файл в указанном каталоге или вложенных каталогах.
|
||||
//
|
||||
// Параметры:
|
||||
// Файл - Файл, Строка - проверяемый файл или путь к нему
|
||||
// Каталог - Строка - каталог, в котором должен находиться файл
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево
|
||||
Функция ФайлНаходитсяВКаталоге(Знач Файл, Знач Каталог) Экспорт
|
||||
Файл = НовыйФайл(Файл);
|
||||
Возврат СтрНайти(Файл.ПолноеИмя, Каталог) > 0;
|
||||
КонецФункции
|
||||
|
@ -40,7 +40,6 @@
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ФайлДобавлен = ДополнительныеПараметры.Свойство("ТипИзменения") И
|
||||
ДополнительныеПараметры.ТипИзменения = ВариантИзмененийФайловGit.Добавлен;
|
||||
|
||||
@ -80,7 +79,6 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Если ЭтоЕДТ Тогда
|
||||
|
||||
Регексп = РегулярныеВыражения.Создать("(<allowFormCustomize>)(true)(<\/allowFormCustomize>)");
|
||||
|
@ -127,7 +127,7 @@
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
Для каждого Часть Из ЧастиИнструкции Цикл
|
||||
Для Каждого Часть Из ЧастиИнструкции Цикл
|
||||
Токен = НРег(СокрЛП(Часть));
|
||||
Если Не ПустаяСтрока(Токен) И ВсеТокены.Найти(Токен) = Неопределено Тогда
|
||||
Ошибки.Добавить(СтрШаблон(
|
||||
@ -201,19 +201,19 @@
|
||||
|
||||
Результат = Новый Массив();
|
||||
|
||||
Для каждого Токен Из ТокеныОбласть() Цикл
|
||||
Для Каждого Токен Из ТокеныОбласть() Цикл
|
||||
Результат.Добавить(Токен);
|
||||
КонецЦикла;
|
||||
Для каждого Токен Из ТокеныЕсли() Цикл
|
||||
Для Каждого Токен Из ТокеныЕсли() Цикл
|
||||
Результат.Добавить(Токен);
|
||||
КонецЦикла;
|
||||
Для каждого Токен Из ТокеныИначеЕсли() Цикл
|
||||
Для Каждого Токен Из ТокеныИначеЕсли() Цикл
|
||||
Результат.Добавить(Токен);
|
||||
КонецЦикла;
|
||||
Для каждого Токен Из ТокеныИначе() Цикл
|
||||
Для Каждого Токен Из ТокеныИначе() Цикл
|
||||
Результат.Добавить(Токен);
|
||||
КонецЦикла;
|
||||
Для каждого Токен Из ТокеныКонецЕсли() Цикл
|
||||
Для Каждого Токен Из ТокеныКонецЕсли() Цикл
|
||||
Результат.Добавить(Токен);
|
||||
КонецЦикла;
|
||||
|
||||
|
@ -98,7 +98,6 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПроверкаНаНецензурныеСлова(СодержимоеФайла, ФайлСНецензурнымиСловами)
|
||||
|
@ -98,7 +98,7 @@
|
||||
Иначе
|
||||
|
||||
ФайлыВКаталогеТВФ = НайтиФайлы(ИмяКаталогаВыгрузки, "*", ИСТИНА);
|
||||
Для каждого ФайлВКателогеТВФ Из ФайлыВКаталогеТВФ Цикл
|
||||
Для Каждого ФайлВКателогеТВФ Из ФайлыВКаталогеТВФ Цикл
|
||||
|
||||
Если НЕ ФайлВКателогеТВФ.Существует() Тогда
|
||||
|
||||
|
@ -249,7 +249,7 @@
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ПолноеИмяФайла);
|
||||
|
||||
Замены = Новый Массив;
|
||||
Для каждого Сценарий Из ПараметрыСортировки.Сценарии() Цикл
|
||||
Для Каждого Сценарий Из ПараметрыСортировки.Сценарии() Цикл
|
||||
ПоискСостава = Сценарий.ШаблонПоискаСостава();
|
||||
СовпаденияСостава = ПоискСостава.НайтиСовпадения(СодержимоеФайла);
|
||||
Если СовпаденияСостава.Количество() = 0 Тогда
|
||||
@ -284,7 +284,7 @@
|
||||
Если ПараметрыСортировки.Тип = ТипыОбъектовДляСортировки.Конфигурация Тогда
|
||||
|
||||
СортированныеОбъекты = Новый Массив;
|
||||
Для каждого ТипМетаданных Из ИменаВсехЭлементовПоПорядку(СоставОбъектов) Цикл
|
||||
Для Каждого ТипМетаданных Из ИменаВсехЭлементовПоПорядку(СоставОбъектов) Цикл
|
||||
|
||||
СоставТипа = ВырезатьЭлемент(СоставОбъектов, ТипМетаданных, Сценарий.РазделительЭлементов());
|
||||
Если НесортируемыеТипыМетаданных.Найти(НРег(ТипМетаданных)) = Неопределено Тогда
|
||||
@ -332,7 +332,7 @@
|
||||
|
||||
Элементы = Новый ТаблицаЗначений;
|
||||
Элементы.Колонки.Добавить("ИмяЭлемента");
|
||||
Для каждого СовпадениеЭлемента Из ПоискЭлементов.НайтиСовпадения(ТекстХМЛ) Цикл
|
||||
Для Каждого СовпадениеЭлемента Из ПоискЭлементов.НайтиСовпадения(ТекстХМЛ) Цикл
|
||||
Элементы.Добавить().ИмяЭлемента = СовпадениеЭлемента.Группы.ПоИмени("name").Значение;
|
||||
КонецЦикла;
|
||||
Элементы.Свернуть("ИмяЭлемента");
|
||||
@ -348,7 +348,7 @@
|
||||
Если СовпаденияЭлемента.Количество() > 0 Тогда
|
||||
|
||||
СтрокиЭлемента = Новый Массив;
|
||||
Для каждого СовпадениеЭлемента Из СовпаденияЭлемента Цикл
|
||||
Для Каждого СовпадениеЭлемента Из СовпаденияЭлемента Цикл
|
||||
СтрокиЭлемента.Добавить(СовпадениеЭлемента.Группы[1].Значение);
|
||||
КонецЦикла;
|
||||
|
||||
@ -379,7 +379,7 @@
|
||||
КонецЦикла;
|
||||
|
||||
СортированныеЭлементыПоПрефиксами = Новый Массив();
|
||||
Для каждого ТаблицаПрефикса Из ТаблицыПоПрефиксам Цикл
|
||||
Для Каждого ТаблицаПрефикса Из ТаблицыПоПрефиксам Цикл
|
||||
Если ТаблицаПрефикса.Количество() = 0 Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
@ -414,18 +414,16 @@
|
||||
|
||||
Функция ТаблицыПоПрефиксам()
|
||||
|
||||
ТаблицыПоПрефиксам = Новый Массив();
|
||||
КоличествоЭлементов = ?(ЗначениеЗаполнено(ПрефиксыСортировки), ПрефиксыСортировки.Количество() + 1, 1);
|
||||
ТаблицыПоПрефиксам = Новый Массив(КоличествоЭлементов);
|
||||
|
||||
ТаблицаСортировки = Новый ТаблицаЗначений;
|
||||
ТаблицаСортировки.Колонки.Добавить("СтрокаЭлемента");
|
||||
ТаблицаСортировки.Колонки.Добавить("СтрокаСортировки");
|
||||
ТаблицыПоПрефиксам.Добавить(ТаблицаСортировки);
|
||||
|
||||
Если ЗначениеЗаполнено(ПрефиксыСортировки) Тогда
|
||||
Для каждого Префикс Из ПрефиксыСортировки Цикл // BSLLS:UseLessForEach-off служебный итератор
|
||||
ТаблицыПоПрефиксам.Добавить(ТаблицаСортировки.СкопироватьКолонки());
|
||||
Для Индекс = 0 По ТаблицыПоПрефиксам.ВГраница() Цикл
|
||||
ТаблицыПоПрефиксам[Индекс] = ТаблицаСортировки.СкопироватьКолонки();
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ТаблицыПоПрефиксам;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user