|
14 | 14 | #Использовать strings |
15 | 15 | #Использовать 1commands |
16 | 16 | #Использовать v8unpack |
| 17 | +#Использовать gitrunner |
17 | 18 |
|
18 | 19 | Перем Лог; |
19 | 20 | Перем мФайлПрограммыРаспаковки; |
|
421 | 422 |
|
422 | 423 | КонецПроцедуры |
423 | 424 |
|
424 | | -// Выполняет фиксацию изменений в локальном каталоге git |
| 425 | +///////////////////////////////////// |
| 426 | +// GIT Пересмотр |
| 427 | + |
| 428 | +// <Описание процедуры> |
425 | 429 | // |
426 | | -Процедура ВыполнитьКоммитГит(Знач КаталогРабочейКопии, Знач Комментарий, Знач Автор, Знач Дата=Неопределено) Экспорт |
| 430 | +Функция ПолучитьГитРепозиторий(Знач КаталогРабочейКопии) |
427 | 431 |
|
428 | | - Если Дата = Неопределено Тогда |
429 | | - Дата = ТекущаяДата(); |
430 | | - КонецЕсли; |
| 432 | + ГитРепозиторий = Новый ГитРепозиторий; |
| 433 | + ГитРепозиторий.УстановитьРабочийКаталог(КаталогРабочейКопии); |
| 434 | + ГитРепозиторий.УстановитьНастройку("core.quotepath","false",РежимУстановкиНастроекGit.Локально); |
| 435 | + ГитРепозиторий.УстановитьНастройку("merge.ours.driver","true",РежимУстановкиНастроекGit.Локально); |
| 436 | + Возврат ГитРепозиторий; |
| 437 | + |
| 438 | +КонецФункции // ПолучитьГитРепозиторий() |
| 439 | + |
| 440 | +Функция ПодготовитьФайлКоммита(Знач Комментарий) |
431 | 441 |
|
432 | 442 | ИмяФайлаКомментария = ВременныеФайлы.СоздатьФайл("txt"); |
433 | 443 | ФайлКомментария = Новый ЗаписьТекста(ИмяФайлаКомментария, КодировкаТекста.UTF8NoBOM); |
434 | 444 | ФайлКомментария.Записать(?(ПустаяСтрока(Комментарий), ".", Комментарий)); |
435 | 445 | ФайлКомментария.Закрыть(); |
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", Комментарий)); |
451 | 447 |
|
452 | | - авторДляГит = Автор; |
453 | | - Если Найти(Автор, "<") <= Найти(Автор, ">") Тогда |
454 | | - авторДляГит = Автор+" <"+Автор+"@localhost>"; // e-mail может быть удобен для поиска в связанных системах //авторДляГит = Автор+" <"+Автор+">"; |
455 | | - КонецЕсли; |
| 448 | + Возврат ИмяФайлаКомментария; |
456 | 449 |
|
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 | +КонецФункции |
481 | 451 |
|
482 | | - рез = КомандныйФайл.Исполнить(); |
483 | 452 |
|
484 | | - Лог.Информация("ВыполнитьКоммитГит: Вызов git commit вернул код <" + рез + "> "); |
| 453 | +// Выполняет фиксацию изменений в локальном каталоге git |
| 454 | +// |
| 455 | +Процедура ВыполнитьКоммитГит(Знач КаталогРабочейКопии, Знач Комментарий, Знач Автор, Знач Дата = Неопределено) Экспорт |
485 | 456 |
|
486 | | - ВыводКоманды = КомандныйФайл.ПолучитьВывод(); |
487 | | - Если рез <> 0 Тогда |
488 | | - Лог.Ошибка("ВыполнитьКоммитГит: Лог неудачной команды git commit %1%2", Символы.ПС, ВыводКоманды); |
489 | | - Иначе |
490 | | - Лог.Отладка("ВыполнитьКоммитГит: Лог команды git commit %1%2", Символы.ПС, ВыводКоманды); |
| 457 | + Если Дата = Неопределено Тогда |
| 458 | + Дата = ТекущаяДата(); |
491 | 459 | КонецЕсли; |
492 | 460 |
|
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(); |
499 | 481 |
|
500 | 482 | КонецПроцедуры |
501 | 483 |
|
502 | 484 | // Cтандартная процедура git push |
503 | 485 | // |
504 | 486 | Функция ВыполнитьGitPush(Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки = Неопределено) Экспорт |
505 | 487 |
|
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"); |
515 | 497 |
|
516 | | - ПараметрыКоманды = Новый Массив; |
517 | | - ПараметрыКоманды.Добавить("git push -u"); |
518 | | - ПараметрыКоманды.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%")); |
519 | | - ПараметрыКоманды.Добавить("--all -v"); |
520 | | - ПараметрыКоманды.Добавить(КомандныйФайл.СуффиксПеренаправленияВывода(ИмяФайлаЛогаКоммита, Истина)); |
521 | | - |
522 | | - СтрокаКоманды = СобратьКоманднуюСтроку(ПараметрыКоманды); |
523 | | - Если Лог.Уровень() = УровниЛога.Отладка Тогда |
524 | | - сообщение = "строкаКоманды = <"+?(строкаКоманды = Неопределено, "Неопределено", строкаКоманды)+">"; |
525 | | - Лог.Отладка(сообщение); |
526 | | - КонецЕсли; |
| 498 | + ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыPush); |
527 | 499 |
|
528 | | - КомандныйФайл.ДобавитьКоманду(СтрокаКоманды); |
529 | | - КомандныйФайл.ДобавитьКоманду("exit " + ?(ЭтоWindows, "/b %ERRORLEVEL%", "$#")); |
| 500 | + Лог.Отладка(СтрШаблон("Вывод команды Push: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды()))); |
530 | 501 |
|
531 | | - Результат = КомандныйФайл.Исполнить(); |
532 | | - ВывестиТекстФайла(ИмяФайлаЛогаКоммита); |
533 | | - УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаЛогаКоммита); |
534 | | - УдалитьВременныеФайлыПриНеобходимости(КомандныйФайл.Закрыть()); |
535 | 502 | ЗавершитьПроцесс_TGitCache_exe(); |
536 | 503 |
|
537 | | - Возврат Результат; |
| 504 | + Возврат 0; |
538 | 505 |
|
539 | 506 | КонецФункции |
540 | 507 |
|
541 | 508 | // Cтандартная процедура git pull |
542 | 509 | // |
543 | 510 | Функция ВыполнитьGitPull(Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки) Экспорт |
544 | 511 |
|
545 | | - КомандныйФайл = Новый КомандныйФайл; |
546 | | - ИмяФайлаЛогаКоммита = ВременныеФайлы.СоздатьФайл("log"); |
547 | | - Если ЭтоWindows Тогда |
548 | | - КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd /d ""%1""", ЛокальныйРепозиторий)); |
549 | | - Иначе |
550 | | - КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd ""%1""", ЛокальныйРепозиторий)); |
551 | | - КонецЕсли; |
552 | 512 |
|
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 | + ГитРепозиторий.Получить(УдаленныйРепозиторий, ИмяВетки); |
569 | 515 |
|
570 | | - Возврат Результат; |
| 516 | + Лог.Отладка(СтрШаблон("Вывод команды Pull: %1", СокрЛП(ГитРепозиторий.ПолучитьВыводКоманды()))); |
| 517 | + |
| 518 | + ЗавершитьПроцесс_TGitCache_exe(); |
| 519 | + |
| 520 | + Возврат 0; |
571 | 521 |
|
572 | 522 | КонецФункции |
573 | 523 |
|
|
1399 | 1349 | ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; |
1400 | 1350 |
|
1401 | 1351 | Лог = Логирование.ПолучитьЛог("oscript.app.gitsync"); |
| 1352 | + |
1402 | 1353 | ДоменПочтыДляGitПоУмолчанию = "localhost"; |
1403 | 1354 | УдалятьВременныеФайлы = Ложь; |
1404 | 1355 | КоличествоЦикловОжиданияЛицензииПоУмолчанию = 1; |
0 commit comments