Skip to content

Commit f58d2d7

Browse files
authored
Merge pull request #95 from Khorevaa/json-config
Работа с конфигом в формате JSON
2 parents 1387bc3 + 7f61cfe commit f58d2d7

9 files changed

+341
-49
lines changed

config-example.json

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{
2+
"gitsync-options":
3+
{
4+
"global":
5+
{
6+
"email-domain": "server.com",
7+
"v8-version": "8.3.10",
8+
"git-executable": "git"
9+
}
10+
},
11+
"repositories" : [
12+
{
13+
"name" : "test",
14+
"git-local-path": "Путь",
15+
"git-remote": "адрес2",
16+
"v8-storage-dir": "каталог2",
17+
"process-fatform-modules": "on",
18+
"push-every-n-commits": 5,
19+
"auto-set-tags": "on",
20+
"stop-if-empty-comment": "on",
21+
"check-authors": "on"
22+
//"email-domain",
23+
//"v8-version",
24+
//"git-executable",
25+
},
26+
{
27+
"name" : "test2",
28+
"git-local-path": "Путь2",
29+
"git-remote": "адрес2",
30+
"v8-storage-dir": "каталог2",
31+
"process-fatform-modules": "on",
32+
"push-every-n-commits": 5,
33+
"auto-set-tags": "on",
34+
"stop-if-empty-comment": "on",
35+
"check-authors": "on"
36+
//"email-domain",
37+
//"v8-version",
38+
//"git-executable",
39+
40+
}
41+
]
42+
}

packagedef

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
Описание.Имя("gitsync")
55
.Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта())
6-
.ВерсияСреды("1.0.16")
6+
.ВерсияСреды("1.0.17")
77
.ЗависитОт("logos")
88
.ЗависитОт("cmdline", "0.6.1")
99
.ЗависитОт("tempfiles")
@@ -13,11 +13,13 @@
1313
.ЗависитОт("strings")
1414
.ЗависитОт("1commands", "1.2.1")
1515
.ЗависитОт("v8unpack")
16+
.ЗависитОт("json", "1.0.0")
1617
.ЗависитОт("fs")
1718
.ВключитьФайл("src")
1819
.ВключитьФайл("tests")
1920
.ВключитьФайл("features")
2021
.ВключитьФайл("bin")
2122
.ВключитьФайл("config-example.xml")
23+
.ВключитьФайл("config-example.json")
2224
.ВключитьФайл("readme.md")
2325
.ИсполняемыйФайл("src/gitsync.os");

readme.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,11 @@
173173

174174
# Синхронизация по нескольким хранилищам
175175

176-
Зачастую удобно настроить регламентную (по расписанию) синхронизацию сразу по нескольким хранилищам 1С. Для этого необходимо подготовить конфигурационный файл с параметрами синхронизации ([пример файла](config-example.xml))
176+
Зачастую удобно настроить регламентную (по расписанию) синхронизацию сразу по нескольким хранилищам 1С. Для этого необходимо подготовить конфигурационный файл с параметрами синхронизации ([пример файла xml](config-example.xml) [пример файла json](config-example.json))
177177

178178
Далее необходимо запустить gitsync с командой all
179179

180-
gitsync all <путь к xml-файлу конфигурации>
180+
gitsync all <путь к файлу конфигурации (xml или json)>
181181

182182
Подробнее о параметрах команды `all` можно прочитать, запустив `gitsync help all`
183183

src/core/Классы/КомандаAll.os

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060

6161
КонецЕсли;
6262

63-
Контроллер = ЗагрузитьСценарий(ОбъединитьПути(КаталогRoot, "multi-controller.os"));
63+
Контроллер = Новый КонтроллерПакетнойСинхронизации;
6464

6565
Пока Истина Цикл
6666

src/multi-controller.os renamed to src/core/Классы/КонтроллерПакетнойСинхронизации.os

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
////////////////////////////////////////////////////////////////////////////
77

88
#Использовать cmdline
9-
#Использовать "core"
109

1110
Перем мПараметрыКоманды;
1211
Перем мДополнительныеПараметры;
1312
Перем мНастройки;
1413
Перем мФлагПринудительнойСинхронизации;
1514

15+
1616
////////////////////////////////////////////////////////////////////////
1717
// Программный интерфейс
1818

@@ -32,9 +32,33 @@
3232

3333
Процедура ПрочитатьНастройкиИзФайла(Знач ФайлНастроек)
3434

