diff --git a/README.md b/README.md index 6df6fbf..3303c3c 100644 --- a/README.md +++ b/README.md @@ -70,8 +70,9 @@ oscript v8files-extractor.os ? Разбор файлов на исходники --help Показ этого экрана - --git-precommit outputPath + --git-precommit outputPath [--remove-orig-bin-files] Запустить чтение индекса из git и определить список файлов для разбора, разложить их и добавить исходники в индекс + Если передан флаг --remove-orig-bin-files, обработанные файлы epf/ert будут удалены из индекса git --compile inputPath outputPath [--recursive] Собрать внешний файл/обработку. Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога diff --git a/tests/v8files-extractor-test.os b/tests/v8files-extractor-test.os index cda7756..9cf699c 100644 --- a/tests/v8files-extractor-test.os +++ b/tests/v8files-extractor-test.os @@ -23,6 +23,7 @@ ВсеТесты.Добавить("Тест_ДолженСоздатьРепозитарийГит"); ВсеТесты.Добавить("Тест_ДолженПроверитьНастройкиРепозитарияГит"); ВсеТесты.Добавить("Тест_ДолженОбработатьИзмененияИзГитДляКаталогаСВложеннымиКаталогами"); + ВсеТесты.Добавить("Тест_ДолженОбработатьИзмененияИзГитДляКаталогаСВложеннымиКаталогамиИУдалитьИзКеша"); ВсеТесты.Добавить("Тест_ДолженСобратьФайлОбработкиИзЗаданнойПапки"); Возврат ВсеТесты; @@ -170,6 +171,75 @@ КонецПроцедуры +Процедура Тест_ДолженОбработатьИзмененияИзГитДляКаталогаСВложеннымиКаталогамиИУдалитьИзКеша() Экспорт + + КаталогПроекта = КаталогПроекта(); + + КаталогВыгрузки = ВременныеФайлы.СоздатьКаталог(); + + СоздатьРепозитарийГит(КаталогВыгрузки, КаталогПроекта); + + КаталогХуков = ОбъединитьПути(КаталогВыгрузки, ".git", "hooks"); + ПутьКФайлуПрекоммит = ОбъединитьПути(КаталогХуков, "pre-commit"); + ТекстПрекоммит = Новый ТекстовыйДокумент; + ТекстПрекоммит.Прочитать(ПутьКФайлуПрекоммит); + + КоличествоСтрок = ТекстПрекоммит.КоличествоСтрок(); + Для сч = 1 По КоличествоСтрок Цикл + + Строка = ТекстПрекоммит.ПолучитьСтроку(сч); + ЭтоСтрокаЗапускаРаспаковщика = СтрНайти(Строка, "v8files-extractor.os --git-precommit") > 0; + Если ЭтоСтрокаЗапускаРаспаковщика Тогда + Строка = Строка + " --remove-orig-bin-files"; + ТекстПрекоммит.ЗаменитьСтроку(сч, Строка); + Прервать; + КонецЕсли; + + КонецЦикла; + ТекстПрекоммит.Записать(ПутьКФайлуПрекоммит, КодировкаТекста.UTF8NoBOM); + + ФайлОбработки = ПолучитьФайлТестовойОбработки(); + + ИмяВложенногоКаталога = "1"; + + КаталогИсходников = ВременныеФайлы.СоздатьКаталог(); + + ВложенныйКаталогВыгрузки = ОбъединитьПути(КаталогВыгрузки, ИмяВложенногоКаталога); + СоздатьКаталог(ВложенныйКаталогВыгрузки); + + ПутьВложеннойОбработки = ОбъединитьПути(ВложенныйКаталогВыгрузки, ФайлОбработки.Имя); + Лог.Отладка("ПутьВложеннойОбработки "+ПутьВложеннойОбработки); + + КопироватьФайл(ФайлОбработки.ПолноеИмя, ПутьВложеннойОбработки); + + ФайлВложеннойОбработки = Новый Файл(ПутьВложеннойОбработки); + Ожидаем.Что(ФайлВложеннойОбработки.Существует(), "Должны были найти имя вложенной обработки").ЭтоИстина(); + Ожидаем.Что(ФайлВложеннойОбработки.ЭтоФайл(), "Должны были найти признак файла для вложенной обработки").ЭтоИстина(); + + КомандаГит = "git add -A ."; + ВыполнитьКомандуГит(КомандаГит); + + КомандаГит = "git status"; + ВыполнитьКомандуГит(КомандаГит); + + КомандаГит = "git commit -m ""init commit"""; + ВыводКоманды = ВыполнитьКомандуГит(КомандаГит); + + // git использует "/" как разделитель каталогов, а не стандартный разделитель пути ОС + СтрокаПоиска = "create mode 100644 " + ИмяВложенногоКаталога + "/" + ФайлОбработки.Имя; + ФайлУдаленИзИндексаГит = СтрНайти(ВыводКоманды, СтрокаПоиска) = 0; + Ожидаем.Что(ФайлУдаленИзИндексаГит, "ожидаем, что файла обработки удален из индекса git").ЭтоИстина(); + + КаталогИсходниковВложенногоКаталога = ОбъединитьПути(КаталогВыгрузки, "src", ИмяВложенногоКаталога); + ФайлКаталогИсходниковВложенногоКаталога = Новый Файл(КаталогИсходниковВложенногоКаталога); + Ожидаем.Что(ФайлКаталогИсходниковВложенногоКаталога.Существует(), "Должны были найти имя вложенного каталога").ЭтоИстина(); + Ожидаем.Что(ФайлКаталогИсходниковВложенногоКаталога.ЭтоКаталог(), "Должны были найти вложенный каталог").ЭтоИстина(); + + ПутьКаталогаВыгрузкиДляОбработки = ОбъединитьПути(КаталогИсходниковВложенногоКаталога, ФайлОбработки.ИмяБезРасширения); + Ожидаем.Что(КаталогСодержитИсходникиОбработки(ПутьКаталогаВыгрузкиДляОбработки), "ожидаем, что КаталогСодержитИсходникиОбработки(ПутьКаталогаВыгрузкиДляОбработки) это Истина").ЭтоИстина(); + +КонецПроцедуры + Процедура Тест_ДолженРазобратьФайлыПоЖурналуИзмененийГит() Экспорт ФайлОбработки = ПолучитьФайлТестовойОбработки(); diff --git a/v8files-extractor.os b/v8files-extractor.os index 7d5a76b..0c110c4 100644 --- a/v8files-extractor.os +++ b/v8files-extractor.os @@ -61,7 +61,7 @@ ИначеЕсли Команда = ВозможныеКоманды().Помощь Тогда ВывестиСправку(); ИначеЕсли Команда = ВозможныеКоманды().ОбработатьИзмененияИзГит Тогда - ОбработатьИзмененияИзГит(Аргументы.ЗначенияПараметров["ВыходнойКаталог"]); + ОбработатьИзмененияИзГит(Аргументы.ЗначенияПараметров["ВыходнойКаталог"], Аргументы.ЗначенияПараметров["--remove-orig-bin-files"]); ИначеЕсли Команда = ВозможныеКоманды().Компилировать Тогда Компилировать( Аргументы.ЗначенияПараметров["ПутьВходящихДанных"], @@ -97,6 +97,7 @@ ОписаниеКоманды = Парсер.ОписаниеКоманды(ВозможныеКоманды().ОбработатьИзмененияИзГит); Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "ВыходнойКаталог"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--remove-orig-bin-files"); Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры @@ -273,15 +274,16 @@ Сообщить(" --help"); Сообщить(" Показ этого экрана"); - Сообщить(" --git-precommit outputPath"); + Сообщить(" --git-precommit outputPath [--remove-orig-bin-files]"); Сообщить(" Запустить чтение индекса из git и определить список файлов для разбора, разложить их и добавить исходники в индекс"); + Сообщить(" Если передан флаг --remove-orig-bin-files, обработанные файлы epf/ert будут удалены из индекса git"); Сообщить(" --compile inputPath outputPath [--recursive]"); Сообщить(" Собрать внешний файл/обработку."); Сообщить(" Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога"); КонецПроцедуры -Процедура ОбработатьИзмененияИзГит(Знач ВыходнойКаталог) Экспорт +Процедура ОбработатьИзмененияИзГит(Знач ВыходнойКаталог, Знач УдалятьФайлыИзИндексаГит) Экспорт Если ПустаяСтрока(ВыходнойКаталог) Тогда ВыходнойКаталог = "src"; @@ -303,6 +305,9 @@ Лог.Отладка("Получен из журнала git файл " + Файл); ПолныйПуть = ОбъединитьПути(КореньРепо, Файл); СписокНовыхКаталогов.Добавить(РазобратьФайл(Новый Файл(ПолныйПуть), КаталогИсходников, КореньРепо)); + Если УдалятьФайлыИзИндексаГит Тогда + УдалитьФайлИзИндексаГит(ПолныйПуть); + КонецЕсли; КонецЕсли; КонецЦикла; @@ -310,6 +315,15 @@ КонецПроцедуры +Процедура УдалитьФайлИзИндексаГит(Знач ПолныйПуть) + Лог.Отладка("Удаляю файл из индекса"); + Вывод = ПолучитьВыводПроцесса("git rm --cached """ + ПолныйПуть + """", КодВозврата); + Лог.Отладка("Вывод git rm --cached: " + Вывод); + Если КодВозврата <> 0 Тогда + ВызватьИсключение "Не удалось удалить файл из журнала изменений git"; + КонецЕсли; +КонецПроцедуры + Процедура ПроверитьНастройкиРепозитарияГит() Экспорт Перем КодВозврата;