Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 7 commits into from
Apr 27, 2023
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С();
ПутьКФайлуСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьКФайлуКонфигурации);

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

КонецПроцедуры
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+)");

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

Лог.Отладка("Используем каталог поиска: %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