35-
Конфиг = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "xml-config.os"));
36-
мНастройки = Конфиг.ПрочитатьНастройкиИзФайла(ФайлНастроек);
35+
ФайлКонфига = Новый Файл(ФайлНастроек);
36+
Расширение = ФайлКонфига.Расширение;
37+
38+
Если Расширение = ".xml" Тогда
39+
40+
ПрочитатьНастройкиИзФайлаXML(ФайлНастроек);
41+
42+
ИначеЕсли Расширение = ".json" Тогда
43+
44+
ПрочитатьНастройкиИзФайлаJSON(ФайлНастроек);
45+
46+
КонецЕсли;
47+
48+
КонецПроцедуры
3749

50+
Процедура ПрочитатьНастройкиИзФайлаXML(Знач ФайлНастроек)
51+
52+
Конфиг = Новый ЧтениеКонфигаXMLПакетнойСинхронизации(СоответствиеКлючамИПараметра());
53+
мНастройки = Конфиг.ПрочитатьНастройкиИзФайла(ФайлНастроек);
54+
55+
КонецПроцедуры
56+
57+
Процедура ПрочитатьНастройкиИзФайлаJSON(Знач ФайлНастроек)
58+
59+
Конфиг = Новый ЧтениеКонфигаJSONПакетнойСинхронизации(СоответствиеКлючамИПараметра());
60+
мНастройки = Конфиг.ПрочитатьНастройкиИзФайла(ФайлНастроек);
61+
3862
КонецПроцедуры
3963

4064
////////////////////////////////////////////////////////////////////////
@@ -54,6 +78,10 @@
5478
КонецПроцедуры
5579

