Skip to content

Commit 4b7dc5c

Browse files
authored
Merge pull request #174 from khorevaa/feature/plugins-pth
fix #167 Возможность указания своего каталога плагинов
2 parents 1074e2d + ce64391 commit 4b7dc5c

File tree

3 files changed

+227
-3
lines changed

3 files changed

+227
-3
lines changed

features/cmd/plugins-path.feature

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# language: ru
2+
3+
Функционал: Передача полного пути к платформе 1С
4+
Как Пользователь
5+
Я хочу иметь возможность указать каталог плагинов приложения
6+
Чтобы иметь возможность запускать синхронизацию с указанием каталога плагинов
7+
8+
Контекст: Тестовый контекст
9+
Когда Я очищаю параметры команды "gitsync" в контексте
10+
И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке
11+
И Я создаю временный каталог и сохраняю его в переменной "РабочийКаталог"
12+
И Я устанавливаю рабочей каталог из переменной "РабочийКаталог"
13+
14+
Сценарий: Переменные среды
15+
Допустим Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина"
16+
И Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов"
17+
И Я устанавливаю переменную окружения "GITSYNC_PLUGINS_PATH" из переменной "КаталогПлагинов"
18+
И Я добавляю параметр "plugins" для команды "gitsync"
19+
И Я добавляю параметр "install" для команды "gitsync"
20+
И Я добавляю параметр "-f" для команды "gitsync" из переменной "ПутьКФайлуПлагина"
21+
Когда Я выполняю команду "gitsync"
22+
И Я очищаю параметры команды "gitsync" в контексте
23+
И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке
24+
И Я добавляю параметр "plugins" для команды "gitsync"
25+
И Я добавляю параметр "enable" для команды "gitsync"
26+
И Я добавляю параметр "test_plugin" для команды "gitsync"
27+
Когда Я выполняю команду "gitsync"
28+
Тогда Вывод команды "gitsync" не содержит "Внешнее исключение"
29+
И Код возврата команды "gitsync" равен 0
30+
И В каталоге "КаталогПлагинов" есть файлы плагинов
31+
И Я очищаю значение переменных окружения
32+
|GITSYNC_PLUGINS_PATH|
33+
34+
Сценарий: Каталог приложения
35+
Допустим Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина"
36+
И Я создаю каталог приложения в рабочем каталоге
37+
И Я добавляю параметр "plugins" для команды "gitsync"
38+
И Я добавляю параметр "install" для команды "gitsync"
39+
И Я добавляю параметр "-f" для команды "gitsync" из переменной "ПутьКФайлуПлагина"
40+
Когда Я выполняю команду "gitsync"
41+
И Я очищаю параметры команды "gitsync" в контексте
42+
И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке
43+
И Я добавляю параметр "plugins" для команды "gitsync"
44+
И Я добавляю параметр "enable" для команды "gitsync"
45+
И Я добавляю параметр "test_plugin" для команды "gitsync"
46+
Когда Я выполняю команду "gitsync"
47+
Тогда Вывод команды "gitsync" не содержит "Внешнее исключение"
48+
И Код возврата команды "gitsync" равен 0
49+
И В каталоге "КаталогПлагинов" есть файлы плагинов
50+
51+
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
2+
#Использовать fs
3+
4+
Перем БДД; //контекст фреймворка 1bdd
5+
6+
// Метод выдает список шагов, реализованных в данном файле-шагов
7+
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
8+
БДД = КонтекстФреймворкаBDD;
9+
10+
ВсеШаги = Новый Массив;
11+
12+
ВсеШаги.Добавить("ВКаталогеЕстьФайлыПлагинов");
13+
ВсеШаги.Добавить("ЯСоздаюКаталогПриложенияВРабочемКаталоге");
14+
15+
Возврат ВсеШаги;
16+
КонецФункции
17+
18+
// Реализация шагов
19+
20+
// Процедура выполняется перед запуском каждого сценария
21+
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
22+
23+
КонецПроцедуры
24+
25+
// Процедура выполняется после завершения каждого сценария
26+
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
27+
28+
КонецПроцедуры
29+
30+
31+
//В каталоге "КаталогПлагинов" есть файлы плагинов
32+
Процедура ВКаталогеЕстьФайлыПлагинов(Знач ИмяКаталогПлагинов) Экспорт
33+
34+
КаталогПлагинов = БДД.ПолучитьИзКонтекста(ИмяКаталогПлагинов);
35+
36+
ФайлТестовогоПлагина= ОбъединитьПути(КаталогПлагинов, "test_plugin");
37+
38+
МассивФайлов = НайтиФайлы(КаталогПлагинов, ПолучитьМаскуВсеФайлы());
39+
40+
Если МассивФайлов.Количество() = 0 Тогда
41+
ВызватьИсключение "Файлы в каталоге плагинов не найдены";
42+
КонецЕсли;
43+
44+
СообщитьСписокФайловВКаталоге(КаталогПлагинов);
45+
46+
Если НЕ ФС.КаталогСуществует(ФайлТестовогоПлагина) Тогда
47+
ВызватьИсключение "Каталог тестового плагина не найден";
48+
КонецЕсли;
49+
50+
Если НЕ ФС.ФайлСуществует(ОбъединитьПути(КаталогПлагинов, "gitsync-plugins.json")) Тогда
51+
ВызватьИсключение "Файл настройки плагинов не найден";
52+
КонецЕсли;
53+
54+
55+
КонецПроцедуры
56+
57+
//Я создаю каталог приложения в рабочем каталоге
58+
Процедура ЯСоздаюКаталогПриложенияВРабочемКаталоге() Экспорт
59+
60+
РабочийКаталог = ТекущийКаталог();
61+
62+
ФС.ОбеспечитьПустойКаталог(".gitsync");
63+
64+
КонецПроцедуры
65+
66+
67+
Процедура СообщитьСписокФайловВКаталоге(ПутьККаталогу)
68+
69+
МассивФайлов = НайтиФайлы(ПутьККаталогу, ПолучитьМаскуВсеФайлы());
70+
71+
Для каждого Файл Из МассивФайлов Цикл
72+
Сообщить(Файл.ПолноеИмя);
73+
КонецЦикла;
74+
75+
КонецПроцедуры

