Skip to content

Commit 7b8c1a1

Browse files
committed
Добавлена возможность инкрементной конвертации в формат EDT
1 parent 29be040 commit 7b8c1a1

File tree

2 files changed

+258
-59
lines changed

2 files changed

+258
-59
lines changed

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

Lines changed: 236 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
Перем ИмяРасширения;
1313
Перем ИмяБазовогоПроекта;
1414

15+
Перем ИмяФайлаДампаКонфигурации;
16+
Перем ИмяФайлаИзменений;
17+
1518
#Область Интерфейс_плагина
1619

1720
// Возвращает версию плагина
@@ -38,11 +41,11 @@
3841
// Строка - описание функциональности плагина
3942
//
4043
Функция Описание() Экспорт
41-
Возврат "Плагин добавляет возможность выгрузки в формате EDT."
42-
+ " Важно: Для работы плагина необходимы установленные EDT и Ring";
44+
Возврат "Плагин добавляет возможность выгрузки в формате EDT."
45+
+ " Важно: Для работы плагина необходимы установленные EDT и Ring";
4346
КонецФункции
4447

45-
// Возвращает подробную справку к плагину
48+
// Возвращает подробную справку к плагину
4649
//
4750
// Возвращаемое значение:
4851
// Строка - подробная справка для плагина
@@ -58,7 +61,7 @@
5861
//
5962
Функция Имя() Экспорт
6063
Возврат "edtExport";
61-
КонецФункции
64+
КонецФункции
6265

6366
// Возвращает имя лога плагина
6467
//
@@ -74,101 +77,112 @@
7477
#Область Подписки_на_события
7578

7679
Процедура ПриАктивизации(СтандартныйОбработчик) Экспорт
77-
80+
7881
Обработчик = СтандартныйОбработчик;
79-
82+
8083
КонецПроцедуры
8184

8285
// BSLLS:UnusedParameters-off
8386
Процедура ПередНачаломВыполнения(ПутьКХранилищу, КаталогРабочейКопии) Экспорт
84-
// BSLLS:UnusedParameters-on
85-
87+
// BSLLS:UnusedParameters-on
88+
8689
ИмяРасширения = Обработчик.ПолучитьИмяРасширения();
87-
90+
8891
КонецПроцедуры
8992

9093
Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации) Экспорт
91-
94+
9295
Лог.Отладка("Ищу команду <%1> в списке поддерживаемых", ИмяКоманды);
9396
Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда
9497
Возврат;
9598
КонецЕсли;
96-
99+
97100
Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды);
98101

99102
КлассРеализации.Опция("P project-name", "", "[*edtExport] Имя проекта")
100-
.ТСтрока()
101-
.ВОкружении("GITSYNC_PROJECT_NAME");
102-
103+
.ТСтрока()
104+
.ВОкружении("GITSYNC_PROJECT_NAME");
105+
103106
КлассРеализации.Опция("W workspace-location", "", "[*edtExport] расположение рабочей области")
104-
.ТСтрока()
105-
.ВОкружении("GITSYNC_WORKSPACE_LOCATION");
106-
107+
.ТСтрока()
108+
.ВОкружении("GITSYNC_WORKSPACE_LOCATION");
109+
107110
КлассРеализации.Опция(
108-
"B base-project-name",
109-
"",
111+
"B base-project-name",
112+
"",
110113
"[*edtExport] имя базового проекта в рабочей области (для расширений))")
111-
.ТСтрока()
112-
.ВОкружении("GITSYNC_BASE_PROJECT_NAME");
113-
114+
.ТСтрока()
115+
.ВОкружении("GITSYNC_BASE_PROJECT_NAME");
116+
114117
КонецПроцедуры
115118

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

118-
ИмяПроекта = ПараметрыКоманды.Параметр("project-name");
121+
ИмяПроекта = ПараметрыКоманды.Параметр("project-name");
119122
РабочееПространство = ПараметрыКоманды.Параметр("workspace-location");
120-
ИмяБазовогоПроекта = ПараметрыКоманды.Параметр("base-project-name");
121-
122-
Если Не ПустаяСтрока(ИмяРасширения)
123+
ИмяБазовогоПроекта = ПараметрыКоманды.Параметр("base-project-name");
124+
125+
Если Не ПустаяСтрока(ИмяРасширения)
123126
И Не ПустаяСтрока(ИмяБазовогоПроекта)
124127
И ПустаяСтрока(РабочееПространство) Тогда
125-
126-
ВызватьИсключение "При конвертации расширений с указанием базового проекта,
127-
|параметр workspace-location обязателен";
128-
128+
129+
ВызватьИсключение "При конвертации расширений с указанием базового проекта,
130+
|параметр workspace-location обязателен";
131+
129132
КонецЕсли;
130-
133+
131134
Если ПустаяСтрока(ИмяПроекта) Тогда
132135
ВызватьИсключение "Не заполнено имя проекта";
133136
КонецЕсли;
134-
137+
135138
КонецПроцедуры
136139

