Skip to content

Commit cdaf2c8

Browse files
committed
Merge branch 'release/2.3.0'
2 parents c48a5d8 + f29e3db commit cdaf2c8

20 files changed

+758
-379
lines changed

README.md

+46-15
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
1-
## Набор утилит для автоматической разборки/сборки внешних обработок и отчетов, при помещении (commit) в git
1+
# Набор утилит для автоматической разборки/сборки внешних обработок и отчетов, при помещении (commit) в git
22

33
[![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) Здесь вы можете задавать любые вопросы разработчикам и активным участникам
44

55
[![GitHub release](https://img.shields.io/github/release/xDrivenDevelopment/precommit1c.svg)](https://github.com/xDrivenDevelopment/precommit1c/releases)
66

7-
### Что к чему
7+
## Что к чему
88

99
----
1010

11+
**precommit1c** - инструмент для хранения в Git исходников внешних отчетов/обработок, технически состоит из:
12+
1113
* v8files-extractor.os - скрипт для OneScript, получающий список помещаемых файлов при коммите, фильтрующий по расширению только внешние отчёты/обработки, расширения и запускающий команды для распаковки этих файлов. Так же позволяет собирать обработки из полученных исходников.
1214
* [V8Reader.epf](http://infostart.ru/public/106310/) - внешняя обработка 1С, которая с помощью [v8unpack](http://svn2.assembla.com/svn/V8Unpack/track/) разбирает внешние обработки, определяет нормальные наименования для каталогов форм, файлов модулей объектов и т. д. и раскладывает их в нормальную структуру папок.
1315
* pre-commit - собственно командный файл, вызываемый git перед каждым помещением. Выполняет роль простой запускалки скрипта v8files-extractor.os
1416

15-
### Установка
17+
## Установка
1618

1719
1. Зависимости:
1820
* OneScript [http://oscript.io/](http://oscript.io/)
@@ -25,15 +27,15 @@
2527

2628
3. Путь хранения исходных текстов разобранных обработок по умолчанию используется как **src** (для обеспечения совместимости со старыми версиями обработки), однако его можно переназначить в файле `pre-commit`
2729

28-
#### Установка через OneScript Package Manager
30+
### Установка через OneScript Package Manager (предпочтительно)
2931

30-
1. Выполните установку precommit1c из командной строки `opm install precommit1c` (предполагается, что OneScript уже установлен и командная строка запущена с правами администратора).
32+
1. Выполните установку precommit1c из командной строки `opm install precommit1c` (предполагается, что OneScript уже установлен и командная строка запущена с правами администратора). При этом необходимые библиотеки oscript будут установлены автоматически.
3133

3234
2. Перейдите в рабочий каталог репозитория, для которого следует использовать автоматическую сборку/разборку.
3335

3436
3. Выполните из командной строки `precommit1c --install` (здесь можно без прав администратора).
3537

36-
#### Установка через zip-архив
38+
### Установка через zip-архив
3739

3840
1. Скачайте zip-архив precommit1c.zip со страницы [последнего релиза](https://github.com/xDrivenDevelopment/precommit1c/releases/latest).
3941

@@ -50,12 +52,15 @@
5052
v8files-extractor.os
5153
```
5254

53-
#### Установка через git clone
55+
3. Установите необходимые библиотеки oscript - их список можно посмотреть в списке зависимостей в файле `packagedef`.
56+
57+
### Установка через git clone
5458

5559
1. Склонируйте репозиторий `precommit1c` в удобное место.
5660

5761
2. После клонирования репозитория необходимо инициализировать используемые подмодули.
5862
Откройте командую строку и выполните команды:
63+
5964
```cmd
6065
cd путь/к/репозиторию/precommit1c
6166
git submodule update --init --recursive
@@ -64,6 +69,7 @@ git submodule update --init --recursive
6469
3. Cодержимое каталога необходимо скопировать в каталог .git/hooks/ вашего проекта.
6570
*Примечание:* каталог .git по умолчанию скрыт.
6671
В итоге у вас должна получиться следующая структура каталога:
72+
6773
```
6874
.git\
6975
hooks\
@@ -73,6 +79,8 @@ git submodule update --init --recursive
7379
v8files-extractor.os
7480
```
7581

82+
4. Установите необходимые библиотеки oscript - их список можно посмотреть в списке зависимостей в файле `packagedef`.
83+
7684
## Запуск
7785

7886
После установки достаточно для проверки сделать commit для любого файла epf/erf/cfe, и в вашем репозитории автоматически должна создаться папка *src*, полностью повторяющая структуру проекта, изменённые или добавленные файлы распакуются в папки с аналогичными наименованиями.
@@ -89,14 +97,28 @@ oscript v8files-extractor.os ?
8997
Разбор файлов на исходники
9098
--help
9199
Показ этого экрана
100+
--git-check-config
101+
Проверка настроек репозитория git
92102
--git-precommit outputPath [--remove-orig-bin-files]
93103
Запустить чтение индекса из git и определить список файлов для разбора, разложить их и добавить исходники в индекс
94-
Если передан флаг --remove-orig-bin-files, обработанные файлы epf/ert будут удалены из индекса git
104+
Если передан флаг --remove-orig-bin-files, обработанные файлы epf/erf будут удалены из индекса git
95105
--compile inputPath outputPath [--recursive]
96106
Собрать внешний файл/обработку.
97107
Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога
98-
--install
108+
--install [--remove-orig-bin-files]
99109
Установить precommit1c для текущего репозитория git
110+
Если передан флаг --remove-orig-bin-files, обработанные файлы epf/erf будут удалены из индекса git
111+
112+
Общие параметры:
113+
--use-designer
114+
Если передан этот флаг, то для операций сборки/разборки будет использован конфигуратор 1С.
115+
ТОЛЬКО ДЛЯ ВЕРСИЙ ПЛАТФОРМЫ 8.3.8 И ВЫШЕ!
116+
--ib-connection-string
117+
Строка подключения к информационной базе (для Windows-путей обязательно экранировать '\' так: '\\'!)
118+
--ib-user
119+
Имя пользователя в информационной базе
120+
--ib-pwd
121+
Пароль пользователя в информационной базе
100122
```
101123

102124
## Ограничения
@@ -118,11 +140,21 @@ git config --local core.longpaths true
118140
Т.о. в файл C:\Program Files (x86)\1cv8\conf\conf.cfg необходимо добавить строку `DisableUnsafeActionProtection=.*`
119141
Подробнее [на ИТС](http://its.1c.ru/db/v838doc#bookmark:dev:TI000001873)
120142

143+
## Особенности распаковки макетов
144+
145+
При использовании v8Reader макеты выгружаются в файлы, соответствующие их типам, дополнительно обрабатываются специальные случаи:
146+
147+
* У макетов табличных документов дополнительно создаются .txt версии, чтобы их было легче сравнивать в текстовом редакторе.
148+
* У макетов типа html дополнительно выгружаются файлы вложений.
149+
* Макеты в двоичных данных выгружаются либо в .bin, либо (для печатных форм) в тот тип файла, который указан в имени макета (например, `ПФ_MXL_КакаяТоПечатнаяФорма` будет выгружен в `ПФ_MXL_КакаяТоПечатнаяФорма.mxl`).
150+
121151
## Известные проблемы
122152

123153
1. При использовании некоторых версий SourceTree (удобный клиент git) может возникать следующая ошибка:
154+
124155
>`.git/hooks/pre-commit: line 4: oscript: command not found`
125156
Несколько вариантов решения:
157+
126158
+ убедиться, что команда `oscript` доступна
127159
+ для проверки вызвать из командной строки или Win+R `cmd /k oscript`
128160
+ откатиться на предыдущую версию SourceTree
@@ -135,14 +167,12 @@ git config --local core.longpaths true
135167
1. Нужно выполнить следующее:
136168

137169
* добавить нужную обработку в индекс git - например, `git add XXX.epf`
138-
* установить переменную среды `LOGOS_CONFIG` или заполнить спец.файл настройки логов
170+
* установить переменную среды `LOGOS_CONFIG` или заполнить спец.файл настройки логов
139171
* выполнить `git commit` или `precommit1c --git-precommit`
172+
* Например, рядом с файлом `v8files-extractor.os` положить файл `logos.cfg` со следующим текстом `logger.rootLogger=DEBUG`
173+
* или переименовать файл-пример `logos.debug-example.cfg` в `logos.cfg`
174+
* Или создать и выполнить командный файл
140175

141-
+ Например, рядом с файлом `v8files-extractor.os` положить файл `logos.cfg` со следующим текстом `logger.rootLogger=DEBUG`
142-
143-
+ или переименовать файл-пример `logos.debug-example.cfg` в `logos.cfg`
144-
145-
* Или создать и выполнить командный файл
146176
```bat
147177
git add XXX.epf
148178
@set LOGOS_CONFIG=logger.rootLogger=DEBUG
@@ -152,6 +182,7 @@ git add XXX.epf
152182
* где каталог `src` - выходной каталог, где хранятся исходники
153183

154184
2. Для отключения отладочных логов выполнить обратные действия
185+
155186
## Что внутри
156187

157188
Как это работает: `v8files-extractor.os` полностью повторяет иерархию папок относительно корня репозитория только в папке SRC (от слова source), для каждой изменённой внешней обработки создаётся своя папка и туда с помощью v8unpack распаковывается помещаемая обработка, с помощью v8reader определяются наименования макетов, форм, модуля обработки и переименовываются, переименования сохраняются в служебном файле renames.txt, те файлы, которые невозможно определить или же носят чисто служебный характер, переносятся в каталог *und*.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
2+
3+
#Использовать asserts
4+
5+
Перем БДД; //контекст фреймворка 1bdd
6+
7+
// Метод выдает список шагов, реализованных в данном файле-шагов
8+
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
9+
БДД = КонтекстФреймворкаBDD;
10+
11+
ВсеШаги = Новый Массив;
12+
13+
ВсеШаги.Добавить("ВРабочемКаталогеСодержатсяИсходникиОбработкиВФормате");
14+
ВсеШаги.Добавить("ВПодпапкеРабочегоКаталогаСодержатсяИсходникиОбработкиВФормате");
15+
16+
Возврат ВсеШаги;
17+
КонецФункции
18+
19+
// Реализация шагов
20+
21+
// Процедура выполняется перед запуском каждого сценария
22+
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
23+
24+
КонецПроцедуры
25+
26+
// Процедура выполняется после завершения каждого сценария
27+
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
28+
29+
КонецПроцедуры
30+
31+
32+
//в подпапке "src/1" рабочего каталога содержатся исходники обработки "Fixture" в формате "v8reader"
33+
Процедура ВПодпапкеРабочегоКаталогаСодержатсяИсходникиОбработкиВФормате(Знач Подпапка, Знач ИмяОбработки, Знач Формат) Экспорт
34+
Если Формат = "v8reader" Тогда
35+
ИмяКаталогаИсходниковОбработки = ОбъединитьПути(Подпапка, ИмяОбработки);
36+
ПроверяемИсходникиВРабочемКаталоге(ИмяКаталогаИсходниковОбработки, ОписаниеИсходниковФорматаV8reader());
37+
ИначеЕсли Формат = "designer" Тогда
38+
ИмяКаталогаИсходниковОбработки = ОбъединитьПути(Подпапка, ИмяОбработки);
39+
ПроверяемИсходникиВРабочемКаталоге(ИмяКаталогаИсходниковОбработки, ОписаниеИсходниковФорматаКонфигуратора(ИмяОбработки));
40+
Иначе
41+
ВызватьИсключение "Проверяем несуществующий формат!";
42+
КонецЕсли;
43+
КонецПроцедуры
44+
45+
//в рабочем каталоге содержатся исходники обработки "Fixture" в формате "v8reader"
46+
Процедура ВРабочемКаталогеСодержатсяИсходникиОбработкиВФормате(Знач ИмяОбработки, Знач Формат) Экспорт
47+
Если Формат = "v8reader" Тогда
48+
ПроверяемИсходникиВРабочемКаталоге(ИмяОбработки, ОписаниеИсходниковФорматаV8reader());
49+
ИначеЕсли Формат = "designer" Тогда
50+
ПроверяемИсходникиВРабочемКаталоге(ИмяОбработки, ОписаниеИсходниковФорматаКонфигуратора(ИмяОбработки));
51+
Иначе
52+
ВызватьИсключение "Проверяем несуществующий формат!";
53+
КонецЕсли;
54+
КонецПроцедуры
55+
56+
//{ Служебные методы
57+
58+
Функция РабочийКаталог()
59+
Возврат БДД.ПолучитьИзКонтекста("РабочийКаталог");
60+
КонецФункции
61+
62+
Функция КаталогПроекта()
63+
Возврат БДД.ПолучитьИзКонтекста("КаталогПроекта");
64+
КонецФункции
65+
66+
Процедура ПроверяемИсходникиВРабочемКаталоге(ИмяОбработки, ОписаниеИсходников)
67+
ПроверяемСуществованиеФайлаВРабочемКаталоге(ИмяОбработки, Ложь);
68+
Для каждого КлючИЗначение из ОписаниеИсходников Цикл
69+
ПроверяемСуществованиеФайлаВРабочемКаталоге(ОбъединитьПути(ИмяОбработки, КлючИЗначение.Ключ), КлючИЗначение.Значение);
70+
КонецЦикла;
71+
КонецПроцедуры
72+
73+
Процедура ПроверяемСуществованиеФайлаВРабочемКаталоге(ПутьКФайлу, ЭтоФайл)
74+
Файл = Новый Файл(ОбъединитьПути(РабочийКаталог(), ПутьКФайлу));
75+
Ожидаем.Что(Файл.Существует(), ПутьКФайлу + " должен существовать, а это не так!").ЭтоИстина();
76+
СтрокаОшибки = СтрШаблон("%1: значение Файл.ЭтоФайл() должно %2, а это не так!", ПутьКФайлу, ЭтоФайл);
77+
Ожидаем.Что(Файл.ЭтоФайл() = ЭтоФайл, СтрокаОшибки).ЭтоИстина();
78+
КонецПроцедуры
79+
80+
Функция ОписаниеИсходниковФорматаV8reader()
81+
Описание = Новый Соответствие;
82+
Описание.Вставить("renames.txt", Истина);
83+
Описание.Вставить("Form", Ложь);
84+
Описание.Вставить("Макеты", Ложь);
85+
Описание.Вставить("und", Ложь);
86+
Возврат Описание;
87+
КонецФункции
88+
89+
Функция ОписаниеИсходниковФорматаКонфигуратора(ИмяОбработки)
90+
Описание = Новый Соответствие;
91+
Описание.Вставить(ИмяОбработки + ".xml", Истина);
92+
Описание.Вставить(ИмяОбработки, Ложь);
93+
Описание.Вставить(ОбъединитьПути(ИмяОбработки, "Forms"), Ложь);
94+
Описание.Вставить(ОбъединитьПути(ИмяОбработки, "Templates"), Ложь);
95+
Возврат Описание;
96+
КонецФункции
97+
98+
//}

0 commit comments

Comments
 (0)