Skip to content

Instantly share code, notes, and snippets.

@EvilBeaver
Created March 9, 2017 09:27
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save EvilBeaver/06993ae42f47728a88d75cc9a661a2f1 to your computer and use it in GitHub Desktop.
Save EvilBeaver/06993ae42f47728a88d75cc9a661a2f1 to your computer and use it in GitHub Desktop.
Пакетное сжатие всех папок с репозиториями GIT
#Использовать logos
#Использовать fs
Процедура ВыполнитьОбработку(Знач Каталог)
ВсеПапки = НайтиФайлы(Каталог, ПолучитьМаскуВсеФайлы());
Для Каждого НайденныйКаталог Из ВсеПапки Цикл
Если Не НайденныйКаталог.ЭтоКаталог() Тогда
Продолжить;
КонецЕсли;
ОбработатьКаталогРепо(НайденныйКаталог);
КонецЦикла;
КонецПроцедуры
Процедура ОбработатьКаталогРепо(Знач КаталогРепо)
Сообщить("Вхожу в каталог " + КаталогРепо.ПолноеИмя);
Если ЭтоКаталогРепо(КаталогРепо) Тогда
ВыполнитьСжатие(КаталогРепо);
Иначе
Сообщить("Каталог не является репозиторием. Пробую поискать внутри рекурсивно.");
ВыполнитьОбработку(КаталогРепо.ПолноеИмя);
КонецЕсли;
Сообщить("Выхожу из каталога " + КаталогРепо.ПолноеИмя);
Сообщить(Символы.ПС);
КонецПроцедуры
Функция ЭтоКаталогРепо(Знач Каталог)
Путь = ОбъединитьПути(Каталог.ПолноеИмя, ".git");
Возврат ФС.КаталогСуществует(Путь);
КонецФункции
Процедура ВыполнитьСжатие(Знач КаталогРепо)
Сообщить("Начинаю сжатие");
Процесс = СоздатьПроцесс("git gc --quiet", КаталогРепо.ПолноеИмя, Истина, Истина);
Процесс.Запустить();
Пока НЕ Процесс.Завершен ИЛИ Процесс.ПотокВывода.ЕстьДанные ИЛИ Процесс.ПотокОшибок.ЕстьДанные Цикл
Приостановить(20);
ОчереднаяСтрокаВывода = Процесс.ПотокВывода.Прочитать();
ОчереднаяСтрокаОшибок = Процесс.ПотокОшибок.Прочитать();
Если ОчереднаяСтрокаВывода <> "" Тогда
Сообщить(ОчереднаяСтрокаВывода);
КонецЕсли;
Если ОчереднаяСтрокаОшибок <> "" Тогда
Сообщить(ОчереднаяСтрокаОшибок);
КонецЕсли;
КонецЦикла;
Сообщить("Команда git вернула код: " + Процесс.КодВозврата);
Сообщить("Сжатие завершено");
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////
Если АргументыКоманднойСтроки.Количество() > 0 Тогда
Каталог = АргументыКоманднойСтроки[0];
Если Не ФС.КаталогСуществует(Каталог) Тогда
ВызватьИсключение "Не найден каталог " + Каталог;
КонецЕсли;
Иначе
Каталог = ТекущийКаталог();
КонецЕсли;
ВыполнитьОбработку(Каталог);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment