From 35dd56557394d9e7fa9afc29f96f36d45cae1da0 Mon Sep 17 00:00:00 2001 From: Nikita Gryzlov Date: Thu, 12 Nov 2015 12:00:31 +0300 Subject: [PATCH 1/4] =?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=B0=D0=B2=D1=82=D0=BE=D0=BC=D0=B0=D1=82=D0=B8?= =?UTF-8?q?=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B5=20=D0=BE=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B8=D0=BF?= =?UTF-8?q?=D0=B0=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B5=20=D0=B8=D0=B7=20=D0=B8?= =?UTF-8?q?=D1=81=D1=85=D0=BE=D0=B4=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +- v8files-extractor.os | 77 +++++++++++++++++++++++++++++++++++--------- 2 files changed, 63 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 223b7f2..6df6fbf 100644 --- a/README.md +++ b/README.md @@ -72,9 +72,8 @@ oscript v8files-extractor.os ? Показ этого экрана --git-precommit outputPath Запустить чтение индекса из git и определить список файлов для разбора, разложить их и добавить исходники в индекс - --compile inputPath outputPath [--type TYPE] [--recursive] + --compile inputPath outputPath [--recursive] Собрать внешний файл/обработку. - В параметре --type указывается тип файла для сборки (epf/erf). Значение по умолчанию - epf Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога ``` diff --git a/v8files-extractor.os b/v8files-extractor.os index 51490f2..b256540 100644 --- a/v8files-extractor.os +++ b/v8files-extractor.os @@ -66,7 +66,6 @@ Компилировать( Аргументы.ЗначенияПараметров["ПутьВходящихДанных"], Аргументы.ЗначенияПараметров["ВыходнойКаталог"], - Аргументы.ЗначенияПараметров["--type"], Аргументы.ЗначенияПараметров["--recursive"] ); КонецЕсли; @@ -106,7 +105,6 @@ ОписаниеКоманды = Парсер.ОписаниеКоманды(ВозможныеКоманды().Компилировать); Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "ПутьВходящихДанных"); Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "ВыходнойКаталог"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--type"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--recursive"); Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры @@ -277,9 +275,8 @@ Сообщить(" Показ этого экрана"); Сообщить(" --git-precommit outputPath"); Сообщить(" Запустить чтение индекса из git и определить список файлов для разбора, разложить их и добавить исходники в индекс"); - Сообщить(" --compile inputPath outputPath [--type TYPE] [--recursive]"); + Сообщить(" --compile inputPath outputPath [--recursive]"); Сообщить(" Собрать внешний файл/обработку."); - Сообщить(" В параметре --type указывается тип файла для сборки (epf/erf). Значение по умолчанию - epf"); Сообщить(" Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога"); КонецПроцедуры @@ -433,7 +430,7 @@ КонецПроцедуры -Функция Компилировать(Знач Путь, Знач КаталогВыгрузки, Знач ТипФайла = "epf", Знач Рекурсивно = Ложь) Экспорт +Функция Компилировать(Знач Путь, Знач КаталогВыгрузки, Знач Рекурсивно = Ложь) Экспорт ПутьКИсходникам = ОбъединитьПути(ТекущийКаталог(), Путь); @@ -443,14 +440,14 @@ Ожидаем.Что(ПапкаИсходников.ЭтоКаталог(), "Путь " + ПутьКИсходникам + "должен быть каталогом").ЭтоИстина(); Если Рекурсивно Тогда - СобратьКаталог(ПутьКИсходникам, КаталогВыгрузки, ТипФайла); + СобратьКаталог(ПутьКИсходникам, КаталогВыгрузки); Иначе - СобратьФайл(ПутьКИсходникам, КаталогВыгрузки, ТипФайла); + СобратьФайл(ПутьКИсходникам, КаталогВыгрузки); КонецЕсли; КонецФункции -Процедура СобратьКаталог(Знач ПутьКИсходникам, КаталогВыгрузки, Знач ТипФайла) +Процедура СобратьКаталог(Знач ПутьКИсходникам, КаталогВыгрузки) СписокФайловВКаталоге = НайтиФайлы(ПутьКИсходникам); @@ -465,25 +462,22 @@ КонецЕсли; Если ЭтоПутьКИсходнымКодамОбработок(Файл.ПолноеИмя) Тогда - СобратьФайл(Файл.ПолноеИмя, КаталогВыгрузки, ТипФайла); + СобратьФайл(Файл.ПолноеИмя, КаталогВыгрузки); Иначе НовыйПутьВыгрузки = ОбъединитьПути(КаталогВыгрузки, Файл.Имя); - СобратьКаталог(Файл.ПолноеИмя, НовыйПутьВыгрузки, ТипФайла); + СобратьКаталог(Файл.ПолноеИмя, НовыйПутьВыгрузки); КонецЕсли; КонецЦикла; КонецПроцедуры -Функция СобратьФайл(Знач ПутьКИсходникам, Знач КаталогВыгрузки, Знач ТипФайла) - +Функция СобратьФайл(Знач ПутьКИсходникам, Знач КаталогВыгрузки) + Лог.Информация("Собираю исходники <"+ПутьКИсходникам+">"); ПапкаИсходников = Новый Файл(ПутьКИсходникам); - ИмяПапки = ПапкаИсходников.Имя; - ИмяФайлаОбъекта = ОбъединитьПути(ТекущийКаталог(), КаталогВыгрузки, ИмяПапки + "." + ТипФайла); - Переименования = ПолучитьСоответствиеПереименований(ПутьКИсходникам); ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); @@ -508,6 +502,11 @@ КонецЦикла; + ТипФайла = ПолучитьТипФайлаПоКаталогуИсходников(ВременныйКаталог); + + ИмяПапки = ПапкаИсходников.Имя; + ИмяФайлаОбъекта = ОбъединитьПути(ТекущийКаталог(), КаталогВыгрузки, ИмяПапки + "." + ТипФайла); + СобратьФайлИзИсходников(ВременныйКаталог, ИмяФайлаОбъекта); Лог.Информация("Успешно собран файл "+ИмяФайлаОбъекта); @@ -522,6 +521,54 @@ КонецФункции +Функция ПолучитьТипФайлаПоКаталогуИсходников(Знач КаталогИсходников) + + ПутьКФайлуРут = ОбъединитьПути(КаталогИсходников, "root"); + ФайлРут = Новый Файл(ПутьКФайлуРут); + + Ожидаем.Что(ФайлРут.Существует(), "Файл <" + ПутьКФайлуРут + "> должен существовать").ЭтоИстина(); + Ожидаем.Что(ФайлРут.ЭтоКаталог(), "<" + ПутьКФайлуРут + "> должен быть файлом").ЭтоЛожь(); + + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуРут); + СодержаниеРут = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + МассивСтрокРут = СтрРазделить(СодержаниеРут, ","); + Ожидаем.Что(МассивСтрокРут.Количество(), "Некорректный формат файла root").Больше(1); + + ПутьКФайлуКорневойКонтейнер = ОбъединитьПути(КаталогИсходников, МассивСтрокРут[1]); + ФайлКорневойКонтейнер = Новый Файл(ПутьКФайлуКорневойКонтейнер); + + Ожидаем.Что(ФайлКорневойКонтейнер.Существует(), "Файл <" + ПутьКФайлуКорневойКонтейнер + "> должен существовать").ЭтоИстина(); + Ожидаем.Что(ФайлКорневойКонтейнер.ЭтоКаталог(), "<" + ПутьКФайлуКорневойКонтейнер + "> должен быть файлом").ЭтоЛожь(); + + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуКорневойКонтейнер); + СодержаниеКорневойКонтейнер = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + МассивСтрокКорневойКонтейнер = СтрРазделить(СодержаниеКорневойКонтейнер, ","); + Ожидаем.Что(МассивСтрокКорневойКонтейнер.Количество(), "Некорректный формат файла корневого контейнера <" + ПутьКФайлуКорневойКонтейнер + ">").Больше(3); + + ИдентификаторТипаОбъекта = СокрЛП(МассивСтрокКорневойКонтейнер[3]); + Если Лев(ИдентификаторТипаОбъекта, 1) = "{" Тогда + ИдентификаторТипаОбъекта = Прав(ИдентификаторТипаОбъекта, СтрДлина(ИдентификаторТипаОбъекта) - 1); + КонецЕсли; + Если Прав(ИдентификаторТипаОбъекта, 1) = "}" Тогда + ИдентификаторТипаОбъекта = Лев(ИдентификаторТипаОбъекта, СтрДлина(ИдентификаторТипаОбъекта) - 1); + КонецЕсли; + + ТипФайла = ""; + + Если ИдентификаторТипаОбъекта = "c3831ec8-d8d5-4f93-8a22-f9bfae07327f" Тогда + ТипФайла = "epf"; + ИначеЕсли ИдентификаторТипаОбъекта = "e41aff26-25cf-4bb6-b6c1-3f478a75f374" Тогда + ТипФайла = "erf"; + Иначе + Лог.Ошибка("Некорректный идентификатор типа собираемого объекта <" + ИдентификаторТипаОбъекта + ">"); + КонецЕсли; + + Возврат ТипФайла; + +КонецФункции + // Функция - Получает соответствие переименований файлов обработки на основе // файла renames.txt // From 1e17392fbc19696c1afcf010d1665408f9c8f2f4 Mon Sep 17 00:00:00 2001 From: Nikita Gryzlov Date: Thu, 12 Nov 2015 13:38:24 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D0=9F=D1=80=D0=B8=20=D0=BE=D1=88=D0=B8?= =?UTF-8?q?=D0=B1=D0=BA=D0=B5=20=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=82=D0=B8=D0=BF=D0=B0=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B1=D0=B8=D1=80=D0=B0=D0=B5=D0=BC=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=20=D0=B2=D1=8B=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D1=81=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- v8files-extractor.os | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/v8files-extractor.os b/v8files-extractor.os index b256540..897b11d 100644 --- a/v8files-extractor.os +++ b/v8files-extractor.os @@ -555,14 +555,12 @@ ИдентификаторТипаОбъекта = Лев(ИдентификаторТипаОбъекта, СтрДлина(ИдентификаторТипаОбъекта) - 1); КонецЕсли; - ТипФайла = ""; - Если ИдентификаторТипаОбъекта = "c3831ec8-d8d5-4f93-8a22-f9bfae07327f" Тогда ТипФайла = "epf"; ИначеЕсли ИдентификаторТипаОбъекта = "e41aff26-25cf-4bb6-b6c1-3f478a75f374" Тогда ТипФайла = "erf"; Иначе - Лог.Ошибка("Некорректный идентификатор типа собираемого объекта <" + ИдентификаторТипаОбъекта + ">"); + ВызватьИсключение("Некорректный идентификатор типа собираемого объекта <" + ИдентификаторТипаОбъекта + ">"); КонецЕсли; Возврат ТипФайла; From ed2bab20ed6e39594e1de6bc70f792718bc3e46d Mon Sep 17 00:00:00 2001 From: Nikita Gryzlov Date: Thu, 12 Nov 2015 13:55:57 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20=D0=BE=D1=87=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D0=BA=D0=B0=20=D0=B8=D0=B4=D0=B5=D0=BD=D1=82=D0=B8?= =?UTF-8?q?=D1=84=D0=B8=D0=BA=D0=B0=D1=82=D0=BE=D1=80=D0=B0=20=D1=82=D0=B8?= =?UTF-8?q?=D0=BF=D0=B0=20=D1=81=D0=BE=D0=B1=D0=B8=D1=80=D0=B0=D0=B5=D0=BC?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- v8files-extractor.os | 2 ++ 1 file changed, 2 insertions(+) diff --git a/v8files-extractor.os b/v8files-extractor.os index 897b11d..62f2117 100644 --- a/v8files-extractor.os +++ b/v8files-extractor.os @@ -555,6 +555,8 @@ ИдентификаторТипаОбъекта = Лев(ИдентификаторТипаОбъекта, СтрДлина(ИдентификаторТипаОбъекта) - 1); КонецЕсли; + ИдентификаторТипаОбъекта = НРег(СокрЛП(ИдентификаторТипаОбъекта)); + Если ИдентификаторТипаОбъекта = "c3831ec8-d8d5-4f93-8a22-f9bfae07327f" Тогда ТипФайла = "epf"; ИначеЕсли ИдентификаторТипаОбъекта = "e41aff26-25cf-4bb6-b6c1-3f478a75f374" Тогда From 891634f2e914720e7437c2cf5f00733b66bb8059 Mon Sep 17 00:00:00 2001 From: Nikita Gryzlov Date: Thu, 12 Nov 2015 14:21:10 +0300 Subject: [PATCH 4/4] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0-=D0=BA=D0=BE=D0=BD=D1=82?= =?UTF-8?q?=D0=B5=D0=B9=D0=BD=D0=B5=D1=80=D0=B0=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D1=81=D0=B1=D0=BE=D1=80=D0=B5=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- v8files-extractor.os | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/v8files-extractor.os b/v8files-extractor.os index 62f2117..bd6cd74 100644 --- a/v8files-extractor.os +++ b/v8files-extractor.os @@ -542,8 +542,17 @@ Ожидаем.Что(ФайлКорневойКонтейнер.ЭтоКаталог(), "<" + ПутьКФайлуКорневойКонтейнер + "> должен быть файлом").ЭтоЛожь(); ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуКорневойКонтейнер); - СодержаниеКорневойКонтейнер = ЧтениеТекста.Прочитать(); + СодержаниеКорневойКонтейнер = ""; + Для сч = 1 По 7 Цикл + ПрочитаннаяСтрока = ЧтениеТекста.ПрочитатьСтроку(); + Если ПрочитаннаяСтрока = Неопределено Тогда + Прервать; + КонецЕсли; + + СодержаниеКорневойКонтейнер = СодержаниеКорневойКонтейнер + ПрочитаннаяСтрока; + КонецЦикла; ЧтениеТекста.Закрыть(); + МассивСтрокКорневойКонтейнер = СтрРазделить(СодержаниеКорневойКонтейнер, ","); Ожидаем.Что(МассивСтрокКорневойКонтейнер.Количество(), "Некорректный формат файла корневого контейнера <" + ПутьКФайлуКорневойКонтейнер + ">").Больше(3);