1212Перем ИмяРасширения ;
1313Перем ИмяБазовогоПроекта ;
1414
15+ Перем ИмяФайлаДампаКонфигурации ;
16+ Перем ИмяФайлаИзменений ;
17+
1518#Область Интерфейс_плагина
1619
1720// Возвращает версию плагина
3841// Строка - описание функциональности плагина
3942//
4043Функция Описание () Экспорт
41- Возврат "Плагин добавляет возможность выгрузки в формате EDT."
42- + " Важно: Для работы плагина необходимы установленные EDT и Ring" ;
44+ Возврат "Плагин добавляет возможность выгрузки в формате EDT."
45+ + " Важно: Для работы плагина необходимы установленные EDT и Ring" ;
4346КонецФункции
4447
45- // Возвращает подробную справку к плагину
48+ // Возвращает подробную справку к плагину
4649//
4750// Возвращаемое значение:
4851// Строка - подробная справка для плагина
5861//
5962Функция Имя () Экспорт
6063 Возврат "edtExport" ;
61- КонецФункции
64+ КонецФункции
6265
6366// Возвращает имя лога плагина
6467//
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" );
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