Skip to content

Commit 3dbafa7

Browse files
committed
feat: Добавлена поддержка edtcli для версий EDT 2024 и старше.
refactor: Изменено краткое имя опции '--project-name' `P` -> `PN` для совместимости с другими плагинами; Изменено краткое имя опции '--base-project-name' `B` -> `BP` для совместимости с другими плагинами; Изменена версия плагина `edt-export`.
1 parent 94c9c04 commit 3dbafa7

File tree

1 file changed

+263
-37
lines changed

1 file changed

+263
-37
lines changed

src/Классы/edtExport.os

Lines changed: 263 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#Использовать logos
22
#Использовать tempfiles
33
#Использовать fs
4+
#Использовать semver
45

56
Перем ВерсияПлагина;
67
Перем Лог;
@@ -100,27 +101,25 @@
100101

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

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

107108
КлассРеализации.Опция("W workspace-location", "", "[*edtExport] расположение рабочей области")
108-
.ТСтрока()
109-
.ВОкружении("GITSYNC_WORKSPACE_LOCATION");
110-
111-
КлассРеализации.Опция(
112-
"B base-project-name",
113-
"",
114-
"[*edtExport] имя базового проекта в рабочей области (для расширений))")
115-
.ТСтрока()
116-
.ВОкружении("GITSYNC_BASE_PROJECT_NAME");
117-
118-
КлассРеализации.Опция(
119-
"M module",
120-
"",
121-
"[*edtExport] имя установленного модуля edt")
122-
.ТСтрока()
123-
.ВОкружении("GITSYNC_MODULE");
109+
.ТСтрока()
110+
.ВОкружении("GITSYNC_WORKSPACE_LOCATION");
111+
112+
КлассРеализации.Опция("BP base-project-name",
113+
"",
114+
"[*edtExport] имя базового проекта в рабочей области (для расширений))")
115+
.ТСтрока()
116+
.ВОкружении("GITSYNC_BASE_PROJECT_NAME");
117+
118+
КлассРеализации.Опция("M module",
119+
"",
120+
"[*edtExport] имя установленного модуля edt")
121+
.ТСтрока()
122+
.ВОкружении("GITSYNC_MODULE");
124123

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

@@ -185,24 +184,8 @@
185184
Лог.Отладка("Каталог проекта EDT: %1", КаталогПроекта);
186185
ФС.ОбеспечитьПустойКаталог(КаталогПроекта);
187186

188-
Команда = Новый Команда;
189-
190-
Параметры = Новый Массив();
191-
Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки));
192-
Параметры.Добавить(СтрШаблон("--workspace-location ""%1""", ВременноеРабочееПространство));
193-
Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта));
194-
195-
Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда
196-
Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта));
197-
КонецЕсли;
187+
Команда = КомандаКонвертации(КаталогВыгрузки, ВременноеРабочееПространство, КаталогПроекта);
198188

199-
Команда.УстановитьСтрокуЗапуска(СтрШаблон("ring %1 workspace import", ИмяМодуля));
200-
Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI);
201-
Команда.ДобавитьЛогВыводаКоманды("oscript.lib.gitsync.plugins.edtExport");
202-
Команда.ДобавитьПараметры(Параметры);
203-
Команда.УстановитьИсполнениеЧерезКомандыСистемы(Истина);
204-
Команда.ПоказыватьВыводНемедленно(Ложь);
205-
Команда.УстановитьПравильныйКодВозврата(0);
206189
КодВозврата = Команда.Исполнить();
207190

208191
Лог.Отладка("Код возврата EDT: %1", КодВозврата);
@@ -228,6 +211,249 @@
228211

229212
#Область Вспомогательные_процедуры_и_функции
230213

