Skip to content

Commit

Permalink
Добавлена возможность поиска файла по шаблону с номером версии (#565)
Browse files Browse the repository at this point in the history
* Добавлена опция создания базы из файла конфигурации

* Добавлена возможность поиска файла по шаблону с номером версии

* Загрузка из файла конфигурации выделена в отдельный метод

* Оптимизирован поиск файла с учетом расширения

* Доработан поиск файла по шаблону

* Скорректированы регурные выражения поиска номеров версий
  • Loading branch information
yukon39 authored Apr 27, 2023
1 parent cf41481 commit 2cf40f6
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
Перем Лог;
Перем КорневойПутьПроекта;

// Параметры команды
Перем ПутьКФайлуКонфигурации;

///////////////////////////////////////////////////////////////////////////////////////////////////
// Прикладной интерфейс

Expand All @@ -31,6 +34,9 @@
| указываем версию платформы, которую хотим использовать,
| и получаем по пути build\ib готовую базу для тестирования.");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--dt", "Путь к файлу с dt выгрузкой");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--cf", "Путь к cf-файлу конфигурации
| В пути файла можно указать шаблонную переменную $version для подстановки в нее версии конфигурации
| Пример: 1Cv8_$version.cf выгрузит файл вида 1Cv8_1.2.3.4.cf");
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--dev",
"Признак dev режима, создаем и загружаем автоматом структуру конфигурации");
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--storage", "Признак обновления из хранилища");
Expand Down Expand Up @@ -73,6 +79,8 @@
РежимыРеструктуризации.Вставить("Первый", ПараметрыКоманды["--v1"]);
РежимыРеструктуризации.Вставить("Второй", ПараметрыКоманды["--v2"]);

ПутьКФайлуКонфигурации = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--cf"]);

ИнициализироватьБазуДанных(РежимыРеструктуризации, ПараметрыКоманды["--src"], ПараметрыКоманды["--dt"],
ДанныеПодключения, ПараметрыКоманды["--uccode"],
ПараметрыКоманды["--v8version"], ПараметрыКоманды["--dev"],
Expand Down Expand Up @@ -199,6 +207,10 @@
ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;

Если ЗначениеЗаполнено(ПутьКФайлуКонфигурации) Тогда
ЗагрузкаИзФайлаКонфигурации(МенеджерКонфигуратора);
КонецЕсли;

МенеджерКонфигуратора.Деструктор();

Если НЕ НеДобавлятьВСписокБаз Тогда
Expand Down Expand Up @@ -272,3 +284,19 @@
КонецЕсли;

КонецПроцедуры

Процедура ЗагрузкаИзФайлаКонфигурации(МенеджерКонфигуратора)

Лог.Информация("Запускаем загрузку конфигурации из cf-файла");
МенеджерВерсий = Новый МенеджерВерсийФайлов1С();
ПутьКФайлуСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьКФайлуКонфигурации);

Попытка
МенеджерКонфигуратора.ЗагрузитьФайлКонфигурации(ПутьКФайлуСВерсией, Ложь);
МенеджерКонфигуратора.ОбновитьКонфигурациюБазыДанных(Ложь);
Исключение
МенеджерКонфигуратора.Деструктор();
ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;

КонецПроцедуры
67 changes: 63 additions & 4 deletions src/Классы/МенеджерВерсийФайлов1С.os
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,65 @@

КонецФункции

// Поиск файла подходящего под шаблон номера версии.
//
// Параметры:
// ПутьКФайлуКонфигурации - Строка - Файл с шаблоном номера версии. Например: 1cv8_$version.cf
//
// Возвращаемое значение:
// Строка - Имя файла подходящего под шаблон версии. Например: 1cv8_1.2.3.4.cf
//
Функция НайтиФайлСВерсией(Знач ПутьКФайлуКонфигурации) Экспорт

ШаблонВерсии = "$version";

Если СтрНайти(ПутьКФайлуКонфигурации, ШаблонВерсии) = 0 Тогда
Возврат ПутьКФайлуКонфигурации;
КонецЕсли;

Файл = Новый Файл(ПутьКФайлуКонфигурации);
Путь = Файл.Путь;

ПутьКФайлу = "";
РегулярноеВыражение = Новый РегулярноеВыражение("(\d+\.\d+\.\d+\.\d+|\d+\.\d+\.\d+)");

Если ПустаяСтрока(Файл.Расширение) Тогда
МаскаПоиска = ПолучитьМаскуВсеФайлы();
Иначе
МаскаПоиска = "*" + Файл.Расширение;
КонецЕсли;