5680
Функция ПреобразоватьЗначениеКБулево(ЗначениеПараметра)
81+
Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда
82+
Возврат ЗначениеПараметра;
83+
КонецЕсли;
84+
5785
Если ЗначениеПараметра = "on" Тогда
5886
Возврат Истина;
5987
ИначеЕсли ЗначениеПараметра = "off" Тогда
@@ -103,3 +131,24 @@
103131
Функция ИмяФайлаБазыХранилища(Знач Каталог)
104132
Возврат ОбъединитьПути(Каталог, "1cv8ddb.1CD");
105133
КонецФункции
134+
135+
Функция СоответствиеКлючамИПараметра() Экспорт
136+
137+
СоответствиеКлючамИПараметра = Новый Соответствие();
138+
СоответствиеКлючамИПараметра.Вставить("git-local-path", "КаталогВыгрузки");
139+
СоответствиеКлючамИПараметра.Вставить("git-remote", "GitURL");
140+
СоответствиеКлючамИПараметра.Вставить("name", "Имя");
141+
СоответствиеКлючамИПараметра.Вставить("v8-storage-dir", "КаталогХранилища1С");
142+
СоответствиеКлючамИПараметра.Вставить("email-domain", "ДоменПочтыДляGit");
143+
СоответствиеКлючамИПараметра.Вставить("v8-version", "ПутьКПлатформе83");
144+
СоответствиеКлючамИПараметра.Вставить("git-executable", "ПутьGit");
145+
СоответствиеКлючамИПараметра.Вставить("push-every-n-commits", "КоличествоКоммитовДоPush");
146+
СоответствиеКлючамИПараметра.Вставить("check-authors", "ПроверитьАвторовХранилища");
147+
СоответствиеКлючамИПараметра.Вставить("stop-if-empty-comment", "ПрерватьВыполнениеБезКомментарияКВерсии");
148+
СоответствиеКлючамИПараметра.Вставить("auto-set-tags", "АвтоматическаяУстановкаТэговПоВерсиям");
149+
СоответствиеКлючамИПараметра.Вставить("process-fatform-modules", "ПереименовыватьФайлМодуляОбычнойФормы");
150+
151+
Возврат Новый ФиксированноеСоответствие(СоответствиеКлючамИПараметра);
152+
153+
КонецФункции
154+
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
2+
#Использовать json
3+
4+
Перем мНастройки;
5+
Перем СоответствиеКлючамИПараметра;
6+
7+
Процедура ПриСозданииОбъекта(ВходящиеСоответствиеКлючамИПараметра)
8+
9+
СоответствиеКлючамИПараметра = ВходящиеСоответствиеКлючамИПараметра;
10+
11+
КонецПроцедуры
12+
13+
Функция ПрочитатьФайл(Знач ИмяФайла)
14+
ФайлСуществующий = Новый Файл(ИмяФайла);
15+
Если Не ФайлСуществующий.Существует() Тогда
16+
ВызватьИсключение "Неверная структура файла настроек / файл пустой";;
17+
КонецЕсли;
18+
19+
Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8);
20+
Рез = Чтение.Прочитать();
21+
Чтение.Закрыть();
22+
Возврат Рез;
23+
КонецФункции // ПрочитатьФайл()
24+
25+
Функция ПрочитатьНастройкиИзФайла(Знач ФайлНастроек) Экспорт
26+
27+
мНастройки = Новый Структура;
28+
29+
JsonСтрока = ПрочитатьФайл(ФайлНастроек);
30+
31+
ПарсерJSON = Новый ПарсерJSON();
32+
ПараметрыJSON = ПарсерJSON.ПрочитатьJSON(JsonСтрока);
33+
34+
ВсеНастройки = ПараметрыJSON["gitsync-options"];
35+
ГлобальныеНастройки = ВсеНастройки["global"];
36+
37+
Для Каждого КлючИЗначение Из ГлобальныеНастройки Цикл
38+
Ключ = СоответствиеКлючамИПараметра[КлючИЗначение.Ключ];
39+
40+
Если НЕ Ключ = Неопределено Тогда
41+
мНастройки.Вставить(Ключ, КлючИЗначение.Значение);
42+
КонецЕсли;
43+
44+
КонецЦикла;
45+
46+
мНастройки.Вставить("Репозитарии", Новый Массив);
47+
48+
МассивРепозиториев = ВсеНастройки["repositories"];
49+
50+
Для Каждого Репозиторий Из МассивРепозиториев Цикл
51+
52+
ПрочитатьНастройкиРепозитория(Репозиторий);
53+
54+
КонецЦикла;
55+
56+
Возврат мНастройки;
57+
58+
КонецФункции
59+
60+
Процедура ПрочитатьНастройкиРепозитория(Знач СтруктураНастроекРепозитория )
61+
62+
Репо = Новый Структура;
63+
64+
мНастройки.Репозитарии.Добавить(Репо);
65+
66+
Для Каждого КлючИЗначение Из СтруктураНастроекРепозитория Цикл
67+
68+
Ключ = СоответствиеКлючамИПараметра[КлючИЗначение.Ключ];
69+
70+
Если НЕ Ключ = Неопределено Тогда
71+
Репо.Вставить(Ключ, КлючИЗначение.Значение);
72+
КонецЕсли;
73+
74+
КонецЦикла;
75+
76+
Для Каждого ГлобальнаяНастройка Из мНастройки Цикл
77+
78+
Ключ = ГлобальнаяНастройка.Ключ;
79+
80+
Если ГлобальнаяНастройка.Ключ = "Репозитарии" Тогда
81+
Продолжить
82+
КонецЕсли;
83+
84+
ЕстьСвояНастройка = Репо.Свойство(Ключ);
85+
86+
Если НЕ ЕстьСвояНастройка
87+
ИЛИ ЕстьСвояНастройка и ПустаяСтрока(Репо[Ключ]) Тогда
88+
89+
Репо.Вставить(Ключ, ГлобальнаяНастройка.Значение);
90+
КонецЕсли;
91+
92+
КонецЦикла
93+
94+
КонецПроцедуры
95+
96+
Функция СтрокаНекорректнаяСтруктураНастроек()
97+
Возврат "Некорректная структура файла настроек";
98+
КонецФункции

src/xml-config.os renamed to src/core/Классы/ЧтениеКонфигаXMLПакетнойСинхронизации.os

Lines changed: 21 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11

22
Перем мНастройки;
3+
перем СоответствиеКлючамИПараметра;
4+
5+
Процедура ПриСозданииОбъекта(ВходящиеСоответствиеКлючамИПараметра)
6+
7+
СоответствиеКлючамИПараметра = ВходящиеСоответствиеКлючамИПараметра;
8+
9+
КонецПроцедуры
310

411
Функция ПрочитатьНастройкиИзФайла(Знач ФайлНастроек) Экспорт
512

@@ -10,7 +17,7 @@
1017
Попытка
1118
Чтение.ПерейтиКСодержимому();
1219
Если Чтение.ЛокальноеИмя <> "gitsync-options" Тогда
13-
ВызватьИсключение "Неверная структура файла настроек";
20+
ВызватьИсключение СтрокаНекорректнаяСтруктураНастроек();
1421
КонецЕсли;
1522

1623
Чтение.Прочитать();
@@ -34,17 +41,14 @@
3441
Пока Не (Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента и Чтение.ЛокальноеИмя = "global") Цикл
3542
КлючИЗначение = ПрочитатьОпцию(Чтение);
3643

