Skip to content

Commit

Permalink
Добавлена возможность инкрементальной загрузки конфигурации из файлов…
Browse files Browse the repository at this point in the history
… по логу git
  • Loading branch information
sfaqer committed Jul 15, 2020
1 parent 78bc021 commit 5d64554
Showing 1 changed file with 141 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

#Использовать logos
#Использовать v8runner
#Использовать fs

Перем Лог;
Перем КорневойПутьПроекта;
Expand All @@ -33,6 +34,18 @@
"Признак dev режима, создаем и загружаем автоматом структуру конфигурации");
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--disable-support",
"Снимает конфигурации с поддержки перед загрузкой исходников");

Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--git-increment",
"Инкрменальная загрузка по git diff
| Схема работы
| При загрузке в каталоге исходников (--src) ищется файл
| lastUploadedCommit.txt (необходимо добавить в .gitignore)
| Если файл найден получается дифф изменений относительно
| последнего загруженного коммиту к хеду
| Если файл не найден происходит полная загрузка
| После загрузки создается\обновляется файл lastUploadedCommit.txt
|");

Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--storage", "Признак обновления из хранилища");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-name", "Строка подключения к хранилищу");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-user", "Пользователь хранилища");
Expand Down Expand Up @@ -79,7 +92,7 @@
ПараметрыКоманды["--v8version"], ПараметрыКоманды["--dev"],
ПараметрыХранилища,
ДанныеПодключения.КодЯзыка, РежимыРеструктуризации,
ПараметрыКоманды["--disable-support"]);
ПараметрыКоманды["--disable-support"], ПараметрыКоманды["--git-increment"]);

Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех;

Expand All @@ -90,7 +103,7 @@
Знач КлючРазрешенияЗапуска, Знач ВерсияПлатформы, Знач РежимРазработчика,
Знач ПараметрыХранилища,
Знач КодЯзыка, РежимыРеструктуризации,
Знач СниматьСПоддержки)
Знач СниматьСПоддержки, Знач ИнкрементальнаяЗагрузкаGit)

Перем БазуСоздавали;
БазуСоздавали = Ложь;
Expand Down Expand Up @@ -153,11 +166,23 @@
Конфигуратор.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль);

Если Не ПустаяСтрока(ПутьКSRC) Тогда

Если ИнкрементальнаяЗагрузкаGit Тогда
СписокФайлов = ПолучитьСтрокуИзмененныхФайлов(ПутьКSRC);
Иначе
СписокФайлов = "";
КонецЕсли;

Лог.Информация("Запускаю загрузку конфигурации из исходников");
ПутьКSRC = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьКSRC)).ПолноеИмя;
СписокФайлов = "";

МенеджерКонфигуратора.СобратьИзИсходниковТекущуюКонфигурацию(
ПутьКSRC, СписокФайлов, СниматьСПоддержки);

Если ИнкрементальнаяЗагрузкаGit Тогда
ЗаписатьХэшПоследнегоЗагруженногоКоммита(ПутьКSRC);
КонецЕсли;

КонецЕсли;

Попытка
Expand All @@ -183,3 +208,116 @@
МенеджерКонфигуратора.Деструктор();

КонецПроцедуры // ОбновитьБазуДанных

Функция ПолучитьСтрокуИзмененныхФайлов(Знач ПутьКSRC)

Хэш = ПолучитьХэшПоследнегоЗагруженногоКоммита(ПутьКSRC);

Если ПустаяСтрока(Хэш) Тогда
Возврат "";
КонецЕсли;

ТекущийКаталог = ТекущийКаталог();

КоманднаяСтрока = СтрШаблон("git diff --name-only %1 HEAD", Хэш);

Процесс = СоздатьПроцесс(КоманднаяСтрока, ТекущийКаталог, Истина, , КодировкаТекста.UTF8);
Процесс.Запустить();

Процесс.ОжидатьЗавершения();

СтрокаИзмененныхФайлов = "";
Пока Процесс.ПотокВывода.ЕстьДанные Цикл

СтрокаВывода = Процесс.ПотокВывода.ПрочитатьСтроку();
Если СтрНачинаетсяС(СтрокаВывода, ПутьКSRC)
И Не ФайлВСпискеИсключений(СтрокаВывода) Тогда

СкорректироватьПутьКИзменениюФормы(СтрокаВывода);

ТекущаяСтрока = ОбъединитьПути(ТекущийКаталог, СтрокаВывода);
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "/", ПолучитьРазделительПути());

Если СтрНайти(СтрокаИзмененныхФайлов, ТекущаяСтрока) = 0 Тогда

СтрокаИзмененныхФайлов = СтрокаИзмененныхФайлов + ТекущаяСтрока + ";";

КонецЕсли;

КонецЕсли;

КонецЦикла;

Если ЗначениеЗаполнено(СтрокаИзмененныхФайлов) Тогда
СтрокаИзмененныхФайлов = Лев(СтрокаИзмененныхФайлов, СтрДлина(СтрокаИзмененныхФайлов) - 1);
КонецЕсли;

Возврат СтрокаИзмененныхФайлов;

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

Функция ПолучитьХэшПоследнегоЗагруженногоКоммита(Знач ПутьКSRC)

ИмяФайла = ОбъединитьПути(ПутьКSRC, "lastUploadedCommit.txt");

Если Не ФС.ФайлСуществует(ИмяФайла) Тогда
Возврат "";
КонецЕсли;

ЧтениеТекста = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM);
Хэш = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть();

Возврат Хэш;

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

Процедура ЗаписатьХэшПоследнегоЗагруженногоКоммита(Знач ПутьКSRC)

ИмяФайла = ОбъединитьПути(ПутьКSRC, "lastUploadedCommit.txt");

ТекущийКаталог = ТекущийКаталог();

КоманднаяСтрока = "git rev-parse --short HEAD";

Процесс = СоздатьПроцесс(КоманднаяСтрока, ТекущийКаталог, Истина, , КодировкаТекста.UTF8);
Процесс.Запустить();

Процесс.ОжидатьЗавершения();

Если Процесс.ПотокВывода.ЕстьДанные Тогда

Хэш = Процесс.ПотокВывода.ПрочитатьСтроку();

ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM);
ЗаписьТекста.Записать(Хэш);
ЗаписьТекста.Закрыть();

КонецЕсли;

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

Процедура СкорректироватьПутьКИзменениюФормы(СтрокаИзмененныхФайлов)

Паттерн = "(.*Forms\/.*)\/Ext.*";

РегулярноеВыражение = Новый РегулярноеВыражение(Паттерн);

КоллекцияСовпаденийРегулярногоВыражения = РегулярноеВыражение.НайтиСовпадения(СтрокаИзмененныхФайлов);

Если КоллекцияСовпаденийРегулярногоВыражения.Количество() = 1
И КоллекцияСовпаденийРегулярногоВыражения[0].Группы.Количество() = 2 Тогда

СтрокаИзмененныхФайлов = РегулярноеВыражение.Заменить(СтрокаИзмененныхФайлов, "$1.xml");

КонецЕсли;

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

Функция ФайлВСпискеИсключений(ПутьКФайлу)

Возврат СтрЗаканчиваетсяНа(ПутьКФайлу, "ConfigDumpInfo.xml")
Или СтрЗаканчиваетсяНа(ПутьКФайлу, "AUTHORS")
Или СтрЗаканчиваетсяНа(ПутьКФайлу, "VERSION");

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

0 comments on commit 5d64554

Please sign in to comment.