Skip to content

Commit 865cd52

Browse files
committed
feat: Реализован плагин drop-support для снятия конфигурации с поддержки без использования конфигуратора.
1 parent 095a6bf commit 865cd52

File tree

3 files changed

+277
-0
lines changed

3 files changed

+277
-0
lines changed

packagedef

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,5 @@
5757
.ОпределяетКласс("Плагин_ЗаменаАвторов", "src/Классы/replaceAuthors.os")
5858
.ОпределяетКласс("Плагин_Ibcmd", "src/Классы/useIbcmd.os")
5959
.ОпределяетКласс("Плагин_DropConfigDump", "src/Классы/dropConfigDump.os")
60+
.ОпределяетКласс("Плагин_DropSupport", "src/Классы/dropSupport.os")
6061
;

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,10 +289,13 @@
289289
Процедура Инициализация()
290290

291291
Лог = Логирование.ПолучитьЛог(ИмяЛога());
292+
292293
КомандыПлагина = Новый Массив;
293294
КомандыПлагина.Добавить("init");
294295
КомандыПлагина.Добавить("sync");
295296

297+
ЗакоммититьФайлИгнорируемыхИзменений = Ложь;
298+
296299
КонецПроцедуры
297300

298301
Инициализация();

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

Lines changed: 273 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,273 @@
1+
#Использовать logos
2+
#Использовать gitsync
3+
4+
Перем Лог; // Лог - объект протоколирования (logger)
5+
Перем Обработчик; // Команда - обработчик текущей команды gitsync
6+
Перем КомандыПлагина; // Массив из Строка - список команд к которым подключается текущий плагин
7+
Перем ТекущаяКоманда; // Строка - имя выполняемой команды gitsync
8+
9+
Перем ЗакоммититьФайлИгнорируемыхИзменений; // Булево - Истина - закоммитить файл .gitignore.
10+
11+
#Область Интерфейс_плагина
12+
13+
// Возвращает версию плагина
14+
//
15+
// Возвращаемое значение:
16+
// Строка - текущая версия плагина
17+
//
18+
Функция Версия() Экспорт
19+
Возврат "1.0.0";
20+
КонецФункции
21+
22+
// Возвращает приоритет выполнения плагина
23+
//
24+
// Возвращаемое значение:
25+
// Число - приоритет выполнения плагина
26+
//
27+
Функция Приоритет() Экспорт
28+
Возврат 0;
29+
КонецФункции
30+
31+
// Возвращает описание плагина
32+
//
33+
// Возвращаемое значение:
34+
// Строка - описание функциональности плагина
35+
//
36+
Функция Описание() Экспорт
37+
Возврат "Плагин удаляет информацию о поддержке.
38+
|Удаляет файлы конфигураций поставщика поддержки (*.cf) и очищает файл настроек поддержки (ParentConfiguration.bin).";
39+
КонецФункции
40+
41+
// Возвращает подробную справку к плагину
42+
//
43+
// Возвращаемое значение:
44+
// Строка - подробная справка для плагина
45+
//
46+
Функция Справка() Экспорт
47+
Возврат "Плагин удаляет информацию о поддержке.
48+
|Удаляет файлы конфигураций поставщика поддержки (*.cf) и очищает файл настроек поддержки (ParentConfiguration.bin).";
49+
КонецФункции
50+
51+
// Возвращает имя плагина
52+
//
53+
// Возвращаемое значение:
54+
// Строка - имя плагина при подключении
55+
//
56+
Функция Имя() Экспорт
57+
Возврат "drop-support";
58+
КонецФункции
59+
60+
// Возвращает имя лога плагина
61+
//
62+
// Возвращаемое значение:
63+
// Строка - имя лога плагина
64+
//
65+
Функция ИмяЛога() Экспорт
66+
Возврат СтрШаблон("oscript.lib.gitsync.plugins.%1", Имя());
67+
КонецФункции
68+
69+
#КонецОбласти
70+
71+
#Область Подписки_на_события
72+
73+
Процедура ПриАктивизации(СтандартныйОбработчик) Экспорт
74+
75+
Обработчик = СтандартныйОбработчик;
76+
77+
КонецПроцедуры
78+
79+
Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации) Экспорт
80+
81+
ТекущаяКоманда = ИмяКоманды;
82+
83+
Лог.Отладка("Ищу команду <%1> в списке поддерживаемых", ИмяКоманды);
84+
Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда
85+
Возврат;
86+
КонецЕсли;
87+
88+
КонецПроцедуры
89+
90+
Процедура ПриПолученииПараметров(ПараметрыКоманды) Экспорт
91+
92+
КонецПроцедуры
93+
94+
Процедура ПередВыгрузкойКонфигурациюВИсходники(Конфигуратор,
95+
КаталогРабочейКопии,
96+
КаталогВыгрузки,
97+
ПутьКХранилищу,
98+
НомерВерсии) Экспорт
99+
100+
УдалитьИнформациюОПоддержке(КаталогРабочейКопии);
101+
102+
КонецПроцедуры
103+
104+
Процедура ПослеВыгрузкиКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки) Экспорт
105+
106+
УдалитьИнформациюОПоддержке(КаталогВыгрузки);
107+
108+
КонецПроцедуры
109+
110+
Процедура ПередКоммитом(КаталогРабочейКопии, Комментарий, Автор, Дата) Экспорт
111+
112+
КорневойКаталогГит = КорневойКаталогГит(КаталогРабочейКопии);
113+
114+
Если НЕ ЗначениеЗаполнено(КорневойКаталогГит) Тогда
115+
Лог.Предупреждение("Каталог ""%1"" не является репозитарием git!", КаталогРабочейКопии);
116+
Возврат;
117+
КонецЕсли;
118+
119+
КаталогПоддержки = ОбъединитьПути(КаталогРабочейКопии, "Ext", "ParentConfigurations");
120+
ФайлИгнорируемыхИзменений = Новый Файл(ОбъединитьПути(КорневойКаталогГит, ".gitignore"));
121+
ТекстИгнорируемыхИзменений = Новый ТекстовыйДокумент();
122+
123+
Если ФайлИгнорируемыхИзменений.Существует() И ФайлИгнорируемыхИзменений.ЭтоФайл() Тогда
124+
ТекстИгнорируемыхИзменений.Прочитать(ФайлИгнорируемыхИзменений.ПолноеИмя);
125+
КонецЕсли;
126+
127+
ОтносительныйПуть = СтрШаблон("%1%2*.cf",
128+
СтрЗаменить(КаталогПоддержки, КорневойКаталогГит, ""),
129+
ПолучитьРазделительПути());
130+
131+
Для НомерСтроки = 1 По ТекстИгнорируемыхИзменений.КоличествоСтрок() Цикл
132+
ТекСтрока = ТекстИгнорируемыхИзменений.ПолучитьСтроку(НомерСтроки);
133+
Если СтрНайти(ТекСтрока, ОтносительныйПуть) > 0 Тогда
134+
Возврат;
135+
КонецЕсли;
136+
КонецЦикла;
137+
138+
ТекстИгнорируемыхИзменений.ДобавитьСтроку(ОтносительныйПуть);
139+
ТекстИгнорируемыхИзменений.Записать(ФайлИгнорируемыхИзменений.ПолноеИмя);
140+
141+
ЗакоммититьФайлИгнорируемыхИзменений = Истина;
142+
143+
КонецПроцедуры
144+
145+
Процедура ПриКоммите(ГитРепозиторий,
146+
Комментарий,
147+
ПроиндексироватьОтслеживаемыеФайлы,
148+
ИмяФайлаКомментария,
149+
АвторДляГит,
150+
ДатаДляГит,
151+
Коммитер,
152+
ДатаКоммитера) Экспорт
153+
154+
Если НЕ ЗакоммититьФайлИгнорируемыхИзменений Тогда
155+
Возврат;
156+
КонецЕсли;
157+
158+
РабочийКаталог = ГитРепозиторий.ПолучитьРабочийКаталог();
159+
КорневойКаталогГит = КорневойКаталогГит(РабочийКаталог);
160+
161+
Если НЕ ЗначениеЗаполнено(КорневойКаталогГит) Тогда
162+
Лог.Предупреждение("Каталог ""%1"" не является репозитарием git!", РабочийКаталог);
163+
Возврат;
164+
КонецЕсли;
165+
166+
ФайлИгнорируемыхИзменений = Новый Файл(ОбъединитьПути(КорневойКаталогГит, ".gitignore"));
167+
168+
ПараметрыКомандыГит = Новый Массив();
169+
ПараметрыКомандыГит.Добавить("add");
170+
ПараметрыКомандыГит.Добавить("-A");
171+
ПараметрыКомандыГит.Добавить(ФайлИгнорируемыхИзменений.ПолноеИмя);
172+
173+
ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыГит);
174+
175+
КонецПроцедуры
176+
177+
#КонецОбласти
178+
179+
#Область Вспомогательные_процедуры_и_функции
180+
181+
// Функция возвращает путь к корневому каталогу репозитария git
182+
//
183+
// Параметры:
184+
// КаталогРабочейКопии - Строка - проверяемый каталог
185+
//
186+
// Возвращаемое значение:
187+
// Строка - путь к корневому каталогу репозитария git
188+
// если пустая строка, то каталог не является репозитарием git
189+
//
190+
Функция КорневойКаталогГит(Знач КаталогРабочейКопии)
191+
192+
ТекущийКаталог = Новый Файл(КаталогРабочейКопии);
193+
194+
ЭтоКорневойКаталог = (ТекущийКаталог.ПолноеИмя = "/"
195+
ИЛИ Прав(ТекущийКаталог.ПолноеИмя, 1) = ":"
196+
ИЛИ Прав(ТекущийКаталог.ПолноеИмя, 2) = ":/"
197+
ИЛИ Прав(ТекущийКаталог.ПолноеИмя, 2) = ":\");
198+
199+
Если ЭтоКорневойКаталог Тогда
200+
Возврат "";
201+
КонецЕсли;
202+
203+
СлужебныйКаталогГит = Новый Файл(ОбъединитьПути(ТекущийКаталог.ПолноеИмя, ".git"));
204+
205+
Если СлужебныйКаталогГит.Существует() И СлужебныйКаталогГит.ЭтоКаталог() Тогда
206+
Возврат ТекущийКаталог.ПолноеИмя;
207+
Иначе
208+
Возврат КорневойКаталогГит(ТекущийКаталог.Путь);
209+
КонецЕсли;
210+
211+
КонецФункции // КорневойКаталогГит()
212+
213+
// Процедура удаляет файлы конфигураций поставщика (*.cf)
214+
// и очищает информацию о поддержке в файле ParentConfigurations.bin
215+
//
216+
// Параметры:
217+
// КаталогРабочейКопии - Строка - обрабатываемый каталог
218+
//
219+
Процедура УдалитьИнформациюОПоддержке(КаталогРабочейКопии)
220+
221+
КаталогОбщихДанныхКонфигурации = ОбъединитьПути(КаталогРабочейКопии, "Ext");
222+
КаталогПоддержки = ОбъединитьПути(КаталогОбщихДанныхКонфигурации, "ParentConfigurations");
223+
ФайлыПоставщика = НайтиФайлы(КаталогПоддержки, "*.cf");
224+
225+
Для Каждого ТекФайлПоставщика Из ФайлыПоставщика Цикл
226+
Лог.Отладка("Удаляем файл поставщика ""%1"".", ТекФайлПоставщика.ПолноеИмя);
227+
УдалитьФайлы(ТекФайлПоставщика.ПолноеИмя);
228+
КонецЦикла;
229+
230+
ФайлПоддержки = Новый Файл(ОбъединитьПути(КаталогОбщихДанныхКонфигурации, "ParentConfigurations.bin"));
231+
ТекстПоддержки = Новый ТекстовыйДокумент();
232+
Если ФайлПоддержки.Существует() И ФайлПоддержки.ЭтоФайл() Тогда
233+
ТекстПоддержки.Прочитать(ФайлПоддержки.ПолноеИмя);
234+
КонецЕсли;
235+
236+
Если ТекстПоддержки.КоличествоСтрок() = 1 Тогда
237+
ТекСтрока = ТекстПоддержки.ПолучитьСтроку(1);
238+
Если СтрНайти(ТекСтрока, ТекстОтключеннойПоддержки()) > 0 Тогда
239+
Возврат;
240+
КонецЕсли;
241+
КонецЕсли;
242+
243+
ТекстПоддержки.УстановитьТекст(ТекстОтключеннойПоддержки());
244+
ТекстПоддержки.Записать(ФайлПоддержки.ПолноеИмя);
245+
Лог.Отладка("Отключена поддержка в файле ""%1"".", ФайлПоддержки.ПолноеИмя);
246+
247+
КонецПроцедуры // УдалитьИнформациюОПоддержке()
248+
249+
// Функция возвращает текст файла ParentConfigurations.bin для отключения поддержки
250+
//
251+
// Возвращаемое значение:
252+
// Строка - текст файла ParentConfigurations.bin для отключения поддержки
253+
//
254+
Функция ТекстОтключеннойПоддержки()
255+
256+
Возврат "{6,0,0,0,1,0}";
257+
258+
КонецФункции // ТекстОтключеннойПоддержки()
259+
260+
#КонецОбласти
261+
262+
Процедура Инициализация()
263+
264+
Лог = Логирование.ПолучитьЛог(ИмяЛога());
265+
266+
КомандыПлагина = Новый Массив;
267+
КомандыПлагина.Добавить("sync");
268+
269+
ЗакоммититьФайлИгнорируемыхИзменений = Ложь;
270+
271+
КонецПроцедуры
272+
273+
Инициализация();

0 commit comments

Comments
 (0)