Skip to content

Реализована конвертация исходников хранилища в формат EDT #40

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
May 13, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
1. `unpackForm` - добавляет функциональность распаковки обычных форм на исходники
1. `tool1CD` - заменяет использование штатных механизмов 1С на приложение `tool1CD` при синхронизации
1. `disable-support` - снимает конфигурацию с поддержки перед выгрузкой в исходники
1. `edtExport` - добавляет функциональность выгрузки в формате `1C:EDT`

## Доработка

Expand Down
60 changes: 60 additions & 0 deletions features/edtExport.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# language: ru

Функционал: Работа плагина выгрузки конфигурации в формат EDT
Как Пользователь
Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища в формат EDT
Чтобы не использовать ГитКонвертер

Контекст: Тестовый контекст edtExport
Когда Я очищаю параметры команды "gitsync" в контексте
И Я устанавливаю рабочей каталог во временный каталог
И Я создаю новый объект ГитРепозиторий
И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке
И Я устанавливаю текущие плагины
И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С"
И Я создаю временный каталог и сохраняю его в переменной "РабочееОкружениеEDT"
И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С"
И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников"
И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников"
И Я создаю тестовой файл AUTHORS
И Я записываю "0" в файл VERSION
И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория"
И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория"
И Я добавляю параметр "-v" для команды "gitsync"
И Я добавляю параметр "sync" для команды "gitsync"
И Я добавляю параметр "-P test" для команды "gitsync"
И Я выключаю все плагины
И Я включаю плагин "edtExport"
И Я включаю плагин "edtExport"

Сценарий: Cинхронизация с использованием edtExport
Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С"
И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников"
Когда Я выполняю команду "gitsync"
Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git"
И Вывод команды "gitsync" не содержит "Внешнее исключение"
И Код возврата команды "gitsync" равен 0

Сценарий: Cинхронизация хранилища расширения с использованием edtExport без указания базового проекта
Допустим Я скопировал каталог тестового хранилища конфигурации расширения в каталог из переменной "КаталогХранилища1С"
И я скопировал каталог рабочего окружения EDT в каталог из переменной "РабочееОкружениеEDT"
И Я добавляю параметр "-e test" для команды "gitsync"
И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С"
И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников"
Когда Я выполняю команду "gitsync"
Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git"
И Вывод команды "gitsync" не содержит "Внешнее исключение"
И Код возврата команды "gitsync" равен 0

Сценарий: Cинхронизация хранилища расширения с использованием edtExport c указанием базового проекта
Допустим Я скопировал каталог тестового хранилища конфигурации расширения в каталог из переменной "КаталогХранилища1С"
И я скопировал каталог рабочего окружения EDT в каталог из переменной "РабочееОкружениеEDT"
И Я добавляю параметр "-e test" для команды "gitsync"
И Я добавляю параметр "-W" для команды "gitsync" из переменной "РабочееОкружениеEDT"
И Я добавляю параметр "-B edtExport" для команды "gitsync"
И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С"
И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников"
Когда Я выполняю команду "gitsync"
Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git"
И Вывод команды "gitsync" не содержит "Внешнее исключение"
И Код возврата команды "gitsync" равен 0
49 changes: 49 additions & 0 deletions features/step_definitions/edtExport.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#Использовать fs
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd

Перем БДД; //контекст фреймворка 1bdd

// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;

ВсеШаги = Новый Массив;

ВсеШаги.Добавить("ЯСкопировалКаталогРабочегоОкруженияEDTВКаталогИзПеременной");

Возврат ВсеШаги;
КонецФункции

// Реализация шагов

// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт

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

// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт

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


//я скопировал каталог рабочего окружения EDT в каталог из переменной "РабочееОкружениеEDT"
Процедура ЯСкопировалКаталогРабочегоОкруженияEDTВКаталогИзПеременной(Знач ИмяПеременной) Экспорт
РабочееОкружениеEDT = БДД.ПолучитьИзКонтекста(ИмяПеременной);
ФС.ОбеспечитьПустойКаталог(РабочееОкружениеEDT);
ФС.КопироватьСодержимоеКаталога(ПутьКРабочемуОкружениюEDT(), РабочееОкружениеEDT);
КонецПроцедуры

