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 1 commit
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
45 changes: 45 additions & 0 deletions features/edtExport.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# language: ru

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

Контекст: Тестовый контекст edtExport
Когда Я очищаю параметры команды "gitsync" в контексте
И Я устанавливаю рабочей каталог во временный каталог
И Я создаю новый объект ГитРепозиторий
И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке
И Я устанавливаю текущие плагины
И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С"
И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища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С"
# И Я добавляю параметр "-e test" для команды "gitsync"
# И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С"
# И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников"
# Когда Я выполняю команду "gitsync"
# Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git"
# И Вывод команды "gitsync" не содержит "Внешнее исключение"
# И Код возврата команды "gitsync" равен 0
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")
;
185 changes: 185 additions & 0 deletions src/Классы/edtExport.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
#Использовать logos
#Использовать tempfiles

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

Перем ИмяПроекта;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ИмяПроекта = ПараметрыКоманды.Параметр("project-name");

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

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

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

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

РабочееПространство = ВременныеФайлы.СоздатьКаталог();

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

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

Лог.Отладка("Каталог проекта EDT: %1", КаталогПроекта);

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

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

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

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

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

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


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

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

Процедура КопироватьКаталог(СтарыйПуть, НовыйПуть) Экспорт

Для Каждого НайденныйОбъект Из НайтиФайлы(СтарыйПуть, "*.*", Истина) Цикл

Если НайденныйОбъект.ЭтоКаталог() Тогда

СоздатьКаталог(СтрЗаменить(НайденныйОбъект.ПолноеИмя, СтарыйПуть, НовыйПуть));
Продолжить;

Иначе

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

КопироватьФайл(НайденныйОбъект.ПолноеИмя, СтрЗаменить(НайденныйОбъект.ПолноеИмя, СтарыйПуть, НовыйПуть));

КонецЕсли;

КонецЦикла;

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

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

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

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

Инициализация();