Skip to content

Commit f2daa0e

Browse files
committed
#356: Контроль поведения через параметр командной строки.
1 parent 2c80919 commit f2daa0e

7 files changed

Lines changed: 81 additions & 13 deletions

File tree

src/cmd/gitsync.os

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@
4545
Приложение.Опция("domain-email", "localhost", "домен почты для пользователей git")
4646
.ВОкружении("GITSYNC_EMAIL GITSYNC_DOMAIN_EMAIL");
4747

48+
Приложение.Опция("ignore-broken-plugins", Ложь, "разрешить работу приложения при сломанных расширениях")
49+
.ВОкружении("GITSYNC_IGNORE_BROKEN_PLUGINS");
50+
4851
Приложение.ДобавитьКоманду("usage u", "Выводит примеры использования",
4952
Новый КомандаUsage);
5053
Приложение.ДобавитьКоманду("init i", "Инициализация структуры нового хранилища git. Подготовка к синхронизации",
@@ -72,6 +75,10 @@
7275

7376
Процедура ПередВыполнениемКоманды(Знач Команда) Экспорт
7477

78+
Если Команда.ЗначениеОпции("ignore-broken-plugins") = Истина Тогда
79+
ПараметрыПриложения.УстановитьПризнакПродолженияВыполненияПриОшибкахПлагинов(Истина);
80+
КонецЕсли;
81+
7582
ВерсияПлатформы = Команда.ЗначениеОпции("v8version");
7683
ПутьКПлатформе = Команда.ЗначениеОпции("v8-path");
7784
ВыводДополнительнойИнформации = Команда.ЗначениеОпции("verbose");
@@ -90,11 +97,10 @@
9097

9198
КонецПроцедуры
9299

93-
Процедура ВывестиПредупреждения()
94-
95-
Если ПараметрыПриложения.ЕстьОшибкиЗагрузкиПлагинов() Тогда
96-
Лог.Предупреждение("В загружаемых плагинах есть ошибка! Возможна неверная работа синхронизации!");
97-
КонецЕсли;
100+
Процедура ПослеВыполненияКоманды(Знач Команда) Экспорт
101+
102+
// В конце работы выводим предупреждение ещё раз
103+
ПараметрыПриложения.ПроверитьЗагрузкуПлагинов(Истина);
98104

99105
КонецПроцедуры
100106

@@ -103,14 +109,10 @@
103109
Лог = ПараметрыПриложения.Лог();
104110
ПараметрыПриложения.ПодготовитьПлагины();
105111

106-
ВывестиПредупреждения();
107-
108112
Попытка
109113

110114
ВыполнитьПриложение();
111115

112-
ВывестиПредупреждения();
113-
114116
Исключение
115117

116118
Лог.КритичнаяОшибка(ОписаниеОшибки());

src/cmd/Классы/КомандаClone.os

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232

3333
Процедура ВыполнитьКоманду(Знач Команда) Экспорт
3434

35+
ПараметрыПриложения.ПроверитьЗагрузкуПлагинов();
36+
3537
ПутьКХранилищу = Команда.ЗначениеАргумента("PATH");
3638
КаталогРабочейКопии = Команда.ЗначениеАргумента("WORKDIR");
3739
URLРепозитория = Команда.ЗначениеАргумента("URL");

src/cmd/Классы/КомандаInit.os

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030

3131
Процедура ВыполнитьКоманду(Знач Команда) Экспорт
3232

33+
ПараметрыПриложения.ПроверитьЗагрузкуПлагинов();
34+
3335
Лог = ПараметрыПриложения.Лог();
3436

3537
ПутьКХранилищу = Команда.ЗначениеАргумента("PATH");

src/cmd/Классы/КомандаSetVersion.os

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
КонецПроцедуры
1616

1717
Процедура ВыполнитьКоманду(Знач Команда) Экспорт
18+
19+
ПараметрыПриложения.ПроверитьЗагрузкуПлагинов();
1820

1921
Лог = ПараметрыПриложения.Лог();
2022

src/cmd/Классы/КомандаSync.os

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434

3535
Процедура ВыполнитьКоманду(Знач Команда) Экспорт
3636

37+
ПараметрыПриложения.ПроверитьЗагрузкуПлагинов();
38+
3739
Лог.Информация("Начало выполнение команды <sync>");
3840

3941
ПутьКХранилищу = Команда.ЗначениеАргумента("PATH");

src/cmd/Модули/ПараметрыПриложения.os

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
Перем МенеджерПлагинов;
1616
Перем ИмяФайлаПлагинов;
1717
Перем ЕстьОшибкаЗагрузкиПлагинов;
18+
Перем ПродолжитьВыполнениеПриОшибкахПлагинов;
1819

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

@@ -29,6 +30,7 @@
2930
ИмяФайлаНастройкиПриложения = "config.json";
3031
ИмяФайлаПлагинов = "plugins.json gitsync-plugins.json";
3132
МенеджерПлагинов = Новый МенеджерПлагинов;
33+
ПродолжитьВыполнениеПриОшибкахПлагинов = Ложь;
3234

3335
ОпределитьКаталогПлагинов();
3436

@@ -52,13 +54,31 @@
5254
Возврат ВключенныеПлагины;
5355
КонецЕсли;
5456

55-
JsonСтрока = РаботаСФайлами.ПрочитатьФайл(ПутьКФайлу);
57+
JsonСтрока = "";
58+
Попытка
59+
60+
JsonСтрока = РаботаСФайлами.ПрочитатьФайл(ПутьКФайлу);
61+
62+
Исключение
63+
64+
ЕстьОшибкаЗагрузкиПлагинов = Истина;
65+
ЛогПриложения.Предупреждение("Ошибка чтения настройки включения расширений <%1>: <%2>", ПутьКФайлу, ОписаниеОшибки());
66+
67+
КонецПопытки;
5668

5769
Если ПустаяСтрока(JsonСтрока) Тогда
5870
Возврат ВключенныеПлагины;
5971
КонецЕсли;
6072

61-
ДанныеФайла = РаботаСФайлами.ОбъектИзJson(JsonСтрока);
73+
ДанныеФайла = Новый Массив;
74+
Попытка
75+
ДанныеФайла = РаботаСФайлами.ОбъектИзJson(JsonСтрока);
76+
Исключение
77+
78+
ЕстьОшибкаЗагрузкиПлагинов = Истина;
79+
ЛогПриложения.Предупреждение("Ошибка чтения настройки включения расширений <%1>: <%2>", ПутьКФайлу, ОписаниеОшибки());
80+
81+
КонецПопытки;
6282

6383
Для каждого ДанныеПлагинаИзФайла Из ДанныеФайла Цикл
6484

@@ -362,4 +382,29 @@
362382

363383
КонецФункции
364384

385+
Процедура ПроверитьЗагрузкуПлагинов(Знач ПродолжитьВыполнение = Неопределено) Экспорт
386+
387+
Если ПродолжитьВыполнение = Неопределено Тогда
388+
ПродолжитьВыполнение = ПродолжитьВыполнениеПриОшибкахПлагинов;
389+
КонецЕсли;
390+
391+
Если ПараметрыПриложения.ЕстьОшибкиЗагрузкиПлагинов() Тогда
392+
393+
ТекстОшибки = "В загружаемых плагинах есть ошибка! Возможна неверная работа синхронизации!";
394+
Если ПродолжитьВыполнение Тогда
395+
ЛогПриложения.Предупреждение(ТекстОшибки);
396+
Иначе
397+
ЛогПриложения.КритичнаяОшибка(ТекстОшибки);
398+
ВызватьИсключение ТекстОшибки;
399+
КонецЕсли;
400+
401+
КонецЕсли;
402+
403+
КонецПроцедуры
404+
405+
Процедура УстановитьПризнакПродолженияВыполненияПриОшибкахПлагинов(Знач Признак = Истина) Экспорт
406+
ПродолжитьВыполнениеПриОшибкахПлагинов = Признак;
407+
КонецПроцедуры
408+
409+
365410
Инициализация();

src/core/Классы/internal/Классы/ПодключениеПлагиновКаталога.os

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,21 @@
106106
И ФайлКласса.ЭтоФайл() Тогда
107107
Идентификатор = Чтение.ЗначениеАтрибута("name");
108108
Если Не ПустаяСтрока(Идентификатор) Тогда
109-
ПодключитьСценарий(ФайлКласса.ПолноеИмя, Идентификатор);
110-
МассивПодключенныхПлагинов.Добавить(Идентификатор);
109+
110+
Попытка
111+
112+
ПодключитьСценарий(ФайлКласса.ПолноеИмя, Идентификатор);
113+
МассивПодключенныхПлагинов.Добавить(Идентификатор);
114+
115+
Исключение
116+
ТекстОшибкиЗагрузки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
117+
Лог.Предупреждение("Плагин <%1>, класс <%2> ошибка загрузки: <%3>",
118+
Путь,
119+
ФайлКласса.ПолноеИмя,
120+
ТекстОшибкиЗагрузки
121+
);
122+
КонецПопытки;
123+
111124
КонецЕсли;
112125
Иначе
113126
ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте";

0 commit comments

Comments
 (0)