Лог.Отладка("Используем каталог поиска: %1", Путь);
Лог.Отладка("Используем маску поиска: %1", МаскаПоиска);

НайденныеФайлы = НайтиФайлы(Путь, МаскаПоиска);
Для каждого НайденныйФайл Из НайденныеФайлы Цикл

Лог.Отладка("Ищем номер версии в имени файла: %1", НайденныйФайл.Имя);
Совпадения = РегулярноеВыражение.НайтиСовпадения(НайденныйФайл.Имя);
Если Совпадения.Количество() = 0 Тогда
Продолжить;
КонецЕсли;

ВерсияФайла = Совпадения[0].Группы[1].Значение;
Лог.Отладка("Нашли номер версии: %1", ВерсияФайла);
ИмяФайлаСВерсией = СтрЗаменить(Файл.Имя, ШаблонВерсии, ВерсияФайла);
Если ИмяФайлаСВерсией = НайденныйФайл.Имя Тогда
ПутьКФайлу = НайденныйФайл.ПолноеИмя;
Лог.Информация("Используем файл с версией " + ПутьКФайлу);
Прервать;
КонецЕсли;

КонецЦикла;

Если ПустаяСтрока(ПутьКФайлу) Тогда
ВызватьИсключение "Не найден файл с шаблоном версии " + ПутьКФайлуКонфигурации;
КонецЕсли;

Возврат ПутьКФайлу;

КонецФункции

// Подставляет номер версии в строку с шаблонной переменной $version
//
// Параметры:
Expand Down Expand Up @@ -141,7 +200,7 @@

Функция ВерсияКонфигурацииПоХМЛ(Знач ХМЛСтрокаФайлаКонфигурации)

РегулярноеВыражение = Новый РегулярноеВыражение("<Version>(\d+.\d+.\d+.\d+|\d+.\d+.\d+)<\/Version>");
РегулярноеВыражение = Новый РегулярноеВыражение("<Version>(\d+\.\d+\.\d+\.\d+|\d+\.\d+\.\d+)<\/Version>");
РегулярноеВыражение.ИгнорироватьРегистр = Истина;

Совпадения = РегулярноеВыражение.НайтиСовпадения(ХМЛСтрокаФайлаКонфигурации);
Expand Down Expand Up @@ -181,7 +240,7 @@

Функция НоваяРегуляркаДляВерсииМодуля()

РегулярноеВыражение = Новый РегулярноеВыражение("^\s*Версия\s*=\s*""(\d+.\d+.\d+.\d+|\d+.\d+.\d+)"";\s*$");
РегулярноеВыражение = Новый РегулярноеВыражение("^\s*Версия\s*=\s*""(\d+\.\d+\.\d+\.\d+|\d+\.\d+\.\d+)"";\s*$");
РегулярноеВыражение.ИгнорироватьРегистр = Истина;
Возврат РегулярноеВыражение;
КонецФункции
Expand Down Expand Up @@ -220,7 +279,7 @@
Процедура ИзменитьНомерВерсииХМЛ(ПутьФайлаКонфигурации, СтрокаXML, НомерВерсии)

ШаблонПодстановки = СтрШаблон("<Version>%1</Version>", НомерВерсии);
РегулярноеВыражение = Новый РегулярноеВыражение("(<Version>\d+.\d+.\d+.\d+<\/Version>)|(<Version>\d+.\d+.\d+<\/Version>)");
РегулярноеВыражение = Новый РегулярноеВыражение("(<Version>\d+\.\d+\.\d+\.\d+<\/Version>)|(<Version>\d+\.\d+\.\d+<\/Version>)");
РегулярноеВыражение.ИгнорироватьРегистр = Истина;
НоваяСтрокаXML = РегулярноеВыражение.Заменить(СтрокаXML, ШаблонПодстановки);

Expand Down Expand Up @@ -250,7 +309,7 @@
Функция ВерсияСоСборкой(Знач НомерВерсии, Знач НомерСборки)

ШаблонПодстановки = СтрШаблон("$1.%1", НомерСборки);
РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+).(\d+)|(\d+.\d+).(\d+)");
РегулярноеВыражение = Новый РегулярноеВыражение("(\d+\.\d+\.\d+)\.(\d+)|(\d+\.\d+)\.(\d+)");
Возврат РегулярноеВыражение.Заменить(НомерВерсии, ШаблонПодстановки);

КонецФункции
Expand Down

0 comments on commit 2cf40f6

Please sign in to comment.