Функция ПутьКРабочемуОкружениюEDT()

Возврат ОбъединитьПути(КаталогFixtures(), "edtWorkspace");

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

Функция КаталогFixtures()
Возврат ОбъединитьПути(КаталогГитсинк(), "tests", "fixtures");
КонецФункции

Функция КаталогГитсинк()
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..", "..");
КонецФункции
1 change: 1 addition & 0 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,5 @@
.ОпределяетКласс("Плагин_РаспаковкиОбычныхФорм", "src/Классы/unpackForm.os")
.ОпределяетКласс("Плагин_СнятияСПоддержки", "src/Классы/disableSupport.os")
.ОпределяетКласс("Плагин_СинхронизацииСУдаленнымРепозиторием", "src/Классы/syncRemote.os")
.ОпределяетКласс("Плагин_ВыгрузкаВФорматеEDT", "src/Классы/edtExport.os")
;
206 changes: 206 additions & 0 deletions src/Классы/edtExport.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
#Использовать logos
#Использовать tempfiles
#Использовать fs

Перем ВерсияПлагина;
Перем Лог;
Перем Обработчик;
Перем КомандыПлагина;

Перем ИмяПроекта;
Перем РабочееПространство;
Перем ИмяРасширения;
Перем ИмяБазовогоПроекта;

#Область Интерфейс_плагина

// Возвращает версию плагина
//
// Возвращаемое значение:
// Строка - текущая версия плагина
//
Функция Версия() Экспорт
Возврат ВерсияПлагина;
КонецФункции

// Возвращает приоритет выполнения плагина
//
// Возвращаемое значение:
// Число - приоритет выполнения плагина
//
Функция Приоритет() Экспорт
Возврат 0;
КонецФункции

// Возвращает описание плагина
//
// Возвращаемое значение:
// Строка - описание функциональности плагина
//
Функция Описание() Экспорт
Возврат "Плагин добавляет возможность выгрузки в формате EDT."
+ " Важно: Для работы плагина необходимы установленные EDT и Ring";
КонецФункции

// Возвращает подробную справку к плагину
//
// Возвращаемое значение:
// Строка - подробная справка для плагина
//
Функция Справка() Экспорт
Возврат "Справка плагина";
КонецФункции

// Возвращает имя плагина
//
// Возвращаемое значение:
// Строка - имя плагина при подключении
//
Функция Имя() Экспорт
Возврат "edtExport";
КонецФункции

// Возвращает имя лога плагина
//
// Возвращаемое значение:
// Строка - имя лога плагина
//
Функция ИмяЛога() Экспорт
Возврат "oscript.lib.gitsync.plugins.edtExport";
КонецФункции

#КонецОбласти

#Область Подписки_на_события

Процедура ПриАктивизации(СтандартныйОбработчик) Экспорт

Обработчик = СтандартныйОбработчик;

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

// BSLLS:UnusedParameters-off
Процедура ПередНачаломВыполнения(ПутьКХранилищу, КаталогРабочейКопии) Экспорт
// BSLLS:UnusedParameters-on

ИмяРасширения = Обработчик.ПолучитьИмяРасширения();

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

Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации) Экспорт

Лог.Отладка("Ищу команду <%1> в списке поддерживаемых", ИмяКоманды);
Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда
Возврат;
КонецЕсли;

Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды);

КлассРеализации.Опция("P project-name", "", "[*edtExport] Имя проекта")
.ТСтрока()
.ВОкружении("GITSYNC_PROJECT_NAME");

КлассРеализации.Опция("W workspace-location", "", "[*edtExport] расположение рабочей области")
.ТСтрока()
.ВОкружении("GITSYNC_WORKSPACE_LOCATION");

КлассРеализации.Опция(
"B base-project-name",
"",
"[*edtExport] имя базового проекта в рабочей области (для расширений))")
.ТСтрока()
.ВОкружении("GITSYNC_BASE_PROJECT_NAME");

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

