-
Notifications
You must be signed in to change notification settings - Fork 92
Доработан функционал смены ветки #49
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Changes from 2 commits
88ac7ce
51ad26c
4cf0ab7
41490f6
54bed1b
d19e069
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -519,30 +519,71 @@ | |
// | ||
Функция ВыполнитьGitPull(Знач ЛокальныйРепозиторий, Знач УдаленныйРепозиторий, Знач ИмяВетки) Экспорт | ||
|
||
КомандныйФайл = Новый КомандныйФайл; | ||
ИмяФайлаЛогаКоммита = ВременныеФайлы.СоздатьФайл("log"); | ||
Если ЭтоWindows Тогда | ||
КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd /d ""%1""", ЛокальныйРепозиторий)); | ||
Иначе | ||
КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd ""%1""", ЛокальныйРепозиторий)); | ||
КомандныйФайлPull = НовыйКомандныйФайлGit(ЛокальныйРепозиторий); | ||
|
||
Если ЗначениеЗаполнено(ИмяВетки) Тогда | ||
|
||
// надо проверить текущую ветку, совпдает ли она с требуемой | ||
КомандныйФайлСтатуса = НовыйКомандныйФайлGit(ЛокальныйРепозиторий); | ||
|
||
ПараметрыКоманды = Новый Массив; | ||
ПараметрыКоманды.Добавить("git status"); | ||
ПараметрыКоманды.Добавить("-b"); | ||
ПараметрыКоманды.Добавить("-s"); | ||
|
||
Результат = ИсполнитьКомандныйФайлGit(КомандныйФайлСтатуса, ПараметрыКоманды); | ||
|
||
Файл = Новый Файл(КомандныйФайлСтатуса.ИмяФайлаЛога); | ||
Если Файл.Существует() Тогда | ||
|
||
ЧТ = Новый ЧтениеТекста(КомандныйФайлСтатуса.ИмяФайлаЛога, "utf-8"); | ||
СтрокаФайла = ЧТ.Прочитать(); | ||
ЧТ.Закрыть(); | ||
|
||
// формат строки ## master...origin/master etc | ||
ПозицияРазделителя = СтрНайти(СтрокаФайла, "..."); | ||
Если ПозицияРазделителя Тогда | ||
|
||
ИмяТекущейВетки = Сред(СтрокаФайла, 4, ПозицияРазделителя - 4); | ||
Если ИмяТекущейВетки <> ИмяВетки Тогда | ||
|
||
Лог.Отладка("Текущая ветка репозитория '" + ИмяТекущейВетки + "', а требуется '" + ИмяВетки + "'"); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Предлагаю использовать формат СтрШаблон, |
||
Лог.Информация("Переключаем ветку на '" + ИмяВетки + "'"); | ||
|
||
КомандныйФайлВетка = НовыйКомандныйФайлGit(ЛокальныйРепозиторий); | ||
|
||
ПараметрыКоманды = Новый Массив; | ||
ПараметрыКоманды.Добавить("git checkout"); | ||
ПараметрыКоманды.Добавить("-f"); | ||
ПараметрыКоманды.Добавить(ИмяВетки); | ||
|
||
Результат = ИсполнитьКомандныйФайлGit(КомандныйФайлВетка, ПараметрыКоманды); | ||
ВыводКоманды = КомандныйФайлВетка.КомандныйФайл.ПолучитьВывод(); | ||
ЗакрытьКомандныйФайлGit(КомандныйФайлВетка); | ||
Если Результат <> 0 Тогда | ||
|
||
ВызватьИсключение "Ошибка переключения ветки " + ВыводКоманды; | ||
|
||
КонецЕсли; | ||
|
||
КонецЕсли; | ||
|
||
КонецЕсли; | ||
|
||
КонецЕсли; | ||
|
||
ЗакрытьКомандныйФайлGit(КомандныйФайлСтатуса); | ||
|
||
КонецЕсли; | ||
|
||
ПараметрыКоманды = Новый Массив; | ||
ПараметрыКоманды.Добавить("git pull"); | ||
ПараметрыКоманды.Добавить("-v"); | ||
ПараметрыКоманды.Добавить(СтрЗаменить(УдаленныйРепозиторий, "%", "%%")); | ||
ПараметрыКоманды.Добавить(КомандныйФайл.СуффиксПеренаправленияВывода(ИмяФайлаЛогаКоммита, Истина)); | ||
|
||
СтрокаКоманды = СобратьКоманднуюСтроку(ПараметрыКоманды); | ||
сообщение = "строкаКоманды = <"+?(строкаКоманды = Неопределено, "Неопределено", строкаКоманды)+">"; | ||
Лог.Отладка(сообщение); | ||
КомандныйФайл.ДобавитьКоманду(СтрокаКоманды); | ||
КомандныйФайл.ДобавитьКоманду("exit " + ?(ЭтоWindows, "/b %ERRORLEVEL%", "$#")); | ||
|
||
Результат = КомандныйФайл.Исполнить(); | ||
ВывестиТекстФайла(ИмяФайлаЛогаКоммита); | ||
УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаЛогаКоммита); | ||
УдалитьВременныеФайлыПриНеобходимости(КомандныйФайл.Закрыть()); | ||
Результат = ИсполнитьКомандныйФайлGit(КомандныйФайлPull, ПараметрыКоманды); | ||
ВывестиТекстФайла(КомандныйФайлPull.ИмяФайлаЛога); | ||
ЗакрытьКомандныйФайлGit(КомандныйФайлPull); | ||
|
||
Возврат Результат; | ||
|
||
|
@@ -1380,6 +1421,46 @@ | |
Возврат ?(ДоменПочтыДляGitПоУмолчанию = Неопределено, "localhost", ДоменПочтыДляGitПоУмолчанию); | ||
КонецФункции | ||
|
||
Функция НовыйКомандныйФайлGit(ЛокальныйРепозиторий) | ||
|
||
КомандныйФайл = Новый КомандныйФайл; | ||
ИмяФайлаЛога = ВременныеФайлы.СоздатьФайл("log"); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 1commands уже научился получать непосредственный вывод от команд. Предлагаю доработать и здесь, раз уж начали доработку :) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ИМХО в этом случае не нужно управление файлом лога и не нужно доп.функции обертки
|
||
Если ЭтоWindows Тогда | ||
|
||
КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd /d ""%1""", ЛокальныйРепозиторий)); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Вместо |
||
|
||
Иначе | ||
|
||
КомандныйФайл.ДобавитьКоманду(СтроковыеФункции.ПодставитьПараметрыВСтроку("cd ""%1""", ЛокальныйРепозиторий)); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. И здесь СтрШаблон |
||
|
||
КонецЕсли; | ||
|
||
Возврат Новый Структура("КомандныйФайл, ИмяФайлаЛога", КомандныйФайл, ИмяФайлаЛога); | ||
|
||
КонецФункции | ||
|
||
Функция ИсполнитьКомандныйФайлGit(КомандныйФайлОбъект, ПараметрыКоманды) | ||
|
||
КомандныйФайл = КомандныйФайлОбъект.КомандныйФайл; | ||
|
||
ПараметрыКоманды.Добавить(КомандныйФайл.СуффиксПеренаправленияВывода(КомандныйФайлОбъект.ИмяФайлаЛога, Истина)); | ||
СтрокаКоманды = СобратьКоманднуюСтроку(ПараметрыКоманды); | ||
Сообщение = "СтрокаКоманды = <" + ?(строкаКоманды = Неопределено, "Неопределено", строкаКоманды) + ">"; | ||
Лог.Отладка(Сообщение); | ||
КомандныйФайл.ДобавитьКоманду(СтрокаКоманды); | ||
КомандныйФайл.ДобавитьКоманду("exit " + ?(ЭтоWindows, "/b %ERRORLEVEL%", "$#")); | ||
|
||
Возврат КомандныйФайл.Исполнить(); | ||
|
||
КонецФункции | ||
|
||
Процедура ЗакрытьКомандныйФайлGit(КомандныйФайлОбъект) | ||
|
||
УдалитьВременныеФайлыПриНеобходимости(КомандныйФайлОбъект.КомандныйФайл.Закрыть()); | ||
УдалитьВременныеФайлыПриНеобходимости(КомандныйФайлОбъект.ИмяФайлаЛога); | ||
|
||
КонецПроцедуры | ||
|
||
////////////////////////////////////////////////////////////////////////////////////////////// | ||
СистемнаяИнформация = Новый СистемнаяИнформация; | ||
ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Название
КомандныйФайлСтатуса
уже не отвечает своему назначения, т.к. вместо гит статус юзаем гит бранч