Skip to content

Commit 68c8ecc

Browse files
authored
Merge pull request #69 from Khorevaa/feature/change-git-work
Замена использования bat при работе с git
2 parents b1bc2c8 + 121745a commit 68c8ecc

File tree

4 files changed

+88
-122
lines changed

4 files changed

+88
-122
lines changed

packagedef

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
.ЗависитОт("tempfiles")
1010
.ЗависитОт("tool1cd", "0.4")
1111
.ЗависитОт("v8runner", "0.7.0")
12+
.ЗависитОт("gitrunner", "1.1.0")
1213
.ЗависитОт("strings")
1314
.ЗависитОт("1commands", "1.1.1")
1415
.ЗависитОт("v8unpack")

src/core/Классы/МенеджерСинхронизации.os

Lines changed: 63 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#Использовать strings
1515
#Использовать 1commands
1616
#Использовать v8unpack
17+
#Использовать gitrunner
1718

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

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

424-
// Выполняет фиксацию изменений в локальном каталоге git
425+
/////////////////////////////////////
426+
// GIT Пересмотр
427+
428+
// <Описание процедуры>
425429
//
426-
Процедура ВыполнитьКоммитГит(Знач КаталогРабочейКопии, Знач Комментарий, Знач Автор, Знач Дата=Неопределено) Экспорт
430+
Функция ПолучитьГитРепозиторий(Знач КаталогРабочейКопии)
427431

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

432442
ИмяФайлаКомментария = ВременныеФайлы.СоздатьФайл("txt");
433443
ФайлКомментария = Новый ЗаписьТекста(ИмяФайлаКомментария, КодировкаТекста.UTF8NoBOM);
434444
ФайлКомментария.Записать(?(ПустаяСтрока(Комментарий), ".", Комментарий));
435445
ФайлКомментария.Закрыть();
436-
Лог.Информация("Текст коммита: <"+Комментарий+">");
437-
438-
КомандныйФайл = Новый КомандныйФайл;
439-
440-
КомандныйФайл.УстановитьКодировкуВывода(КодировкаТекста.UTF8);
441-
442-
ПрефиксЭкспортаПеременной = ?(ЭтоWindows, "set", "export");
443-
Если ЭтоWindows Тогда
444-
КомандныйФайл.ДобавитьКоманду("cd /d " + ОбернутьВКавычки(КаталогРабочейКопии));
445-
Иначе
446-
КомандныйФайл.ДобавитьКоманду("cd " + ОбернутьВКавычки(КаталогРабочейКопии));
447-
КонецЕсли;
448-
КомандныйФайл.ДобавитьКоманду(ПрефиксЭкспортаПеременной + " GIT_AUTHOR_DATE="+ОбернутьВКавычки(ДатаPOSIX(Дата)));
449-
КомандныйФайл.ДобавитьКоманду(ПрефиксЭкспортаПеременной + " GIT_COMMITTER_DATE="+ОбернутьВКавычки(ДатаPOSIX(Дата)));
450-
КомандныйФайл.ДобавитьКоманду(СтрШаблон("git add -A ."));
446+
Лог.Отладка(СтрШаблон("Текст коммита: %1", Комментарий));
451447

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

457-
КомандаКоммита = СтрШаблон("git commit -a --file=""%1"" --author=""%2"" ", ИмяФайлаКомментария, Автор);
458-
459-
КомандныйФайл.ДобавитьКоманду(КомандаКоммита);
460-
461-
Если Не ЭтоWindows Тогда
462-
КомандныйФайл.ДобавитьКоманду("exit $#");
463-
Иначе
464-
// сейчас аккуратно верну кодировку,
465-
// иначе после выполнения коммита все последующие команды скриптов будут неверно отображаться в консоли!
466-
КомандныйФайл.ДобавитьКоманду("set gitsync_exit=%ERRORLEVEL%");
467-
КомандныйФайл.ДобавитьКоманду("chcp 866 >nul");// >nul важен для исключения ненужной надписи с иероглифами
468-
КомандныйФайл.ДобавитьКоманду("exit /b %gitsync_exit%");
469-
КонецЕсли;
470-
471-
ИмяФайлаВыполнения = КомандныйФайл.Закрыть();
472-
473-
Если Лог.Уровень() = УровниЛога.Отладка Тогда
474-
текстФайла = "";
475-
Если ПолучитьТекстФайла(ИмяФайлаВыполнения, текстФайла) Тогда
476-
Лог.Отладка("ВыполнитьКоммитГит: текст файла запуска "+Символы.ВК+текстФайла);
477-
Иначе
478-
Лог.Ошибка("ВыполнитьКоммитГит: не удалось вывести текст пакетного файла");
479-
КонецЕсли;
480-
КонецЕсли;
450+
КонецФункции
481451

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

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

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