Процедура ПриПолученииПараметров(ПараметрыКоманды) Экспорт

ИмяПроекта = ПараметрыКоманды.Параметр("project-name");
РабочееПространство = ПараметрыКоманды.Параметр("workspace-location");
ИмяБазовогоПроекта = ПараметрыКоманды.Параметр("base-project-name");

Если Не ПустаяСтрока(ИмяРасширения)
И Не ПустаяСтрока(ИмяБазовогоПроекта)
И ПустаяСтрока(РабочееПространство) Тогда

ВызватьИсключение "При конвертации расширений с указанием базового проекта,
|параметр workspace-location обязателен";

КонецЕсли;

Если ПустаяСтрока(ИмяПроекта) Тогда
ВызватьИсключение "Не заполнено имя проекта";
КонецЕсли;

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

// BSLLS:UnusedParameters-off
Процедура ПередПеремещениемВКаталогРабочейКопии(
Конфигуратор,
КаталогРабочейКопии,
КаталогВыгрузки,
ПутьКХранилищу,
НомерВерсии) Экспорт
// BSLLS:UnusedParameters-on

Лог.Отладка("Начинаю выгрузку EDT");
Лог.Отладка("Имя проекта: %1", ИмяПроекта);

ВременноеРабочееПространство = ВременныеФайлы.СоздатьКаталог();
Если Не ПустаяСтрока(РабочееПространство) Тогда
ФС.КопироватьСодержимоеКаталога(РабочееПространство, ВременноеРабочееПространство);
КонецЕсли;

Лог.Отладка("Рабочее пространство EDT: %1", ВременноеРабочееПространство);

КаталогПроекта = ОбъединитьПути(ВременноеРабочееПространство, ИмяПроекта);

Лог.Отладка("Каталог проекта EDT: %1", КаталогПроекта);
ФС.ОбеспечитьПустойКаталог(КаталогПроекта);

Команда = Новый Команда;

Параметры = Новый Массив();
Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки));
Параметры.Добавить(СтрШаблон("--workspace-location ""%1""", ВременноеРабочееПространство));
Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта));

Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда
Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта));
КонецЕсли;

Команда.УстановитьСтрокуЗапуска("ring edt workspace import");
Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI);
Команда.ДобавитьЛогВыводаКоманды("oscript.lib.gitsync.plugins.edtExport");
Команда.ДобавитьПараметры(Параметры);
Команда.УстановитьИсполнениеЧерезКомандыСистемы(Истина);
Команда.ПоказыватьВыводНемедленно(Ложь);
Команда.УстановитьПравильныйКодВозврата(0);
КодВозврата = Команда.Исполнить();

Лог.Отладка("Код возврата EDT: %1", КодВозврата);

Лог.Отладка("Очищаю каталог выгрузки");
УдалитьФайлы(КаталогВыгрузки, "*");

Лог.Отладка("Копирую каталог проекта EDT в каталог выгрузки");
ФС.КопироватьСодержимоеКаталога(КаталогПроекта, КаталогВыгрузки);

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

#КонецОбласти

Процедура Инициализация()

ВерсияПлагина = "1.1.1";
Лог = Логирование.ПолучитьЛог(ИмяЛога());
КомандыПлагина = Новый Массив;
КомандыПлагина.Добавить("sync");

ИмяРасширения = "";
РабочееПространство = "";
ИмяБазовогоПроекта = "";

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

Инициализация();
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#GitProjectData
#Tue May 12 11:59:34 VLAT 2020
.gitdir=../../../../.git
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Binary file not shown.
Binary file not shown.
18 changes: 18 additions & 0 deletions tests/fixtures/edtWorkspace/edtExport/.project
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>edtExport</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com._1c.g5.v8.dt.core.V8ConfigurationNature</nature>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
</natures>
</projectDescription>
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8
2 changes: 2 additions & 0 deletions tests/fixtures/edtWorkspace/edtExport/DT-INF/PROJECT.PMF
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Runtime-Version: 8.3.14
Manifest-Version: 1.0
Loading