|
13 | 13 | #Использовать v8runner |
14 | 14 | #Использовать strings |
15 | 15 | #Использовать 1commands |
| 16 | +#Использовать gitrunner |
16 | 17 |
|
17 | 18 | Перем Лог; |
18 | 19 | Перем мФайлПрограммыРаспаковки; |
|
429 | 430 |
|
430 | 431 | КонецПроцедуры |
431 | 432 |
|
432 | | -// Выполняет фиксацию изменений в локальном каталоге git |
| 433 | +///////////////////////////////////// |
| 434 | +// GIT Пересмотр |
| 435 | + |
| 436 | +// <Описание процедуры> |
433 | 437 | // |
434 | | -Процедура ВыполнитьКоммитГит(Знач КаталогРабочейКопии, Знач Комментарий, Знач Автор, Знач Дата=Неопределено) Экспорт |
| 438 | +Функция ПолучитьГитРепозиторий(Знач КаталогРабочейКопии) |
435 | 439 |
|
436 | | - Если Дата = Неопределено Тогда |
437 | | - Дата = ТекущаяДата(); |
438 | | - КонецЕсли; |
| 440 | + ГитРепозиторий = Новый ГитРепозиторий; |
| 441 | + ГитРепозиторий.УстановитьРабочийКаталог(КаталогРабочейКопии); |
| 442 | + ГитРепозиторий.УстановитьНастройку("core.quotepath","false",РежимУстановкиНастроекGit.Локально); |
| 443 | + ГитРепозиторий.УстановитьНастройку("merge.ours.driver","true",РежимУстановкиНастроекGit.Локально); |
| 444 | + Возврат ГитРепозиторий; |
| 445 | + |
| 446 | +КонецФункции // ПолучитьГитРепозиторий() |
| 447 | + |
| 448 | +Функция ПодготовитьФайлКоммита(Знач Комментарий) |
439 | 449 |
|
440 | 450 | ИмяФайлаКомментария = ВременныеФайлы.СоздатьФайл("txt"); |
441 | 451 | ФайлКомментария = Новый ЗаписьТекста(ИмяФайлаКомментария, КодировкаТекста.UTF8NoBOM); |
442 | 452 | ФайлКомментария.Записать(?(ПустаяСтрока(Комментарий), ".", Комментарий)); |
443 | 453 | ФайлКомментария.Закрыть(); |
444 | | - Лог.Информация("Текст коммита: <"+Комментарий+">"); |
445 | | - |
446 | | - КомандныйФайл = Новый КомандныйФайл; |
447 | | - |
448 | | - КомандныйФайл.УстановитьКодировкуВывода(КодировкаТекста.UTF8); |
449 | | - |
450 | | - ПрефиксЭкспортаПеременной = ?(ЭтоWindows, "set", "export"); |
451 | | - Если ЭтоWindows Тогда |
452 | | - КомандныйФайл.ДобавитьКоманду("cd /d " + ОбернутьВКавычки(КаталогРабочейКопии)); |
453 | | - Иначе |
454 | | - КомандныйФайл.ДобавитьКоманду("cd " + ОбернутьВКавычки(КаталогРабочейКопии)); |
455 | | - КонецЕсли; |
456 | | - КомандныйФайл.ДобавитьКоманду(ПрефиксЭкспортаПеременной + " GIT_AUTHOR_DATE="+ОбернутьВКавычки(ДатаPOSIX(Дата))); |
457 | | - КомандныйФайл.ДобавитьКоманду(ПрефиксЭкспортаПеременной + " GIT_COMMITTER_DATE="+ОбернутьВКавычки(ДатаPOSIX(Дата))); |
458 | | - КомандныйФайл.ДобавитьКоманду(СтрШаблон("git add -A .")); |
| 454 | + Лог.Отладка(СтрШаблон("Текст коммита: %1", Комментарий)); |
459 | 455 |
|
460 | | - авторДляГит = Автор; |
461 | | - Если Найти(Автор, "<") <= Найти(Автор, ">") Тогда |
462 | | - авторДляГит = Автор+" <"+Автор+"@localhost>"; // e-mail может быть удобен для поиска в связанных системах //авторДляГит = Автор+" <"+Автор+">"; |
463 | | - КонецЕсли; |
| 456 | + Возврат ИмяФайлаКомментария; |
464 | 457 |
|
465 | | - КомандаКоммита = СтрШаблон("git commit -a --file=""%1"" --author=""%2"" ", ИмяФайлаКомментария, Автор); |
466 | | - |
467 | | - КомандныйФайл.ДобавитьКоманду(КомандаКоммита); |
468 | | - |
469 | | - Если Не ЭтоWindows Тогда |
470 | | - КомандныйФайл.ДобавитьКоманду("exit $#"); |
471 | | - Иначе |
472 | | - // сейчас аккуратно верну кодировку, |
473 | | - // иначе после выполнения коммита все последующие команды скриптов будут неверно отображаться в консоли! |
474 | | - КомандныйФайл.ДобавитьКоманду("set gitsync_exit=%ERRORLEVEL%"); |
475 | | - КомандныйФайл.ДобавитьКоманду("chcp 866 >nul");// >nul важен для исключения ненужной надписи с иероглифами |
476 | | - КомандныйФайл.ДобавитьКоманду("exit /b %gitsync_exit%"); |
477 | | - КонецЕсли; |
478 | | - |
479 | | - ИмяФайлаВыполнения = КомандныйФайл.Закрыть(); |
480 | | - |
481 | | - Если Лог.Уровень() = УровниЛога.Отладка Тогда |
482 | | - текстФайла = ""; |
483 | | - Если ПолучитьТекстФайла(ИмяФайлаВыполнения, текстФайла) Тогда |
484 | | - Лог.Отладка("ВыполнитьКоммитГит: текст файла запуска "+Символы.ВК+текстФайла); |
485 | | - Иначе |
486 | | - Лог.Ошибка("ВыполнитьКоммитГит: не удалось вывести текст пакетного файла"); |
487 | | - КонецЕсли; |
488 | | - КонецЕсли; |
| 458 | +КонецФункции |
489 | 459 |
|
490 | | - рез = КомандныйФайл.Исполнить(); |
491 | 460 |
|
492 | | - Лог.Информация("ВыполнитьКоммитГит: Вызов git commit вернул код <" + рез + "> "); |
| 461 | +// Выполняет фиксацию изменений в локальном каталоге git |
| 462 | +// |
| 463 | +Процедура ВыполнитьКоммитГит(Знач КаталогРабочейКопии, Знач Комментарий, Знач Автор, Знач Дата = Неопределено) Экспорт |
493 | 464 |
|
494 | | - ВыводКоманды = КомандныйФайл.ПолучитьВывод(); |
495 | | - Если рез <> 0 Тогда |
496 | | - Лог.Ошибка("ВыполнитьКоммитГит: Лог неудачной команды git commit %1%2", Символы.ПС, ВыводКоманды); |
497 | | - Иначе |
498 | | - Лог.Отладка("ВыполнитьКоммитГит: Лог команды git commit %1%2", Символы.ПС, ВыводКоманды); |
| 465 | + Если Дата = Неопределено Тогда |
| 466 | + Дата = ТекущаяДата(); |
499 | 467 | КонецЕсли; |
500 | 468 |
|
501 | | - УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаВыполнения); |
502 | | - УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаКомментария); |
503 | | - |
504 | | - Если Рез <> 0 Тогда |
505 | | - ВызватьИсключение "Коммит в git выполнить не удалось. См. лог"; |
506 | | - КонецЕсли; |
| 469 | + авторДляГит = Автор; |
| 470 | + |
| 471 | + Лог.Отладка(СтрШаблон("Автор коммита: %1", авторДляГит)); |
| 472 | + ДатаДляГит = ДатаPOSIX(Дата); |
| 473 | + Лог.Отладка(СтрШаблон("Дата коммита: %1", ДатаДляГит)); |
| 474 | + ИмяФайлаКомментария = ПодготовитьФайлКоммита(Комментарий); |
| 475 | + |
| 476 | + ГитРепозиторий = ПолучитьГитРепозиторий(КаталогРабочейКопии); |
| 477 | + // Выполнение индексации всех измененных файлов |
| 478 | + ГитРепозиторий.ВыполнитьКоманду(СтрРазделить("add -A .", " ")); |
| 479 | + ГитРепозиторий.Закоммитить(Комментарий, |
| 480 | + Истина, |
| 481 | + ИмяФайлаКомментария, |
| 482 | + авторДляГит, |
| 483 | + ДатаДляГит, |
| 484 | + авторДляГит, |
| 485 | + ДатаДляГит); |
| 486 | + Лог.Отладка(СтрШаблон("Вывод команды Commit: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды()))); |
| 487 | + |
| 488 | + ЗавершитьПроцесс_TGitCache_exe(); |
507 | 489 |
|
508 | 490 | КонецПроцедуры |
509 | 491 |
|
510 | 492 | // Cтандартная процедура git push |
511 | 493 | // |
512 | 494 | Функция ВыполнитьGitPush(Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки = Неопределено) Экспорт |
513 | 495 |
|
514 | | - КомандныйФайл = Новый КомандныйФайл; |
515 | | - ИмяФайлаЛогаКоммита = ВременныеФайлы.СоздатьФайл("log"); |
516 | | - Если ЭтоWindows Тогда |
517 | | - КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd /d ""%1""", ЛокальныйРепозиторий)); |
518 | | - Иначе |
519 | | - КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd ""%1""", ЛокальныйРепозиторий)); |
520 | | - КонецЕсли; |
521 | | - |
522 | | - КомандныйФайл.ДобавитьКоманду("git gc --auto"); |
| 496 | + ГитРепозиторий = ПолучитьГитРепозиторий(ЛокальныйРепозиторий); |
| 497 | + // Оптимизация git |
| 498 | + ГитРепозиторий.ВыполнитьКоманду(СтрРазделить("gc --auto", " ")); |
| 499 | + Лог.Отладка(СтрШаблон("Вывод команды gc: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды()))); |
| 500 | + |
| 501 | + ПараметрыКомандыPush = Новый Массив; |
| 502 | + ПараметрыКомандыPush.Добавить("push -u"); |
| 503 | + ПараметрыКомандыPush.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%")); |
| 504 | + ПараметрыКомандыPush.Добавить("--all -v"); |
523 | 505 |
|
524 | | - ПараметрыКоманды = Новый Массив; |
525 | | - ПараметрыКоманды.Добавить("git push -u"); |
526 | | - ПараметрыКоманды.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%")); |
527 | | - ПараметрыКоманды.Добавить("--all -v"); |
528 | | - ПараметрыКоманды.Добавить(КомандныйФайл.СуффиксПеренаправленияВывода(ИмяФайлаЛогаКоммита, Истина)); |
529 | | - |
530 | | - СтрокаКоманды = СобратьКоманднуюСтроку(ПараметрыКоманды); |
531 | | - Если Лог.Уровень() = УровниЛога.Отладка Тогда |
532 | | - сообщение = "строкаКоманды = <"+?(строкаКоманды = Неопределено, "Неопределено", строкаКоманды)+">"; |
533 | | - Лог.Отладка(сообщение); |
534 | | - КонецЕсли; |
| 506 | + ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыPush); |
535 | 507 |
|
536 | | - КомандныйФайл.ДобавитьКоманду(СтрокаКоманды); |
537 | | - КомандныйФайл.ДобавитьКоманду("exit " + ?(ЭтоWindows, "/b %ERRORLEVEL%", "$#")); |
| 508 | + Лог.Отладка(СтрШаблон("Вывод команды Push: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды()))); |
538 | 509 |
|
539 | | - Результат = КомандныйФайл.Исполнить(); |
540 | | - ВывестиТекстФайла(ИмяФайлаЛогаКоммита); |
541 | | - УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаЛогаКоммита); |
542 | | - УдалитьВременныеФайлыПриНеобходимости(КомандныйФайл.Закрыть()); |
543 | 510 | ЗавершитьПроцесс_TGitCache_exe(); |
544 | 511 |
|
545 | | - Возврат Результат; |
| 512 | + Возврат 0; |
546 | 513 |
|
547 | 514 | КонецФункции |
548 | 515 |
|
549 | 516 | // Cтандартная процедура git pull |
550 | 517 | // |
551 | 518 | Функция ВыполнитьGitPull(Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки) Экспорт |
552 | 519 |
|
553 | | - КомандныйФайл = Новый КомандныйФайл; |
554 | | - ИмяФайлаЛогаКоммита = ВременныеФайлы.СоздатьФайл("log"); |
555 | | - Если ЭтоWindows Тогда |
556 | | - КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd /d ""%1""", ЛокальныйРепозиторий)); |
557 | | - Иначе |
558 | | - КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd ""%1""", ЛокальныйРепозиторий)); |
559 | | - КонецЕсли; |
560 | 520 |
|
561 | | - ПараметрыКоманды = Новый Массив; |
562 | | - ПараметрыКоманды.Добавить("git pull"); |
563 | | - ПараметрыКоманды.Добавить("-v"); |
564 | | - ПараметрыКоманды.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%")); |
565 | | - ПараметрыКоманды.Добавить(КомандныйФайл.СуффиксПеренаправленияВывода(ИмяФайлаЛогаКоммита, Истина)); |
566 | | - |
567 | | - СтрокаКоманды = СобратьКоманднуюСтроку(ПараметрыКоманды); |
568 | | - сообщение = "строкаКоманды = <"+?(строкаКоманды = Неопределено, "Неопределено", строкаКоманды)+">"; |
569 | | - Лог.Отладка(сообщение); |
570 | | - КомандныйФайл.ДобавитьКоманду(СтрокаКоманды); |
571 | | - КомандныйФайл.ДобавитьКоманду("exit " + ?(ЭтоWindows, "/b %ERRORLEVEL%", "$#")); |
572 | | - |
573 | | - Результат = КомандныйФайл.Исполнить(); |
574 | | - ВывестиТекстФайла(ИмяФайлаЛогаКоммита); |
575 | | - УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаЛогаКоммита); |
576 | | - УдалитьВременныеФайлыПриНеобходимости(КомандныйФайл.Закрыть()); |
| 521 | + ГитРепозиторий = ПолучитьГитРепозиторий(ЛокальныйРепозиторий); |
| 522 | + ГитРепозиторий.Получить(УдаленныйРепозиторий, ИмяВетки); |
577 | 523 |
|
578 | | - Возврат Результат; |
| 524 | + Лог.Отладка(СтрШаблон("Вывод команды Pull: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды()))); |
| 525 | + |
| 526 | + ЗавершитьПроцесс_TGitCache_exe(); |
| 527 | + |
| 528 | + Возврат 0; |
579 | 529 |
|
580 | 530 | КонецФункции |
581 | 531 |
|
|
1433 | 1383 | ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; |
1434 | 1384 |
|
1435 | 1385 | Лог = Логирование.ПолучитьЛог("oscript.app.gitsync"); |
| 1386 | + |
1436 | 1387 | ДоменПочтыДляGitПоУмолчанию = "localhost"; |
1437 | 1388 | УдалятьВременныеФайлы = Ложь; |
1438 | 1389 | КоличествоЦикловОжиданияЛицензииПоУмолчанию = 1; |
0 commit comments