From 31e92187f2a2527f7145a18c79ecb0fa61bd4f7f Mon Sep 17 00:00:00 2001 From: Nikita Gryzlov Date: Mon, 16 Nov 2015 14:20:12 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=92=20=D1=84=D1=83=D0=BD=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D1=8E=20=D1=80=D0=B0=D0=B7=D0=B1=D0=BE=D1=80=D0=B0=20?= =?UTF-8?q?=D0=B8=D0=B7=20=D0=B6=D1=83=D1=80=D0=BD=D0=B0=D0=BB=D0=B0=20git?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D1=84?= =?UTF-8?q?=D0=BB=D0=B0=D0=B3=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B2=D0=BD=D0=B5=D1=88=D0=BD=D0=B8=D1=85=20=D0=BE=D1=82=D1=87?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B2=20=D0=B8=20=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=BE=D0=BA=20=D0=B8=D0=B7=20=D0=B8=D0=BD?= =?UTF-8?q?=D0=B4=D0=B5=D0=BA=D1=81=D0=B0=20git?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- v8files-extractor.os | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) 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/v8files-extractor.os b/v8files-extractor.os index 7d5a76b..3017967 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"); Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры @@ -281,7 +282,7 @@ КонецПроцедуры -Процедура ОбработатьИзмененияИзГит(Знач ВыходнойКаталог) Экспорт +Процедура ОбработатьИзмененияИзГит(Знач ВыходнойКаталог, Знач УдалятьФайлыИзИндексаГит) Экспорт Если ПустаяСтрока(ВыходнойКаталог) Тогда ВыходнойКаталог = "src"; @@ -303,6 +304,9 @@ Лог.Отладка("Получен из журнала git файл " + Файл); ПолныйПуть = ОбъединитьПути(КореньРепо, Файл); СписокНовыхКаталогов.Добавить(РазобратьФайл(Новый Файл(ПолныйПуть), КаталогИсходников, КореньРепо)); + Если УдалятьФайлыИзИндексаГит Тогда + УдалитьФайлИзИндексаГит(ПолныйПуть); + КонецЕсли; КонецЕсли; КонецЦикла; @@ -310,6 +314,15 @@ КонецПроцедуры +Процедура УдалитьФайлИзИндексаГит(Знач ПолныйПуть) + Лог.Отладка("Удаляю файл из индекса"); + Вывод = ПолучитьВыводПроцесса("git rm --cached """ + ПолныйПуть + """", КодВозврата); + Лог.Отладка("Вывод git rm --cached: " + Вывод); + Если КодВозврата <> 0 Тогда + ВызватьИсключение "Не удалось удалить файл из журнала изменений git"; + КонецЕсли; +КонецПроцедуры + Процедура ПроверитьНастройкиРепозитарияГит() Экспорт Перем КодВозврата; From 2f33d7f57569121ae00de4290ca94f1760c9fc49 Mon Sep 17 00:00:00 2001 From: Nikita Gryzlov Date: Sun, 22 Nov 2015 22:42:06 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=82=D0=B5=D1=81=D1=82=20=D1=80=D0=B0=D0=B7=D0=B1?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=BA=20=D1=81=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=D0=BC=20=D0=B1=D0=B8=D0=BD=D0=B0=D1=80=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=B8=D0=BD=D0=B4=D0=B5=D0=BA=D1=81=D0=B0=20git?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/v8files-extractor-test.os | 70 +++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) 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", ИмяВложенногоКаталога); + ФайлКаталогИсходниковВложенногоКаталога = Новый Файл(КаталогИсходниковВложенногоКаталога); + Ожидаем.Что(ФайлКаталогИсходниковВложенногоКаталога.Существует(), "Должны были найти имя вложенного каталога").ЭтоИстина(); + Ожидаем.Что(ФайлКаталогИсходниковВложенногоКаталога.ЭтоКаталог(), "Должны были найти вложенный каталог").ЭтоИстина(); + + ПутьКаталогаВыгрузкиДляОбработки = ОбъединитьПути(КаталогИсходниковВложенногоКаталога, ФайлОбработки.ИмяБезРасширения); + Ожидаем.Что(КаталогСодержитИсходникиОбработки(ПутьКаталогаВыгрузкиДляОбработки), "ожидаем, что КаталогСодержитИсходникиОбработки(ПутьКаталогаВыгрузкиДляОбработки) это Истина").ЭтоИстина(); + +КонецПроцедуры + Процедура Тест_ДолженРазобратьФайлыПоЖурналуИзмененийГит() Экспорт ФайлОбработки = ПолучитьФайлТестовойОбработки(); From 8f8769534b442566a79339efc7834536dccf9deb Mon Sep 17 00:00:00 2001 From: Nikita Gryzlov Date: Sun, 22 Nov 2015 22:52:10 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D1=84=D0=BB=D0=B0=D0=B3=D0=B0=20--remove-orig-bin-files=20?= =?UTF-8?q?=D0=B2=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B5=20=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- v8files-extractor.os | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/v8files-extractor.os b/v8files-extractor.os index 3017967..0c110c4 100644 --- a/v8files-extractor.os +++ b/v8files-extractor.os @@ -274,8 +274,9 @@ Сообщить(" --help"); Сообщить(" Показ этого экрана"); - Сообщить(" --git-precommit outputPath"); + Сообщить(" --git-precommit outputPath [--remove-orig-bin-files]"); Сообщить(" Запустить чтение индекса из git и определить список файлов для разбора, разложить их и добавить исходники в индекс"); + Сообщить(" Если передан флаг --remove-orig-bin-files, обработанные файлы epf/ert будут удалены из индекса git"); Сообщить(" --compile inputPath outputPath [--recursive]"); Сообщить(" Собрать внешний файл/обработку."); Сообщить(" Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога");