Skip to content

Возможность указания своего каталога плагинов #174

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 1 commit into from
Feb 27, 2019
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
51 changes: 51 additions & 0 deletions features/cmd/plugins-path.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# language: ru

Функционал: Передача полного пути к платформе 1С
Как Пользователь
Я хочу иметь возможность указать каталог плагинов приложения
Чтобы иметь возможность запускать синхронизацию с указанием каталога плагинов

Контекст: Тестовый контекст
Когда Я очищаю параметры команды "gitsync" в контексте
И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке
И Я создаю временный каталог и сохраняю его в переменной "РабочийКаталог"
И Я устанавливаю рабочей каталог из переменной "РабочийКаталог"

Сценарий: Переменные среды
Допустим Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина"
И Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов"
И Я устанавливаю переменную окружения "GITSYNC_PLUGINS_PATH" из переменной "КаталогПлагинов"
И Я добавляю параметр "plugins" для команды "gitsync"
И Я добавляю параметр "install" для команды "gitsync"
И Я добавляю параметр "-f" для команды "gitsync" из переменной "ПутьКФайлуПлагина"
Когда Я выполняю команду "gitsync"
И Я очищаю параметры команды "gitsync" в контексте
И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке
И Я добавляю параметр "plugins" для команды "gitsync"
И Я добавляю параметр "enable" для команды "gitsync"
И Я добавляю параметр "test_plugin" для команды "gitsync"
Когда Я выполняю команду "gitsync"
Тогда Вывод команды "gitsync" не содержит "Внешнее исключение"
И Код возврата команды "gitsync" равен 0
И В каталоге "КаталогПлагинов" есть файлы плагинов
И Я очищаю значение переменных окружения
|GITSYNC_PLUGINS_PATH|

Сценарий: Каталог приложения
Допустим Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина"
И Я создаю каталог приложения в рабочем каталоге
И Я добавляю параметр "plugins" для команды "gitsync"
И Я добавляю параметр "install" для команды "gitsync"
И Я добавляю параметр "-f" для команды "gitsync" из переменной "ПутьКФайлуПлагина"
Когда Я выполняю команду "gitsync"
И Я очищаю параметры команды "gitsync" в контексте
И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке
И Я добавляю параметр "plugins" для команды "gitsync"
И Я добавляю параметр "enable" для команды "gitsync"
И Я добавляю параметр "test_plugin" для команды "gitsync"
Когда Я выполняю команду "gitsync"
Тогда Вывод команды "gitsync" не содержит "Внешнее исключение"
И Код возврата команды "gitsync" равен 0
И В каталоге "КаталогПлагинов" есть файлы плагинов


75 changes: 75 additions & 0 deletions features/cmd/step_definitions/plugins-path.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
#Использовать fs

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

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

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

ВсеШаги.Добавить("ВКаталогеЕстьФайлыПлагинов");
ВсеШаги.Добавить("ЯСоздаюКаталогПриложенияВРабочемКаталоге");

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

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

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

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

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

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


//В каталоге "КаталогПлагинов" есть файлы плагинов
Процедура ВКаталогеЕстьФайлыПлагинов(Знач ИмяКаталогПлагинов) Экспорт

КаталогПлагинов = БДД.ПолучитьИзКонтекста(ИмяКаталогПлагинов);

ФайлТестовогоПлагина= ОбъединитьПути(КаталогПлагинов, "test_plugin");

МассивФайлов = НайтиФайлы(КаталогПлагинов, ПолучитьМаскуВсеФайлы());

Если МассивФайлов.Количество() = 0 Тогда
ВызватьИсключение "Файлы в каталоге плагинов не найдены";
КонецЕсли;

СообщитьСписокФайловВКаталоге(КаталогПлагинов);

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

Если НЕ ФС.ФайлСуществует(ОбъединитьПути(КаталогПлагинов, "gitsync-plugins.json")) Тогда
ВызватьИсключение "Файл настройки плагинов не найден";
КонецЕсли;


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

//Я создаю каталог приложения в рабочем каталоге
Процедура ЯСоздаюКаталогПриложенияВРабочемКаталоге() Экспорт

РабочийКаталог = ТекущийКаталог();

ФС.ОбеспечитьПустойКаталог(".gitsync");

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


Процедура СообщитьСписокФайловВКаталоге(ПутьККаталогу)

МассивФайлов = НайтиФайлы(ПутьККаталогу, ПолучитьМаскуВсеФайлы());

Для каждого Файл Из МассивФайлов Цикл
Сообщить(Файл.ПолноеИмя);
КонецЦикла;

КонецПроцедуры
104 changes: 101 additions & 3 deletions src/cmd/Модули/ПараметрыПриложения.os
Original file line number Diff line number Diff line change
@@ -1,21 +1,32 @@
#Использовать logos
#Использовать tempfiles
#Использовать fs

Перем ЛогПриложения;
Перем ОбщиеПараметры;
Перем ОбщийКаталогДанныхПриложения;
Перем СохрКаталогПриложения;
Перем ЭтоПриложениеEXE;
Перем КаталогПлагинов;
Перем ИмяКаталогаПлагинов;
Перем ИмяКаталогаПриложения;
Перем ИмяФайлаНастройкиПриложения;

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

ОбщиеПараметры = Новый Структура();

ОбщиеПараметры.Вставить("Плагины", Новый Массив);
ОбщиеПараметры.Вставить("ВерсияПлатформы", "8.3");
ОбщиеПараметры.Вставить("ПутьКПлатформе", "");
ОбщиеПараметры.Вставить("ДоменПочты", "localhost");
ОбщиеПараметры.Вставить("ПутьКГит", "");

ИмяКаталогаПлагинов = "plugins";
ИмяКаталогаПриложения = ".gitsync";
ИмяФайлаНастройкиПриложения = "config.json";

ОпределитьКаталогПлагинов();

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

Функция ЭтоСборкаEXE() Экспорт
Expand Down Expand Up @@ -79,12 +90,94 @@

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

Функция КаталогПлагинов() Экспорт
Функция КаталогПлагиновПоУмолчанию()
Возврат ОбъединитьПути(ПолучитьЛокальныйКаталогДанныхПриложения(), "plugins");
КонецФункции

Функция КаталогПлагинов() Экспорт
Возврат КаталогПлагинов;
КонецФункции

Процедура ОпределитьКаталогПлагинов()

КаталогПлагинов = "";

Если УстановитьКаталогИзПеременныхСреды() Тогда

Возврат;

ИначеЕсли ПроверитьТекущийКаталог() Тогда

Возврат ;

Иначе

КаталогПлагинов = КаталогПлагиновПоУмолчанию();

КонецЕсли;

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

Функция УстановитьКаталогИзПеременныхСреды()

МассивИменПеременныхСреды = "GITSYNC_PLUGINS_PATH GITSYNC_PLUGINS_DIR GITSYNC_PL_DIR";

МассивПеременныхСреды = СтрРазделить(МассивИменПеременныхСреды, " ", Ложь);

Для каждого ПеременнаяСреды Из МассивПеременныхСреды Цикл

КаталогПлагинов = ПолучитьПеременнуюСреды(ПеременнаяСреды);

Если ЗначениеЗаполнено(КаталогПлагинов) Тогда
Возврат Истина;
КонецЕсли;

КонецЦикла;

Возврат Ложь;

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

Функция ПроверитьТекущийКаталог() Экспорт

РабочийКаталог = ТекущийКаталог();

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

Если НЕ ФС.КаталогСуществует(ПутьККаталогуПриложения) Тогда
Возврат Ложь;
КонецЕсли;

ПутьКФайлуНастройки = ОбъединитьПути(ПутьККаталогуПриложения, ИмяФайлаНастройкиПриложения);

Если НЕ ФС.ФайлСуществует(ПутьКФайлуНастройки) Тогда

ПрочитатьНастройкиПриложенияИзФайла(ПутьКФайлуНастройки);

Если ЗначениеЗаполнено(КаталогПлагинов) Тогда

Возврат Истина; // Подумать если не задано что делать

КонецЕсли;

КонецЕсли;

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

Если ФС.КаталогСуществует(КаталогПлагинов) Тогда
ФС.ОбеспечитьКаталог(КаталогПлагинов);
КонецЕсли;

Возврат Истина;

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

Процедура ПрочитатьНастройкиПриложенияИзФайла(ПутьКФайлуНастройки)
// TODO Сделать чтение настройки из файла
КонецПроцедуры

Функция ФайлВключенныхПлагинов() Экспорт
Возврат ОбъединитьПути(ПолучитьЛокальныйКаталогДанныхПриложения(), "gitsync-plugins.json");
Возврат ОбъединитьПути(КаталогПлагинов(), "gitsync-plugins.json");
КонецФункции

Функция ИмяФайлаНастройкиПакетнойСинхронизации() Экспорт
Expand Down Expand Up @@ -123,6 +216,11 @@

ВременныеФайлы.БазовыйКаталог = ФайлБазовыйКаталог.ПолноеИмя;

// Это специально для 1С
УстановитьПеременнуюСреды("TEMP", Каталог);
УстановитьПеременнуюСреды("Temp", Каталог);
УстановитьПеременнуюСреды("Tmp", Каталог);

КонецЕсли;

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