Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога
Expand Down
70 changes: 70 additions & 0 deletions tests/v8files-extractor-test.os
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
ВсеТесты.Добавить("Тест_ДолженСоздатьРепозитарийГит");
ВсеТесты.Добавить("Тест_ДолженПроверитьНастройкиРепозитарияГит");
ВсеТесты.Добавить("Тест_ДолженОбработатьИзмененияИзГитДляКаталогаСВложеннымиКаталогами");
ВсеТесты.Добавить("Тест_ДолженОбработатьИзмененияИзГитДляКаталогаСВложеннымиКаталогамиИУдалитьИзКеша");
ВсеТесты.Добавить("Тест_ДолженСобратьФайлОбработкиИзЗаданнойПапки");

Возврат ВсеТесты;
Expand Down Expand Up @@ -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", ИмяВложенногоКаталога);
ФайлКаталогИсходниковВложенногоКаталога = Новый Файл(КаталогИсходниковВложенногоКаталога);
Ожидаем.Что(ФайлКаталогИсходниковВложенногоКаталога.Существует(), "Должны были найти имя вложенного каталога").ЭтоИстина();
Ожидаем.Что(ФайлКаталогИсходниковВложенногоКаталога.ЭтоКаталог(), "Должны были найти вложенный каталог").ЭтоИстина();

ПутьКаталогаВыгрузкиДляОбработки = ОбъединитьПути(КаталогИсходниковВложенногоКаталога, ФайлОбработки.ИмяБезРасширения);
Ожидаем.Что(КаталогСодержитИсходникиОбработки(ПутьКаталогаВыгрузкиДляОбработки), "ожидаем, что КаталогСодержитИсходникиОбработки(ПутьКаталогаВыгрузкиДляОбработки) это Истина").ЭтоИстина();

КонецПроцедуры

Процедура Тест_ДолженРазобратьФайлыПоЖурналуИзмененийГит() Экспорт

ФайлОбработки = ПолучитьФайлТестовойОбработки();
Expand Down
20 changes: 17 additions & 3 deletions v8files-extractor.os
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
ИначеЕсли Команда = ВозможныеКоманды().Помощь Тогда
ВывестиСправку();
ИначеЕсли Команда = ВозможныеКоманды().ОбработатьИзмененияИзГит Тогда
ОбработатьИзмененияИзГит(Аргументы.ЗначенияПараметров["ВыходнойКаталог"]);
ОбработатьИзмененияИзГит(Аргументы.ЗначенияПараметров["ВыходнойКаталог"], Аргументы.ЗначенияПараметров["--remove-orig-bin-files"]);
ИначеЕсли Команда = ВозможныеКоманды().Компилировать Тогда
Компилировать(
Аргументы.ЗначенияПараметров["ПутьВходящихДанных"],
Expand Down Expand Up @@ -97,6 +97,7 @@

ОписаниеКоманды = Парсер.ОписаниеКоманды(ВозможныеКоманды().ОбработатьИзмененияИзГит);
Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "ВыходнойКаталог");
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--remove-orig-bin-files");
Парсер.ДобавитьКоманду(ОписаниеКоманды);

КонецПроцедуры
Expand Down Expand Up @@ -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";
Expand All @@ -303,13 +305,25 @@
Лог.Отладка("Получен из журнала git файл " + Файл);
ПолныйПуть = ОбъединитьПути(КореньРепо, Файл);
СписокНовыхКаталогов.Добавить(РазобратьФайл(Новый Файл(ПолныйПуть), КаталогИсходников, КореньРепо));
Если УдалятьФайлыИзИндексаГит Тогда
УдалитьФайлИзИндексаГит(ПолныйПуть);
КонецЕсли;
КонецЕсли;
КонецЦикла;

ДобавитьИсходникиВГит(СписокНовыхКаталогов);

КонецПроцедуры

Процедура УдалитьФайлИзИндексаГит(Знач ПолныйПуть)
Лог.Отладка("Удаляю файл из индекса");
Вывод = ПолучитьВыводПроцесса("git rm --cached """ + ПолныйПуть + """", КодВозврата);
Лог.Отладка("Вывод git rm --cached: " + Вывод);
Если КодВозврата <> 0 Тогда
ВызватьИсключение "Не удалось удалить файл из журнала изменений git";
КонецЕсли;
КонецПроцедуры

Процедура ПроверитьНастройкиРепозитарияГит() Экспорт
Перем КодВозврата;

Expand Down