137140
// BSLLS:UnusedParameters-off
138141
Процедура ПередПеремещениемВКаталогРабочейКопии(
139-
Конфигуратор,
140-
КаталогРабочейКопии,
141-
КаталогВыгрузки,
142-
ПутьКХранилищу,
142+
Конфигуратор,
143+
КаталогРабочейКопии,
144+
КаталогВыгрузки,
145+
ПутьКХранилищу,
143146
НомерВерсии) Экспорт
144-
// BSLLS:UnusedParameters-on
145-
147+
// BSLLS:UnusedParameters-on
148+
146149
Лог.Отладка("Начинаю выгрузку EDT");
147150
Лог.Отладка("Имя проекта: %1", ИмяПроекта);
148-
151+
152+
ПутьКФайлуИзменений = ОбъединитьПути(КаталогВыгрузки, ИмяФайлаИзменений);
153+
Если ФС.ФайлСуществует(ПутьКФайлуИзменений) Тогда
154+
155+
Лог.Отладка("Используем инкрементный импорт проекта в EDT");
156+
157+
ДополнитьИнкрементнуюВыгрузкуПроекта(Конфигуратор, КаталогВыгрузки);
158+
159+
Иначе
160+
Лог.Отладка("Используем полный импорт проекта в EDT");
161+
КонецЕсли;
162+
149163
ВременноеРабочееПространство = ВременныеФайлы.СоздатьКаталог();
150164
Если Не ПустаяСтрока(РабочееПространство) Тогда
151165
ФС.КопироватьСодержимоеКаталога(РабочееПространство, ВременноеРабочееПространство);
152166
КонецЕсли;
153-
167+
154168
Лог.Отладка("Рабочее пространство EDT: %1", ВременноеРабочееПространство);
155169

156170
КаталогПроекта = ОбъединитьПути(ВременноеРабочееПространство, ИмяПроекта);
157-
171+
158172
Лог.Отладка("Каталог проекта EDT: %1", КаталогПроекта);
159173
ФС.ОбеспечитьПустойКаталог(КаталогПроекта);
160-
174+
161175
Команда = Новый Команда;
162176

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

168182
Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда
169183
Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта));
170184
КонецЕсли;
171-
185+
172186
Команда.УстановитьСтрокуЗапуска("ring edt workspace import");
173187
Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI);
174188
Команда.ДобавитьЛогВыводаКоманды("oscript.lib.gitsync.plugins.edtExport");
@@ -177,30 +191,198 @@
177191
Команда.ПоказыватьВыводНемедленно(Ложь);
178192
Команда.УстановитьПравильныйКодВозврата(0);
179193
КодВозврата = Команда.Исполнить();
180-
194+
181195
Лог.Отладка("Код возврата EDT: %1", КодВозврата);
182-
196+
197+
ТекущийФайлВерсийМетаданных = Новый Файл(ОбъединитьПути(КаталогВыгрузки, ИмяФайлаДампаКонфигурации));
198+
Если ТекущийФайлВерсийМетаданных.Существует() Тогда
199+
200+
ТекущийФайлВерсийМетаданных2 = ОбъединитьПути(КаталогПроекта, ИмяФайлаДампаКонфигурации);
201+
КопироватьФайл(ТекущийФайлВерсийМетаданных.ПолноеИмя,
202+
ТекущийФайлВерсийМетаданных2);
203+
204+
КонецЕсли;
205+
183206
Лог.Отладка("Очищаю каталог выгрузки");
184207
УдалитьФайлы(КаталогВыгрузки, "*");
185-
208+
186209
Лог.Отладка("Копирую каталог проекта EDT в каталог выгрузки");
187210
ФС.КопироватьСодержимоеКаталога(КаталогПроекта, КаталогВыгрузки);
188-
211+
189212
КонецПроцедуры
190213

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

