diff --git a/README.md b/README.md index 04c2ffd..3aeb758 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,20 @@ -## Набор утилит для автоматической разборки/сборки внешних обработок и отчетов, при помещении (commit) в git +# Набор утилит для автоматической разборки/сборки внешних обработок и отчетов, при помещении (commit) в git [![Join the chat at https://gitter.im/xDrivenDevelopment/precommit1c](https://badges.gitter.im/xDrivenDevelopment/precommit1c.svg)](https://gitter.im/xDrivenDevelopment/precommit1c?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Здесь вы можете задавать любые вопросы разработчикам и активным участникам [![GitHub release](https://img.shields.io/github/release/xDrivenDevelopment/precommit1c.svg)](https://github.com/xDrivenDevelopment/precommit1c/releases) -### Что к чему +## Что к чему ---- +**precommit1c** - инструмент для хранения в Git исходников внешних отчетов/обработок, технически состоит из: + * 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 -### Установка +## Установка 1. Зависимости: * OneScript [http://oscript.io/](http://oscript.io/) @@ -25,15 +27,15 @@ 3. Путь хранения исходных текстов разобранных обработок по умолчанию используется как **src** (для обеспечения совместимости со старыми версиями обработки), однако его можно переназначить в файле `pre-commit` -#### Установка через OneScript Package Manager +### Установка через OneScript Package Manager (предпочтительно) -1. Выполните установку precommit1c из командной строки `opm install precommit1c` (предполагается, что OneScript уже установлен и командная строка запущена с правами администратора). +1. Выполните установку precommit1c из командной строки `opm install precommit1c` (предполагается, что OneScript уже установлен и командная строка запущена с правами администратора). При этом необходимые библиотеки oscript будут установлены автоматически. 2. Перейдите в рабочий каталог репозитория, для которого следует использовать автоматическую сборку/разборку. 3. Выполните из командной строки `precommit1c --install` (здесь можно без прав администратора). -#### Установка через zip-архив +### Установка через zip-архив 1. Скачайте zip-архив precommit1c.zip со страницы [последнего релиза](https://github.com/xDrivenDevelopment/precommit1c/releases/latest). @@ -50,12 +52,15 @@ v8files-extractor.os ``` -#### Установка через git clone +3. Установите необходимые библиотеки oscript - их список можно посмотреть в списке зависимостей в файле `packagedef`. + +### Установка через git clone 1. Склонируйте репозиторий `precommit1c` в удобное место. 2. После клонирования репозитория необходимо инициализировать используемые подмодули. Откройте командую строку и выполните команды: + ```cmd cd путь/к/репозиторию/precommit1c git submodule update --init --recursive @@ -64,6 +69,7 @@ git submodule update --init --recursive 3. Cодержимое каталога необходимо скопировать в каталог .git/hooks/ вашего проекта. *Примечание:* каталог .git по умолчанию скрыт. В итоге у вас должна получиться следующая структура каталога: + ``` .git\ hooks\ @@ -73,6 +79,8 @@ git submodule update --init --recursive v8files-extractor.os ``` +4. Установите необходимые библиотеки oscript - их список можно посмотреть в списке зависимостей в файле `packagedef`. + ## Запуск После установки достаточно для проверки сделать commit для любого файла epf/erf/cfe, и в вашем репозитории автоматически должна создаться папка *src*, полностью повторяющая структуру проекта, изменённые или добавленные файлы распакуются в папки с аналогичными наименованиями. @@ -89,14 +97,28 @@ oscript v8files-extractor.os ? Разбор файлов на исходники --help Показ этого экрана + --git-check-config + Проверка настроек репозитория git --git-precommit outputPath [--remove-orig-bin-files] Запустить чтение индекса из git и определить список файлов для разбора, разложить их и добавить исходники в индекс - Если передан флаг --remove-orig-bin-files, обработанные файлы epf/ert будут удалены из индекса git + Если передан флаг --remove-orig-bin-files, обработанные файлы epf/erf будут удалены из индекса git --compile inputPath outputPath [--recursive] Собрать внешний файл/обработку. Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога - --install + --install [--remove-orig-bin-files] Установить precommit1c для текущего репозитория git + Если передан флаг --remove-orig-bin-files, обработанные файлы epf/erf будут удалены из индекса git + +Общие параметры: + --use-designer + Если передан этот флаг, то для операций сборки/разборки будет использован конфигуратор 1С. + ТОЛЬКО ДЛЯ ВЕРСИЙ ПЛАТФОРМЫ 8.3.8 И ВЫШЕ! + --ib-connection-string + Строка подключения к информационной базе (для Windows-путей обязательно экранировать '\' так: '\\'!) + --ib-user + Имя пользователя в информационной базе + --ib-pwd + Пароль пользователя в информационной базе ``` ## Ограничения @@ -118,11 +140,21 @@ git config --local core.longpaths true Т.о. в файл C:\Program Files (x86)\1cv8\conf\conf.cfg необходимо добавить строку `DisableUnsafeActionProtection=.*` Подробнее [на ИТС](http://its.1c.ru/db/v838doc#bookmark:dev:TI000001873) +## Особенности распаковки макетов + +При использовании v8Reader макеты выгружаются в файлы, соответствующие их типам, дополнительно обрабатываются специальные случаи: + +* У макетов табличных документов дополнительно создаются .txt версии, чтобы их было легче сравнивать в текстовом редакторе. +* У макетов типа html дополнительно выгружаются файлы вложений. +* Макеты в двоичных данных выгружаются либо в .bin, либо (для печатных форм) в тот тип файла, который указан в имени макета (например, `ПФ_MXL_КакаяТоПечатнаяФорма` будет выгружен в `ПФ_MXL_КакаяТоПечатнаяФорма.mxl`). + ## Известные проблемы 1. При использовании некоторых версий SourceTree (удобный клиент git) может возникать следующая ошибка: + >`.git/hooks/pre-commit: line 4: oscript: command not found` Несколько вариантов решения: + + убедиться, что команда `oscript` доступна + для проверки вызвать из командной строки или Win+R `cmd /k oscript` + откатиться на предыдущую версию SourceTree @@ -135,14 +167,12 @@ git config --local core.longpaths true 1. Нужно выполнить следующее: * добавить нужную обработку в индекс git - например, `git add XXX.epf` - * установить переменную среды `LOGOS_CONFIG` или заполнить спец.файл настройки логов + * установить переменную среды `LOGOS_CONFIG` или заполнить спец.файл настройки логов * выполнить `git commit` или `precommit1c --git-precommit` + * Например, рядом с файлом `v8files-extractor.os` положить файл `logos.cfg` со следующим текстом `logger.rootLogger=DEBUG` + * или переименовать файл-пример `logos.debug-example.cfg` в `logos.cfg` + * Или создать и выполнить командный файл -+ Например, рядом с файлом `v8files-extractor.os` положить файл `logos.cfg` со следующим текстом `logger.rootLogger=DEBUG` - -+ или переименовать файл-пример `logos.debug-example.cfg` в `logos.cfg` - -* Или создать и выполнить командный файл ```bat git add XXX.epf @set LOGOS_CONFIG=logger.rootLogger=DEBUG @@ -152,6 +182,7 @@ git add XXX.epf * где каталог `src` - выходной каталог, где хранятся исходники 2. Для отключения отладочных логов выполнить обратные действия + ## Что внутри Как это работает: `v8files-extractor.os` полностью повторяет иерархию папок относительно корня репозитория только в папке SRC (от слова source), для каждой изменённой внешней обработки создаётся своя папка и туда с помощью v8unpack распаковывается помещаемая обработка, с помощью v8reader определяются наименования макетов, форм, модуля обработки и переименовываются, переименования сохраняются в служебном файле renames.txt, те файлы, которые невозможно определить или же носят чисто служебный характер, переносятся в каталог *und*. diff --git "a/features/step_definitions/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270.os" "b/features/step_definitions/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270.os" new file mode 100644 index 0000000..1464c8a --- /dev/null +++ "b/features/step_definitions/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270.os" @@ -0,0 +1,98 @@ +// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd + +#Использовать asserts + +Перем БДД; //контекст фреймворка 1bdd + +// Метод выдает список шагов, реализованных в данном файле-шагов +Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт + БДД = КонтекстФреймворкаBDD; + + ВсеШаги = Новый Массив; + + ВсеШаги.Добавить("ВРабочемКаталогеСодержатсяИсходникиОбработкиВФормате"); + ВсеШаги.Добавить("ВПодпапкеРабочегоКаталогаСодержатсяИсходникиОбработкиВФормате"); + + Возврат ВсеШаги; +КонецФункции + +// Реализация шагов + +// Процедура выполняется перед запуском каждого сценария +Процедура ПередЗапускомСценария(Знач Узел) Экспорт + +КонецПроцедуры + +// Процедура выполняется после завершения каждого сценария +Процедура ПослеЗапускаСценария(Знач Узел) Экспорт + +КонецПроцедуры + + +//в подпапке "src/1" рабочего каталога содержатся исходники обработки "Fixture" в формате "v8reader" +Процедура ВПодпапкеРабочегоКаталогаСодержатсяИсходникиОбработкиВФормате(Знач Подпапка, Знач ИмяОбработки, Знач Формат) Экспорт + Если Формат = "v8reader" Тогда + ИмяКаталогаИсходниковОбработки = ОбъединитьПути(Подпапка, ИмяОбработки); + ПроверяемИсходникиВРабочемКаталоге(ИмяКаталогаИсходниковОбработки, ОписаниеИсходниковФорматаV8reader()); + ИначеЕсли Формат = "designer" Тогда + ИмяКаталогаИсходниковОбработки = ОбъединитьПути(Подпапка, ИмяОбработки); + ПроверяемИсходникиВРабочемКаталоге(ИмяКаталогаИсходниковОбработки, ОписаниеИсходниковФорматаКонфигуратора(ИмяОбработки)); + Иначе + ВызватьИсключение "Проверяем несуществующий формат!"; + КонецЕсли; +КонецПроцедуры + +//в рабочем каталоге содержатся исходники обработки "Fixture" в формате "v8reader" +Процедура ВРабочемКаталогеСодержатсяИсходникиОбработкиВФормате(Знач ИмяОбработки, Знач Формат) Экспорт + Если Формат = "v8reader" Тогда + ПроверяемИсходникиВРабочемКаталоге(ИмяОбработки, ОписаниеИсходниковФорматаV8reader()); + ИначеЕсли Формат = "designer" Тогда + ПроверяемИсходникиВРабочемКаталоге(ИмяОбработки, ОписаниеИсходниковФорматаКонфигуратора(ИмяОбработки)); + Иначе + ВызватьИсключение "Проверяем несуществующий формат!"; + КонецЕсли; +КонецПроцедуры + +//{ Служебные методы + +Функция РабочийКаталог() + Возврат БДД.ПолучитьИзКонтекста("РабочийКаталог"); +КонецФункции + +Функция КаталогПроекта() + Возврат БДД.ПолучитьИзКонтекста("КаталогПроекта"); +КонецФункции + +Процедура ПроверяемИсходникиВРабочемКаталоге(ИмяОбработки, ОписаниеИсходников) + ПроверяемСуществованиеФайлаВРабочемКаталоге(ИмяОбработки, Ложь); + Для каждого КлючИЗначение из ОписаниеИсходников Цикл + ПроверяемСуществованиеФайлаВРабочемКаталоге(ОбъединитьПути(ИмяОбработки, КлючИЗначение.Ключ), КлючИЗначение.Значение); + КонецЦикла; +КонецПроцедуры + +Процедура ПроверяемСуществованиеФайлаВРабочемКаталоге(ПутьКФайлу, ЭтоФайл) + Файл = Новый Файл(ОбъединитьПути(РабочийКаталог(), ПутьКФайлу)); + Ожидаем.Что(Файл.Существует(), ПутьКФайлу + " должен существовать, а это не так!").ЭтоИстина(); + СтрокаОшибки = СтрШаблон("%1: значение Файл.ЭтоФайл() должно %2, а это не так!", ПутьКФайлу, ЭтоФайл); + Ожидаем.Что(Файл.ЭтоФайл() = ЭтоФайл, СтрокаОшибки).ЭтоИстина(); +КонецПроцедуры + +Функция ОписаниеИсходниковФорматаV8reader() + Описание = Новый Соответствие; + Описание.Вставить("renames.txt", Истина); + Описание.Вставить("Form", Ложь); + Описание.Вставить("Макеты", Ложь); + Описание.Вставить("und", Ложь); + Возврат Описание; +КонецФункции + +Функция ОписаниеИсходниковФорматаКонфигуратора(ИмяОбработки) + Описание = Новый Соответствие; + Описание.Вставить(ИмяОбработки + ".xml", Истина); + Описание.Вставить(ИмяОбработки, Ложь); + Описание.Вставить(ОбъединитьПути(ИмяОбработки, "Forms"), Ложь); + Описание.Вставить(ОбъединитьПути(ИмяОбработки, "Templates"), Ложь); + Возврат Описание; +КонецФункции + +//} diff --git "a/features/step_definitions/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271Git.os" "b/features/step_definitions/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271Git.os" new file mode 100644 index 0000000..6b50984 --- /dev/null +++ "b/features/step_definitions/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271Git.os" @@ -0,0 +1,111 @@ +// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd +#Использовать 1commands +#Использовать asserts + +Перем БДД; //контекст фреймворка 1bdd +Перем Лог; + +// Метод выдает список шагов, реализованных в данном файле-шагов +Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт + БДД = КонтекстФреймворкаBDD; + + ВсеШаги = Новый Массив; + + ВсеШаги.Добавить("ЯУстанавливаюPrecommitВРабочийКаталогСПараметрами"); + ВсеШаги.Добавить("ВРабочемКаталогеУстановленPrecommit"); + ВсеШаги.Добавить("ФайлХукаВРепозиторииРабочегоКаталогаСодержит"); + + Возврат ВсеШаги; +КонецФункции + +// Реализация шагов + +// Процедура выполняется перед запуском каждого сценария +Процедура ПередЗапускомСценария(Знач Узел) Экспорт + +КонецПроцедуры + +// Процедура выполняется после завершения каждого сценария +Процедура ПослеЗапускаСценария(Знач Узел) Экспорт + +КонецПроцедуры + +// Я устанавливаю Precommit в рабочий каталог с параметрами "Параметры" +Процедура ЯУстанавливаюPrecommitВРабочийКаталогСПараметрами(Знач Параметры) Экспорт + + ПараметрыКоманды = Новый Массив; + ПараметрыКоманды.Добавить(ОбъединитьПути(КаталогПроекта(), "v8files-extractor.os")); + ПараметрыКоманды.Добавить("--install"); + Если ЗначениеЗаполнено(Параметры) Тогда + ПараметрыКоманды.Добавить(ЗаменитьШаблоныВПараметрахКоманды(Параметры)); + КонецЕсли; + + Команда = Новый Команда; + + Команда.УстановитьКоманду("oscript"); + Команда.УстановитьКодировкуВывода(КодировкаТекста.UTF8); + Команда.УстановитьРабочийКаталог(РабочийКаталог()); + Команда.ДобавитьПараметры(ПараметрыКоманды); + + Лог.Отладка("Устанавливаем precommit1c с параметрами %1", СтрСоединить(Команда.ПолучитьПараметры(), " ")); + + КодВозврата = Команда.Исполнить(); + + Если КодВозврата <> 0 Тогда + Лог.Ошибка("Получен ненулевой код возврата " + КодВозврата + ". Выполнение скрипта остановлено!"); + ВызватьИсключение СокрЛП(Команда.ПолучитьВывод()); + Иначе + Лог.Отладка("Код возврата равен 0"); + КонецЕсли; + +КонецПроцедуры + +// Файл хука в репозитории рабочего каталога содержит "Параметры" +Процедура ФайлХукаВРепозиторииРабочегоКаталогаСодержит(Знач Параметры) Экспорт + СтрокаШага = СтрШаблон("файл "".git/hooks/pre-commit"" в рабочем каталоге содержит ""oscript -encoding=utf-8 .git/hooks/v8files-extractor.os --git-precommit src %1""", + Параметры); + БДД.ВыполнитьШаг(СтрокаШага); +КонецПроцедуры + +//в рабочем каталоге установлен precommit +Процедура ВРабочемКаталогеУстановленPrecommit() Экспорт + ПроверяемСуществованиеФайлаВРабочемКаталоге(".git/hooks"); + ПроверяемСуществованиеФайлаВРабочемКаталоге(".git/hooks/v8Reader"); + ПроверяемСуществованиеФайлаВРабочемКаталоге(".git/hooks/tools"); + ПроверяемСуществованиеФайлаВРабочемКаталоге(".git/hooks/v8Reader/V8Reader.epf"); + ПроверяемСуществованиеФайлаВРабочемКаталоге(".git/hooks/pre-commit"); + ПроверяемСуществованиеФайлаВРабочемКаталоге(".git/hooks/v8files-extractor.os"); + ПроверяемСуществованиеФайлаВРабочемКаталоге(".git/hooks/tools/v8unpack.exe"); + ПроверяемСуществованиеФайлаВРабочемКаталоге(".git/hooks/tools/mxl2txt.epf"); +КонецПроцедуры + +//{ Служебные методы + +Функция РабочийКаталог() + Возврат БДД.ПолучитьИзКонтекста("РабочийКаталог"); +КонецФункции + +Функция КаталогПроекта() + Возврат БДД.ПолучитьИзКонтекста("КаталогПроекта"); +КонецФункции + +Процедура ПроверяемСуществованиеФайлаВРабочемКаталоге(ПутьКФайлу) + Файл = Новый Файл(ОбъединитьПути(РабочийКаталог(), ПутьКФайлу)); + Ожидаем.Что(Файл.Существует(), ПутьКФайлу + " должен существовать, а это не так!").ЭтоИстина(); +КонецПроцедуры + +Функция ЗаменитьШаблоныВПараметрахКоманды(Знач ПараметрыКоманды) + Рез = СтрЗаменить(ПараметрыКоманды, "<КаталогПроекта>", ЭкранированныйПуть(КаталогПроекта())); + Рез = СтрЗаменить(Рез, "<РабочийКаталог>", ЭкранированныйПуть(РабочийКаталог())); + Возврат Рез; +КонецФункции + +Функция ЭкранированныйПуть(Знач Путь) + Рег = Новый РегулярноеВыражение("(?/v8files-extractor.os --decompile <РабочийКаталог>/1/Fixture.mxl <РабочийКаталог>/1" + Тогда в подкаталоге "1" рабочего каталога существует файл "Fixture_mxl.txt" + +Сценарий: Разборка макета из заданной папки при включенном режиме использования конфигуратора + Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <РабочийКаталог>/1/Fixture.mxl <РабочийКаталог>/1 --use-designer" + Тогда в подкаталоге "1" рабочего каталога существует файл "Fixture_mxl.txt" + +Сценарий: Разборка изменений макета по журналу Git + Дано я выполняю команду "git" с параметрами 'init' + И я устанавливаю Precommit в рабочий каталог с параметрами "" + И я выполняю команду "git" с параметрами "add -A ." + И я выполняю команду "git" с параметрами "status" + Когда я выполняю команду "git" с параметрами 'commit -m "init commit"' + Тогда в подкаталоге "1" рабочего каталога существует файл "Fixture_mxl.txt" + И вывод команды "git" содержит "create mode 100644 1/Fixture_mxl.txt" + +Сценарий: Разборка изменений макета по журналу Git при включенном режиме использования конфигуратора + Дано я выполняю команду "git" с параметрами 'init' + И я устанавливаю Precommit в рабочий каталог с параметрами "--use-designer --ib-connection-string /F<РабочийКаталог>/build/ib" + И я выполняю команду "vanessa-runner" с параметрами "init-dev" + И я выполняю команду "git" с параметрами "add -A ." + И я выполняю команду "git" с параметрами "status" + Когда я выполняю команду "git" с параметрами 'commit -m "init commit"' + Тогда в подкаталоге "1" рабочего каталога существует файл "Fixture_mxl.txt" + И вывод команды "git" содержит "create mode 100644 1/Fixture_mxl.txt" diff --git "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270.feature" "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270.feature" index 1ef2809..0e75c16 100644 --- "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270.feature" +++ "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270.feature" @@ -1,38 +1,31 @@ -# language: ru - -Функционал: Выполнение операций по разборке на исходники - Как Пользователь - Я хочу иметь возможность разбирать внешние файлы на исходники - Чтобы я мог проще следить за изменениями в коде - -Контекст: - Допустим я создаю временный каталог и сохраняю его в контекст - И я сохраняю каталог проекта в контекст - И я устанавливаю временный каталог как рабочий каталог - И я установил рабочий каталог как текущий каталог - -Сценарий: Разборка файла из заданной папки - Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <КаталогПроекта>/tests/Fixture.epf <РабочийКаталог>" - Тогда в рабочем каталоге существует каталог "Fixture" - И в подкаталоге "Fixture" рабочего каталога существует файл "renames.txt" - И в подкаталоге "Fixture" рабочего каталога существует каталог "Form" - И в подкаталоге "Fixture" рабочего каталога существует каталог "Макеты" - И в подкаталоге "Fixture" рабочего каталога существует каталог "und" - -Сценарий: Разборка макета из заданной папки - Когда я создаю каталог "1" в рабочем каталоге - И я копирую файл "Fixture.mxl" из каталога "tests" проекта в подкаталог "1" рабочего каталога - И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <РабочийКаталог>/1/Fixture.mxl <РабочийКаталог>/1" - Тогда в подкаталоге "1" рабочего каталогасуществует файл "Fixture_mxl.txt" - -Сценарий: Разборка каталога с вложенными каталогами - Когда я создаю каталог "bin" в рабочем каталоге - И я создаю каталог "1" в подкаталоге "bin" рабочего каталога - И я копирую файл "Fixture.epf" из каталога "tests" проекта в подкаталог "bin/1" рабочего каталога - И я создаю каталог "src" в рабочем каталоге - И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <РабочийКаталог>/bin <РабочийКаталог>/src" - Тогда в рабочем каталоге существует каталог "src/1/Fixture" - И в подкаталоге "src/1/Fixture" рабочего каталога существует файл "renames.txt" - И в подкаталоге "src/1/Fixture" рабочего каталога существует каталог "Form" - И в подкаталоге "src/1/Fixture" рабочего каталога существует каталог "Макеты" - И в подкаталоге "src/1/Fixture" рабочего каталога существует каталог "und" +# language: ru + +Функционал: Выполнение операций по разборке на исходники + Как Пользователь + Я хочу иметь возможность разбирать внешние файлы на исходники + Чтобы я мог проще следить за изменениями в коде + +Контекст: + Допустим Я пропускаю этот сценарий в Linux + И я создаю временный каталог и сохраняю его в контекст + И я сохраняю каталог проекта в контекст + И я устанавливаю временный каталог как рабочий каталог + И я установил рабочий каталог как текущий каталог + +Сценарий: Разборка файла из заданной папки + Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <КаталогПроекта>/tests/Fixture.epf <РабочийКаталог>" + Тогда в рабочем каталоге содержатся исходники обработки "Fixture" в формате "v8reader" + +Сценарий: Разборка макета из заданной папки + Дано я создаю каталог "1" в рабочем каталоге + И я копирую файл "Fixture.mxl" из каталога "tests" проекта в подкаталог "1" рабочего каталога + Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <РабочийКаталог>/1/Fixture.mxl <РабочийКаталог>/1" + Тогда в подкаталоге "1" рабочего каталога существует файл "Fixture_mxl.txt" + +Сценарий: Разборка каталога с вложенными каталогами + Дано я создаю каталог "bin" в рабочем каталоге + И я создаю каталог "1" в подкаталоге "bin" рабочего каталога + И я копирую файл "Fixture.epf" из каталога "tests" проекта в подкаталог "bin/1" рабочего каталога + И я создаю каталог "src" в рабочем каталоге + Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <РабочийКаталог>/bin <РабочийКаталог>/src" + Тогда в подпапке "src/1" рабочего каталога содержатся исходники обработки "Fixture" в формате "v8reader" diff --git "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270Git.feature" "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270Git.feature" index 345b93f..9cc63ff 100644 --- "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270Git.feature" +++ "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270Git.feature" @@ -6,40 +6,53 @@ Чтобы я не делал вручную разборку при commit'е Контекст: - Допустим я создаю временный каталог и сохраняю его в контекст + Допустим Я пропускаю этот сценарий в Linux + И я создаю временный каталог и сохраняю его в контекст И я сохраняю каталог проекта в контекст И я устанавливаю временный каталог как рабочий каталог И я установил рабочий каталог как текущий каталог И Я выполняю команду "git" с параметрами 'init' - И Я выполняю команду "git" с параметрами "config --local core.quotepath false" - И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --install" + +Сценарий: Разборка с ошибкой не приводит к очистке уже существующих исходников + Дано я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <КаталогПроекта>/tests/Fixture.epf <РабочийКаталог>/src" + И в подпапке "src" рабочего каталога содержатся исходники обработки "Fixture" в формате "v8reader" + И я выполняю команду "git" с параметрами "add -A ." + И я выполняю команду "git" с параметрами 'commit -m "init commit"' + И я устанавливаю Precommit в рабочий каталог с параметрами "--ib-connection-string /F<РабочийКаталог>/build/ib --ib-user temp --ib-pwd 123" + И я выполняю команду "vanessa-runner" с параметрами "init-dev" + И я копирую файл "Fixture.epf" из каталога "tests" проекта в рабочий каталог + И я выполняю команду "git" с параметрами "add -A ." + Когда я выполняю команду "git" с параметрами 'commit -m "second commit"' + Тогда в подпапке "src" рабочего каталога содержатся исходники обработки "Fixture" в формате "v8reader" + И вывод команды "git" не содержит "create mode 100644 1/Fixture.epf" Сценарий: Разборка изменений по журналу Git с вложенными каталогами - Когда я создаю каталог "1" в рабочем каталоге + Дано я устанавливаю Precommit в рабочий каталог с параметрами "" + И я создаю каталог "1" в рабочем каталоге И я копирую файл "Fixture.epf" из каталога "tests" проекта в подкаталог "1" рабочего каталога И я создаю каталог "src" в рабочем каталоге И я выполняю команду "git" с параметрами "add -A ." - И я выполняю команду "git" с параметрами "status" - И я выполняю команду "git" с параметрами 'commit -m "init commit"' - Тогда в рабочем каталоге существует каталог "src/1/Fixture" - И в подкаталоге "src/1/Fixture" рабочего каталога существует файл "renames.txt" - И в подкаталоге "src/1/Fixture" рабочего каталога существует каталог "Form" - И в подкаталоге "src/1/Fixture" рабочего каталога существует каталог "Макеты" - И в подкаталоге "src/1/Fixture" рабочего каталога существует каталог "und" + Когда я выполняю команду "git" с параметрами 'commit -m "init commit"' + Тогда в подпапке "src/1" рабочего каталога содержатся исходники обработки "Fixture" в формате "v8reader" И вывод команды "git" содержит "create mode 100644 1/Fixture.epf" Сценарий: Разборка изменений по журналу Git с вложенными каталогами с удалением бинарников из кэша - Когда я создаю каталог "1" в рабочем каталоге + Дано я устанавливаю Precommit в рабочий каталог с параметрами "--remove-orig-bin-files" + И я создаю каталог "1" в рабочем каталоге И я копирую файл "Fixture.epf" из каталога "tests" проекта в подкаталог "1" рабочего каталога И я создаю каталог "src" в рабочем каталоге - И я заменяю в файле ".git/hooks/pre-commit" в рабочем каталоге строку "v8files-extractor.os --git-precommit src" на строку "v8files-extractor.os --git-precommit src --remove-orig-bin-files" - И Файл ".git/hooks/pre-commit" в рабочем каталоге содержит "oscript -encoding=utf-8 .git/hooks/v8files-extractor.os --git-precommit src --remove-orig-bin-files" И я выполняю команду "git" с параметрами "add -A ." - И я выполняю команду "git" с параметрами "status" - И я выполняю команду "git" с параметрами 'commit -m "init commit"' - Тогда в рабочем каталоге существует каталог "src/1/Fixture" - И в подкаталоге "src/1/Fixture" рабочего каталога существует файл "renames.txt" - И в подкаталоге "src/1/Fixture" рабочего каталога существует каталог "Form" - И в подкаталоге "src/1/Fixture" рабочего каталога существует каталог "Макеты" - И в подкаталоге "src/1/Fixture" рабочего каталога существует каталог "und" + Когда я выполняю команду "git" с параметрами 'commit -m "init commit"' + Тогда в подпапке "src/1" рабочего каталога содержатся исходники обработки "Fixture" в формате "v8reader" И вывод команды "git" не содержит "create mode 100644 1/Fixture.epf" + +Сценарий: Разборка изменений по журналу Git с вложенными каталогами с указанием информационной базы + Дано я устанавливаю Precommit в рабочий каталог с параметрами "--ib-connection-string /F<РабочийКаталог>/build/ib" + И я выполняю команду "vanessa-runner" с параметрами "init-dev" + И я создаю каталог "1" в рабочем каталоге + И я копирую файл "Fixture.epf" из каталога "tests" проекта в подкаталог "1" рабочего каталога + И я создаю каталог "src" в рабочем каталоге + И я выполняю команду "git" с параметрами "add -A ." + Когда я выполняю команду "git" с параметрами 'commit -m "init commit"' + Тогда в подпапке "src/1" рабочего каталога содержатся исходники обработки "Fixture" в формате "v8reader" + И вывод команды "git" содержит "create mode 100644 1/Fixture.epf" diff --git "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270Git\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.feature" "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270Git\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.feature" index f27232b..4920a9a 100644 --- "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270Git\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.feature" +++ "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270Git\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.feature" @@ -1,8 +1,8 @@ # language: ru -Функционал: Выполнение операций по разборке на исходники с помощью хука pre-commit +Функционал: Выполнение операций по разборке на исходники конфигуратором с помощью хука pre-commit Как Пользователь - Я хочу иметь возможность разбирать внешние файлы на исходники с помощью хука pre-commit + Я хочу иметь возможность разбирать внешние файлы на исходники конфигуратором с помощью хука pre-commit Чтобы я не делал вручную разборку при commit'е Контекст: @@ -11,36 +11,34 @@ И я устанавливаю временный каталог как рабочий каталог И я установил рабочий каталог как текущий каталог И Я выполняю команду "git" с параметрами 'init' - И Я выполняю команду "git" с параметрами "config --local core.quotepath false" - И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --install" - И я заменяю в файле ".git/hooks/pre-commit" в рабочем каталоге строку "v8files-extractor.os --git-precommit src" на строку "v8files-extractor.os --git-precommit src --use-designer" Сценарий: Разборка изменений по журналу Git с вложенными каталогами без указания информационной базы - Когда я создаю каталог "1" в рабочем каталоге + Дано Я устанавливаю Precommit в рабочий каталог с параметрами "--use-designer" + И я создаю каталог "1" в рабочем каталоге И я копирую файл "Fixture.epf" из каталога "tests" проекта в подкаталог "1" рабочего каталога И я создаю каталог "src" в рабочем каталоге И я выполняю команду "git" с параметрами "add -A ." - И я выполняю команду "git" с параметрами "status" - И я выполняю команду "git" с параметрами 'commit -m "init commit"' - Тогда в рабочем каталоге существует каталог "src/1/Fixture" - И в подкаталоге "src/1/Fixture" рабочего каталога существует файл "fixture.xml" - И в подкаталоге "src/1/Fixture" рабочего каталога существует каталог "Fixture" - И в подкаталоге "src/1/Fixture/Fixture" рабочего каталога существует каталог "Forms" - И в подкаталоге "src/1/Fixture/Fixture" рабочего каталога существует каталог "Templates" + Когда я выполняю команду "git" с параметрами 'commit -m "init commit"' + Тогда в подпапке "src/1" рабочего каталога содержатся исходники обработки "Fixture" в формате "designer" И вывод команды "git" содержит "create mode 100644 1/Fixture.epf" Сценарий: Разборка изменений по журналу Git с вложенными каталогами с удалением бинарников из кэша без указания информационной базы - Когда я создаю каталог "1" в рабочем каталоге + Дано Я устанавливаю Precommit в рабочий каталог с параметрами "--use-designer --remove-orig-bin-files" + И я создаю каталог "1" в рабочем каталоге И я копирую файл "Fixture.epf" из каталога "tests" проекта в подкаталог "1" рабочего каталога И я создаю каталог "src" в рабочем каталоге - И я заменяю в файле ".git/hooks/pre-commit" в рабочем каталоге строку "v8files-extractor.os --git-precommit src --use-designer" на строку "v8files-extractor.os --git-precommit src --use-designer --remove-orig-bin-files" - И Файл ".git/hooks/pre-commit" в рабочем каталоге содержит "oscript -encoding=utf-8 .git/hooks/v8files-extractor.os --git-precommit src --use-designer --remove-orig-bin-files" И я выполняю команду "git" с параметрами "add -A ." - И я выполняю команду "git" с параметрами "status" - И я выполняю команду "git" с параметрами 'commit -m "init commit"' - Тогда в рабочем каталоге существует каталог "src/1/Fixture" - И в подкаталоге "src/1/Fixture" рабочего каталога существует файл "fixture.xml" - И в подкаталоге "src/1/Fixture" рабочего каталога существует каталог "Fixture" - И в подкаталоге "src/1/Fixture/Fixture" рабочего каталога существует каталог "Forms" - И в подкаталоге "src/1/Fixture/Fixture" рабочего каталога существует каталог "Templates" + Когда я выполняю команду "git" с параметрами 'commit -m "init commit"' + Тогда в подпапке "src/1" рабочего каталога содержатся исходники обработки "Fixture" в формате "designer" И вывод команды "git" не содержит "create mode 100644 1/Fixture.epf" + +Сценарий: Разборка изменений по журналу Git с вложенными каталогами с указанием информационной базы + Дано Я устанавливаю Precommit в рабочий каталог с параметрами "--use-designer --ib-connection-string /F<РабочийКаталог>/build/ib" + И я выполняю команду "vanessa-runner" с параметрами "init-dev" + И я создаю каталог "1" в рабочем каталоге + И я копирую файл "Fixture.epf" из каталога "tests" проекта в подкаталог "1" рабочего каталога + И я создаю каталог "src" в рабочем каталоге + И я выполняю команду "git" с параметрами "add -A ." + Когда я выполняю команду "git" с параметрами 'commit -m "init commit"' + Тогда в подпапке "src/1" рабочего каталога содержатся исходники обработки "Fixture" в формате "designer" + И вывод команды "git" содержит "create mode 100644 1/Fixture.epf" diff --git "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.feature" "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.feature" index 3affad4..1d909ce 100644 --- "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.feature" +++ "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\235\320\260\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.feature" @@ -1,6 +1,6 @@ # language: ru -Функционал: Выполнение операций по разборке на исходники +Функционал: Выполнение операций по разборке на исходники конфигуратором Как Пользователь Я хочу иметь возможность разбирать внешние файлы на исходники с помощью конфигуратора Чтобы я мог проще следить за изменениями в коде @@ -14,40 +14,24 @@ Сценарий: Разборка файла из заданной папки без указания информационной базы Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <КаталогПроекта>/tests/Fixture.epf <РабочийКаталог> --use-designer" - Тогда в рабочем каталоге существует каталог "Fixture" - И в подкаталоге "Fixture" рабочего каталога существует файл "fixture.xml" - И в подкаталоге "Fixture" рабочего каталога существует каталог "Fixture" - И в подкаталоге "Fixture/Fixture" рабочего каталога существует каталог "Forms" - И в подкаталоге "Fixture/Fixture" рабочего каталога существует каталог "Templates" + Тогда в рабочем каталоге содержатся исходники обработки "Fixture" в формате "designer" Сценарий: Разборка каталога с вложенными каталогами без указания информационной базы - Когда я создаю каталог "bin" в рабочем каталоге + Дано я создаю каталог "bin" в рабочем каталоге И я создаю каталог "1" в подкаталоге "bin" рабочего каталога И я копирую файл "Fixture.epf" из каталога "tests" проекта в подкаталог "bin/1" рабочего каталога И я создаю каталог "src" в рабочем каталоге - И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <РабочийКаталог>/bin <РабочийКаталог>/src --use-designer" - Тогда в рабочем каталоге существует каталог "src/1/Fixture" - И в подкаталоге "src/1/Fixture" рабочего каталога существует файл "fixture.xml" - И в подкаталоге "src/1/Fixture" рабочего каталога существует каталог "Fixture" - И в подкаталоге "src/1/Fixture/Fixture" рабочего каталога существует каталог "Forms" - И в подкаталоге "src/1/Fixture/Fixture" рабочего каталога существует каталог "Templates" + Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <РабочийКаталог>/bin <РабочийКаталог>/src --use-designer" + Тогда в подпапке "src/1" рабочего каталога содержатся исходники обработки "Fixture" в формате "designer" Сценарий: Разборка файла из заданной папки с указанием информационной базы - Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <КаталогПроекта>/tests/Fixture.epf <РабочийКаталог> --use-designer --ib-connection-string /F<РабочийКаталог>\build\ib" - Тогда в рабочем каталоге существует каталог "Fixture" - И в подкаталоге "Fixture" рабочего каталога существует файл "fixture.xml" - И в подкаталоге "Fixture" рабочего каталога существует каталог "Fixture" - И в подкаталоге "Fixture/Fixture" рабочего каталога существует каталог "Forms" - И в подкаталоге "Fixture/Fixture" рабочего каталога существует каталог "Templates" + Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <КаталогПроекта>/tests/Fixture.epf <РабочийКаталог> --use-designer --ib-connection-string /F<РабочийКаталог>/build/ib" + Тогда в рабочем каталоге содержатся исходники обработки "Fixture" в формате "designer" Сценарий: Разборка каталога с вложенными каталогами с указанием информационной базы - Когда я создаю каталог "bin" в рабочем каталоге + Дано я создаю каталог "bin" в рабочем каталоге И я создаю каталог "1" в подкаталоге "bin" рабочего каталога И я копирую файл "Fixture.epf" из каталога "tests" проекта в подкаталог "bin/1" рабочего каталога И я создаю каталог "src" в рабочем каталоге - И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <РабочийКаталог>/bin <РабочийКаталог>/src --use-designer --ib-connection-string /F<РабочийКаталог>\build\ib" - Тогда в рабочем каталоге существует каталог "src/1/Fixture" - И в подкаталоге "src/1/Fixture" рабочего каталога существует файл "fixture.xml" - И в подкаталоге "src/1/Fixture" рабочего каталога существует каталог "Fixture" - И в подкаталоге "src/1/Fixture/Fixture" рабочего каталога существует каталог "Forms" - И в подкаталоге "src/1/Fixture/Fixture" рабочего каталога существует каталог "Templates" + Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --decompile <РабочийКаталог>/bin <РабочийКаталог>/src --use-designer --ib-connection-string /F<РабочийКаталог>/build/ib" + Тогда в подпапке "src/1" рабочего каталога содержатся исходники обработки "Fixture" в формате "designer" diff --git "a/features/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271Git.feature" "b/features/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271Git.feature" index 4a28166..1b69bd5 100644 --- "a/features/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271Git.feature" +++ "b/features/\320\240\320\265\320\277\320\276\320\267\320\270\321\202\320\276\321\200\320\270\320\271Git.feature" @@ -13,12 +13,12 @@ И Я выполняю команду "git" с параметрами 'init' Структура сценария: Проверка настроек репозитория Git (простой отрицательный) - <Настройка> - Когда Я копирую файл "v8files-extractor.os" из каталога "" проекта в подкаталог ".git/hooks" рабочего каталога + Дано Я копирую файл "v8files-extractor.os" из каталога "" проекта в подкаталог ".git/hooks" рабочего каталога И Я выполняю команду "git" с параметрами "config --local core.quotepath false" И Я выполняю команду "git" с параметрами "config --local core.longpaths true" И Я выполняю команду "git" с параметрами <Настройка> - И Я выполняю команду "oscript" с параметрами '.git/hooks/v8files-extractor.os --git-check-config' - Тогда вывод команды "oscript" содержит "У текущего репозитария не заданы необходимые настройки!" + Когда Я выполняю команду "oscript" с параметрами '.git/hooks/v8files-extractor.os --git-check-config' + Тогда вывод команды "oscript" содержит "У текущего репозитария не заданы необходимые настройки!" Примеры: |Настройка| @@ -26,46 +26,31 @@ |config --local core.longpaths false| Сценарий: Проверка настроек репозитория Git (простой положительный) - Когда Я копирую файл "v8files-extractor.os" из каталога "" проекта в подкаталог ".git/hooks" рабочего каталога + Дано Я копирую файл "v8files-extractor.os" из каталога "" проекта в подкаталог ".git/hooks" рабочего каталога И Я выполняю команду "git" с параметрами "config --local core.quotepath false" И Я выполняю команду "git" с параметрами "config --local core.longpaths true" - И Я выполняю команду "oscript" с параметрами ".git/hooks/v8files-extractor.os --git-check-config" + Когда Я выполняю команду "oscript" с параметрами ".git/hooks/v8files-extractor.os --git-check-config" Тогда вывод команды "oscript" не содержит "У текущего репозитария не заданы необходимые настройки!" Сценарий: Установка precommit1c в репозиторий Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --install" И Я выполняю команду "oscript" с параметрами ".git/hooks/v8files-extractor.os --git-check-config" - Тогда В рабочем каталоге существует каталог ".git/hooks" - И В рабочем каталоге существует каталог ".git/hooks/v8Reader" - И В рабочем каталоге существует каталог ".git/hooks/tools" - И В рабочем каталоге существует файл ".git/hooks/v8Reader/V8Reader.epf" - И В рабочем каталоге существует файл ".git/hooks/pre-commit" - И В рабочем каталоге существует файл ".git/hooks/v8files-extractor.os" - И В рабочем каталоге существует файл ".git/hooks/tools/v8unpack.exe" + Тогда в рабочем каталоге установлен precommit И вывод команды "oscript" не содержит "У текущего репозитария не заданы необходимые настройки!" -Сценарий: Установка precommit1c в репозиторий с указанием сервисной базы - Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --install --ib-connection-string /Fc:\test\ib --ib-user UserTest --ib-pwd ********" +Структура сценария: Установка precommit1c в репозиторий с параметрами: <Параметры> + Когда Я устанавливаю Precommit в рабочий каталог с параметрами <Параметры> И Я выполняю команду "oscript" с параметрами ".git/hooks/v8files-extractor.os --git-check-config" - Тогда В рабочем каталоге существует каталог ".git/hooks" - И В рабочем каталоге существует каталог ".git/hooks/v8Reader" - И В рабочем каталоге существует каталог ".git/hooks/tools" - И В рабочем каталоге существует файл ".git/hooks/v8Reader/V8Reader.epf" - И В рабочем каталоге существует файл ".git/hooks/pre-commit" - И В рабочем каталоге существует файл ".git/hooks/v8files-extractor.os" - И В рабочем каталоге существует файл ".git/hooks/tools/v8unpack.exe" - И файл ".git/hooks/pre-commit" в рабочем каталоге содержит "oscript -encoding=utf-8 .git/hooks/v8files-extractor.os --git-precommit src --ib-connection-string /Fc:\test\ib --ib-user UserTest --ib-pwd ********" + Тогда в рабочем каталоге установлен precommit + И Файл хука в репозитории рабочего каталога содержит <Параметры> И вывод команды "oscript" не содержит "У текущего репозитария не заданы необходимые настройки!" -Сценарий: Установка precommit1c в репозиторий с указанием сервисной базы и использованием конфигуратора - Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/v8files-extractor.os --install --use-designer --ib-connection-string /Fc:\test\ib --ib-user UserTest --ib-pwd ********" - И Я выполняю команду "oscript" с параметрами ".git/hooks/v8files-extractor.os --git-check-config" - Тогда В рабочем каталоге существует каталог ".git/hooks" - И В рабочем каталоге существует каталог ".git/hooks/v8Reader" - И В рабочем каталоге существует каталог ".git/hooks/tools" - И В рабочем каталоге существует файл ".git/hooks/v8Reader/V8Reader.epf" - И В рабочем каталоге существует файл ".git/hooks/pre-commit" - И В рабочем каталоге существует файл ".git/hooks/v8files-extractor.os" - И В рабочем каталоге существует файл ".git/hooks/tools/v8unpack.exe" - И файл ".git/hooks/pre-commit" в рабочем каталоге содержит "oscript -encoding=utf-8 .git/hooks/v8files-extractor.os --git-precommit src --use-designer --ib-connection-string /Fc:\test\ib --ib-user UserTest --ib-pwd ********" - И вывод команды "oscript" не содержит "У текущего репозитария не заданы необходимые настройки!" +Примеры: + |Параметры| + |--use-designer| + |--remove-orig-bin-files| + |--ib-connection-string /Fc:/test/ib --ib-user UserTest --ib-pwd ********| + |--use-designer --remove-orig-bin-files| + |--use-designer --ib-connection-string /Fc:/test/ib --ib-user UserTest --ib-pwd ********| + |--remove-orig-bin-files --ib-connection-string /Fc:/test/ib --ib-user UserTest --ib-pwd ********| + |--use-designer --remove-orig-bin-files --ib-connection-string /Fc:/test/ib --ib-user UserTest --ib-pwd ********| diff --git "a/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262.feature" "b/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262.feature" index d9d9e08..d41e6b1 100644 --- "a/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262.feature" +++ "b/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262.feature" @@ -6,12 +6,19 @@ Чтобы я мог не делать этого вручную Контекст: - Допустим я создаю временный каталог и сохраняю его в контекст + Допустим Я пропускаю этот сценарий в Linux + И я создаю временный каталог и сохраняю его в контекст И я сохраняю каталог проекта в контекст И я устанавливаю временный каталог как рабочий каталог И я установил рабочий каталог как текущий каталог Сценарий: Сборка файла из заданной папки - Когда я создаю каталог "bin" в рабочем каталоге - И я выполняю команду "oscript" с параметрами "<КаталогПроекта>\v8files-extractor.os --compile <КаталогПроекта>\src\tests\Fixture <РабочийКаталог>\bin" - Тогда в подкаталоге "bin" рабочего каталога существует файл "Fixture.epf" \ No newline at end of file + Дано я создаю каталог "bin" в рабочем каталоге + Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>\v8files-extractor.os --compile <КаталогПроекта>\src\tests\Fixture <РабочийКаталог>\bin" + Тогда в подкаталоге "bin" рабочего каталога существует файл "Fixture.epf" + +Сценарий: Сборка файла из заданной папки с указанием информационной базы + Дано я создаю каталог "bin" в рабочем каталоге + И я выполняю команду "vanessa-runner" с параметрами "init-dev" + Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>\v8files-extractor.os --compile <КаталогПроекта>\src\tests\fixture <РабочийКаталог>\bin --ib-connection-string /F<РабочийКаталог>/build/ib" + Тогда в подкаталоге "bin" рабочего каталога существует файл "Fixture.epf" diff --git "a/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.feature" "b/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.feature" index d1c4236..acd761d 100644 --- "a/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.feature" +++ "b/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.feature" @@ -1,8 +1,8 @@ # language: ru -Функционал: Сборка внешних файлов из исходников +Функционал: Сборка внешних файлов из исходников конфигуратором Как Пользователь - Я хочу иметь возможность собирать внешние файлы из исходников + Я хочу иметь возможность собирать внешние файлы из исходников конфигуратором Чтобы я мог не делать этого вручную Контекст: @@ -12,12 +12,12 @@ И я установил рабочий каталог как текущий каталог Сценарий: Сборка файла из заданной папки без указания информационной базы - Когда я создаю каталог "bin" в рабочем каталоге - И я выполняю команду "oscript" с параметрами "<КаталогПроекта>\v8files-extractor.os --compile <КаталогПроекта>\src\tests\UseDesigner\fixture <РабочийКаталог>\bin --use-designer" + Дано я создаю каталог "bin" в рабочем каталоге + Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>\v8files-extractor.os --compile <КаталогПроекта>\src\tests\UseDesigner\fixture <РабочийКаталог>\bin --use-designer" Тогда в подкаталоге "bin" рабочего каталога существует файл "Fixture.epf" Сценарий: Сборка файла из заданной папки с указанием информационной базы - Когда я создаю каталог "bin" в рабочем каталоге + Дано я создаю каталог "bin" в рабочем каталоге И я выполняю команду "vanessa-runner" с параметрами "init-dev" - И я выполняю команду "oscript" с параметрами "<КаталогПроекта>\v8files-extractor.os --compile <КаталогПроекта>\src\tests\UseDesigner\fixture <РабочийКаталог>\bin --use-designer --ib-connection-string /F<РабочийКаталог>\build\ib" - Тогда в подкаталоге "bin" рабочего каталога существует файл "Fixture.epf" \ No newline at end of file + Когда я выполняю команду "oscript" с параметрами "<КаталогПроекта>\v8files-extractor.os --compile <КаталогПроекта>\src\tests\UseDesigner\fixture <РабочийКаталог>\bin --use-designer --ib-connection-string /F<РабочийКаталог>/build/ib" + Тогда в подкаталоге "bin" рабочего каталога существует файл "Fixture.epf" diff --git a/packagedef b/packagedef index bb92f0e..25a5f63 100644 --- a/packagedef +++ b/packagedef @@ -1,13 +1,14 @@  Описание.Имя("precommit1c") - .Версия("2.2.1") + .Версия("2.3.0") .ЗависитОт("asserts", "0.4.0") .ЗависитОт("cmdline", "1.0.0") .ЗависитОт("logos", "1.1.1") .ЗависитОт("strings", "0.4.1") .ЗависитОт("tempfiles", "0.2.2") .ЗависитОт("v8runner", "1.1.3") - .ЗависитОт("1commands", "1.3.5") + .ЗависитОт("1commands", "1.5.0") + .ЗависитОт("gitrunner", "1.6.0") .ВключитьФайл("license.md") .ВключитьФайл("readme.md") .ВключитьФайл("NOTICE") diff --git a/src/tools/mxl2txt/mxl2txt.xml b/src/tools/mxl2txt/mxl2txt.xml new file mode 100644 index 0000000..89ef6e8 --- /dev/null +++ b/src/tools/mxl2txt/mxl2txt.xml @@ -0,0 +1,30 @@ + + + + + + c3831ec8-d8d5-4f93-8a22-f9bfae07327f + ccb62503-8e1f-429f-98cb-3b09350c6913 + + + 2e1571b6-3279-4c03-89fd-4a023c61a98d + 3f3ce976-2f97-4be6-83de-02c1b4227c88 + + + + mxl2txt + + + ru + Mxl2txt + + + + ExternalDataProcessor.mxl2txt.Form.Форма + + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/src/tools/mxl2txt/mxl2txt/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/src/tools/mxl2txt/mxl2txt/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 0000000..671cd5f --- /dev/null +++ "b/src/tools/mxl2txt/mxl2txt/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ No newline at end of file diff --git "a/src/tools/mxl2txt/mxl2txt/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/src/tools/mxl2txt/mxl2txt/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 0000000..04823f1 --- /dev/null +++ "b/src/tools/mxl2txt/mxl2txt/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,16 @@ + +
+ + + ПриОткрытии + ПриСозданииНаСервере + + + + + cfg:ExternalDataProcessorObject.mxl2txt + + true + + + \ No newline at end of file diff --git "a/src/tools/mxl2txt/mxl2txt/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/src/tools/mxl2txt/mxl2txt/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 0000000..e403815 --- /dev/null +++ "b/src/tools/mxl2txt/mxl2txt/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,22 @@ + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если НЕ ПустаяСтрока(ПараметрЗапуска) Тогда + ОбработатьПараметрыЗапуска(ПараметрЗапуска); + КонецЕсли; + ЗавершитьРаботуСистемы(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьПараметрыЗапуска(ПутьКФайлу) + + Файл = Новый Файл(ПутьКФайлу); + + Если Файл.Существует() И Файл.Расширение = ".mxl" Тогда + ТабДокумент = Новый ТабличныйДокумент; + ТабДокумент.Прочитать(Файл.ПолноеИмя); + ИмяРазложенногоФайла = Лев(Файл.ПолноеИмя, СтрДлина(Файл.ПолноеИмя) - 4) + "_mxl.txt"; + ТабДокумент.Записать(ИмяРазложенногоФайла, ТипФайлаТабличногоДокумента.TXT); + КонецЕсли; + +КонецПроцедуры \ No newline at end of file diff --git a/tools/mxl2txt.epf b/tools/mxl2txt.epf new file mode 100644 index 0000000..0932c7b Binary files /dev/null and b/tools/mxl2txt.epf differ diff --git a/v8files-extractor.os b/v8files-extractor.os index c285ae8..e0fddd9 100644 --- a/v8files-extractor.os +++ b/v8files-extractor.os @@ -18,6 +18,8 @@ #Использовать asserts #Использовать v8runner #Использовать strings +#Использовать gitrunner +#Использовать 1commands Перем Лог; Перем КодВозврата; @@ -25,10 +27,12 @@ Перем ЭтоWindows; Перем ИспользоватьКонфигуратор; Перем КонтекстКонфигуратора; +Перем ГитРепозиторий; +Перем ВерсияПлатформы; Функция Версия() Экспорт - Версия = "2.2.1"; + Версия = "2.3.0"; Возврат "v" + Версия; @@ -89,6 +93,10 @@ Если НЕ ПустаяСтрока(Аргументы.ЗначенияПараметров["--ib-connection-string"]) Тогда Конфигуратор = Новый УправлениеКонфигуратором(); + ВерсияПлатформы = Аргументы.ЗначенияПараметров["--v8version"]; + Если ЗначениеЗаполнено(ВерсияПлатформы) Тогда + Конфигуратор.ИспользоватьВерсиюПлатформы(ВерсияПлатформы); + КонецЕсли; КонтекстКонфигуратора = Конфигуратор.ПолучитьКонтекст(); КонтекстКонфигуратора.КлючСоединенияСБазой = Аргументы.ЗначенияПараметров["--ib-connection-string"]; КонтекстКонфигуратора.ИмяПользователя = Аргументы.ЗначенияПараметров["--ib-user"]; @@ -102,8 +110,6 @@ Аргументы.ЗначенияПараметров["ПутьВходящихДанных"], Аргументы.ЗначенияПараметров["ВыходнойКаталог"] ); - ИначеЕсли Команда = ВозможныеКоманды().Помощь Тогда - ВывестиСправку(); ИначеЕсли Команда = ВозможныеКоманды().ПроверитьКонфигГит Тогда ПроверитьНастройкиРепозитарияГит(); ИначеЕсли Команда = ВозможныеКоманды().ОбработатьИзмененияИзГит Тогда @@ -118,7 +124,12 @@ Аргументы.ЗначенияПараметров["--recursive"] ); ИначеЕсли Команда = ВозможныеКоманды().Установить Тогда - УстановитьВКаталог(ТекущийКаталог()); + УстановитьВКаталог( + ТекущийКаталог(), + Аргументы.ЗначенияПараметров["--remove-orig-bin-files"] + ); + Иначе + ВывестиСправку(); КонецЕсли; Исключение @@ -126,10 +137,11 @@ КодВозврата = 1; КонецПопытки; - Лог.Отладка("Очищаем каталог временной ИБ"); + Лог.Отладка("Очищаем временные файлы"); Попытка ВременныеФайлы.Удалить(); Исключение + Лог.Отладка("Не удалось очистить временные файлы"); КонецПопытки; Возврат Истина; @@ -140,6 +152,7 @@ Парсер.ДобавитьИменованныйПараметр("--ib-connection-string", "Строка подключения к БД", Истина); Парсер.ДобавитьИменованныйПараметр("--ib-user", "Пользователь БД", Истина); Парсер.ДобавитьИменованныйПараметр("--ib-pwd", "Пароль БД", Истина); + Парсер.ДобавитьИменованныйПараметр("--v8version", "Маска версии платформы", Истина); Парсер.ДобавитьПараметрФлаг("--use-designer", "", Истина); КонецПроцедуры @@ -179,6 +192,7 @@ Процедура ДобавитьОписаниеКомандыУстановить(Знач Парсер) ОписаниеКоманды = Парсер.ОписаниеКоманды(ВозможныеКоманды().Установить); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--remove-orig-bin-files"); Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры @@ -188,7 +202,6 @@ Лог = Логирование.ПолучитьЛог("oscript.app.v8files-extractor"); Лог.Закрыть(); - //Лог.УстановитьУровень(УровниЛога.Отладка); ВыводПоУмолчанию = Новый ВыводЛогаВКонсоль(); Лог.ДобавитьСпособВывода(ВыводПоУмолчанию); @@ -196,6 +209,9 @@ ИспользоватьКонфигуратор = Ложь; КонтекстКонфигуратора = Неопределено; + ГитРепозиторий = Новый ГитРепозиторий(); + ГитРепозиторий.УстановитьРабочийКаталог(ТекущийКаталог()); + Попытка Лог_cmdline = Логирование.ПолучитьЛог("oscript.lib.cmdline"); @@ -205,16 +221,17 @@ Лог_cmdline.ДобавитьСпособВывода(ВыводПоУмолчанию); Аппендер = Новый ВыводЛогаВФайл(); - Аппендер.ОткрытьФайл(ОбъединитьПути(КаталогПроекта(), ИмяСкрипта()+".cmdline.log")); + Аппендер.ОткрытьФайл(ОбъединитьПути(КаталогПроекта(), ИмяСкрипта() + ".cmdline.log")); Лог_cmdline.ДобавитьСпособВывода(Аппендер); Аппендер = Новый ВыводЛогаВФайл(); - Аппендер.ОткрытьФайл(ОбъединитьПути(КаталогПроекта(), ИмяСкрипта()+".log")); + Аппендер.ОткрытьФайл(ОбъединитьПути(КаталогПроекта(), ИмяСкрипта() + ".log")); Лог.ДобавитьСпособВывода(Аппендер); Исключение // Если прекоммит установлен, как приложение, в Program Files // То команда не сможет отработать из за отсутствия прав на запись. // Но нам в данном случае и не нужен лог в файле. + Лог.Отладка("Не смогли открыть лог в файле"); КонецПопытки; КонецПроцедуры @@ -236,12 +253,13 @@ ОтносительныйПутьКаталога = ПолучитьОтносительныйПутьФайла(КаталогКорень, ПутьКаталога); ОтносительныйПутьКаталога = ?(ПустаяСтрока(ОтносительныйПутьКаталога), ПутьКаталога, ОтносительныйПутьКаталога); - Лог.Информация("Подготовка выгрузки каталога %1 в каталог %2, корень %3", ОтносительныйПутьКаталога, КаталогВыгрузки, КаталогКорень); + Лог.Информация("Подготовка выгрузки каталога %1 в каталог %2, корень %3", + ОтносительныйПутьКаталога, КаталогВыгрузки, КаталогКорень); ИмяКаталогаВыгрузки = Новый Файл(КаталогВыгрузки).Имя; Файлы = НайтиФайлы(ПутьКаталога, ПолучитьМаскуВсеФайлы()); - Для Каждого Файл из Файлы Цикл + Для Каждого Файл Из Файлы Цикл Если Файл.ЭтоКаталог() Тогда РазобратьКаталог(Новый Файл(Файл.ПолноеИмя), КаталогВыгрузки, КаталогКорень); @@ -252,19 +270,24 @@ РазобратьФайлВнутр(Файл, КаталогВыгрузки, КаталогКорень); Лог.Информация("Завершена выгрузка файла %1 в каталог %2", Файл.Имя, ИмяКаталогаВыгрузки); + Иначе + Лог.Отладка("Тип файла не поддерживается: %1", Файл.ПолноеИмя); КонецЕсли; КонецЦикла; - Лог.Информация("Завершена выгрузка каталога %1 в каталог %2, корень %3", ОтносительныйПутьКаталога, КаталогВыгрузки, КаталогКорень); + Лог.Информация("Завершена выгрузка каталога %1 в каталог %2, корень %3", + ОтносительныйПутьКаталога, КаталогВыгрузки, КаталогКорень); КонецПроцедуры Функция РазобратьФайл(Знач Файл, Знач КаталогВыгрузки, Знач КаталогКорень = "") Экспорт ПутьФайла = Файл.ПолноеИмя; - Лог.Информация("Проверка необходимости выгрузки файла %1 в каталог %2, корень %3", ПутьФайла, КаталогВыгрузки, КаталогКорень); + Лог.Информация("Проверка необходимости выгрузки файла %1 в каталог %2, корень %3", + ПутьФайла, КаталогВыгрузки, КаталогКорень); КаталогИсходников = РазобратьФайлВнутр(Файл, КаталогВыгрузки, КаталогКорень); - Лог.Информация("Завершена проверка необходимости выгрузки файла %1 в каталог %2, корень %3", ПутьФайла, КаталогВыгрузки, КаталогКорень); + Лог.Информация("Завершена проверка необходимости выгрузки файла %1 в каталог %2, корень %3", + ПутьФайла, КаталогВыгрузки, КаталогКорень); Возврат КаталогИсходников; @@ -284,20 +307,30 @@ ПутьФайла = Файл.ПолноеИмя; Если Не ТипФайлаПоддерживается(Файл) Тогда - ВызватьИсключение "Тип файла """+Файл.Расширение+""" не поддерживается"; + ВызватьИсключение "Тип файла """ + Файл.Расширение + """ не поддерживается"; КонецЕсли; - Ожидаем.Что(Файл.Существует(), "Файл " + ПутьФайла + " должен существовать").ЭтоИстина(); + ЭтоМакет = ВРег(Файл.Расширение) = ".MXL"; + + Ожидаем + .Что(Файл.Существует(), "Файл " + ПутьФайла + " должен существовать") + .ЭтоИстина(); - ОтносительныйПутьКаталогаФайла = ПолучитьОтносительныйПутьФайла(КаталогКорень, ОбъединитьПути(Файл.Путь, Файл.ИмяБезРасширения)); - Лог.Отладка("ОтносительныйПутьКаталогаФайла <%1>", ОтносительныйПутьКаталогаФайла); + Если ЭтоМакет Тогда - ПутьКаталогаИсходников = ОбъединитьПути(КаталогВыгрузки, ОтносительныйПутьКаталогаФайла); - Лог.Отладка("ПутьКаталогаИсходников <%1>", ПутьКаталогаИсходников); - ПапкаИсходников = Новый Файл(ПутьКаталогаИсходников); + ПутьРазобранногоМакета = ОбъединитьПути(Файл.Путь, Файл.ИмяБезРасширения + "_mxl.txt"); + Лог.Отладка("ПутьРазобранногоМакета <%1>", ПутьРазобранногоМакета); + ПапкаИсходников = Новый Файл(ПутьРазобранногоМакета); + + Иначе + + ОтносительныйПутьКаталогаФайла = ПолучитьОтносительныйПутьФайла(КаталогКорень, ОбъединитьПути(Файл.Путь, Файл.ИмяБезРасширения)); + Лог.Отладка("ОтносительныйПутьКаталогаФайла <%1>", ОтносительныйПутьКаталогаФайла); + + ПутьКаталогаИсходников = ОбъединитьПути(КаталогВыгрузки, ОтносительныйПутьКаталогаФайла); + Лог.Отладка("ПутьКаталогаИсходников <%1>", ПутьКаталогаИсходников); + ПапкаИсходников = Новый Файл(ПутьКаталогаИсходников); - Если НЕ ВРег(Файл.Расширение) = ".MXL" Тогда - ОбеспечитьПустойКаталог(ПапкаИсходников); КонецЕсли; Если ВРег(Файл.Расширение) = ".CFE" Тогда @@ -318,10 +351,11 @@ ФайлКорень = Новый Файл(КаталогКорень); ФайлВнутреннийКаталог = Новый Файл(ВнутреннийКаталог); Рез = СтрЗаменить(ФайлВнутреннийКаталог.ПолноеИмя, ФайлКорень.ПолноеИмя, ""); - Если Лев(Рез, 1) = "\" Тогда + Разделитель = ПолучитьРазделительПути(); + Если Лев(Рез, 1) = Разделитель Тогда Рез = Сред(Рез, 2); КонецЕсли; - Если Прав(Рез, 1) = "\" Тогда + Если Прав(Рез, 1) = Разделитель Тогда Рез = Лев(Рез, СтрДлина(Рез)-1); КонецЕсли; Возврат Рез; @@ -332,6 +366,9 @@ Лог.Отладка("Запускаем распаковку файла расширения"); Конфигуратор = Новый УправлениеКонфигуратором(); + Если ЗначениеЗаполнено(ВерсияПлатформы) Тогда + Конфигуратор.ИспользоватьВерсиюПлатформы(ВерсияПлатформы); + КонецЕсли; Если КонтекстКонфигуратора = Неопределено Тогда КаталогВременнойИБ = ВременныеФайлы.СоздатьКаталог(); Конфигуратор.КаталогСборки(КаталогВременнойИБ); @@ -350,14 +387,25 @@ Конфигуратор.ВыполнитьКоманду(Параметры); Лог.Отладка("Вывод 1С:Предприятия - " + Конфигуратор.ВыводКоманды()); - Лог.Отладка("Разбор расширения '%1' в исходники в каталог '%2'", ИмяРасширения, ПапкаИсходников.ПолноеИмя); + ВременнаяПапкаИсходников = ВременныеФайлы.СоздатьКаталог(); + + Лог.Отладка("Разбор расширения '%1' в исходники в каталог '%2'", ИмяРасширения, ВременнаяПапкаИсходников); Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); - Параметры.Добавить("/DumpConfigToFiles """ + ПапкаИсходников.ПолноеИмя + """"); + Параметры.Добавить("/DumpConfigToFiles """ + ВременнаяПапкаИсходников + """"); Параметры.Добавить("-Extension """ + ИмяРасширения + """"); Конфигуратор.ВыполнитьКоманду(Параметры); Лог.Отладка("Вывод 1С:Предприятия - " + Конфигуратор.ВыводКоманды()); + Если НайтиФайлы(ВременнаяПапкаИсходников, "*").Количество() = 0 Тогда + ВызватьИсключение СтрШаблон("Не удалось разобрать на исходники %1", Файл.ПолноеИмя); + КонецЕсли; + + ОбеспечитьПустойКаталог(ПапкаИсходников); + + Лог.Отладка("Копируем исходники из временного каталога в целевой: " + ПапкаИсходников.ПолноеИмя); + КопироватьСодержимоеКаталога(ВременнаяПапкаИсходников, ПапкаИсходников.ПолноеИмя); + КонецПроцедуры Процедура ЗапуститьРаспаковкуОбработки(Знач Файл, Знач ПапкаИсходников) @@ -365,6 +413,9 @@ Лог.Отладка("Запускаем распаковку файла"); Конфигуратор = Новый УправлениеКонфигуратором(); + Если ЗначениеЗаполнено(ВерсияПлатформы) Тогда + Конфигуратор.ИспользоватьВерсиюПлатформы(ВерсияПлатформы); + КонецЕсли; Если КонтекстКонфигуратора = Неопределено Тогда КаталогВременнойИБ = ВременныеФайлы.СоздатьКаталог(); Конфигуратор.КаталогСборки(КаталогВременнойИБ); @@ -374,14 +425,33 @@ ЛогКонфигуратора = Логирование.ПолучитьЛог("oscript.lib.v8runner"); ЛогКонфигуратора.УстановитьУровень(Лог.Уровень()); - + ЭтоМакет = ВРег(Файл.Расширение) = ".MXL"; + ВременнаяПапкаИсходников = ВременныеФайлы.СоздатьКаталог(); Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); - Если НЕ ЭтоМакет И ИспользоватьКонфигуратор Тогда - КоманднаяСтрокаРаспаковки = СтрШаблон("/DumpExternalDataProcessorOrReportToFiles ""%1\%2.xml"" ""%3""", ПапкаИсходников.ПолноеИмя, Файл.ИмяБезРасширения, Файл.ПолноеИмя); + Если ЭтоМакет Тогда + + Параметры[0] = "ENTERPRISE"; + + ПутьMxl2txt = ОбъединитьПути(ТекущийСценарий().Каталог, "tools", "mxl2txt.epf"); + Лог.Отладка("Путь к mxl2txt: " + ПутьMxl2txt); + Ожидаем.Что(Новый Файл(ПутьMxl2txt).Существует(), "Некорректно установлен mxl2txt. Не обнаружен файл <" + ПутьMxl2txt + ">").ЭтоИстина(); + + КоманднаяСтрокаMxl2txt = СтрШаблон("/C""%1""", Файл.ПолноеИмя); + + Лог.Отладка("Командная строка Mxl2txt: " + КоманднаяСтрокаMxl2txt); + + Параметры.Добавить("/RunModeManagedApplication"); + Параметры.Добавить("/Execute """ + ПутьMxl2txt + """"); + Параметры.Добавить(КоманднаяСтрокаMxl2txt); + + ИначеЕсли ИспользоватьКонфигуратор Тогда + + КоманднаяСтрокаРаспаковки = СтрШаблон("/DumpExternalDataProcessorOrReportToFiles ""%1\%2.xml"" ""%3""", + ВременнаяПапкаИсходников, Файл.ИмяБезРасширения, Файл.ПолноеИмя); Лог.Отладка("Командная строка распаковки: " + КоманднаяСтрокаРаспаковки); @@ -393,9 +463,13 @@ ПутьV8Reader = ОбъединитьПути(ТекущийСценарий().Каталог, "v8Reader", "V8Reader.epf"); Лог.Отладка("Путь к V8Reader: " + ПутьV8Reader); - Ожидаем.Что(Новый Файл(ПутьV8Reader).Существует(), "Некорректно установлен V8Reader. Не обнаружен файл <" + ПутьV8Reader + ">").ЭтоИстина(); + СтрокаОшибки = СтрШаблон("Некорректно установлен V8Reader. Не обнаружен файл <%1>", ПутьV8Reader); + Ожидаем + .Что(Новый Файл(ПутьV8Reader).Существует(), СтрокаОшибки) + .ЭтоИстина(); - КоманднаяСтрокаV8Reader = СтрШаблон("/C""decompile;pathtocf;%1;pathout;%2;convert-mxl2txt;ЗавершитьРаботуПосле;""", Файл.ПолноеИмя, ?(ЭтоМакет, Файл.Путь, ПапкаИсходников.ПолноеИмя)); + КоманднаяСтрокаV8Reader = СтрШаблон("/C""decompile;pathtocf;%1;pathout;%2;convert-mxl2txt;ЗавершитьРаботуПосле;""", + Файл.ПолноеИмя, ?(ЭтоМакет, Файл.Путь, ВременнаяПапкаИсходников)); Лог.Отладка("Командная строка V8Reader: " + КоманднаяСтрокаV8Reader); @@ -408,6 +482,15 @@ Конфигуратор.ВыполнитьКоманду(Параметры); Лог.Отладка("Вывод 1С:Предприятия - " + Конфигуратор.ВыводКоманды()); + Если Не ЭтоМакет Тогда + Если НайтиФайлы(ВременнаяПапкаИсходников, "*").Количество() = 0 Тогда + ВызватьИсключение СтрШаблон("Не удалось разобрать на исходники %1", Файл.ПолноеИмя); + КонецЕсли; + ОбеспечитьПустойКаталог(ПапкаИсходников); + Лог.Отладка("Копируем исходники из временного каталога в целевой: " + ПапкаИсходников.ПолноеИмя); + КопироватьСодержимоеКаталога(ВременнаяПапкаИсходников, ПапкаИсходников.ПолноеИмя); + КонецЕсли; + КонецПроцедуры Процедура УстановитьУровеньЛогаКонфигуратораРавнымУровнюПродукта() @@ -416,10 +499,10 @@ ЛогКонфигуратора.Закрыть(); КонецПроцедуры -Процедура УстановитьВКаталог(Знач Каталог) Экспорт +Процедура УстановитьВКаталог(Знач Каталог, Знач УдалятьФайлыИзИндексаГит = Ложь) Экспорт - КаталогГит = Новый Файл(ОбъединитьПути(Каталог, ".git")); - Если Не КаталогГит.Существует() Тогда + ГитРепозиторий.УстановитьРабочийКаталог(Каталог); + Если Не ГитРепозиторий.ЭтоРепозиторий() Тогда ВызватьИсключение "Каталог не является репозиторием GIT"; КонецЕсли; @@ -432,33 +515,73 @@ КопироватьВКаталог(КаталогПрекоммита, КаталогХуков, "v8files-extractor.os"); КопироватьВКаталог(КаталогПрекоммита, КаталогХуков, "tools"); - Если ИспользоватьКонфигуратор Или НЕ КонтекстКонфигуратора = Неопределено Тогда - ДополнитьФайлХукаДаннымиПодключения(КаталогХуков); + ДополнитьФайлХука(КаталогХуков, УдалятьФайлыИзИндексаГит); + + Если НЕ ЭтоWindows() Тогда + СделатьФайлИсполняемым(КаталогХуков, ОбъединитьПути(КаталогХуков, "pre-commit")); КонецЕсли; - ЗапуститьПриложение("git config --local core.quotepath false", Каталог, Истина); - ЗапуститьПриложение("git config --local core.longpaths true", Каталог, Истина); + ГитРепозиторий.УстановитьНастройку("core.quotePath", "false", РежимУстановкиНастроекGit.Локально); + ГитРепозиторий.УстановитьНастройку("core.longpaths", "true", РежимУстановкиНастроекGit.Локально); Лог.Информация("Установка завершена"); КонецПроцедуры -Процедура ДополнитьФайлХукаДаннымиПодключения(КаталогХуков) - СтрокаПараметровПодключения = ?(ИспользоватьКонфигуратор, " --use-designer", ""); - ДополнитьСтрокуПараметровПодключения(СтрокаПараметровПодключения, КонтекстКонфигуратора.КлючСоединенияСБазой, "--ib-connection-string"); - ДополнитьСтрокуПараметровПодключения(СтрокаПараметровПодключения, КонтекстКонфигуратора.ИмяПользователя, "--ib-user"); - ДополнитьСтрокуПараметровПодключения(СтрокаПараметровПодключения, КонтекстКонфигуратора.Пароль, "--ib-pwd"); - СтрокаПоиска = "oscript -encoding=utf-8 .git/hooks/v8files-extractor.os --git-precommit src"; - СтрокаЗамены = СтрШаблон("%1%2", СтрокаПоиска, СтрокаПараметровПодключения); - ЗаменитьСтрокуВФайле(ОбъединитьПути(КаталогХуков, "pre-commit"), СтрокаПоиска, СтрокаЗамены) +Процедура ДополнитьФайлХука(КаталогХуков, УдалятьФайлыИзИндексаГит) + СтрокаПараметров = ?(ИспользоватьКонфигуратор, " --use-designer", ""); + СтрокаПараметров = ?(УдалятьФайлыИзИндексаГит, + СтрокаПараметров + " --remove-orig-bin-files", + СтрокаПараметров); + Если ЗначениеЗаполнено(КонтекстКонфигуратора) Тогда + ДополнитьСтрокуПараметров(СтрокаПараметров, КонтекстКонфигуратора.КлючСоединенияСБазой, "--ib-connection-string"); + ДополнитьСтрокуПараметров(СтрокаПараметров, КонтекстКонфигуратора.ИмяПользователя, "--ib-user"); + ДополнитьСтрокуПараметров(СтрокаПараметров, КонтекстКонфигуратора.Пароль, "--ib-pwd"); + КонецЕсли; + Если ЗначениеЗаполнено(СтрокаПараметров) Тогда + СтрокаПоиска = "oscript -encoding=utf-8 .git/hooks/v8files-extractor.os --git-precommit src"; + СтрокаЗамены = СтрШаблон("%1%2", СтрокаПоиска, СтрокаПараметров); + ЗаменитьСтрокуВФайле(ОбъединитьПути(КаталогХуков, "pre-commit"), СтрокаПоиска, СтрокаЗамены); + КонецЕсли; КонецПроцедуры -Процедура ДополнитьСтрокуПараметровПодключения(СтрокаПараметровПодключения, Знач ЗначениеПараметра, Знач ИмяПараметра) +Процедура ДополнитьСтрокуПараметров(СтрокаПараметровПодключения, Знач ЗначениеПараметра, Знач ИмяПараметра) Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда СтрокаПараметровПодключения = СтрШаблон("%1 %2 %3", СтрокаПараметровПодключения, ИмяПараметра, ЗначениеПараметра); КонецЕсли; КонецПроцедуры +Функция ЭтоWindows() + СИ = Новый СистемнаяИнформация; + Возврат СтрНайти(НРег(СИ.ВерсияОС), "windows") > 0; +КонецФункции + +Процедура СделатьФайлИсполняемым(РабочийКаталог, ИмяФайла) + + Параметры = Новый Массив; + Параметры.Добавить("+x"); + Параметры.Добавить(ИмяФайла); + + Команда = Новый Команда; + + Команда.УстановитьКоманду("chmod"); + Команда.УстановитьКодировкуВывода(КодировкаТекста.UTF8); + Команда.УстановитьРабочийКаталог(РабочийКаталог); + Команда.ДобавитьПараметры(Параметры); + + Лог.Отладка("Устанавливаем флаг исполняемого для файла %1", ИмяФайла); + + КодВозврата = Команда.Исполнить(); + + Если КодВозврата <> 0 Тогда + Лог.Ошибка("Получен ненулевой код возврата " + КодВозврата + ". Выполнение скрипта остановлено!"); + ВызватьИсключение СокрЛП(Команда.ПолучитьВывод()); + Иначе + Лог.Отладка("Код возврата равен 0"); + КонецЕсли; + +КонецПроцедуры + Процедура ЗаменитьСтрокуВФайле(Знач ПутьФайла, Знач СтрокаПоиска, Знач СтрокаЗамены) Экспорт Чтение = Новый ЧтениеТекста(ПутьФайла, КодировкаТекста.UTF8NoBOM); Текст = Чтение.Прочитать(); @@ -508,6 +631,8 @@ СоздатьКаталог(ФайлОбъектКаталога.ПолноеИмя); ИначеЕсли Не ФайлОбъектКаталога.ЭтоКаталог() Тогда ВызватьИсключение "Путь " + ФайлОбъектКаталога.ПолноеИмя + " не является каталогом. Выгрузка невозможна"; + Иначе + Лог.Отладка("Каталог %1 уже существует, пропускаем", ФайлОбъектКаталога.ПолноеИмя); КонецЕсли; КонецПроцедуры @@ -520,7 +645,6 @@ Сообщить("Параметры командной строки:"); Сообщить(" --decompile inputPath outputPath"); Сообщить(" Разбор файлов на исходники"); - Сообщить(" --help"); Сообщить(" Показ этого экрана"); Сообщить(" --git-check-config"); @@ -531,13 +655,16 @@ Сообщить(" --compile inputPath outputPath [--recursive]"); Сообщить(" Собрать внешний файл/обработку."); Сообщить(" Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога"); - Сообщить(" --install"); + Сообщить(" --install [--remove-orig-bin-files]"); Сообщить(" Установить precommit1c для текущего репозитория git"); + Сообщить(" Если передан флаг --remove-orig-bin-files, обработанные файлы epf/ert будут удалены из индекса git"); Сообщить(" "); Сообщить("Общие параметры:"); Сообщить(" --use-designer"); Сообщить(" Если передан этот флаг, то для операций сборки/разборки будет использован конфигуратор 1С."); Сообщить(" ТОЛЬКО ДЛЯ ВЕРСИЙ ПЛАТФОРМЫ 8.3.8 И ВЫШЕ!"); + Сообщить(" --v8version"); + Сообщить(" Маска версии платформы (8.3, 8.3.8, 8.3.10.2561 и т.п.)"); Сообщить(" --ib-connection-string"); Сообщить(" Строка подключения к информационной базе"); Сообщить(" --ib-user"); @@ -583,11 +710,11 @@ Процедура УдалитьФайлИзИндексаГит(Знач ПолныйПуть) Лог.Отладка("Удаляю файл из индекса"); - Вывод = ПолучитьВыводПроцесса("git rm --cached """ + ПолныйПуть + """", КодВозврата); - Лог.Отладка("Вывод git rm --cached: " + Вывод); - Если КодВозврата <> 0 Тогда - ВызватьИсключение "Не удалось удалить файл из журнала изменений git"; - КонецЕсли; + ПараметрыКоманды = Новый Массив; + ПараметрыКоманды.Добавить("rm"); + ПараметрыКоманды.Добавить("--cached"); + ПараметрыКоманды.Добавить(ОбернутьПутьВКавычки(ПолныйПуть)); + ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); КонецПроцедуры Процедура ПроверитьНастройкиРепозитарияГит() Экспорт @@ -598,14 +725,9 @@ Процедура ПроверитьНастройкуРепозитарияГит(Настройка, ПравильноеЗначение) Перем КодВозврата; - КомандаПроверкаСостояния = СтрШаблон("git config %1", Настройка); - Лог.Отладка("Выполняю команду %1", КомандаПроверкаСостояния); - - Вывод = ПолучитьВыводПроцесса(КомандаПроверкаСостояния, КодВозврата); - Вывод = СокрЛП(Вывод); - Лог.Отладка(" Код возврата %1", КодВозврата); - Лог.Отладка(" Вывод команды <%1>", Вывод); - Если КодВозврата = 0 И Вывод = ПравильноеЗначение Тогда + Лог.Отладка("Выполняю проверку настройки %1", Настройка); + ЗначениеНастройки = ГитРепозиторий.ПолучитьНастройку(Настройка); + Если ЗначениеНастройки = ПравильноеЗначение Тогда Возврат; КонецЕсли; @@ -620,54 +742,15 @@ Функция ПолучитьЖурналИзмененийГит() Перем КодВозврата; - - Вывод = ВыполнитьКомандуГит("git diff-index --name-status --cached HEAD", КодВозврата, Ложь); - Если КодВозврата <> 0 Тогда - Вывод = ВыполнитьКомандуГит("git status --porcelain", КодВозврата, Ложь); - - Если КодВозврата <> 0 Тогда - ВызватьИсключение "Не удалось собрать журнал изменений git"; - КонецЕсли; - - КонецЕсли; - - Возврат Вывод; - -КонецФункции - -Функция ВыполнитьКомандуГит(КомандаГит, КодВозврата = Неопределено, ПроверятьНулевойКодВозврата = Истина) - - Лог.Отладка("Запускаю "+КомандаГит); - Вывод = ПолучитьВыводПроцесса(КомандаГит, КодВозврата); - Лог.Отладка(" Вывод команды гит: " + Вывод); - Если ПроверятьНулевойКодВозврата Тогда - Ожидаем.Что(КодВозврата, "Код возврата `"+КомандаГит+"` должен быть 0, а это не так").Равно(0); - КонецЕсли; - Возврат Вывод; -КонецФункции - -Функция ПолучитьВыводПроцесса(Знач КоманднаяСтрока, КодВозврата) - - // // Это для dev версии 1.0.11 - // Процесс = СоздатьПроцесс(КоманднаяСтрока, , Истина,, КодировкаТекста.UTF8); - // Процесс.Запустить(); - // Вывод = ""; - - // Процесс.ОжидатьЗавершения(); - - // Вывод = Вывод + Процесс.ПотокВывода.Прочитать(); - // Вывод = Вывод + Процесс.ПотокОшибок.Прочитать(); - - // КодВозврата = Процесс.КодВозврата; - - ЛогФайл = ВременныеФайлы.НовоеИмяФайла(); - СтрокаЗапуска = "cmd /C """ + КоманднаяСтрока + " > """ + ЛогФайл + """ 2>&1"""; - Лог.Отладка(СтрокаЗапуска); - ЗапуститьПриложение(СтрокаЗапуска,, Истина, КодВозврата); - Лог.Отладка("Код возврата: " + КодВозврата); - ЧтениеТекста = Новый ЧтениеТекста(ЛогФайл, "utf-8"); - Вывод = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); + Попытка + ПараметрыКоманды = СтрРазделить("diff-index --name-status --cached HEAD", " "); + ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); + Вывод = ГитРепозиторий.ПолучитьВыводКоманды(); + Исключение + ПараметрыКоманды = СтрРазделить("status --porcelain", " "); + ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); + Вывод = ГитРепозиторий.ПолучитьВыводКоманды(); + КонецПопытки; Возврат Вывод; @@ -676,14 +759,7 @@ Функция ПолучитьИменаИзЖурналаИзмененийГит(Знач ЖурналИзмененийГит) Экспорт Лог.Отладка("ЖурналИзмененийГит:"); МассивИмен = Новый Массив; - // Если Найти(ЖурналИзмененийГит, Символы.ПС) > 0 Тогда - МассивСтрокЖурнала = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(ЖурналИзмененийГит, Символы.ПС); - // Иначе - // ЖурналИзмененийГит = СтрЗаменить(ЖурналИзмененийГит, "A"+Символ(0), "A"+" "); - // ЖурналИзмененийГит = СтрЗаменить(ЖурналИзмененийГит, "M"+Символ(0), "M"+" "); - // ЖурналИзмененийГит = СтрЗаменить(ЖурналИзмененийГит, Символ(0), Символы.ПС); - // МассивСтрокЖурнала = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(ЖурналИзмененийГит, Символы.ПС); //Символ(0)); - // КонецЕсли; + МассивСтрокЖурнала = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(ЖурналИзмененийГит, Символы.ПС); Для Каждого СтрокаЖурнала Из МассивСтрокЖурнала Цикл Лог.Отладка(" <%1>", СтрокаЖурнала); @@ -691,7 +767,6 @@ СимволИзменений = Лев(СтрокаЖурнала, 1); Если СимволИзменений = "A" или СимволИзменений = "M" Тогда ИмяФайла = СокрЛП(Сред(СтрокаЖурнала, 2)); - // ИмяФайла = СтрЗаменить(ИмяФайла, Символ(0), ""); МассивИмен.Добавить(ИмяФайла); Лог.Отладка(" В журнале git найдено имя файла <%1>", ИмяФайла); КонецЕсли; @@ -706,14 +781,13 @@ Для Каждого Каталог Из СписокНовыхКаталогов Цикл Лог.Отладка("Запуск git add для каталога " + Каталог); - Вывод = ПолучитьВыводПроцесса("git add --all " + ОбернутьПутьВКавычки(Каталог), КодВозврата); - Лог.Отладка("Вывод git add: " + Вывод); - Если КодВозврата <> 0 Тогда - Лог.Ошибка(Вывод); - ЗавершитьРаботу(КодВозврата); - КонецЕсли; + ПараметрыКоманды = Новый Массив; + ПараметрыКоманды.Добавить("add"); + ПараметрыКоманды.Добавить("--all"); + ПараметрыКоманды.Добавить(ОбернутьПутьВКавычки(Каталог)); + ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); - КонецЦикла + КонецЦикла; КонецПроцедуры @@ -723,8 +797,12 @@ ПапкаИсходников = Новый Файл(ПутьКИсходникам); - Ожидаем.Что(ПапкаИсходников.Существует(), "Папка " + ПутьКИсходникам + " должна существовать").ЭтоИстина(); - Ожидаем.Что(ПапкаИсходников.ЭтоКаталог(), "Путь " + ПутьКИсходникам + "должен быть каталогом").ЭтоИстина(); + Ожидаем + .Что(ПапкаИсходников.Существует(), "Папка " + ПутьКИсходникам + " должна существовать") + .ЭтоИстина(); + Ожидаем + .Что(ПапкаИсходников.ЭтоКаталог(), "Путь " + ПутьКИсходникам + "должен быть каталогом") + .ЭтоИстина(); Если Рекурсивно Тогда СобратьКаталог(ПутьКИсходникам, КаталогВыгрузки); @@ -852,8 +930,12 @@ ПутьКФайлуКорневойКонтейнер = ОбъединитьПути(КаталогИсходников, МассивСтрокРут[1]); ФайлКорневойКонтейнер = Новый Файл(ПутьКФайлуКорневойКонтейнер); - Ожидаем.Что(ФайлКорневойКонтейнер.Существует(), "Файл <" + ПутьКФайлуКорневойКонтейнер + "> должен существовать").ЭтоИстина(); - Ожидаем.Что(ФайлКорневойКонтейнер.ЭтоКаталог(), "<" + ПутьКФайлуКорневойКонтейнер + "> должен быть файлом").ЭтоЛожь(); + Ожидаем + .Что(ФайлКорневойКонтейнер.Существует(), "Файл <" + ПутьКФайлуКорневойКонтейнер + "> должен существовать") + .ЭтоИстина(); + Ожидаем + .Что(ФайлКорневойКонтейнер.ЭтоКаталог(), "<" + ПутьКФайлуКорневойКонтейнер + "> должен быть файлом") + .ЭтоЛожь(); ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуКорневойКонтейнер); СодержаниеКорневойКонтейнер = ""; @@ -868,7 +950,10 @@ ЧтениеТекста.Закрыть(); МассивСтрокКорневойКонтейнер = СтрРазделить(СодержаниеКорневойКонтейнер, ","); - Ожидаем.Что(МассивСтрокКорневойКонтейнер.Количество(), "Некорректный формат файла корневого контейнера <" + ПутьКФайлуКорневойКонтейнер + ">").Больше(3); + СтрокаОшибки = СтрШаблон("Некорректный формат файла корневого контейнера <%1>", ПутьКФайлуКорневойКонтейнер); + Ожидаем + .Что(МассивСтрокКорневойКонтейнер.Количество(), СтрокаОшибки) + .Больше(3); ИдентификаторТипаОбъекта = СокрЛП(МассивСтрокКорневойКонтейнер[3]); Если Лев(ИдентификаторТипаОбъекта, 1) = "{" Тогда @@ -905,10 +990,14 @@ Функция ПолучитьСоответствиеПереименований(ПутьКИсходникам) Переименования = Новый Соответствие; + Разделитель = "-->"; + ДлинаРазделителя = СтрДлина(Разделитель); ФайлПереименования = Новый Файл(ОбъединитьПути(ПутьКИсходникам, "renames.txt")); - Ожидаем.Что(ФайлПереименования.Существует(), "Файл переименования " + ФайлПереименования.ПолноеИмя + " должен существовать").ЭтоИстина(); + Ожидаем + .Что(ФайлПереименования.Существует(), "Файл переименования " + ФайлПереименования.ПолноеИмя + " должен существовать") + .ЭтоИстина(); ЧтениеТекста = Новый ЧтениеТекста(ФайлПереименования.ПолноеИмя, КодировкаТекста.UTF8); СтрокаПереименования = ЧтениеТекста.ПрочитатьСтроку(); @@ -919,15 +1008,15 @@ // Проверка на BOM? - СписокСтрок = СтрРазделить(СтрокаПереименованияВрем, "-->"); - Если СписокСтрок.Количество() < 2 Тогда + ПозицияРазделителя = СтрНайти(СтрокаПереименованияВрем, Разделитель); + Если ПозицияРазделителя = 0 Тогда Продолжить; КонецЕсли; Лог.Отладка(СтрокаПереименованияВрем); - ИсходныйПуть = СписокСтрок[0]; - ПреобразованныйПуть = СписокСтрок[1]; + ИсходныйПуть = Лев(СтрокаПереименованияВрем, ПозицияРазделителя - 1); + ПреобразованныйПуть = Сред(СтрокаПереименованияВрем, ПозицияРазделителя + ДлинаРазделителя); Переименования.Вставить(ИсходныйПуть, ПреобразованныйПуть); @@ -944,6 +1033,9 @@ Если ИспользоватьКонфигуратор Тогда Конфигуратор = Новый УправлениеКонфигуратором(); + Если ЗначениеЗаполнено(ВерсияПлатформы) Тогда + Конфигуратор.ИспользоватьВерсиюПлатформы(ВерсияПлатформы); + КонецЕсли; Если КонтекстКонфигуратора = Неопределено Тогда КаталогВременнойИБ = ВременныеФайлы.СоздатьКаталог(); Конфигуратор.КаталогСборки(КаталогВременнойИБ); @@ -957,7 +1049,8 @@ Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); Параметры[0] = "DESIGNER"; - КоманднаяСтрокаУпаковки = СтрШаблон("/LoadExternalDataProcessorOrReportFromFiles ""%1"" ""%2""", ПапкаИсходников, ИмяФайлаОбъекта); + КоманднаяСтрокаУпаковки = СтрШаблон("/LoadExternalDataProcessorOrReportFromFiles ""%1"" ""%2""", + ПапкаИсходников, ИмяФайлаОбъекта); Лог.Отладка("Командная строка упаковки: " + КоманднаяСтрокаУпаковки); @@ -973,7 +1066,9 @@ Если ЭтоWindows Тогда ПутьЗапаковщика = ПутьЗапаковщика+".exe"; КонецЕсли; - Ожидаем.Что(Новый Файл(ПутьЗапаковщика).Существует(), "Не найден путь к v8unpack").ЭтоИстина(); + Ожидаем + .Что(Новый Файл(ПутьЗапаковщика).Существует(), "Не найден путь к v8unpack") + .ЭтоИстина(); ВременныйФайл = ВременныеФайлы.СоздатьФайл(); @@ -986,7 +1081,9 @@ Процесс.ОжидатьЗавершения(); ВыводПроцесса = Процесс.ПотокВывода.Прочитать(); - Ожидаем.Что(Процесс.КодВозврата, "Не удалось упаковать каталог " + ПапкаИсходников + Символы.ПС + ВыводПроцесса).Равно(0); + Ожидаем + .Что(Процесс.КодВозврата, "Не удалось упаковать каталог " + ПапкаИсходников + Символы.ПС + ВыводПроцесса) + .Равно(0); Лог.Отладка(ВыводПроцесса); ФайлОбъекта = Новый Файл(ИмяФайлаОбъекта);