From 7d57dd7a6af66d16f478d24e81b151c3abbab9dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9C=D0=B0?= =?UTF-8?q?=D1=80=D1=82=D1=8B=D0=BD=D0=B5=D0=BD=D0=BA=D0=BE=D0=B2?= Date: Thu, 9 Feb 2017 22:50:06 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=A0=D0=B0=D1=81=D0=BF=D0=B0=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=20=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9=20=D0=BD=D0=B0=20=D0=B8=D1=81=D1=85=D0=BE?= =?UTF-8?q?=D0=B4=D0=BD=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- v8files-extractor.os | 45 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/v8files-extractor.os b/v8files-extractor.os index 6008905..996fac9 100644 --- a/v8files-extractor.os +++ b/v8files-extractor.os @@ -26,7 +26,7 @@ Функция Версия() Экспорт - Версия = "2.1.0-PRE"; + Версия = "2.1.1-PRE"; Возврат "v" + Версия; @@ -234,7 +234,7 @@ Возврат Ложь; КонецЕсли; - Поз = Найти(".epf,.erf,", Файл.Расширение+","); + Поз = Найти(ВРег(".epf,.erf,.cfe,"), ВРег(Файл.Расширение+",")); Возврат Поз > 0; КонецФункции @@ -256,7 +256,11 @@ ПапкаИсходников = Новый Файл(ПутьКаталогаИсходников); ОбеспечитьПустойКаталог(ПапкаИсходников); - ЗапуститьРаспаковку(Файл, ПапкаИсходников); + Если ВРег(Файл.Расширение) = ".CFE" Тогда + ЗапуститьРаспаковкуРасширения(Файл, ПапкаИсходников); + Иначе + ЗапуститьРаспаковкуОбработки(Файл, ПапкаИсходников); + КонецЕсли; Возврат ПапкаИсходников.ПолноеИмя; @@ -279,7 +283,40 @@ Возврат Рез; КонецФункции -Процедура ЗапуститьРаспаковку(Знач Файл, Знач ПапкаИсходников) +Процедура ЗапуститьРаспаковкуРасширения(Знач Файл, Знач ПапкаИсходников) + + Лог.Отладка("Запускаем распаковку файла расширения"); + + Конфигуратор = Новый УправлениеКонфигуратором(); + КаталогВременнойИБ = ВременныеФайлы.СоздатьКаталог(); + Конфигуратор.КаталогСборки(КаталогВременнойИБ); + + ЛогКонфигуратора = Логирование.ПолучитьЛог("oscript.lib.v8runner"); + ЛогКонфигуратора.УстановитьУровень(Лог.Уровень()); + ЛогКонфигуратора.Закрыть(); + + Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); + + ИмяРасширения = Файл.ИмяБезРасширения; + Лог.Отладка(СтрШаблон("Загрузка расширения '%1'", ИмяРасширения)); + Параметры.Добавить("/LoadCfg """ + Файл.ПолноеИмя + """"); + Параметры.Добавить("-Extension """ + ИмяРасширения + """"); + Конфигуратор.ВыполнитьКоманду(Параметры); + Лог.Отладка("Вывод 1С:Предприятия - " + Конфигуратор.ВыводКоманды()); + + Лог.Отладка(СтрШаблон("Разбор расширения '%1' в исходники в каталог '%2'", ИмяРасширения, ПапкаИсходников.ПолноеИмя)); + Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); + + Параметры.Добавить("/DumpConfigToFiles """ + ПапкаИсходников.ПолноеИмя + """"); + Параметры.Добавить("-Extension """ + ИмяРасширения + """"); + Конфигуратор.ВыполнитьКоманду(Параметры); + Лог.Отладка("Вывод 1С:Предприятия - " + Конфигуратор.ВыводКоманды()); + + Лог.Отладка("Очищаем каталог временной ИБ"); + +КонецПроцедуры + +Процедура ЗапуститьРаспаковкуОбработки(Знач Файл, Знач ПапкаИсходников) Лог.Отладка("Запускаем распаковку файла"); From 6a4d5bd2056d42e4bb92e918583f86c5eec07467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9C=D0=B0?= =?UTF-8?q?=D1=80=D1=82=D1=8B=D0=BD=D0=B5=D0=BD=D0=BA=D0=BE=D0=B2?= Date: Thu, 9 Feb 2017 22:59:36 +0300 Subject: [PATCH 2/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=D1=83=D0=BF=D0=BE=D0=BC=D0=B8=D0=BD=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=B2=20=D1=80=D0=B8=D0=B4=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 71cac50..d655990 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ### Что к чему ---- -* v8files-extractor.os - скрипт для OneScript, получающий список помещаемых файлов при коммите, фильтрующий по расширению только внешние отчёты/обработки и запускающий внешнюю обработку для распаковки этих файлов. Так же позволяет собирать обработки из полученных исходников. +* v8files-extractor.os - скрипт для OneScript, получающий список помещаемых файлов при коммите, фильтрующий по расширению только внешние отчёты/обработки, расширения и запускающий команды для распаковки этих файлов. Так же позволяет собирать обработки из полученных исходников. * [V8Reader.epf](http://infostart.ru/public/106310/) - внешняя обработка 1С, которая с помощью [v8unpack](http://svn2.assembla.com/svn/V8Unpack/track/) разбирает внешние обработки, определяет нормальные наименования для каталогов форм, файлов модулей объектов и т. д. и раскладывает их в нормальную структуру папок. * pre-commit - собственно командный файл, вызываемый git перед каждым помещением. Выполняет роль простой запускалки скрипта v8files-extractor.os @@ -64,7 +64,7 @@ git submodule update --init --recursive ## Запуск -После установки достаточно для проверки сделать commit для любого файла epf/erf, и в вашем репозитории автоматически должна создаться папка *src*, полностью повторяющая структуру проекта, изменённые или добавленные файлы распакуются в папки с аналогичными наименованиями. +После установки достаточно для проверки сделать commit для любого файла epf/erf/cfe, и в вашем репозитории автоматически должна создаться папка *src*, полностью повторяющая структуру проекта, изменённые или добавленные файлы распакуются в папки с аналогичными наименованиями. ## Командная строка запуска OneScript @@ -100,6 +100,7 @@ oscript v8files-extractor.os ? > Защита считается отключенной, если строка соединения с информационной базой удовлетворяет одному из шаблонов, указанных в параметре DisableUnsafeActionProtection файла conf.cfg. Т.о. в файл C:\Program Files (x86)\1cv8\conf\conf.cfg необходимо добавить строку `DisableUnsafeActionProtection=.*` +Подробнее [на ИТС](http://its.1c.ru/db/v838doc#bookmark:dev:TI000001873) ## Известные проблемы @@ -115,7 +116,9 @@ oscript v8files-extractor.os ? ## Что внутри -Как это работает: v8files-extractor.os полностью повторяет иерархию папок относительно корня репозитория только в папке SRC (от слова source), для каждой изменённой внешней обработки создаётся своя папка и туда с помощью v8unpack распаковывается помещаемая обработка, с помощью v8reader определяются наименования макетов, форм, модуля обработки и переименовываются, переименования сохраняются в служебном файле renames.txt, те файлы, которые невозможно определить или же носят чисто служебный характер, переносятся в каталог *und* +Как это работает: v8files-extractor.os полностью повторяет иерархию папок относительно корня репозитория только в папке SRC (от слова source), для каждой изменённой внешней обработки создаётся своя папка и туда с помощью v8unpack распаковывается помещаемая обработка, с помощью v8reader определяются наименования макетов, форм, модуля обработки и переименовываются, переименования сохраняются в служебном файле renames.txt, те файлы, которые невозможно определить или же носят чисто служебный характер, переносятся в каталог *und*. + +Файлы расширений *.cfe распаковываются на исходники штатными средствами 1С. ## Лицензия From 549b337dfab65f95c61d3abb4ad7ec6a376b9b64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9C=D0=B0?= =?UTF-8?q?=D1=80=D1=82=D1=8B=D0=BD=D0=B5=D0=BD=D0=BA=D0=BE=D0=B2?= Date: Mon, 13 Feb 2017 22:35:11 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D0=B8=20=D0=B7=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=20PR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- v8files-extractor.os | 56 ++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/v8files-extractor.os b/v8files-extractor.os index 996fac9..578097a 100644 --- a/v8files-extractor.os +++ b/v8files-extractor.os @@ -26,7 +26,7 @@ Функция Версия() Экспорт - Версия = "2.1.1-PRE"; + Версия = "2.2.0-PRE"; Возврат "v" + Версия; @@ -77,7 +77,7 @@ Команда = Аргументы.Команда; Лог.Отладка("Передана команда: "+Команда); Для Каждого Параметр Из Аргументы.ЗначенияПараметров Цикл - Лог.Отладка(Параметр.Ключ + " = " + Параметр.Значение); + Лог.Отладка("%1 = %2", Параметр.Ключ, Параметр.Значение); КонецЦикла; Если Команда = ВозможныеКоманды().Декомпилировать Тогда @@ -101,6 +101,7 @@ КодВозврата = 1; КонецПопытки; + Лог.Отладка("Очищаем каталог временной ИБ"); Попытка ВременныеФайлы.Удалить(); Исключение @@ -195,7 +196,7 @@ ОтносительныйПутьКаталога = ПолучитьОтносительныйПутьФайла(КаталогКорень, ПутьКаталога); ОтносительныйПутьКаталога = ?(ПустаяСтрока(ОтносительныйПутьКаталога), ПутьКаталога, ОтносительныйПутьКаталога); - Лог.Информация(СтрШаблон("Подготовка выгрузки каталога %1 в каталог %2, корень %3", ОтносительныйПутьКаталога, КаталогВыгрузки, КаталогКорень)); + Лог.Информация("Подготовка выгрузки каталога %1 в каталог %2, корень %3", ОтносительныйПутьКаталога, КаталогВыгрузки, КаталогКорень); ИмяКаталогаВыгрузки = Новый Файл(КаталогВыгрузки).Имя; @@ -206,24 +207,24 @@ РазобратьКаталог(Новый Файл(Файл.ПолноеИмя), КаталогВыгрузки, КаталогКорень); ИначеЕсли ТипФайлаПоддерживается(Файл) Тогда - Лог.Информация(СтрШаблон("Подготовка выгрузки файла %1 в каталог %2", Файл.Имя, ИмяКаталогаВыгрузки)); + Лог.Информация("Подготовка выгрузки файла %1 в каталог %2", Файл.Имя, ИмяКаталогаВыгрузки); РазобратьФайлВнутр(Файл, КаталогВыгрузки, КаталогКорень); - Лог.Информация(СтрШаблон("Завершена выгрузка файла %1 в каталог %2", Файл.Имя, ИмяКаталогаВыгрузки)); + Лог.Информация("Завершена выгрузка файла %1 в каталог %2", Файл.Имя, ИмяКаталогаВыгрузки); КонецЕсли; КонецЦикла; - Лог.Информация(СтрШаблон("Завершена выгрузка каталога %1 в каталог %2, корень %3", ОтносительныйПутьКаталога, КаталогВыгрузки, КаталогКорень)); + Лог.Информация("Завершена выгрузка каталога %1 в каталог %2, корень %3", ОтносительныйПутьКаталога, КаталогВыгрузки, КаталогКорень); КонецПроцедуры Функция РазобратьФайл(Знач Файл, Знач КаталогВыгрузки, Знач КаталогКорень = "") Экспорт ПутьФайла = Файл.ПолноеИмя; - Лог.Информация(СтрШаблон("Проверка необходимости выгрузки файла %1 в каталог %2, корень %3", ПутьФайла, КаталогВыгрузки, КаталогКорень)); + Лог.Информация("Проверка необходимости выгрузки файла %1 в каталог %2, корень %3", ПутьФайла, КаталогВыгрузки, КаталогКорень); КаталогИсходников = РазобратьФайлВнутр(Файл, КаталогВыгрузки, КаталогКорень); - Лог.Информация(СтрШаблон("Завершена проверка необходимости выгрузки файла %1 в каталог %2, корень %3", ПутьФайла, КаталогВыгрузки, КаталогКорень)); + Лог.Информация("Завершена проверка необходимости выгрузки файла %1 в каталог %2, корень %3", ПутьФайла, КаталогВыгрузки, КаталогКорень); Возврат КаталогИсходников; @@ -249,10 +250,10 @@ Ожидаем.Что(Файл.Существует(), "Файл " + ПутьФайла + " должен существовать").ЭтоИстина(); ОтносительныйПутьКаталогаФайла = ПолучитьОтносительныйПутьФайла(КаталогКорень, ОбъединитьПути(Файл.Путь, Файл.ИмяБезРасширения)); - Лог.Отладка("ОтносительныйПутьКаталогаФайла <"+ОтносительныйПутьКаталогаФайла+">"); + Лог.Отладка("ОтносительныйПутьКаталогаФайла <%1>", ОтносительныйПутьКаталогаФайла); ПутьКаталогаИсходников = ОбъединитьПути(КаталогВыгрузки, ОтносительныйПутьКаталогаФайла); - Лог.Отладка("ПутьКаталогаИсходников <"+ПутьКаталогаИсходников+">"); + Лог.Отладка("ПутьКаталогаИсходников <%1>", ПутьКаталогаИсходников); ПапкаИсходников = Новый Файл(ПутьКаталогаИсходников); ОбеспечитьПустойКаталог(ПапкаИсходников); @@ -291,20 +292,18 @@ КаталогВременнойИБ = ВременныеФайлы.СоздатьКаталог(); Конфигуратор.КаталогСборки(КаталогВременнойИБ); - ЛогКонфигуратора = Логирование.ПолучитьЛог("oscript.lib.v8runner"); - ЛогКонфигуратора.УстановитьУровень(Лог.Уровень()); - ЛогКонфигуратора.Закрыть(); + УстановитьУровеньЛогаКонфигуратораРавнымУровнюПродукта(); Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); ИмяРасширения = Файл.ИмяБезРасширения; - Лог.Отладка(СтрШаблон("Загрузка расширения '%1'", ИмяРасширения)); + Лог.Отладка("Загрузка расширения '%1'", ИмяРасширения); Параметры.Добавить("/LoadCfg """ + Файл.ПолноеИмя + """"); Параметры.Добавить("-Extension """ + ИмяРасширения + """"); Конфигуратор.ВыполнитьКоманду(Параметры); Лог.Отладка("Вывод 1С:Предприятия - " + Конфигуратор.ВыводКоманды()); - Лог.Отладка(СтрШаблон("Разбор расширения '%1' в исходники в каталог '%2'", ИмяРасширения, ПапкаИсходников.ПолноеИмя)); + Лог.Отладка("Разбор расширения '%1' в исходники в каталог '%2'", ИмяРасширения, ПапкаИсходников.ПолноеИмя); Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); Параметры.Добавить("/DumpConfigToFiles """ + ПапкаИсходников.ПолноеИмя + """"); @@ -312,8 +311,6 @@ Конфигуратор.ВыполнитьКоманду(Параметры); Лог.Отладка("Вывод 1С:Предприятия - " + Конфигуратор.ВыводКоманды()); - Лог.Отладка("Очищаем каталог временной ИБ"); - КонецПроцедуры Процедура ЗапуститьРаспаковкуОбработки(Знач Файл, Знач ПапкаИсходников) @@ -324,9 +321,7 @@ КаталогВременнойИБ = ВременныеФайлы.СоздатьКаталог(); Конфигуратор.КаталогСборки(КаталогВременнойИБ); - ЛогКонфигуратора = Логирование.ПолучитьЛог("oscript.lib.v8runner"); - ЛогКонфигуратора.УстановитьУровень(Лог.Уровень()); - ЛогКонфигуратора.Закрыть(); + УстановитьУровеньЛогаКонфигуратораРавнымУровнюПродукта(); Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); Параметры[0] = "ENTERPRISE"; @@ -346,10 +341,15 @@ Конфигуратор.ВыполнитьКоманду(Параметры); Лог.Отладка("Вывод 1С:Предприятия - " + Конфигуратор.ВыводКоманды()); - Лог.Отладка("Очищаем каталог временной ИБ"); КонецПроцедуры +Процедура УстановитьУровеньЛогаКонфигуратораРавнымУровнюПродукта() + ЛогКонфигуратора = Логирование.ПолучитьЛог("oscript.lib.v8runner"); + ЛогКонфигуратора.УстановитьУровень(Лог.Уровень()); + ЛогКонфигуратора.Закрыть(); +КонецПроцедуры + Процедура УстановитьВКаталог(Знач Каталог) Экспорт КаталогГит = Новый Файл(ОбъединитьПути(Каталог, ".git")); @@ -568,14 +568,14 @@ // КонецЕсли; Для Каждого СтрокаЖурнала Из МассивСтрокЖурнала Цикл - Лог.Отладка(" <"+СтрокаЖурнала +">"); + Лог.Отладка(" <%1>", СтрокаЖурнала); СтрокаЖурнала = СокрЛ(СтрокаЖурнала); СимволИзменений = Лев(СтрокаЖурнала, 1); Если СимволИзменений = "A" или СимволИзменений = "M" Тогда ИмяФайла = СокрЛП(Сред(СтрокаЖурнала, 2)); // ИмяФайла = СтрЗаменить(ИмяФайла, Символ(0), ""); МассивИмен.Добавить(ИмяФайла); - Лог.Отладка(" В журнале git найдено имя файла <"+ИмяФайла+">"); + Лог.Отладка(" В журнале git найдено имя файла <%1>", ИмяФайла); КонецЕсли; КонецЦикла; Возврат МассивИмен; @@ -643,14 +643,14 @@ Функция СобратьФайл(Знач ПутьКИсходникам, Знач КаталогВыгрузки) - Лог.Информация("Собираю исходники <"+ПутьКИсходникам+">"); + Лог.Информация("Собираю исходники <%1>", ПутьКИсходникам); ПапкаИсходников = Новый Файл(ПутьКИсходникам); Переименования = ПолучитьСоответствиеПереименований(ПутьКИсходникам); ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); - Лог.Информация("Восстанавливаю структуру исходников в <" + ВременныйКаталог + ">"); + Лог.Информация("Восстанавливаю структуру исходников в <%1>", ВременныйКаталог); Для Каждого Переименование Из Переименования Цикл @@ -805,7 +805,7 @@ КонецФункции Процедура СобратьФайлИзИсходников(ПапкаИсходников, ИмяФайлаОбъекта) - Лог.Информация("Собираю файл из исходников <"+ПапкаИсходников+"> в файл "+ИмяФайлаОбъекта); + Лог.Информация("Собираю файл из исходников <%1> в файл %2", ПапкаИсходников, ИмяФайлаОбъекта); ПутьЗапаковщика = ОбъединитьПути(КаталогПроекта(), "tools", "v8unpack"); Если ЭтоWindows Тогда @@ -828,9 +828,9 @@ Лог.Отладка(ВыводПроцесса); ФайлОбъекта = Новый Файл(ИмяФайлаОбъекта); - Лог.Отладка(СтрШаблон("Перемещение из %1 в %2", ВременныйФайл, ИмяФайлаОбъекта)); + Лог.Отладка("Перемещение из %1 в %2", ВременныйФайл, ИмяФайлаОбъекта); Если ФайлОбъекта.Существует() Тогда - Лог.Отладка(СтрШаблон("Удаляю старый файл %1 ", ИмяФайлаОбъекта)); + Лог.Отладка("Удаляю старый файл %1 ", ИмяФайлаОбъекта); УдалитьФайлы(ИмяФайлаОбъекта); КонецЕсли; From fa0786db51773268c2285576b4ce2e946c474c16 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 14 Feb 2017 09:17:09 +0300 Subject: [PATCH 4/4] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8E=20=D0=BD=D0=B0=20?= =?UTF-8?q?2.2.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- v8files-extractor.os | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v8files-extractor.os b/v8files-extractor.os index 578097a..7642584 100644 --- a/v8files-extractor.os +++ b/v8files-extractor.os @@ -26,7 +26,7 @@ Функция Версия() Экспорт - Версия = "2.2.0-PRE"; + Версия = "2.2.0"; Возврат "v" + Версия;