Skip to content

Commit c2e4dd8

Browse files
committed
Merge pull request xDrivenDevelopment#52 from nixel2007/issue-51
Fix xDrivenDevelopment#51. Добавлено автоматическое определение типа файла при сборке из исходников
2 parents 1391aac + 891634f commit c2e4dd8

File tree

2 files changed

+72
-17
lines changed

2 files changed

+72
-17
lines changed

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,8 @@ oscript v8files-extractor.os ?
7272
Показ этого экрана
7373
--git-precommit outputPath
7474
Запустить чтение индекса из git и определить список файлов для разбора, разложить их и добавить исходники в индекс
75-
--compile inputPath outputPath [--type TYPE] [--recursive]
75+
--compile inputPath outputPath [--recursive]
7676
Собрать внешний файл/обработку.
77-
В параметре --type указывается тип файла для сборки (epf/erf). Значение по умолчанию - epf
7877
Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога
7978
```
8079

v8files-extractor.os

Lines changed: 71 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@
6666
Компилировать(
6767
Аргументы.ЗначенияПараметров["ПутьВходящихДанных"],
6868
Аргументы.ЗначенияПараметров["ВыходнойКаталог"],
69-
Аргументы.ЗначенияПараметров["--type"],
7069
Аргументы.ЗначенияПараметров["--recursive"]
7170
);
7271
КонецЕсли;
@@ -106,7 +105,6 @@
106105
ОписаниеКоманды = Парсер.ОписаниеКоманды(ВозможныеКоманды().Компилировать);
107106
Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "ПутьВходящихДанных");
108107
Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "ВыходнойКаталог");
109-
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--type");
110108
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--recursive");
111109
Парсер.ДобавитьКоманду(ОписаниеКоманды);
112110
КонецПроцедуры
@@ -277,9 +275,8 @@
277275
Сообщить(" Показ этого экрана");
278276
Сообщить(" --git-precommit outputPath");
279277
Сообщить(" Запустить чтение индекса из git и определить список файлов для разбора, разложить их и добавить исходники в индекс");
280-
Сообщить(" --compile inputPath outputPath [--type TYPE] [--recursive]");
278+
Сообщить(" --compile inputPath outputPath [--recursive]");
281279
Сообщить(" Собрать внешний файл/обработку.");
282-
Сообщить(" В параметре --type указывается тип файла для сборки (epf/erf). Значение по умолчанию - epf");
283280
Сообщить(" Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога");
284281
КонецПроцедуры
285282

@@ -433,7 +430,7 @@
433430

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

436-
Функция Компилировать(Знач Путь, Знач КаталогВыгрузки, Знач ТипФайла = "epf", Знач Рекурсивно = Ложь) Экспорт
433+
Функция Компилировать(Знач Путь, Знач КаталогВыгрузки, Знач Рекурсивно = Ложь) Экспорт
437434

438435
ПутьКИсходникам = ОбъединитьПути(ТекущийКаталог(), Путь);
439436

@@ -443,14 +440,14 @@
443440
Ожидаем.Что(ПапкаИсходников.ЭтоКаталог(), "Путь " + ПутьКИсходникам + "должен быть каталогом").ЭтоИстина();
444441

445442
Если Рекурсивно Тогда
446-
СобратьКаталог(ПутьКИсходникам, КаталогВыгрузки, ТипФайла);
443+
СобратьКаталог(ПутьКИсходникам, КаталогВыгрузки);
447444
Иначе
448-
СобратьФайл(ПутьКИсходникам, КаталогВыгрузки, ТипФайла);
445+
СобратьФайл(ПутьКИсходникам, КаталогВыгрузки);
449446
КонецЕсли;
450447

451448
КонецФункции
452449

453-
Процедура СобратьКаталог(Знач ПутьКИсходникам, КаталогВыгрузки, Знач ТипФайла)
450+
Процедура СобратьКаталог(Знач ПутьКИсходникам, КаталогВыгрузки)
454451

455452
СписокФайловВКаталоге = НайтиФайлы(ПутьКИсходникам);
456453

@@ -465,25 +462,22 @@
465462
КонецЕсли;
466463

467464
Если ЭтоПутьКИсходнымКодамОбработок(Файл.ПолноеИмя) Тогда
468-
СобратьФайл(Файл.ПолноеИмя, КаталогВыгрузки, ТипФайла);
465+
СобратьФайл(Файл.ПолноеИмя, КаталогВыгрузки);
469466
Иначе
470467
НовыйПутьВыгрузки = ОбъединитьПути(КаталогВыгрузки, Файл.Имя);
471-
СобратьКаталог(Файл.ПолноеИмя, НовыйПутьВыгрузки, ТипФайла);
468+
СобратьКаталог(Файл.ПолноеИмя, НовыйПутьВыгрузки);
472469
КонецЕсли;
473470

474471
КонецЦикла;
475472

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

478-
Функция СобратьФайл(Знач ПутьКИсходникам, Знач КаталогВыгрузки, Знач ТипФайла)
479-
475+
Функция СобратьФайл(Знач ПутьКИсходникам, Знач КаталогВыгрузки)
476+
480477
Лог.Информация("Собираю исходники <"+ПутьКИсходникам+">");
481478

482479
ПапкаИсходников = Новый Файл(ПутьКИсходникам);
483480

484-
ИмяПапки = ПапкаИсходников.Имя;
485-
ИмяФайлаОбъекта = ОбъединитьПути(ТекущийКаталог(), КаталогВыгрузки, ИмяПапки + "." + ТипФайла);
486-
487481
Переименования = ПолучитьСоответствиеПереименований(ПутьКИсходникам);
488482

489483
ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
@@ -508,6 +502,11 @@
508502

509503
КонецЦикла;
510504

505+
ТипФайла = ПолучитьТипФайлаПоКаталогуИсходников(ВременныйКаталог);
506+
507+
ИмяПапки = ПапкаИсходников.Имя;
508+
ИмяФайлаОбъекта = ОбъединитьПути(ТекущийКаталог(), КаталогВыгрузки, ИмяПапки + "." + ТипФайла);
509+
511510
СобратьФайлИзИсходников(ВременныйКаталог, ИмяФайлаОбъекта);
512511
Лог.Информация("Успешно собран файл "+ИмяФайлаОбъекта);
513512

@@ -522,6 +521,63 @@
522521

523522
КонецФункции
524523

524+
Функция ПолучитьТипФайлаПоКаталогуИсходников(Знач КаталогИсходников)
525+
526+
ПутьКФайлуРут = ОбъединитьПути(КаталогИсходников, "root");
527+
ФайлРут = Новый Файл(ПутьКФайлуРут);
528+
529+
Ожидаем.Что(ФайлРут.Существует(), "Файл <" + ПутьКФайлуРут + "> должен существовать").ЭтоИстина();
530+
Ожидаем.Что(ФайлРут.ЭтоКаталог(), "<" + ПутьКФайлуРут + "> должен быть файлом").ЭтоЛожь();
531+
532+
ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуРут);
533+
СодержаниеРут = ЧтениеТекста.Прочитать();
534+
ЧтениеТекста.Закрыть();
535+
МассивСтрокРут = СтрРазделить(СодержаниеРут, ",");
536+
Ожидаем.Что(МассивСтрокРут.Количество(), "Некорректный формат файла root").Больше(1);
537+
538+
ПутьКФайлуКорневойКонтейнер = ОбъединитьПути(КаталогИсходников, МассивСтрокРут[1]);
539+
ФайлКорневойКонтейнер = Новый Файл(ПутьКФайлуКорневойКонтейнер);
540+
541+
Ожидаем.Что(ФайлКорневойКонтейнер.Существует(), "Файл <" + ПутьКФайлуКорневойКонтейнер + "> должен существовать").ЭтоИстина();
542+
Ожидаем.Что(ФайлКорневойКонтейнер.ЭтоКаталог(), "<" + ПутьКФайлуКорневойКонтейнер + "> должен быть файлом").ЭтоЛожь();
543+
544+
ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуКорневойКонтейнер);
545+
СодержаниеКорневойКонтейнер = "";
546+
Для сч = 1 По 7 Цикл
547+
ПрочитаннаяСтрока = ЧтениеТекста.ПрочитатьСтроку();
548+
Если ПрочитаннаяСтрока = Неопределено Тогда
549+
Прервать;
550+
КонецЕсли;
551+
552+
СодержаниеКорневойКонтейнер = СодержаниеКорневойКонтейнер + ПрочитаннаяСтрока;
553+
КонецЦикла;
554+
ЧтениеТекста.Закрыть();
555+
556+
МассивСтрокКорневойКонтейнер = СтрРазделить(СодержаниеКорневойКонтейнер, ",");
557+
Ожидаем.Что(МассивСтрокКорневойКонтейнер.Количество(), "Некорректный формат файла корневого контейнера <" + ПутьКФайлуКорневойКонтейнер + ">").Больше(3);
558+
559+
ИдентификаторТипаОбъекта = СокрЛП(МассивСтрокКорневойКонтейнер[3]);
560+
Если Лев(ИдентификаторТипаОбъекта, 1) = "{" Тогда
561+
ИдентификаторТипаОбъекта = Прав(ИдентификаторТипаОбъекта, СтрДлина(ИдентификаторТипаОбъекта) - 1);
562+
КонецЕсли;
563+
Если Прав(ИдентификаторТипаОбъекта, 1) = "}" Тогда
564+
ИдентификаторТипаОбъекта = Лев(ИдентификаторТипаОбъекта, СтрДлина(ИдентификаторТипаОбъекта) - 1);
565+
КонецЕсли;
566+
567+
ИдентификаторТипаОбъекта = НРег(СокрЛП(ИдентификаторТипаОбъекта));
568+
569+
Если ИдентификаторТипаОбъекта = "c3831ec8-d8d5-4f93-8a22-f9bfae07327f" Тогда
570+
ТипФайла = "epf";
571+
ИначеЕсли ИдентификаторТипаОбъекта = "e41aff26-25cf-4bb6-b6c1-3f478a75f374" Тогда
572+
ТипФайла = "erf";
573+
Иначе
574+
ВызватьИсключение("Некорректный идентификатор типа собираемого объекта <" + ИдентификаторТипаОбъекта + ">");
575+
КонецЕсли;
576+
577+
Возврат ТипФайла;
578+
579+
КонецФункции
580+
525581
// Функция - Получает соответствие переименований файлов обработки на основе
526582
// файла renames.txt
527583
//

0 commit comments

Comments
 (0)