src/cmd/Модули/ПараметрыПриложения.os

Lines changed: 101 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,32 @@
11
#Использовать logos
22
#Использовать tempfiles
3+
#Использовать fs
34

45
Перем ЛогПриложения;
56
Перем ОбщиеПараметры;
67
Перем ОбщийКаталогДанныхПриложения;
78
Перем СохрКаталогПриложения;
89
Перем ЭтоПриложениеEXE;
10+
Перем КаталогПлагинов;
11+
Перем ИмяКаталогаПлагинов;
12+
Перем ИмяКаталогаПриложения;
13+
Перем ИмяФайлаНастройкиПриложения;
914

1015
Процедура Инициализация()
16+
1117
ОбщиеПараметры = Новый Структура();
12-
1318
ОбщиеПараметры.Вставить("Плагины", Новый Массив);
1419
ОбщиеПараметры.Вставить("ВерсияПлатформы", "8.3");
1520
ОбщиеПараметры.Вставить("ПутьКПлатформе", "");
1621
ОбщиеПараметры.Вставить("ДоменПочты", "localhost");
1722
ОбщиеПараметры.Вставить("ПутьКГит", "");
1823

24+
ИмяКаталогаПлагинов = "plugins";
25+
ИмяКаталогаПриложения = ".gitsync";
26+
ИмяФайлаНастройкиПриложения = "config.json";
27+
28+
ОпределитьКаталогПлагинов();
29+
1930
КонецПроцедуры
2031

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

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

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