214+
// Функция - получает команду запуска утилиты ring для выполнения конвертации
215+
//
216+
// Возвращаемое значение:
217+
// Команда - команда запуска утилиты ring для выполнения конвертации
218+
//
219+
Функция КомандаКонвертации(КаталогВыгрузки, РабочееПространство, КаталогПроекта)
220+
221+
ВерсияEDT = ВерсияEDT();
222+
223+
Если Лев(ВерсияEDT(), 4) >= "2024" Тогда
224+
Команда = КомандаEdtcli(КаталогВыгрузки, РабочееПространство, КаталогПроекта);
225+
Иначе
226+
Команда = КомандаRing(КаталогВыгрузки, РабочееПространство, КаталогПроекта);
227+
КонецЕсли;
228+
229+
Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI);
230+
Команда.ДобавитьЛогВыводаКоманды("oscript.lib.gitsync.plugins.edtExport");
231+
Команда.УстановитьИсполнениеЧерезКомандыСистемы(Истина);
232+
Команда.ПоказыватьВыводНемедленно(Ложь);
233+
Команда.УстановитьПравильныйКодВозврата(0);
234+
235+
Возврат Команда;
236+
237+
КонецФункции // КомандаКонвертации()
238+
239+
// Функция - получает команду запуска утилиты ring для выполнения конвертации
240+
//
241+
// Возвращаемое значение:
242+
// Команда - команда запуска утилиты ring для выполнения конвертации
243+
//
244+
Функция КомандаRing(КаталогВыгрузки, РабочееПространство, КаталогПроекта)
245+
246+
Команда = Новый Команда;
247+
248+
Параметры = Новый Массив();
249+
Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки));
250+
Параметры.Добавить(СтрШаблон("--workspace-location ""%1""", РабочееПространство));
251+
Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта));
252+
253+
Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда
254+
Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта));
255+
КонецЕсли;
256+
257+
ИсполняемыйФайл = НайтиRing();
258+
259+
Команда.УстановитьСтрокуЗапуска(СтрШаблон("%1 %2 workspace import", ИсполняемыйФайл, ИмяМодуля));
260+
Команда.ДобавитьПараметры(Параметры);
261+
262+
Возврат Команда;
263+
264+
КонецФункции // КомандаRing()
265+
266+
// Функция - получает команду запуска утилиты edtcli для выполнения конвертации
267+
//
268+
// Возвращаемое значение:
269+
// Команда - команда запуска утилиты edtcli для выполнения конвертации
270+
//
271+
Функция КомандаEdtcli(КаталогВыгрузки, РабочееПространство, КаталогПроекта)
272+
273+
Команда = Новый Команда;
274+
275+
Параметры = Новый Массив();
276+
Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта));
277+
Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки));
278+
// Параметры.Добавить(СтрШаблон("--version ""%1""", Параметры.ВерсияПлатформы));
279+
280+
Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда
281+
Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта));
282+
КонецЕсли;
283+
284+
ИсполняемыйФайл = НайтиEdtcli();
285+
286+
Команда.УстановитьСтрокуЗапуска(СтрШаблон("%1 -data ""%2"" -command import",
287+
ИсполняемыйФайл,
288+
РабочееПространство));
289+
Команда.ДобавитьПараметры(Параметры);
290+
291+
Возврат Команда;
292+
293+
КонецФункции // КомандаEdtcli()
294+
295+
// Функция - выполняет поиск утилиты ring и возвращает полный путь к утилите
296+
//
297+
// Возвращаемое значение:
298+
// Строка - полный путь к утилите ring
299+
//
300+
Функция НайтиRing() Экспорт
301+
302+
РасположениеRing = НайтиКоманду("ring");
303+
304+
Если ЗначениеЗаполнено(РасположениеRing) Тогда
305+
Возврат РасположениеRing;
306+
КонецЕсли;
307+
308+
Если ЭтоWindows() Тогда
309+
КаталогПрограмм = ПолучитьПеременнуюСреды("ProgramW6432");
310+
Расширение = ".cmd";
311+
Иначе
312+
КаталогПрограмм = "/opt";
313+
Расширение = "";
314+
КонецЕсли;
315+
ПутьУстановки_1CE = ОбъединитьПути(КаталогПрограмм, "1C", "1CE", "components");
316+
Файлы = НайтиФайлы(ПутьУстановки_1CE, СтрШаблон("ring%1", Расширение), Истина);
317+
318+
Если Файлы.Количество() > 0 Тогда
319+
Возврат Файлы[0].ПолноеИмя;
320+
КонецЕсли;
321+
322+
Возврат "";
323+
324+
КонецФункции // НайтиRing()
325+
326+
// Функция - выполняет поиск утилиты edtcli и возвращает полный путь к утилите
327+
//
328+
// Возвращаемое значение:
329+
// Строка - полный путь к утилите edtcli
330+
//
331+
Функция НайтиEdtcli() Экспорт
332+
333+
РасположениеEdtcli = НайтиКоманду("1cedtcli");
334+
335+
Если ЗначениеЗаполнено(РасположениеEdtcli) Тогда
336+
Возврат РасположениеEdtcli;
337+
КонецЕсли;
338+
339+
Если ЭтоWindows() Тогда
340+
КаталогПрограмм = ПолучитьПеременнуюСреды("ProgramW6432");
341+
Расширение = ".exe";
342+
Иначе
343+
КаталогПрограмм = "/opt";
344+
Расширение = "";
345+
КонецЕсли;
346+
ПутьУстановки_1CE = ОбъединитьПути(КаталогПрограмм, "1C", "1CE", "components");
347+
Файлы = НайтиФайлы(ПутьУстановки_1CE, СтрШаблон("1cedtcli%1", Расширение), Истина);
348+
349+
Если Файлы.Количество() > 0 Тогда
350+
Возврат Файлы[0].ПолноеИмя;
351+
КонецЕсли;
352+
353+
Возврат "";
354+
355+
КонецФункции // НайтиEdtcli()
356+
357+
// Функция - выполняет поиск указанной команды в текущем каталоге или переменной окружения PATH
358+
//
359+
// Параметры:
360+
// ИмяКоманды - Строка - имя команды для поиска
361+
//
362+
// Возвращаемое значение:
363+
// Строка - полный путь к команде
364+
//
365+
Функция НайтиКоманду(Знач ИмяКоманды)
366+
367+
ЭтоWindows = ЭтоWindows();
368+
369+
Команда = Новый Команда();
370+
Если ЭтоWindows Тогда
371+
Команда.УстановитьКоманду("where");
372+
Иначе
373+
Команда.УстановитьКоманду("which");
374+
КонецЕсли;
375+
Команда.ДобавитьПараметр(ИмяКоманды);
376+
377+
Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь);
378+
Команда.ПоказыватьВыводНемедленно(Ложь);
379+
380+
КодВозврата = Команда.Исполнить();
381+
382+
ВыводКоманды = СокрЛП(Команда.ПолучитьВывод());
383+
384+
Если КодВозврата = 0 Тогда
385+
Лог.Отладка("Найдена команда ""%1"": %2", ИмяКоманды, ВыводКоманды);
386+
Иначе
387+
Лог.Предупреждение("Команда ""%1"" не найдена в текущем каталоге или в переменной окружения PATH:%2%3",
388+
ИмяКоманды,
389+
Символы.ПС,
390+
ВыводКоманды);
391+
Возврат "";
392+
КонецЕсли;
393+
394+
Если ФС.ФайлСуществует(ВыводКоманды) Тогда
395+
Возврат ВыводКоманды;
396+
КонецЕсли;
397+
398+
Возврат "";
399+
400+
КонецФункции // НайтиКоманду()
401+
402+
// Функция - проверяет, что скрипт выполняется в среде Windows
403+
//
404+
// Возвращаемое значение:
405+
// Булево - Истина - скрипт выполняется в среде Windows
406+
//
407+
Функция ЭтоWindows() Экспорт
408+
409+
СистемнаяИнформация = Новый СистемнаяИнформация;
410+
Возврат Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
411+
412+
КонецФункции // ЭтоWindows()
413+
414+
// Функция - выполняет поиск утилиты ring и возвращает полный номер последней версии EDT
415+
//
416+
// Возвращаемое значение:
417+
// Строка - полный номер последней версии EDT
418+
//
419+
Функция ВерсияEDT() Экспорт
420+
421+
РасположениеEdtcli = НайтиEdtcli();
422+
423+
ФайлEdtcli = Новый Файл(РасположениеEdtcli);
424+
КаталогEdtcli = Новый Файл(ФайлEdtcli.Путь);
425+
КаталогEdtcli = Новый Файл(КаталогEdtcli.Путь);
426+
427+
Файлы = НайтиФайлы(КаталогEdtcli.Путь, "1cedt.ini", Истина);
428+
РВ = Новый РегулярноеВыражение("1c-edt-(\d+\.\d+\.\d+)\+");
429+
430+
НомераВерсий = Новый Массив();
431+
432+
Для Каждого ТекФайл Из Файлы Цикл
433+
КаталогВерсии = Новый Файл(ТекФайл.Путь);
434+
435+
Совпадения = РВ.НайтиСовпадения(КаталогВерсии.Имя);
436+
437+
Если Совпадения.Количество() = 0 Тогда
438+
Продолжить;
439+
КонецЕсли;
440+
441+
НомераВерсий.Добавить(Совпадения[0].Группы[1].Значение);
442+
Лог.Отладка("Найдена версия EDT ""%1"" в каталоге ""%2"".", Совпадения[0].Группы[1].Значение, ТекФайл.Путь);
443+
КонецЦикла;
444+
445+
Версии.СортироватьВерсии(НомераВерсий, "УБЫВ");
446+
447+
Если НомераВерсий.Количество() = 0 Тогда
448+
Лог.Предупреждение("Не найдена версия EDT");
449+
КонецЕсли;
450+
451+
Лог.Отладка("Найдена версия EDT ""%1"".", НомераВерсий[0]);
452+
453+
Возврат НомераВерсий[0];
454+
455+
КонецФункции // ВерсияEDT()
456+
231457
Процедура ДополнитьИнкрементнуюВыгрузкуПроекта(Конфигуратор, КаталогВыгрузки)
232458

233459
ПутьКФайлуДополнительнойВыгрузки = ВременныеФайлы.НовоеИмяФайла();
@@ -390,7 +616,7 @@
390616

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

393-
ВерсияПлагина = "1.3.0";
619+
ВерсияПлагина = "1.4.0";
394620
Лог = Логирование.ПолучитьЛог(ИмяЛога());
395621
КомандыПлагина = Новый Массив;
396622
КомандыПлагина.Добавить("sync");

0 commit comments

Comments
 (0)