193-
Процедура Инициализация()
216+
#Область Вспомогательные_процедуры_и_функции
217+
218+
Процедура ДополнитьИнкрементнуюВыгрузкуПроекта(Конфигуратор, КаталогВыгрузки)
219+
220+
ПутьКФайлуДополнительнойВыгрузки = ВременныеФайлы.НовоеИмяФайла();
221+
222+
СформироватьСписокДополнительныхОбъектов(КаталогВыгрузки, ПутьКФайлуДополнительнойВыгрузки);
223+
224+
Если ФС.ФайлСуществует(ПутьКФайлуДополнительнойВыгрузки) Тогда
225+
226+
Параметры = Конфигуратор.ПолучитьПараметрыЗапуска();
227+
228+
Параметры.Добавить(СтрШаблон("/DumpConfigToFiles ""%1""", КаталогВыгрузки));
229+
Параметры.Добавить(СтрШаблон("-listFile ""%1""", ПутьКФайлуДополнительнойВыгрузки));
230+
231+
Конфигуратор.ВыполнитьКоманду(Параметры);
232+
233+
ВременныеФайлы.УдалитьФайл(ПутьКФайлуДополнительнойВыгрузки);
234+
235+
КонецЕсли;
236+
237+
КонецПроцедуры
238+
239+
// Возращает имя родительского объекта меданных
240+
//
241+
// Параметры:
242+
// ПолноеИмяОбъекта - Строка - Полное имя объекта метаданных.
243+
//
244+
// Возвращаемое значение:
245+
// Строка - имя родительского объекта
246+
//
247+
Функция РодительОбъекта(ПолноеИмяОбъекта)
248+
249+
ЧастиИмени = СтрРазделить(ПолноеИмяОбъекта, ".");
250+
251+
Если ЧастиИмени.Количество() > 1 Тогда
252+
253+
ТипОбъектаМетаданных = ЧастиИмени[0];
254+
ИмяОбъектаМетаданных = ЧастиИмени[1];
255+
256+
Иначе
257+
Возврат ПолноеИмяОбъекта;
258+
КонецЕсли;
259+
260+
Если СтрНайти("Configuration,Language", ТипОбъектаМетаданных) > 0 Тогда
261+
Возврат ТипОбъектаМетаданных;
262+
Иначе
263+
Возврат СтрШаблон("%1.%2", ТипОбъектаМетаданных, ИмяОбъектаМетаданных);
264+
КонецЕсли;
265+
266+
КонецФункции
267+
268+
Функция ИзмененныеОбъектыМетаданных(ПутьКФайлуИзменений)
269+
270+
РегулярноеВыражение = Новый РегулярноеВыражение("^(?>New|Modified):(\S+)\s*$");
271+
272+
ЧтениеФайла = Новый ЧтениеТекста(ПутьКФайлуИзменений);
273+
Совпадения = РегулярноеВыражение.НайтиСовпадения(ЧтениеФайла.Прочитать());
274+
ЧтениеФайла.Закрыть();
275+
276+
ИзмененныеОбъекты = Новый Соответствие;
277+
ИзмененныеОбъекты.Вставить("Configuration", Новый Массив);
278+
ИзмененныеОбъекты.Вставить("Language", Новый Массив);
279+
280+
Для Каждого Совпадение Из Совпадения Цикл
281+
282+
ИмяОбъектаМетаданных = Совпадение.Группы[1].Значение;
283+
Родитель = РодительОбъекта(ИмяОбъектаМетаданных);
284+
285+
ПодчиненныеОбъекты = ИзмененныеОбъекты.Получить(Родитель);
286+
Если ПодчиненныеОбъекты = Неопределено Тогда
287+
ПодчиненныеОбъекты = Новый Массив;
288+
ИзмененныеОбъекты.Вставить(Родитель, ПодчиненныеОбъекты);
289+
КонецЕсли;
290+
291+
ПодчиненныеОбъекты.Добавить(ИмяОбъектаМетаданных);
292+
293+
КонецЦикла;
294+
295+
Возврат ИзмененныеОбъекты;
296+
297+
КонецФункции
194298

