Skip to content

Commit a9218be

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

1 file changed

Lines changed: 263 additions & 21 deletions

File tree

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

Lines changed: 263 additions & 21 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,7 +184,7 @@
185184
Лог.Отладка("Каталог проекта EDT: %1", КаталогПроекта);
186185
ФС.ОбеспечитьПустойКаталог(КаталогПроекта);
187186

188-
Команда = Новый Команда;
187+
Команда = КомандаКонвертации(КаталогВыгрузки, ВременноеРабочееПространство, КаталогПроекта);
189188

190189
Параметры = Новый Массив();
191190
Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки));
@@ -225,6 +224,249 @@
225224

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

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

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

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

390-
ВерсияПлагина = "1.3.0";
632+
ВерсияПлагина = "1.4.0";
391633
Лог = Логирование.ПолучитьЛог(ИмяЛога());
392634
КомандыПлагина = Новый Массив;
393635
КомандыПлагина.Добавить("sync");

0 commit comments

Comments
 (0)