37-
Если КлючИЗначение.Ключ = "email-domain" Тогда
38-
Ключ = "ДоменПочтыДляGit";
39-
ИначеЕсли КлючИЗначение.Ключ = "v8-version" Тогда
40-
Ключ = "ПутьКПлатформе83";
41-
ИначеЕсли КлючИЗначение.Ключ = "git-executable" Тогда
42-
Ключ = "ПутьGit";
44+
Ключ = СоответствиеКлючамИПараметра[КлючИЗначение.Ключ];
45+
46+
Если НЕ Ключ = Неопределено Тогда
47+
мНастройки.Вставить(Ключ, КлючИЗначение.Значение);
4348
Иначе
44-
ВызватьИсключение НекорректнаяСтруктураНастроек();
49+
ВызватьИсключение СтрокаНекорректнаяСтруктураНастроек();
4550
КонецЕсли;
4651

47-
мНастройки.Вставить(Ключ, КлючИЗначение.Значение);
4852

4953
КонецЦикла;
5054

@@ -56,7 +60,7 @@
5660
мНастройки.Вставить("Репозитарии", Новый Массив);
5761

5862
Если Чтение.ЛокальноеИмя <> "repositories" Тогда
59-
ВызватьИсключение НекорректнаяСтруктураНастроек();
63+
ВызватьИсключение СтрокаНекорректнаяСтруктураНастроек();
6064
КонецЕсли;
6165

6266
Чтение.Прочитать();
@@ -82,30 +86,12 @@
8286

8387
КлючИЗначение = ПрочитатьОпцию(Чтение);
8488

85-
Если КлючИЗначение.Ключ = "git-local-path" Тогда
86-
Ключ = "КаталогВыгрузки";
87-
ИначеЕсли КлючИЗначение.Ключ = "git-remote" Тогда
88-
Ключ = "GitURL";
89-
ИначеЕсли КлючИЗначение.Ключ = "v8-storage-dir" Тогда
90-
Ключ = "КаталогХранилища1С";
91-
ИначеЕсли КлючИЗначение.Ключ = "email-domain" Тогда
92-
Ключ = "ДоменПочтыДляGit";
93-
ИначеЕсли КлючИЗначение.Ключ = "v8-version" Тогда
94-
Ключ = "ПутьКПлатформе83";
95-
ИначеЕсли КлючИЗначение.Ключ = "git-executable" Тогда
96-
Ключ = "ПутьGit";
97-
ИначеЕсли КлючИЗначение.Ключ = "push-every-n-commits" Тогда
98-
Ключ = "КоличествоКоммитовДоPush";
99-
ИначеЕсли КлючИЗначение.Ключ = "check-authors" Тогда
100-
Ключ = "ПроверитьАвторовХранилища";
101-
ИначеЕсли КлючИЗначение.Ключ = "stop-if-empty-comment" Тогда
102-
Ключ = "ПрерватьВыполнениеБезКомментарияКВерсии";
103-
ИначеЕсли КлючИЗначение.Ключ = "auto-set-tags" Тогда
104-
Ключ = "АвтоматическаяУстановкаТэговПоВерсиям";
105-
ИначеЕсли КлючИЗначение.Ключ = "process-fatform-modules" Тогда
106-
Ключ = "ПереименовыватьФайлМодуляОбычнойФормы";
89+
Ключ = СоответствиеКлючамИПараметра[КлючИЗначение.Ключ];
90+
91+
Если НЕ Ключ = Неопределено Тогда
92+
Репо.Вставить(Ключ, КлючИЗначение.Значение);
10793
Иначе
108-
ВызватьИсключение НекорректнаяСтруктураНастроек();
94+
ВызватьИсключение СтрокаНекорректнаяСтруктураНастроек();
10995
КонецЕсли;
11096

11197
Если ПустаяСтрока(КлючИЗначение.Значение) и мНастройки.Свойство(Ключ) Тогда
@@ -133,7 +119,7 @@
133119
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
134120
Значение = "";
135121
Иначе
136-
ВызватьИсключение НекорректнаяСтруктураНастроек();
122+
ВызватьИсключение СтрокаНекорректнаяСтруктураНастроек();
137123
КонецЕсли;
138124

139125
Чтение.Прочитать();
@@ -142,6 +128,6 @@
142128

143129
КонецФункции
144130

145-
Функция НекорректнаяСтруктураНастроек()
131+
Функция СтрокаНекорректнаяСтруктураНастроек()
146132
Возврат "Некорректная структура файла настроек";
147133
КонецФункции

0 commit comments

Comments
 (0)