-
Notifications
You must be signed in to change notification settings - Fork 93
Работа с конфигом в формате JSON #95
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 8 commits
69f7003
5692abc
99a5bf0
3f348ca
e6428f4
f629d15
52252d6
0808da9
6be879a
17a4781
b7eab06
7f61cfe
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
{ | ||
"gitsync-options": | ||
{ | ||
"global": | ||
{ | ||
"email-domain": "server.com", | ||
"v8-version": "8.3.10", | ||
"git-executable": "git" | ||
} | ||
}, | ||
"repositories" : [ | ||
{ | ||
"name" : "test", | ||
"git-local-path": "Путь", | ||
"git-remote": "адрес2", | ||
"v8-storage-dir": "каталог2", | ||
"process-fatform-modules": "on", | ||
"push-every-n-commits": 5, | ||
"auto-set-tags": "on", | ||
"stop-if-empty-comment": "on", | ||
"check-authors": "on" | ||
//"email-domain", | ||
//"v8-version", | ||
//"git-executable", | ||
}, | ||
{ | ||
"name" : "test2", | ||
"git-local-path": "Путь2", | ||
"git-remote": "адрес2", | ||
"v8-storage-dir": "каталог2", | ||
"process-fatform-modules": "on", | ||
"push-every-n-commits": 5, | ||
"auto-set-tags": "on", | ||
"stop-if-empty-comment": "on", | ||
"check-authors": "on" | ||
//"email-domain", | ||
//"v8-version", | ||
//"git-executable", | ||
|
||
} | ||
] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,13 +6,13 @@ | |
//////////////////////////////////////////////////////////////////////////// | ||
|
||
#Использовать cmdline | ||
#Использовать "core" | ||
|
||
Перем мПараметрыКоманды; | ||
Перем мДополнительныеПараметры; | ||
Перем мНастройки; | ||
Перем мФлагПринудительнойСинхронизации; | ||
|
||
|
||
//////////////////////////////////////////////////////////////////////// | ||
// Программный интерфейс | ||
|
||
|
@@ -32,9 +32,35 @@ | |
|
||
Процедура ПрочитатьНастройкиИзФайла(Знач ФайлНастроек) | ||
|
||
Конфиг = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "xml-config.os")); | ||
мНастройки = Конфиг.ПрочитатьНастройкиИзФайла(ФайлНастроек); | ||
ФайлКонфига = Новый Файл(ФайлНастроек); | ||
Расширение = ФайлКонфига.Расширение; | ||
|
||
Если Расширение = ".xml" Тогда | ||
|
||
ПрочитатьНастройкиИзФайлаXML(ФайлНастроек); | ||
|
||
ИначеЕсли Расширение = ".json" Тогда | ||
|
||
ПрочитатьНастройкиИзФайлаJSON(ФайлНастроек); | ||
|
||
КонецЕсли; | ||
|
||
КонецПроцедуры | ||
|
||
Процедура ПрочитатьНастройкиИзФайлаXML(Знач ФайлНастроек) | ||
|
||
Конфиг = Новый ЧтениеКонфигаXMLПакетнойСинхронизации; | ||
Конфиг.СоответствиеКлючамИПараметра = СоответствиеКлючамИПараметра(); | ||
мНастройки = Конфиг.ПрочитатьНастройкиИзФайла(ФайлНастроек); | ||
|
||
КонецПроцедуры | ||
|
||
Процедура ПрочитатьНастройкиИзФайлаJSON(Знач ФайлНастроек) | ||
|
||
Конфиг = Новый ЧтениеКонфигаJSONПакетнойСинхронизации; | ||
Конфиг.СоответствиеКлючамИПараметра = СоответствиеКлючамИПараметра(); | ||
|
||
мНастройки = Конфиг.ПрочитатьНастройкиИзФайла(ФайлНастроек); | ||
|
||
КонецПроцедуры | ||
|
||
//////////////////////////////////////////////////////////////////////// | ||
|
@@ -54,6 +80,10 @@ | |
КонецПроцедуры | ||
|
||
Функция ПреобразоватьЗначениеКБулево(ЗначениеПараметра) | ||
Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда | ||
Возврат ЗначениеПараметра; | ||
КонецЕсли; | ||
|
||
Если ЗначениеПараметра = "on" Тогда | ||
Возврат Истина; | ||
ИначеЕсли ЗначениеПараметра = "off" Тогда | ||
|
@@ -103,3 +133,24 @@ | |
Функция ИмяФайлаБазыХранилища(Знач Каталог) | ||
Возврат ОбъединитьПути(Каталог, "1cv8ddb.1CD"); | ||
КонецФункции | ||
|
||
Функция СоответствиеКлючамИПараметра() Экспорт | ||
|
||
СоответствиеКлючамИПараметра = Новый Соответствие(); | ||
СоответствиеКлючамИПараметра.Вставить("git-local-path", "КаталогВыгрузки"); | ||
СоответствиеКлючамИПараметра.Вставить("git-remote", "GitURL"); | ||
СоответствиеКлючамИПараметра.Вставить("name", "Имя"); | ||
СоответствиеКлючамИПараметра.Вставить("v8-storage-dir", "КаталогХранилища1С"); | ||
СоответствиеКлючамИПараметра.Вставить("email-domain", "ДоменПочтыДляGit"); | ||
СоответствиеКлючамИПараметра.Вставить("v8-version", "ПутьКПлатформе83"); | ||
СоответствиеКлючамИПараметра.Вставить("git-executable", "ПутьGit"); | ||
СоответствиеКлючамИПараметра.Вставить("push-every-n-commits", "КоличествоКоммитовДоPush"); | ||
СоответствиеКлючамИПараметра.Вставить("check-authors", "ПроверитьАвторовХранилища"); | ||
СоответствиеКлючамИПараметра.Вставить("stop-if-empty-comment", "ПрерватьВыполнениеБезКомментарияКВерсии"); | ||
СоответствиеКлючамИПараметра.Вставить("auto-set-tags", "АвтоматическаяУстановкаТэговПоВерсиям"); | ||
СоответствиеКлючамИПараметра.Вставить("process-fatform-modules", "ПереименовыватьФайлМодуляОбычнойФормы"); | ||
|
||
Возврат СоответствиеКлючамИПараметра; | ||
|
||
|
||
КонецФункции | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
| ||
#Использовать json | ||
|
||
Перем мНастройки; | ||
Перем СоответствиеКлючамИПараметра Экспорт; | ||
|
||
Функция ПрочитатьФайл(Знач ИмяФайла) | ||
ФайлСуществующий = Новый Файл(ИмяФайла); | ||
Если Не ФайлСуществующий.Существует() Тогда | ||
ВызватьИсключение "Неверная структура файла настроек / файл пустой";; | ||
КонецЕсли; | ||
|
||
Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8); | ||
Рез = Чтение.Прочитать(); | ||
Чтение.Закрыть(); | ||
Возврат Рез; | ||
КонецФункции // ПрочитатьФайл() | ||
|
||
Функция ПрочитатьНастройкиИзФайла(Знач ФайлНастроек) Экспорт | ||
|
||
мНастройки = Новый Структура; | ||
|
||
JsonСтрока = ПрочитатьФайл(ФайлНастроек); | ||
JsonСтрока = ВырезатьКомментарииИзТекстаJSON(JsonСтрока); | ||
|
||
ПарсерJSON = Новый ПарсерJSON(); | ||
ПараметрыJSON = ПарсерJSON.ПрочитатьJSON(JsonСтрока); | ||
|
||
ВсеНастройки = ПараметрыJSON["gitsync-options"]; | ||
ГлобальныеНастройки = ВсеНастройки["global"]; | ||
|
||
Для Каждого КлючИЗначение Из ГлобальныеНастройки Цикл | ||
Ключ = СоответствиеКлючамИПараметра[КлючИЗначение.Ключ]; | ||
|
||
Если НЕ Ключ = Неопределено Тогда | ||
мНастройки.Вставить(Ключ, КлючИЗначение.Значение); | ||
КонецЕсли; | ||
|
||
КонецЦикла; | ||
|
||
мНастройки.Вставить("Репозитарии", Новый Массив); | ||
|
||
МассивРепозиториев = ВсеНастройки["repositories"]; | ||
|
||
Для Каждого Репозиторий Из МассивРепозиториев Цикл | ||
|
||
ПрочитатьНастройкиРепозитория(Репозиторий); | ||
|
||
КонецЦикла; | ||
|
||
Возврат мНастройки; | ||
|
||
КонецФункции | ||
|
||
|
||
Функция ВырезатьКомментарииИзТекстаJSON(Знач JsonСтрока) | ||
|
||
// вырезаем обычные комменты типа "// комментарий" | ||
Регулярка = Новый РегулярноеВыражение("(^\/\/.*$)"); | ||
Рез = Регулярка.Заменить(JsonСтрока, "$0" ); | ||
|
||
// вырезаем комменты после строки, например, "строка //комментарий" | ||
Регулярка = Новый РегулярноеВыражение("(^.*)(\/\/.*$)"); | ||
Рез = Регулярка.Заменить(Рез, "$1" ); | ||
|
||
Возврат Рез; | ||
|
||
КонецФункции // ВырезатьКомментарииИзТекстаJSON() | ||
|
||
Процедура ПрочитатьНастройкиРепозитория(Знач СтруктураНастроекРепозитория ) | ||
|
||
Репо = Новый Структура; | ||
|
||
мНастройки.Репозитарии.Добавить(Репо); | ||
|
||
Для Каждого КлючИЗначение Из СтруктураНастроекРепозитория Цикл | ||
|
||
Ключ = СоответствиеКлючамИПараметра[КлючИЗначение.Ключ]; | ||
|
||
Если НЕ Ключ = Неопределено Тогда | ||
Репо.Вставить(Ключ, КлючИЗначение.Значение); | ||
КонецЕсли; | ||
|
||
КонецЦикла; | ||
|
||
Для Каждого ГлобальнаяНастройка Из мНастройки Цикл | ||
|
||
Ключ = ГлобальнаяНастройка.Ключ; | ||
|
||
Если ГлобальнаяНастройка.Ключ = "Репозитарии" Тогда | ||
Продолжить | ||
КонецЕсли; | ||
|
||
ЕстьСвояНастройка = Репо.Свойство(Ключ); | ||
|
||
Если НЕ ЕстьСвояНастройка | ||
ИЛИ ЕстьСвояНастройка и ПустаяСтрока(Репо[Ключ]) Тогда | ||
|
||
Репо.Вставить(Ключ, ГлобальнаяНастройка.Значение); | ||
КонецЕсли; | ||
|
||
КонецЦикла | ||
|
||
КонецПроцедуры | ||
|
||
Функция СтрокаНекорректнаяСтруктураНастроек() | ||
Возврат "Некорректная структура файла настроек"; | ||
КонецФункции |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
И здесь код упростится