493-
УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаВыполнения);
494-
УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаКомментария);
495-
496-
Если Рез <> 0 Тогда
497-
ВызватьИсключение "Коммит в git выполнить не удалось. См. лог";
498-
КонецЕсли;
461+
авторДляГит = Автор;
462+
463+
Лог.Отладка(СтрШаблон("Автор коммита: %1", авторДляГит));
464+
ДатаДляГит = ДатаPOSIX(Дата);
465+
Лог.Отладка(СтрШаблон("Дата коммита: %1", ДатаДляГит));
466+
ИмяФайлаКомментария = ПодготовитьФайлКоммита(Комментарий);
467+
468+
ГитРепозиторий = ПолучитьГитРепозиторий(КаталогРабочейКопии);
469+
// Выполнение индексации всех измененных файлов
470+
ГитРепозиторий.ВыполнитьКоманду(СтрРазделить("add -A .", " "));
471+
ГитРепозиторий.Закоммитить(Комментарий,
472+
Истина,
473+
ИмяФайлаКомментария,
474+
авторДляГит,
475+
ДатаДляГит,
476+
авторДляГит,
477+
ДатаДляГит);
478+
Лог.Отладка(СтрШаблон("Вывод команды Commit: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды())));
479+
480+
ЗавершитьПроцесс_TGitCache_exe();
499481

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

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

506-
КомандныйФайл = Новый КомандныйФайл;
507-
ИмяФайлаЛогаКоммита = ВременныеФайлы.СоздатьФайл("log");
508-
Если ЭтоWindows Тогда
509-
КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd /d ""%1""", ЛокальныйРепозиторий));
510-
Иначе
511-
КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd ""%1""", ЛокальныйРепозиторий));
512-
КонецЕсли;
513-
514-
КомандныйФайл.ДобавитьКоманду("git gc --auto");
488+
ГитРепозиторий = ПолучитьГитРепозиторий(ЛокальныйРепозиторий);
489+
// Оптимизация git
490+
ГитРепозиторий.ВыполнитьКоманду(СтрРазделить("gc --auto", " "));
491+
Лог.Отладка(СтрШаблон("Вывод команды gc: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды())));
492+
493+
ПараметрыКомандыPush = Новый Массив;
494+
ПараметрыКомандыPush.Добавить("push -u");
495+
ПараметрыКомандыPush.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%"));
496+
ПараметрыКомандыPush.Добавить("--all -v");
515497

516-
ПараметрыКоманды = Новый Массив;
517-
ПараметрыКоманды.Добавить("git push -u");
518-
ПараметрыКоманды.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%"));
519-
ПараметрыКоманды.Добавить("--all -v");
520-
ПараметрыКоманды.Добавить(КомандныйФайл.СуффиксПеренаправленияВывода(ИмяФайлаЛогаКоммита, Истина));
521-
522-
СтрокаКоманды = СобратьКоманднуюСтроку(ПараметрыКоманды);
523-
Если Лог.Уровень() = УровниЛога.Отладка Тогда
524-
сообщение = "строкаКоманды = <"+?(строкаКоманды = Неопределено, "Неопределено", строкаКоманды)+">";
525-
Лог.Отладка(сообщение);
526-
КонецЕсли;
498+
ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыPush);
527499

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

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

537-
Возврат Результат;
504+
Возврат 0;
538505

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

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

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

553-
ПараметрыКоманды = Новый Массив;
554-
ПараметрыКоманды.Добавить("git pull");
555-
ПараметрыКоманды.Добавить("-v");
556-
ПараметрыКоманды.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%"));
557-
ПараметрыКоманды.Добавить(КомандныйФайл.СуффиксПеренаправленияВывода(ИмяФайлаЛогаКоммита, Истина));
558-
559-
СтрокаКоманды = СобратьКоманднуюСтроку(ПараметрыКоманды);
560-
сообщение = "строкаКоманды = <"+?(строкаКоманды = Неопределено, "Неопределено", строкаКоманды)+">";
561-
Лог.Отладка(сообщение);
562-
КомандныйФайл.ДобавитьКоманду(СтрокаКоманды);
563-
КомандныйФайл.ДобавитьКоманду("exit " + ?(ЭтоWindows, "/b %ERRORLEVEL%", "$#"));
564-
565-
Результат = КомандныйФайл.Исполнить();
566-
ВывестиТекстФайла(ИмяФайлаЛогаКоммита);
567-
УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаЛогаКоммита);
568-
УдалитьВременныеФайлыПриНеобходимости(КомандныйФайл.Закрыть());
513+
ГитРепозиторий = ПолучитьГитРепозиторий(ЛокальныйРепозиторий);
514+
ГитРепозиторий.Получить(УдаленныйРепозиторий, ИмяВетки);
569515

570-
Возврат Результат;
516+
Лог.Отладка(СтрШаблон("Вывод команды Pull: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды())));
517+
518+
ЗавершитьПроцесс_TGitCache_exe();
519+
520+
Возврат 0;
571521

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

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

14011351
Лог = Логирование.ПолучитьЛог("oscript.app.gitsync");
1352+
14021353
ДоменПочтыДляGitПоУмолчанию = "localhost";
14031354
УдалятьВременныеФайлы = Ложь;
14041355
КоличествоЦикловОжиданияЛицензииПоУмолчанию = 1;

0 commit comments

Comments
 (0)