//ирПортативный Перем ирПортативный Экспорт;
//ирПортативный Перем ирОбщий Экспорт;
//ирПортативный Перем ирСервер Экспорт;
//ирПортативный Перем ирКэш Экспорт;
//ирПортативный Перем ирКлиент Экспорт;

Перем мПлатформа Экспорт;

Функция РазделительАтрибутовКоммитов() Экспорт
	Возврат "##";
КонецФункции

Функция ПараметрыВыводаДанныхКоммита(Знач ДляPowerShell = Ложь, Знач ДобавитьСтатистику = Ложь) Экспорт
	Результат = СтрЗаменить(" --pretty=format:'|%H|%ad|%an|%B|%P|%d|'", "|", РазделительАтрибутовКоммитов()) + ФорматДаты(ДляPowerShell);
	Если ДобавитьСтатистику Тогда
		Результат = Результат + " --shortstat";
	КонецЕсли;
	Если Не ДляPowerShell Тогда
		Результат = СтрЗаменить(Результат, "'", """");
	КонецЕсли;
	Возврат Результат;
КонецФункции

Функция ФорматДаты(Знач ДляPowerShell = Ложь) Экспорт
	Результат = " --date=format:'%d.%m.%Y %H:%M:%S'";
	Если Не ДляPowerShell Тогда
		Результат = СтрЗаменить(Результат, "'", """");
	КонецЕсли;
	Возврат Результат;
КонецФункции

Функция НачалоКомандыГита(Знач ДляPowerShell = Ложь) Экспорт
	ПроверитьПапкуГита(Истина);
	Результат = "git --no-pager -C '" + ПапкаГита + "' ";
	Если Не ДляPowerShell Тогда
		Результат = СтрЗаменить(Результат, "'", """");
	КонецЕсли;	
	Возврат Результат;
КонецФункции

Функция ПроверитьПапкуГита(Знач ВыбрасыватьИсключение = Ложь) Экспорт
	Файл = Новый Файл(ПапкаГита);
	Результат = Истина;
	Если ирОбщий.СтрНачинаетсяСЛкс(ПапкаГита, "\\") Тогда
		Если ВыбрасыватьИсключение Тогда
			ВызватьИсключение "UNC путь к репозиторию не поддерживается";
		Иначе
			Результат = Ложь;
		КонецЕсли;
	КонецЕсли;
	Если Не Файл.Существует() Тогда
		Если ВыбрасыватьИсключение Тогда
			ВызватьИсключение "Папка репозитория не существует";
		Иначе
			Результат = Ложь;
		КонецЕсли;
	КонецЕсли;
	Возврат Результат;
КонецФункции

Функция ДатаПоследнегоКоммита(Знач ПолноеИмяФайла = "") Экспорт
	Если Не ЗначениеЗаполнено(ПапкаГита) Тогда
		Возврат Неопределено;
	КонецЕсли;
	СтрокаКоманды = НачалоКомандыГита() + "log -1 " + ФорматДаты() + " --format=""%ad""";
	Если ЗначениеЗаполнено(ПолноеИмяФайла) Тогда
		ИмяФайлаГита = СтрЗаменить(ПолноеИмяФайла, ПапкаГита + ирОбщий.РазделительПутиКФайлуЛкс(), "");
		ИмяФайлаГита = СтрЗаменить(ИмяФайлаГита, "\", "/"); 
		СтрокаКоманды = СтрокаКоманды + " -- """ + ИмяФайлаГита + """";
	КонецЕсли;
	Текст = ирОбщий.ВыполнитьКомандуОСЛкс(СтрокаКоманды,,,,, КодировкаТекста.UTF8);
	Результат = Дата(Текст);
	Возврат Результат;
КонецФункции

//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
//ирПортативный #Если Клиент Тогда
//ирПортативный 	Контейнер = Новый Структура();
//ирПортативный 	Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирПортативный 	Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
//ирПортативный 		ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирПортативный 		ирПортативный.Открыть();
//ирПортативный 	КонецЕсли; 
//ирПортативный #Иначе
//ирПортативный 	ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
//ирПортативный #КонецЕсли
//ирПортативный ирОбщий = ирПортативный.ОбщийМодульЛкс("ирОбщий");
//ирПортативный ирКэш = ирПортативный.ОбщийМодульЛкс("ирКэш");
//ирПортативный ирСервер = ирПортативный.ОбщийМодульЛкс("ирСервер");
//ирПортативный ирКлиент = ирПортативный.ОбщийМодульЛкс("ирКлиент");

мПлатформа = ирКэш.Получить();  
#Если Клиент Тогда
	ПапкаГита = ирКлиент.ГитРепозиторий();
#КонецЕсли