299+
Функция ДополнительныеОбъектыКВыгрузке(ВыгруженныеИзменения, ИмяФайлаДампа)
300+
301+
СписокОбъектов = Новый Массив;
302+
303+
ДочерниеОбъекты = Новый Массив;
304+
ДочерниеОбъекты.Добавить("Form");
305+
ДочерниеОбъекты.Добавить("Template");
306+
ДочерниеОбъекты.Добавить("Recalculation");
307+
ДочерниеОбъекты.Добавить("Subsystem");
308+
309+
ЧтениеXML = Новый ЧтениеXML;
310+
ЧтениеXML.ОткрытьФайл(ИмяФайлаДампа);
311+
312+
ЧтениеXML.ПерейтиКСодержимому(); // ConfigDumpInfo
313+
ЧтениеXML.Прочитать(); // ConfigVersions
314+
ЧтениеXML.Прочитать(); // Metadata
315+
316+
Пока ЧтениеXML.Имя = "Metadata" Цикл
317+
318+
ИмяОбъекта = ЧтениеXML.ЗначениеАтрибута("name");
319+
320+
Родитель = РодительОбъекта(ИмяОбъекта);
321+
322+
Сегменты = СтрРазделить(ИмяОбъекта, ".");
323+
324+
Если Сегменты.Количество() > 2 И ДочерниеОбъекты.Найти(Сегменты[2]) = Неопределено Тогда
325+
Продолжить;
326+
КонецЕсли;
327+
Изменения = ВыгруженныеИзменения.Получить(Родитель);
328+
Если Изменения <> Неопределено Тогда
329+
330+
Если Изменения.Найти(ИмяОбъекта) = Неопределено Или Родитель = "Configuration" Тогда
331+
СписокОбъектов.Добавить(ИмяОбъекта);
332+
КонецЕсли;
333+
334+
КонецЕсли;
335+
336+
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
337+
ЧтениеXML.Пропустить();
338+
КонецЕсли;
339+
340+
ЧтениеXML.Прочитать();
341+
342+
КонецЦикла;
343+
344+
ЧтениеXML.Закрыть();
345+
346+
Возврат СписокОбъектов;
347+
348+
КонецФункции
349+
350+
Процедура СформироватьСписокДополнительныхОбъектов(КаталогВыгрузки, ПутьКФайлуДополнительнойВыгрузки)
351+
352+
ПутьКФайлуИзменений = ОбъединитьПути(КаталогВыгрузки, ИмяФайлаИзменений);
353+
ПутьКФайлуВерсийМетаданных = ОбъединитьПути(КаталогВыгрузки, ИмяФайлаДампаКонфигурации);
354+
355+
ИзмененныеОбъекты = ИзмененныеОбъектыМетаданных(ПутьКФайлуИзменений);
356+
ДополнительныеОбъектыКВыгрузке = ДополнительныеОбъектыКВыгрузке(ИзмененныеОбъекты, ПутьКФайлуВерсийМетаданных);
357+
358+
Если ДополнительныеОбъектыКВыгрузке.Количество() > 0 Тогда
359+
360+
ФайлОбъектовВыгрузки = Новый ТекстовыйДокумент();
361+
Для Каждого ДополнительныйОбъект Из ДополнительныеОбъектыКВыгрузке Цикл
362+
ФайлОбъектовВыгрузки.ДобавитьСтроку(ДополнительныйОбъект);
363+
КонецЦикла;
364+
ФайлОбъектовВыгрузки.Записать(ПутьКФайлуДополнительнойВыгрузки, КодировкаТекста.UTF8);
365+
366+
КонецЕсли;
367+
368+
КонецПроцедуры
369+
370+
Процедура Инициализация()
371+
195372
ВерсияПлагина = "1.2.0";
196373
Лог = Логирование.ПолучитьЛог(ИмяЛога());
197374
КомандыПлагина = Новый Массив;
198375
КомандыПлагина.Добавить("sync");
199376

200-
ИмяРасширения = "";
377+
ИмяРасширения = "";
201378
РабочееПространство = "";
202-
ИмяБазовогоПроекта = "";
203-
379+
ИмяБазовогоПроекта = "";
380+
381+
ИмяФайлаДампаКонфигурации = "ConfigDumpInfo.xml";
382+
ИмяФайлаИзменений = "dumplist.txt";
383+
204384
КонецПроцедуры
205385

206-
Инициализация();
386+
#КонецОбласти
387+
388+
Инициализация();

0 commit comments

Comments
 (0)