97+
Функция КаталогПлагинов() Экспорт
98+
Возврат КаталогПлагинов;
99+
КонецФункции
100+
101+
Процедура ОпределитьКаталогПлагинов()
102+
103+
КаталогПлагинов = "";
104+
105+
Если УстановитьКаталогИзПеременныхСреды() Тогда
106+
107+
Возврат;
108+
109+
ИначеЕсли ПроверитьТекущийКаталог() Тогда
110+
111+
Возврат ;
112+
113+
Иначе
114+
115+
КаталогПлагинов = КаталогПлагиновПоУмолчанию();
116+
117+
КонецЕсли;
118+
119+
КонецПроцедуры
120+
121+
Функция УстановитьКаталогИзПеременныхСреды()
122+
123+
МассивИменПеременныхСреды = "GITSYNC_PLUGINS_PATH GITSYNC_PLUGINS_DIR GITSYNC_PL_DIR";
124+
125+
МассивПеременныхСреды = СтрРазделить(МассивИменПеременныхСреды, " ", Ложь);
126+
127+
Для каждого ПеременнаяСреды Из МассивПеременныхСреды Цикл
128+
129+
КаталогПлагинов = ПолучитьПеременнуюСреды(ПеременнаяСреды);
130+
131+
Если ЗначениеЗаполнено(КаталогПлагинов) Тогда
132+
Возврат Истина;
133+
КонецЕсли;
134+
135+
КонецЦикла;
136+
137+
Возврат Ложь;
138+
139+
КонецФункции
140+
141+
Функция ПроверитьТекущийКаталог() Экспорт
142+
143+
РабочийКаталог = ТекущийКаталог();
144+
145+
ПутьККаталогуПриложения = ОбъединитьПути(РабочийКаталог, ИмяКаталогаПриложения);
146+
147+
Если НЕ ФС.КаталогСуществует(ПутьККаталогуПриложения) Тогда
148+
Возврат Ложь;
149+
КонецЕсли;
150+
151+
ПутьКФайлуНастройки = ОбъединитьПути(ПутьККаталогуПриложения, ИмяФайлаНастройкиПриложения);
152+
153+
Если НЕ ФС.ФайлСуществует(ПутьКФайлуНастройки) Тогда
154+
155+
ПрочитатьНастройкиПриложенияИзФайла(ПутьКФайлуНастройки);
156+
157+
Если ЗначениеЗаполнено(КаталогПлагинов) Тогда
158+
159+
Возврат Истина; // Подумать если не задано что делать
160+
161+
КонецЕсли;
162+
163+
КонецЕсли;
164+
165+
КаталогПлагинов = ОбъединитьПути(ПутьККаталогуПриложения, ИмяКаталогаПлагинов);
166+
167+
Если ФС.КаталогСуществует(КаталогПлагинов) Тогда
168+
ФС.ОбеспечитьКаталог(КаталогПлагинов);
169+
КонецЕсли;
170+
171+
Возврат Истина;
172+
173+
КонецФункции
174+
175+
Процедура ПрочитатьНастройкиПриложенияИзФайла(ПутьКФайлуНастройки)
176+
// TODO Сделать чтение настройки из файла
177+
КонецПроцедуры
178+
86179
Функция ФайлВключенныхПлагинов() Экспорт
87-
Возврат ОбъединитьПути(ПолучитьЛокальныйКаталогДанныхПриложения(), "gitsync-plugins.json");
180+
Возврат ОбъединитьПути(КаталогПлагинов(), "gitsync-plugins.json");
88181
КонецФункции
89182

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

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

219+
// Это специально для 1С
220+
УстановитьПеременнуюСреды("TEMP", Каталог);
221+
УстановитьПеременнуюСреды("Temp", Каталог);
222+
УстановитьПеременнуюСреды("Tmp", Каталог);
223+
126224
КонецЕсли;
127225

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

0 commit comments

Comments
 (0)