Skip to content

Commit

Permalink
Merge branch 'release/2.3.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
zeratulayuris committed Nov 13, 2019
2 parents c48a5d8 + f29e3db commit cdaf2c8
Show file tree
Hide file tree
Showing 20 changed files with 758 additions and 379 deletions.
61 changes: 46 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -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/)
Expand All @@ -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).

Expand All @@ -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
Expand All @@ -64,6 +69,7 @@ git submodule update --init --recursive
3. Cодержимое каталога необходимо скопировать в каталог .git/hooks/ вашего проекта.
*Примечание:* каталог .git по умолчанию скрыт.
В итоге у вас должна получиться следующая структура каталога:

```
.git\
hooks\
Expand All @@ -73,6 +79,8 @@ git submodule update --init --recursive
v8files-extractor.os
```

4. Установите необходимые библиотеки oscript - их список можно посмотреть в списке зависимостей в файле `packagedef`.

## Запуск

После установки достаточно для проверки сделать commit для любого файла epf/erf/cfe, и в вашем репозитории автоматически должна создаться папка *src*, полностью повторяющая структуру проекта, изменённые или добавленные файлы распакуются в папки с аналогичными наименованиями.
Expand All @@ -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
Пароль пользователя в информационной базе
```

## Ограничения
Expand All @@ -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
Expand All @@ -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
Expand All @@ -152,6 +182,7 @@ git add XXX.epf
* где каталог `src` - выходной каталог, где хранятся исходники

2. Для отключения отладочных логов выполнить обратные действия

## Что внутри

Как это работает: `v8files-extractor.os` полностью повторяет иерархию папок относительно корня репозитория только в папке SRC (от слова source), для каждой изменённой внешней обработки создаётся своя папка и туда с помощью v8unpack распаковывается помещаемая обработка, с помощью v8reader определяются наименования макетов, форм, модуля обработки и переименовываются, переименования сохраняются в служебном файле renames.txt, те файлы, которые невозможно определить или же носят чисто служебный характер, переносятся в каталог *und*.
Expand Down
Original file line number Diff line number Diff line change
@@ -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"), Ложь);
Возврат Описание;
КонецФункции

//}
Loading

0 comments on commit cdaf2c8

Please sign in to comment.