12
12
Перем ИмяРасширения ;
13
13
Перем ИмяБазовогоПроекта ;
14
14
15
+ Перем ИмяФайлаДампаКонфигурации ;
16
+ Перем ИмяФайлаИзменений ;
17
+
15
18
#Область Интерфейс_плагина
16
19
17
20
// Возвращает версию плагина
38
41
// Строка - описание функциональности плагина
39
42
//
40
43
Функция Описание () Экспорт
41
- Возврат "Плагин добавляет возможность выгрузки в формате EDT."
42
- + " Важно: Для работы плагина необходимы установленные EDT и Ring" ;
44
+ Возврат "Плагин добавляет возможность выгрузки в формате EDT."
45
+ + " Важно: Для работы плагина необходимы установленные EDT и Ring" ;
43
46
КонецФункции
44
47
45
- // Возвращает подробную справку к плагину
48
+ // Возвращает подробную справку к плагину
46
49
//
47
50
// Возвращаемое значение:
48
51
// Строка - подробная справка для плагина
58
61
//
59
62
Функция Имя () Экспорт
60
63
Возврат "edtExport" ;
61
- КонецФункции
64
+ КонецФункции
62
65
63
66
// Возвращает имя лога плагина
64
67
//
74
77
#Область Подписки_на_события
75
78
76
79
Процедура ПриАктивизации (СтандартныйОбработчик ) Экспорт
77
-
80
+
78
81
Обработчик = СтандартныйОбработчик;
79
-
82
+
80
83
КонецПроцедуры
81
84
82
85
// BSLLS:UnusedParameters-off
83
86
Процедура ПередНачаломВыполнения (ПутьКХранилищу , КаталогРабочейКопии ) Экспорт
84
- // BSLLS:UnusedParameters-on
85
-
87
+ // BSLLS:UnusedParameters-on
88
+
86
89
ИмяРасширения = Обработчик.ПолучитьИмяРасширения();
87
-
90
+
88
91
КонецПроцедуры
89
92
90
93
Процедура ПриРегистрацииКомандыПриложения (ИмяКоманды , КлассРеализации ) Экспорт
91
-
94
+
92
95
Лог.Отладка("Ищу команду <%1> в списке поддерживаемых" , ИмяКоманды);
93
96
Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда
94
97
Возврат ;
95
98
КонецЕсли ;
96
-
99
+
97
100
Лог.Отладка("Устанавливаю дополнительные параметры для команды %1" , ИмяКоманды);
98
101
99
102
КлассРеализации.Опция("P project-name" , "" , "[*edtExport] Имя проекта" )
100
- .ТСтрока()
101
- .ВОкружении("GITSYNC_PROJECT_NAME" );
102
-
103
+ .ТСтрока()
104
+ .ВОкружении("GITSYNC_PROJECT_NAME" );
105
+
103
106
КлассРеализации.Опция("W workspace-location" , "" , "[*edtExport] расположение рабочей области" )
104
- .ТСтрока()
105
- .ВОкружении("GITSYNC_WORKSPACE_LOCATION" );
106
-
107
+ .ТСтрока()
108
+ .ВОкружении("GITSYNC_WORKSPACE_LOCATION" );
109
+
107
110
КлассРеализации.Опция(
108
- "B base-project-name" ,
109
- "" ,
111
+ "B base-project-name" ,
112
+ "" ,
110
113
"[*edtExport] имя базового проекта в рабочей области (для расширений))" )
111
- .ТСтрока()
112
- .ВОкружении("GITSYNC_BASE_PROJECT_NAME" );
113
-
114
+ .ТСтрока()
115
+ .ВОкружении("GITSYNC_BASE_PROJECT_NAME" );
116
+
114
117
КонецПроцедуры
115
118
116
119
Процедура ПриПолученииПараметров (ПараметрыКоманды ) Экспорт
117
120
118
- ИмяПроекта = ПараметрыКоманды.Параметр("project-name" );
121
+ ИмяПроекта = ПараметрыКоманды.Параметр("project-name" );
119
122
РабочееПространство = ПараметрыКоманды.Параметр("workspace-location" );
120
- ИмяБазовогоПроекта = ПараметрыКоманды.Параметр("base-project-name" );
121
-
122
- Если Не ПустаяСтрока (ИмяРасширения)
123
+ ИмяБазовогоПроекта = ПараметрыКоманды.Параметр("base-project-name" );
124
+
125
+ Если Не ПустаяСтрока (ИмяРасширения)
123
126
И Не ПустаяСтрока (ИмяБазовогоПроекта)
124
127
И ПустаяСтрока (РабочееПространство) Тогда
125
-
126
- ВызватьИсключение "При конвертации расширений с указанием базового проекта,
127
- |параметр workspace-location обязателен" ;
128
-
128
+
129
+ ВызватьИсключение "При конвертации расширений с указанием базового проекта,
130
+ |параметр workspace-location обязателен" ;
131
+
129
132
КонецЕсли ;
130
-
133
+
131
134
Если ПустаяСтрока (ИмяПроекта) Тогда
132
135
ВызватьИсключение "Не заполнено имя проекта" ;
133
136
КонецЕсли ;
134
-
137
+
135
138
КонецПроцедуры
136
139
137
140
// BSLLS:UnusedParameters-off
138
141
Процедура ПередПеремещениемВКаталогРабочейКопии (
139
- Конфигуратор ,
140
- КаталогРабочейКопии ,
141
- КаталогВыгрузки ,
142
- ПутьКХранилищу ,
142
+ Конфигуратор ,
143
+ КаталогРабочейКопии ,
144
+ КаталогВыгрузки ,
145
+ ПутьКХранилищу ,
143
146
НомерВерсии ) Экспорт
144
- // BSLLS:UnusedParameters-on
145
-
147
+ // BSLLS:UnusedParameters-on
148
+
146
149
Лог.Отладка("Начинаю выгрузку EDT" );
147
150
Лог.Отладка("Имя проекта: %1" , ИмяПроекта);
148
-
151
+
152
+ ПутьКФайлуИзменений = ОбъединитьПути(КаталогВыгрузки, ИмяФайлаИзменений);
153
+ Если ФС.ФайлСуществует(ПутьКФайлуИзменений) Тогда
154
+
155
+ Лог.Отладка("Используем инкрементный импорт проекта в EDT" );
156
+
157
+ ДополнитьИнкрементнуюВыгрузкуПроекта(Конфигуратор, КаталогВыгрузки);
158
+
159
+ Иначе
160
+ Лог.Отладка("Используем полный импорт проекта в EDT" );
161
+ КонецЕсли ;
162
+
149
163
ВременноеРабочееПространство = ВременныеФайлы.СоздатьКаталог();
150
164
Если Не ПустаяСтрока (РабочееПространство) Тогда
151
165
ФС.КопироватьСодержимоеКаталога(РабочееПространство, ВременноеРабочееПространство);
152
166
КонецЕсли ;
153
-
167
+
154
168
Лог.Отладка("Рабочее пространство EDT: %1" , ВременноеРабочееПространство);
155
169
156
170
КаталогПроекта = ОбъединитьПути(ВременноеРабочееПространство, ИмяПроекта);
157
-
171
+
158
172
Лог.Отладка("Каталог проекта EDT: %1" , КаталогПроекта);
159
173
ФС.ОбеспечитьПустойКаталог(КаталогПроекта);
160
-
174
+
161
175
Команда = Новый Команда;
162
176
163
177
Параметры = Новый Массив();
164
178
Параметры.Добавить(СтрШаблон ("--configuration-files "" %1"" " , КаталогВыгрузки));
165
- Параметры.Добавить(СтрШаблон ("--workspace-location "" %1"" " , ВременноеРабочееПространство));
166
- Параметры.Добавить(СтрШаблон ("--project "" %1"" " , КаталогПроекта));
179
+ Параметры.Добавить(СтрШаблон ("--workspace-location "" %1"" " , ВременноеРабочееПространство));
180
+ Параметры.Добавить(СтрШаблон ("--project "" %1"" " , КаталогПроекта));
167
181
168
182
Если Не ПустаяСтрока (ИмяРасширения) И Не ПустаяСтрока (ИмяБазовогоПроекта) Тогда
169
183
Параметры.Добавить(СтрШаблон ("--base-project-name "" %1"" " , ИмяБазовогоПроекта));
170
184
КонецЕсли ;
171
-
185
+
172
186
Команда.УстановитьСтрокуЗапуска("ring edt workspace import" );
173
187
Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI);
174
188
Команда.ДобавитьЛогВыводаКоманды("oscript.lib.gitsync.plugins.edtExport" );
177
191
Команда.ПоказыватьВыводНемедленно(Ложь );
178
192
Команда.УстановитьПравильныйКодВозврата(0 );
179
193
КодВозврата = Команда.Исполнить();
180
-
194
+
181
195
Лог.Отладка("Код возврата EDT: %1" , КодВозврата);
182
-
196
+
197
+ ТекущийФайлВерсийМетаданных = Новый Файл(ОбъединитьПути(КаталогВыгрузки, ИмяФайлаДампаКонфигурации));
198
+ Если ТекущийФайлВерсийМетаданных.Существует() Тогда
199
+
200
+ ТекущийФайлВерсийМетаданных2 = ОбъединитьПути(КаталогПроекта, ИмяФайлаДампаКонфигурации);
201
+ КопироватьФайл (ТекущийФайлВерсийМетаданных.ПолноеИмя,
202
+ ТекущийФайлВерсийМетаданных2);
203
+
204
+ КонецЕсли ;
205
+
183
206
Лог.Отладка("Очищаю каталог выгрузки" );
184
207
УдалитьФайлы (КаталогВыгрузки, "*" );
185
-
208
+
186
209
Лог.Отладка("Копирую каталог проекта EDT в каталог выгрузки" );
187
210
ФС.КопироватьСодержимоеКаталога(КаталогПроекта, КаталогВыгрузки);
188
-
211
+
189
212
КонецПроцедуры
190
213
191
214
#КонецОбласти
192
215
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
+ КонецФункции
194
298
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
+
195
372
ВерсияПлагина = "1.2.0" ;
196
373
Лог = Логирование.ПолучитьЛог(ИмяЛога());
197
374
КомандыПлагина = Новый Массив;
198
375
КомандыПлагина.Добавить("sync" );
199
376
200
- ИмяРасширения = "" ;
377
+ ИмяРасширения = "" ;
201
378
РабочееПространство = "" ;
202
- ИмяБазовогоПроекта = "" ;
203
-
379
+ ИмяБазовогоПроекта = "" ;
380
+
381
+ ИмяФайлаДампаКонфигурации = "ConfigDumpInfo.xml" ;
382
+ ИмяФайлаИзменений = "dumplist.txt" ;
383
+
204
384
КонецПроцедуры
205
385
206
- Инициализация();
386
+ #КонецОбласти
387
+
388
+ Инициализация();
0 commit comments