Skip to content

Instantly share code, notes, and snippets.

@EvilBeaver
Last active December 25, 2015 08:52
Show Gist options
  • Save EvilBeaver/14292ad7269d9d17ea8e to your computer and use it in GitHub Desktop.
Save EvilBeaver/14292ad7269d9d17ea8e to your computer and use it in GitHub Desktop.
Set Git Remote
//////////////////////////////////////////////////////////////////////
//
// Изменение remote для нескольких репозитариев GIT
// Copyright EvilBeaver <ovsiankin.aa@gmail.com> 2015
//
//////////////////////////////////////////////////////////////////////
Перем СтарыйПрефикс;
Перем НовыйПрефикс;
// Перерегистрация репозитариев
Процедура ОбойтиВсеРепозитарииВКаталоге(Знач РабочийКаталог);
Каталоги = НайтиФайлы(РабочийКаталог, "*.*", Ложь);
Для Каждого НайденныйФайл Из Каталоги Цикл
Если НайденныйФайл.ЭтоКаталог() Тогда
ОбработатьКаталог(НайденныйФайл.ПолноеИмя);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОбработатьКаталог(Знач Каталог)
Сообщить("Обрабатываю каталог " + Каталог);
КаталогГит = Новый Файл(Каталог + "\.git");
Если Не КаталогГит.Существует() Тогда
Сообщить("Каталог не является git-репозиторием");
Возврат;
КонецЕсли;
ЛогГит = ПолучитьИмяВременногоФайла();
КодВозврата = -1;
ЗапуститьПриложение("cmd /C git remote -v > " + ЛогГит, Каталог, Истина, КодВозврата);
Если КодВозврата <> 0 Тогда
Сообщить("Ошибка получения git remote");
Сообщить(ПрочитатьФайл(ЛогГит));
Возврат;
КонецЕсли;
ОсновнойАдрес = ПрочитатьАдрес(ЛогГит);
Если ОсновнойАдрес = Неопределено Тогда
Возврат;
КонецЕсли;
Сообщить("URL: " + ОсновнойАдрес);
НовыйУрл = СтрЗаменить(ОсновнойАдрес, СтарыйПрефикс, НовыйПрефикс);
Сообщить("Перенаправляю на " + НовыйУрл);
КодВозврата = -1;
ЗапуститьПриложение("cmd /C git remote set-url origin " + НовыйУрл + " > " + ЛогГит, Каталог, Истина, КодВозврата);
Если КодВозврата <> 0 Тогда
Сообщить("Ошибка git set-url");
Сообщить(ПрочитатьФайл(ЛогГит));
Возврат;
КонецЕсли;
ЗапуститьПриложение("cmd /C git branch -u origin/master > " + ЛогГит, Каталог, Истина, КодВозврата);
Если КодВозврата <> 0 Тогда
Сообщить("Ошибка git set-upstream");
Сообщить(ПрочитатьФайл(ЛогГит));
Возврат;
КонецЕсли;
Сообщить("Каталог " + Каталог + " обработан");
КонецПроцедуры
Функция ПрочитатьФайл(Знач Путь)
Чтение = Новый ЧтениеТекста(Путь);
Текст = Чтение.Прочитать();
Чтение.Закрыть();
Возврат Текст;
КонецФункции
Функция ПрочитатьАдрес(Знач Путь)
Чтение = Новый ЧтениеТекста(Путь);
Адрес = Чтение.ПрочитатьСтроку();
Чтение.Закрыть();
Адрес = СокрЛП(СтрЗаменить(СтрЗаменить(Адрес, "origin", ""),"(fetch)", ""));
Возврат Адрес;
КонецФункции
//////////////////////////////////////////////////////////////////////
РабочийКаталог = АргументыКоманднойСтроки[0];
СтарыйПрефикс = АргументыКоманднойСтроки[1];
НовыйПрефикс = АргументыКоманднойСтроки[2];
ОбойтиВсеРепозитарииВКаталоге(РабочийКаталог);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment