Skip to content

Работа с конфигом в формате 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

Merged
merged 12 commits into from
Nov 23, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions config-example.json
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",

}
]
}
4 changes: 3 additions & 1 deletion packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

Описание.Имя("gitsync")
.Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта())
.ВерсияСреды("1.0.16")
.ВерсияСреды("1.0.17")
.ЗависитОт("logos")
.ЗависитОт("cmdline", "0.6.1")
.ЗависитОт("tempfiles")
Expand All @@ -13,11 +13,13 @@
.ЗависитОт("strings")
.ЗависитОт("1commands", "1.2.1")
.ЗависитОт("v8unpack")
.ЗависитОт("json", "1.0.0")
.ЗависитОт("fs")
.ВключитьФайл("src")
.ВключитьФайл("tests")
.ВключитьФайл("features")
.ВключитьФайл("bin")
.ВключитьФайл("config-example.xml")
.ВключитьФайл("config-example.json")
.ВключитьФайл("readme.md")
.ИсполняемыйФайл("src/gitsync.os");
4 changes: 2 additions & 2 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,11 +172,11 @@

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

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

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

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

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

Expand Down
2 changes: 1 addition & 1 deletion src/core/Классы/КомандаAll.os
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@

КонецЕсли;

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

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
////////////////////////////////////////////////////////////////////////////

#Использовать cmdline
#Использовать "core"

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


////////////////////////////////////////////////////////////////////////
// Программный интерфейс

Expand All @@ -32,9 +32,33 @@

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

Конфиг = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "xml-config.os"));
мНастройки = Конфиг.ПрочитатьНастройкиИзФайла(ФайлНастроек);
ФайлКонфига = Новый Файл(ФайлНастроек);
Расширение = ФайлКонфига.Расширение;

Если Расширение = ".xml" Тогда

ПрочитатьНастройкиИзФайлаXML(ФайлНастроек);

ИначеЕсли Расширение = ".json" Тогда

ПрочитатьНастройкиИзФайлаJSON(ФайлНастроек);

КонецЕсли;

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

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

Конфиг = Новый ЧтениеКонфигаXMLПакетнойСинхронизации(СоответствиеКлючамИПараметра());
мНастройки = Конфиг.ПрочитатьНастройкиИзФайла(ФайлНастроек);

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

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

Конфиг = Новый ЧтениеКонфигаJSONПакетнойСинхронизации(СоответствиеКлючамИПараметра());
мНастройки = Конфиг.ПрочитатьНастройкиИзФайла(ФайлНастроек);

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

////////////////////////////////////////////////////////////////////////
Expand All @@ -54,6 +78,10 @@
КонецПроцедуры

Функция ПреобразоватьЗначениеКБулево(ЗначениеПараметра)
Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда
Возврат ЗначениеПараметра;
КонецЕсли;

Если ЗначениеПараметра = "on" Тогда
Возврат Истина;
ИначеЕсли ЗначениеПараметра = "off" Тогда
Expand Down Expand Up @@ -103,3 +131,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,98 @@

#Использовать json

Перем мНастройки;
Перем СоответствиеКлючамИПараметра;

Процедура ПриСозданииОбъекта(ВходящиеСоответствиеКлючамИПараметра)

СоответствиеКлючамИПараметра = ВходящиеСоответствиеКлючамИПараметра;

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

Функция ПрочитатьФайл(Знач ИмяФайла)
ФайлСуществующий = Новый Файл(ИмяФайла);
Если Не ФайлСуществующий.Существует() Тогда
ВызватьИсключение "Неверная структура файла настроек / файл пустой";;
КонецЕсли;

Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8);
Рез = Чтение.Прочитать();
Чтение.Закрыть();
Возврат Рез;
КонецФункции // ПрочитатьФайл()

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

мНастройки = Новый Структура;

JsonСтрока = ПрочитатьФайл(ФайлНастроек);

ПарсерJSON = Новый ПарсерJSON();
ПараметрыJSON = ПарсерJSON.ПрочитатьJSON(JsonСтрока);

ВсеНастройки = ПараметрыJSON["gitsync-options"];
ГлобальныеНастройки = ВсеНастройки["global"];

Для Каждого КлючИЗначение Из ГлобальныеНастройки Цикл
Ключ = СоответствиеКлючамИПараметра[КлючИЗначение.Ключ];

Если НЕ Ключ = Неопределено Тогда
мНастройки.Вставить(Ключ, КлючИЗначение.Значение);
КонецЕсли;

КонецЦикла;

мНастройки.Вставить("Репозитарии", Новый Массив);

МассивРепозиториев = ВсеНастройки["repositories"];

Для Каждого Репозиторий Из МассивРепозиториев Цикл

ПрочитатьНастройкиРепозитория(Репозиторий);

КонецЦикла;

Возврат мНастройки;

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

Процедура ПрочитатьНастройкиРепозитория(Знач СтруктураНастроекРепозитория )

Репо = Новый Структура;

мНастройки.Репозитарии.Добавить(Репо);

Для Каждого КлючИЗначение Из СтруктураНастроекРепозитория Цикл

Ключ = СоответствиеКлючамИПараметра[КлючИЗначение.Ключ];

Если НЕ Ключ = Неопределено Тогда
Репо.Вставить(Ключ, КлючИЗначение.Значение);
КонецЕсли;

КонецЦикла;

Для Каждого ГлобальнаяНастройка Из мНастройки Цикл

Ключ = ГлобальнаяНастройка.Ключ;

Если ГлобальнаяНастройка.Ключ = "Репозитарии" Тогда
Продолжить
КонецЕсли;

ЕстьСвояНастройка = Репо.Свойство(Ключ);

Если НЕ ЕстьСвояНастройка
ИЛИ ЕстьСвояНастройка и ПустаяСтрока(Репо[Ключ]) Тогда

Репо.Вставить(Ключ, ГлобальнаяНастройка.Значение);
КонецЕсли;

КонецЦикла

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

Функция СтрокаНекорректнаяСтруктураНастроек()
Возврат "Некорректная структура файла настроек";
КонецФункции
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@

Перем мНастройки;
перем СоответствиеКлючамИПараметра;

Процедура ПриСозданииОбъекта(ВходящиеСоответствиеКлючамИПараметра)

СоответствиеКлючамИПараметра = ВходящиеСоответствиеКлючамИПараметра;

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

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

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

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

Если КлючИЗначение.Ключ = "email-domain" Тогда
Ключ = "ДоменПочтыДляGit";
ИначеЕсли КлючИЗначение.Ключ = "v8-version" Тогда
Ключ = "ПутьКПлатформе83";
ИначеЕсли КлючИЗначение.Ключ = "git-executable" Тогда
Ключ = "ПутьGit";
Ключ = СоответствиеКлючамИПараметра[КлючИЗначение.Ключ];

Если НЕ Ключ = Неопределено Тогда
мНастройки.Вставить(Ключ, КлючИЗначение.Значение);
Иначе
ВызватьИсключение НекорректнаяСтруктураНастроек();
ВызватьИсключение СтрокаНекорректнаяСтруктураНастроек();
КонецЕсли;

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

КонецЦикла;

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

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

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

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

Если КлючИЗначение.Ключ = "git-local-path" Тогда
Ключ = "КаталогВыгрузки";
ИначеЕсли КлючИЗначение.Ключ = "git-remote" Тогда
Ключ = "GitURL";
ИначеЕсли КлючИЗначение.Ключ = "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" Тогда
Ключ = "ПереименовыватьФайлМодуляОбычнойФормы";
Ключ = СоответствиеКлючамИПараметра[КлючИЗначение.Ключ];

Если НЕ Ключ = Неопределено Тогда
Репо.Вставить(Ключ, КлючИЗначение.Значение);
Иначе
ВызватьИсключение НекорректнаяСтруктураНастроек();
ВызватьИсключение СтрокаНекорректнаяСтруктураНастроек();
КонецЕсли;

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

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

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

Функция НекорректнаяСтруктураНастроек()
Функция СтрокаНекорректнаяСтруктураНастроек()
Возврат "Некорректная структура файла настроек";
КонецФункции
Loading