Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
.ЗависитОт("tempfiles")
.ЗависитОт("tool1cd", "0.3")
.ЗависитОт("v8runner", "0.7.0")
.ЗависитОт("gitrunner", "1.1.0")
.ЗависитОт("strings")
.ЗависитОт("1commands", "1.1.1")
.ЗависитОт("v8unpack")
Expand Down
175 changes: 63 additions & 112 deletions src/core/Классы/МенеджерСинхронизации.os
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#Использовать strings
#Использовать 1commands
#Использовать v8unpack
#Использовать gitrunner

Перем Лог;
Перем мФайлПрограммыРаспаковки;
Expand Down Expand Up @@ -421,153 +422,102 @@

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

// Выполняет фиксацию изменений в локальном каталоге git
/////////////////////////////////////
// GIT Пересмотр

// <Описание процедуры>
//
Процедура ВыполнитьКоммитГит(Знач КаталогРабочейКопии, Знач Комментарий, Знач Автор, Знач Дата=Неопределено) Экспорт
Функция ПолучитьГитРепозиторий(Знач КаталогРабочейКопии)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Метод ПолучитьГитРепозиторий не корректно вызывается

сам метод часто вызывается перед вызовом команд гита (пуш, коммит и т.п.)
а при вызове этот метод постоянно вызывает установку настроек, что совершенно не нужно для указанных команд :(

Предлагаю добавить установку этих параметров один раз в начале работы продукта, а в дальнейшем уже не устанавливать настройки.
@khorevaa @nixel2007

Функция ПолучитьГитРепозиторий(Знач КаталогРабочейКопии)
  
 -	Если Дата = Неопределено Тогда
 -		Дата = ТекущаяДата();
 -	КонецЕсли;
 +	ГитРепозиторий = Новый ГитРепозиторий;
 +	ГитРепозиторий.УстановитьРабочийКаталог(КаталогРабочейКопии);
 +	ГитРепозиторий.УстановитьНастройку("core.quotepath","false",РежимУстановкиНастроекGit.Локально);
 +	ГитРепозиторий.УстановитьНастройку("merge.ours.driver","true",РежимУстановкиНастроекGit.Локально);
 +	Возврат ГитРепозиторий;
 +
 +КонецФункции // ПолучитьГитРепозиторий()

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@khorevaa @nixel2007 Соответствующая веселуха с ci-сервера проекта :(
дофига ненужных команд

image

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А не надо включать отладочные логи всех библиотек :Р

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Странные логи. Видимо из gitrunner. Надо посмотреть почему лезит

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

потому что я это логирую, очевидно. вангую, что Артур как обычно включил все логи через rootLogger. естественно он видит всею

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

тут проблема не в лишних логах, а в том, что вызывается лишние и абсолютно не нужные команды, о которых я уже писал выше.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+ ГитРепозиторий.УстановитьРабочийКаталог(КаталогРабочейКопии);
 +	ГитРепозиторий.УстановитьНастройку("core.quotepath","false",РежимУстановкиНастроекGit.Локально);
 +	ГитРепозиторий.УстановитьНастройку("merge.ours.driver","true",РежимУстановкиНастроекGit.Локально);

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Как раз в данном случае отладочные логи очень четко показывают проблему.


Если Дата = Неопределено Тогда
Дата = ТекущаяДата();
КонецЕсли;
ГитРепозиторий = Новый ГитРепозиторий;
ГитРепозиторий.УстановитьРабочийКаталог(КаталогРабочейКопии);
ГитРепозиторий.УстановитьНастройку("core.quotepath","false",РежимУстановкиНастроекGit.Локально);
ГитРепозиторий.УстановитьНастройку("merge.ours.driver","true",РежимУстановкиНастроекGit.Локально);
Возврат ГитРепозиторий;

КонецФункции // ПолучитьГитРепозиторий()

Функция ПодготовитьФайлКоммита(Знач Комментарий)

ИмяФайлаКомментария = ВременныеФайлы.СоздатьФайл("txt");
ФайлКомментария = Новый ЗаписьТекста(ИмяФайлаКомментария, КодировкаТекста.UTF8NoBOM);
ФайлКомментария.Записать(?(ПустаяСтрока(Комментарий), ".", Комментарий));
ФайлКомментария.Закрыть();
Лог.Информация("Текст коммита: <"+Комментарий+">");

КомандныйФайл = Новый КомандныйФайл;

КомандныйФайл.УстановитьКодировкуВывода(КодировкаТекста.UTF8);

ПрефиксЭкспортаПеременной = ?(ЭтоWindows, "set", "export");
Если ЭтоWindows Тогда
КомандныйФайл.ДобавитьКоманду("cd /d " + ОбернутьВКавычки(КаталогРабочейКопии));
Иначе
КомандныйФайл.ДобавитьКоманду("cd " + ОбернутьВКавычки(КаталогРабочейКопии));
КонецЕсли;
КомандныйФайл.ДобавитьКоманду(ПрефиксЭкспортаПеременной + " GIT_AUTHOR_DATE="+ОбернутьВКавычки(ДатаPOSIX(Дата)));
КомандныйФайл.ДобавитьКоманду(ПрефиксЭкспортаПеременной + " GIT_COMMITTER_DATE="+ОбернутьВКавычки(ДатаPOSIX(Дата)));
КомандныйФайл.ДобавитьКоманду(СтрШаблон("git add -A ."));
Лог.Отладка(СтрШаблон("Текст коммита: %1", Комментарий));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лог.Отладка(СтрШаблон давно устарел.

СтрШаблон не нужен, можно сразу писать Лог.Отладка("%1", Парам);


авторДляГит = Автор;
Если Найти(Автор, "<") <= Найти(Автор, ">") Тогда
авторДляГит = Автор+" <"+Автор+"@localhost>"; // e-mail может быть удобен для поиска в связанных системах //авторДляГит = Автор+" <"+Автор+">";
КонецЕсли;
Возврат ИмяФайлаКомментария;

КомандаКоммита = СтрШаблон("git commit -a --file=""%1"" --author=""%2"" ", ИмяФайлаКомментария, Автор);

КомандныйФайл.ДобавитьКоманду(КомандаКоммита);

Если Не ЭтоWindows Тогда
КомандныйФайл.ДобавитьКоманду("exit $#");
Иначе
// сейчас аккуратно верну кодировку,
// иначе после выполнения коммита все последующие команды скриптов будут неверно отображаться в консоли!
КомандныйФайл.ДобавитьКоманду("set gitsync_exit=%ERRORLEVEL%");
КомандныйФайл.ДобавитьКоманду("chcp 866 >nul");// >nul важен для исключения ненужной надписи с иероглифами
КомандныйФайл.ДобавитьКоманду("exit /b %gitsync_exit%");
КонецЕсли;

ИмяФайлаВыполнения = КомандныйФайл.Закрыть();

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

рез = КомандныйФайл.Исполнить();

Лог.Информация("ВыполнитьКоммитГит: Вызов git commit вернул код <" + рез + "> ");
// Выполняет фиксацию изменений в локальном каталоге git
//
Процедура ВыполнитьКоммитГит(Знач КаталогРабочейКопии, Знач Комментарий, Знач Автор, Знач Дата = Неопределено) Экспорт

ВыводКоманды = КомандныйФайл.ПолучитьВывод();
Если рез <> 0 Тогда
Лог.Ошибка("ВыполнитьКоммитГит: Лог неудачной команды git commit %1%2", Символы.ПС, ВыводКоманды);
Иначе
Лог.Отладка("ВыполнитьКоммитГит: Лог команды git commit %1%2", Символы.ПС, ВыводКоманды);
Если Дата = Неопределено Тогда
Дата = ТекущаяДата();
КонецЕсли;

УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаВыполнения);
УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаКомментария);

Если Рез <> 0 Тогда
ВызватьИсключение "Коммит в git выполнить не удалось. См. лог";
КонецЕсли;
авторДляГит = Автор;

Лог.Отладка(СтрШаблон("Автор коммита: %1", авторДляГит));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лог.Отладка(СтрШаблон давно устарел.

СтрШаблон не нужен, можно сразу писать Лог.Отладка("%1", Парам);

ДатаДляГит = ДатаPOSIX(Дата);
Лог.Отладка(СтрШаблон("Дата коммита: %1", ДатаДляГит));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лог.Отладка(СтрШаблон давно устарел.

СтрШаблон не нужен, можно сразу писать Лог.Отладка("%1", Парам);

ИмяФайлаКомментария = ПодготовитьФайлКоммита(Комментарий);

ГитРепозиторий = ПолучитьГитРепозиторий(КаталогРабочейКопии);
// Выполнение индексации всех измененных файлов
ГитРепозиторий.ВыполнитьКоманду(СтрРазделить("add -A .", " "));
ГитРепозиторий.Закоммитить(Комментарий,
Истина,
ИмяФайлаКомментария,
авторДляГит,
ДатаДляГит,
авторДляГит,
ДатаДляГит);
Лог.Отладка(СтрШаблон("Вывод команды Commit: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды())));

ЗавершитьПроцесс_TGitCache_exe();

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

// Cтандартная процедура git push
//
Функция ВыполнитьGitPush(Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки = Неопределено) Экспорт

КомандныйФайл = Новый КомандныйФайл;
ИмяФайлаЛогаКоммита = ВременныеФайлы.СоздатьФайл("log");
Если ЭтоWindows Тогда
КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd /d ""%1""", ЛокальныйРепозиторий));
Иначе
КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd ""%1""", ЛокальныйРепозиторий));
КонецЕсли;

КомандныйФайл.ДобавитьКоманду("git gc --auto");
ГитРепозиторий = ПолучитьГитРепозиторий(ЛокальныйРепозиторий);
// Оптимизация git
ГитРепозиторий.ВыполнитьКоманду(СтрРазделить("gc --auto", " "));
Лог.Отладка(СтрШаблон("Вывод команды gc: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды())));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лог.Отладка(СтрШаблон давно устарел.

СтрШаблон не нужен, можно сразу писать Лог.Отладка("%1", Парам);


ПараметрыКомандыPush = Новый Массив;
ПараметрыКомандыPush.Добавить("push -u");
ПараметрыКомандыPush.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%"));
ПараметрыКомандыPush.Добавить("--all -v");

ПараметрыКоманды = Новый Массив;
ПараметрыКоманды.Добавить("git push -u");
ПараметрыКоманды.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%"));
ПараметрыКоманды.Добавить("--all -v");
ПараметрыКоманды.Добавить(КомандныйФайл.СуффиксПеренаправленияВывода(ИмяФайлаЛогаКоммита, Истина));

СтрокаКоманды = СобратьКоманднуюСтроку(ПараметрыКоманды);
Если Лог.Уровень() = УровниЛога.Отладка Тогда
сообщение = "строкаКоманды = <"+?(строкаКоманды = Неопределено, "Неопределено", строкаКоманды)+">";
Лог.Отладка(сообщение);
КонецЕсли;
ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыPush);

КомандныйФайл.ДобавитьКоманду(СтрокаКоманды);
КомандныйФайл.ДобавитьКоманду("exit " + ?(ЭтоWindows, "/b %ERRORLEVEL%", "$#"));
Лог.Отладка(СтрШаблон("Вывод команды Push: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды())));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лог.Отладка(СтрШаблон давно устарел.

СтрШаблон не нужен, можно сразу писать Лог.Отладка("%1", Парам);


Результат = КомандныйФайл.Исполнить();
ВывестиТекстФайла(ИмяФайлаЛогаКоммита);
УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаЛогаКоммита);
УдалитьВременныеФайлыПриНеобходимости(КомандныйФайл.Закрыть());
ЗавершитьПроцесс_TGitCache_exe();

Возврат Результат;
Возврат 0;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@khorevaa @nixel2007 Почему подменяется возврат результата?
Было
Возврат Результат;
Стало
Возврат 0;

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ммм косяк. Надо подумать! Поправлю на досуге хотя там вылетить исключение уже из gitrunner


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

// Cтандартная процедура git pull
//
Функция ВыполнитьGitPull(Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки) Экспорт

КомандныйФайл = Новый КомандныйФайл;
ИмяФайлаЛогаКоммита = ВременныеФайлы.СоздатьФайл("log");
Если ЭтоWindows Тогда
КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd /d ""%1""", ЛокальныйРепозиторий));
Иначе
КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd ""%1""", ЛокальныйРепозиторий));
КонецЕсли;

ПараметрыКоманды = Новый Массив;
ПараметрыКоманды.Добавить("git pull");
ПараметрыКоманды.Добавить("-v");
ПараметрыКоманды.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%"));
ПараметрыКоманды.Добавить(КомандныйФайл.СуффиксПеренаправленияВывода(ИмяФайлаЛогаКоммита, Истина));

СтрокаКоманды = СобратьКоманднуюСтроку(ПараметрыКоманды);
сообщение = "строкаКоманды = <"+?(строкаКоманды = Неопределено, "Неопределено", строкаКоманды)+">";
Лог.Отладка(сообщение);
КомандныйФайл.ДобавитьКоманду(СтрокаКоманды);
КомандныйФайл.ДобавитьКоманду("exit " + ?(ЭтоWindows, "/b %ERRORLEVEL%", "$#"));

Результат = КомандныйФайл.Исполнить();
ВывестиТекстФайла(ИмяФайлаЛогаКоммита);
УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаЛогаКоммита);
УдалитьВременныеФайлыПриНеобходимости(КомандныйФайл.Закрыть());
ГитРепозиторий = ПолучитьГитРепозиторий(ЛокальныйРепозиторий);
ГитРепозиторий.Получить(УдаленныйРепозиторий, ИмяВетки);

Возврат Результат;
Лог.Отладка(СтрШаблон("Вывод команды Pull: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды())));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лог.Отладка(СтрШаблон давно устарел.

СтрШаблон не нужен, можно сразу писать Лог.Отладка("%1", Парам);

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Так и ПР висел хз скок времени


ЗавершитьПроцесс_TGitCache_exe();

Возврат 0;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@khorevaa @nixel2007 Почему подменяется возврат результата?
Было
Возврат Результат;
Стало
Возврат 0;


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

Expand Down Expand Up @@ -1399,6 +1349,7 @@
ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;

Лог = Логирование.ПолучитьЛог("oscript.app.gitsync");

ДоменПочтыДляGitПоУмолчанию = "localhost";
УдалятьВременныеФайлы = Ложь;
КоличествоЦикловОжиданияЛицензииПоУмолчанию = 1;
Loading