diff --git a/README.md b/README.md index d3945cc..a07f560 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ opm update -all ## Настройка прокси-сервера для скачивания пакетов -Настройка производится с помощью создания служебного файла [opm.cfg](./tests/fixtures/opm.cfg) данный файл настроек можно расположить по таким путям (список приведен в порядке убывания приоритета): +Настройка производится с помощью создания служебного файла [opm.cfg](./tests/fixtures/opm-example.cfg) данный файл настроек можно расположить по таким путям (список приведен в порядке убывания приоритета): - ```./opm.cfg``` - текущий каталог запуска + /opm.cfg - каталог настроек пользователя - linux: ```~/.opm.cfg```, **внимание файла должен называться с точкой ```.opm.cfg```** diff --git "a/features/step_definitions/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270.os" "b/features/step_definitions/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270.os" index 25e44b2..9aa5618 100644 --- "a/features/step_definitions/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270.os" +++ "b/features/step_definitions/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270.os" @@ -32,10 +32,8 @@ //я читаю настройки из файла "opm.cfg" Процедура ЯЧитаюНастройкиИзФайла(Знач ПутьФайла) Экспорт Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла)); - // Ожидаем.Что(Файл.Существует(), СтрШаблон("Ожидали, что файл <%1> существует, а это не так!", Файл.ПолноеИмя)).ЭтоИстина(); НастройкиOpm.СброситьНастройки(); НастроитьOpmИзФайла(Файл.ПолноеИмя); - // НастройкиOpm.УстановитьФайлНастроек(Файл.ПолноеИмя); Настройки = НастройкиOpm.ПолучитьНастройки(); БДД.СохранитьВКонтекст(КлючКонтекста(), Настройки); @@ -88,7 +86,7 @@ Если Не НастройкиПроксиЕсть = Неопределено Тогда - НастройкиПрокси = НастройкиOpmИзФайлов.Прокси; + НастройкиПрокси = НастройкиКакСтруктура(НастройкиOpmИзФайлов.Прокси); Сервер = ПолучитьЗначение(НастройкиПрокси, "Сервер", ""); Порт = Число(ПолучитьЗначение(НастройкиПрокси, "Порт", 0)); @@ -129,20 +127,15 @@ Индекс = 1; Для каждого ТекущийСерверПакетов Из СервераПакетов Цикл - - Сервер = ПолучитьЗначение(ТекущийСерверПакетов, "Сервер", ""); - Порт = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Порт", 80)); - ПутьНаСервере = ПолучитьЗначение(ТекущийСерверПакетов, "ПутьНаСервере", "/"); - РесурсПубликацииПакетов = ПолучитьЗначение(ТекущийСерверПакетов, "РесурсПубликацииПакетов", "/"); - Имя = ПолучитьЗначение(ТекущийСерверПакетов, "Имя", СтрШаблон("ДопСервер_%1",Индекс)); - Приоритет = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Приоритет", 0)); - - Если ПустаяСтрока(Сервер) Тогда + + Попытка + СерверПакетов = СерверыПакетов.ИзНастроек(НастройкиКакСтруктура(ТекущийСерверПакетов), Индекс); + Исключение Продолжить; - КонецЕсли; - - НастройкиOpm.ДобавитьТекущийСерверПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет); - Индекс = Индекс +1; + КонецПопытки; + + НастройкиOpm.ДобавитьСерверПакетов(СерверПакетов); + Индекс = Индекс + 1; КонецЦикла; @@ -153,16 +146,29 @@ Функция ПрочитатьФайлНастроек(Знач ПутьФайлаНастроек) Если НЕ Новый Файл(ПутьФайлаНастроек).Существует() Тогда - Возврат НОвый Соответствие; + Возврат Новый Структура; КонецЕсли; Текст = ПрочитатьФайл(ПутьФайлаНастроек); ЧтениеJSON = Новый ЧтениеJSON(); ЧтениеJSON.УстановитьСтроку(Текст); - Настройки = ПрочитатьJSON(ЧтениеJSON, Ложь); + НастройкиКакСоответствие = ПрочитатьJSON(ЧтениеJSON, Истина); ЧтениеJSON.Закрыть(); + + Возврат НастройкиКакСтруктура(НастройкиКакСоответствие); + +КонецФункции + +Функция НастройкиКакСтруктура(Знач НастройкиКакСоответствие) + Перем Настройки; + + Настройки = Новый Структура; + Для Каждого мЭлемент Из НастройкиКакСоответствие Цикл + Настройки.Вставить(мЭлемент.Ключ, мЭлемент.Значение); + КонецЦикла; + Возврат Настройки; КонецФункции diff --git a/packagedef b/packagedef index 72005f6..93455bb 100644 --- a/packagedef +++ b/packagedef @@ -19,6 +19,7 @@ Описание.Имя("opm") .Версия(ВерсияПродукта) .ВерсияСреды("1.8.3") + .ЗависитОт("strings", "0.5.0") .ЗависитОт("fs", "1.2.0") .ЗависитОт("asserts", "1.3.0") .ЗависитОт("fluent", "0.4.0") diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Push.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Push.os" index feda711..9a91d73 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Push.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Push.os" @@ -145,12 +145,18 @@ // Для настроек по умолчанию Сервер = КонстантыOpm.СерверУдаленногоХранилища; Ресурс = КонстантыOpm.РесурсПубликацииПакетов; + Авторизация = Неопределено; + ДополнительныеЗаголовки = Неопределено; + Таймаут = 600; Для Каждого НастройкаСервера Из ДоступныеСервераПакетов Цикл Если СтрСравнить(НастройкаСервера.Имя, ИмяСервераПакетов) = 0 Тогда Сервер = НастройкаСервера.Сервер; Ресурс = НастройкаСервера.РесурсПубликацииПакетов; + Авторизация = НастройкаСервера.Авторизация; + ДополнительныеЗаголовки = НастройкаСервера.ДополнительныеЗаголовки; + Таймаут = НастройкаСервера.Таймаут; Прервать; КонецЕсли; @@ -160,18 +166,27 @@ Лог.Отладка("Ресурс = %1", Ресурс); Заголовки = Новый Соответствие(); - Заголовки.Вставить("OAUTH-TOKEN", ТокенАвторизации); + Если ЗначениеЗаполнено(Авторизация) Тогда + Заголовки.Вставить("Authorization", ОбщегоНазначенияOpm.ПрименитьПеременныеСреды(Авторизация)); + Иначе + Заголовки.Вставить("OAUTH-TOKEN", ТокенАвторизации); + КонецЕсли; Заголовки.Вставить("FILE-NAME", ФайлПакета.Имя); Заголовки.Вставить("CHANNEL", Канал); + Если ЗначениеЗаполнено(ДополнительныеЗаголовки) Тогда + Для Каждого мЗаголовок Из ДополнительныеЗаголовки Цикл + Заголовки.Вставить(мЗаголовок.Ключ, ОбщегоНазначенияOpm.ПрименитьПеременныеСреды(мЗаголовок.Значение)); + КонецЦикла; + КонецЕсли; - Соединение = Новый HTTPСоединение(Сервер); + Соединение = Новый HTTPСоединение(Сервер,,,,, Таймаут); Запрос = Новый HTTPЗапрос(Ресурс, Заголовки); Запрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеФайла); Ответ = Соединение.ОтправитьДляОбработки(Запрос); ТелоОтвета = Ответ.ПолучитьТелоКакСтроку(); - Если Ответ.КодСостояния <> 200 Тогда + Если Не КодУспешнойОтправки(Ответ.КодСостояния) Тогда ВызватьИсключение ТелоОтвета; КонецЕсли; @@ -179,6 +194,15 @@ КонецПроцедуры +Функция КодУспешнойОтправки(Знач КодСостояния) + + Возврат КодСостояния = 200 // OK + Или КодСостояния = 201 // CREATED + Или КодСостояния = 202 // ACCEPTED + ; + +КонецФункции + Лог = Логирование.ПолучитьЛог("oscript.app.opm"); ДопустимыеИменаКаналов = Новый Структура; diff --git "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217Opm.os" "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217Opm.os" index 1a441ad..4545a45 100644 --- "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217Opm.os" +++ "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217Opm.os" @@ -18,7 +18,7 @@ Если Не НастройкиПроксиЕсть = Неопределено Тогда - НастройкиПрокси = НастройкиOpmИзФайлов.Прокси; + НастройкиПрокси = НастройкиКакСтруктура(НастройкиOpmИзФайлов.Прокси); Сервер = ПолучитьЗначение(НастройкиПрокси, "Сервер", ""); Порт = Число(ПолучитьЗначение(НастройкиПрокси, "Порт", 80)); @@ -57,21 +57,16 @@ Индекс = 1; Для каждого ТекущийСерверПакетов Из СервераПакетов Цикл - - Сервер = ПолучитьЗначение(ТекущийСерверПакетов, "Сервер", ""); - Порт = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Порт", 80)); - ПутьНаСервере = ПолучитьЗначение(ТекущийСерверПакетов, "ПутьНаСервере", "/"); - Имя = ПолучитьЗначение(ТекущийСерверПакетов, "Имя", СтрШаблон("ДопСервер_%1", Индекс)); - РесурсПубликацииПакетов = ПолучитьЗначение(ТекущийСерверПакетов, "РесурсПубликацииПакетов", "/"); - Приоритет = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Приоритет", 0)); - - Если ПустаяСтрока(Сервер) Тогда - Лог.Отладка("Для сервера <%1> не задан адрес", Индекс); + + Попытка + СерверПакетов = СерверыПакетов.ИзНастроек(НастройкиКакСтруктура(ТекущийСерверПакетов), Индекс); + Исключение + Лог.Отладка(ОписаниеОшибки()); Продолжить; - КонецЕсли; - - НастройкиOpm.ДобавитьСерверПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет); - Индекс = Индекс +1; + КонецПопытки; + + НастройкиOpm.ДобавитьСерверПакетов(СерверПакетов); + Индекс = Индекс + 1; КонецЦикла; @@ -176,7 +171,7 @@ Для каждого НастройкаСервера Из ТекущиеНастройки.СервераПакетов Цикл - МассивСерверовПакетов.Добавить(НастройкаСервера); + МассивСерверовПакетов.Добавить(НастройкаСервера.НастройкаДляВыгрузки()); КонецЦикла; @@ -222,11 +217,24 @@ ЧтениеJSON = Новый ЧтениеJSON(); ЧтениеJSON.УстановитьСтроку(Текст); - Настройки = ПрочитатьJSON(ЧтениеJSON, Ложь); + НастройкиКакСоответствие = ПрочитатьJSON(ЧтениеJSON, Истина); ЧтениеJSON.Закрыть(); - Возврат Настройки; + Возврат НастройкиКакСтруктура(НастройкиКакСоответствие); + +КонецФункции + +Функция НастройкиКакСтруктура(Знач НастройкиКакСоответствие) + + Перем Настройки; + + Настройки = Новый Структура; + Для Каждого мЭлемент Из НастройкиКакСоответствие Цикл + Настройки.Вставить(мЭлемент.Ключ, мЭлемент.Значение); + КонецЦикла; + Возврат Настройки; + КонецФункции Функция ПрочитатьФайл(Знач Путь) @@ -256,8 +264,10 @@ Функция СформироватьТекстНастроек(Знач Настройки) + НастройкиЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Unix, " "); + Json = Новый ЗаписьJSON(); - Json.УстановитьСтроку(); + Json.УстановитьСтроку(НастройкиЗаписи); ЗаписатьJSON(Json, Настройки); diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\276\320\273\321\203\321\207\320\265\320\275\320\270\321\217\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\276\320\273\321\203\321\207\320\265\320\275\320\270\321\217\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" index 3f83964..046b48b 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\276\320\273\321\203\321\207\320\265\320\275\320\270\321\217\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\276\320\273\321\203\321\207\320\265\320\275\320\270\321\217\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -200,8 +200,7 @@ Для каждого НастройкаСервера Из СервераПакетов Цикл - ТекущийСерверПакетов = СоздатьСерверПакетовПоНастройке(НастройкаСервера); - ИндексСерверовПакетов.Вставить(НастройкаСервера.Имя, ТекущийСерверПакетов); + ИндексСерверовПакетов.Вставить(НастройкаСервера.Имя, НастройкаСервера); КонецЦикла; @@ -227,17 +226,6 @@ КонецФункции -Функция СоздатьСерверПакетовПоНастройке(Знач НастройкаСервера) - - Возврат Новый СерверПакетов(НастройкаСервера.Имя, - НастройкаСервера.Сервер, - НастройкаСервера.ПутьНаСервере, - НастройкаСервера.РесурсПубликацииПакетов, - НастройкаСервера.Порт, - НастройкаСервера.Приоритет) - -КонецФункции - Процедура ОбновитьИндексДоступныхПакетов() // Учесть версии пакетов @@ -257,8 +245,7 @@ Процедура ОбновитьИндексыКешейПакетов() Если Не ЗначениеЗаполнено(ИндексКешаПакетов) - Или Не ЗначениеЗаполнено(ИндексДоступныхПакетов)Тогда - + Или Не ЗначениеЗаполнено(ИндексДоступныхПакетов) Тогда ОбновитьИндексКешаПакетов(); ОбновитьИндексДоступныхПакетов(); КонецЕсли; diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\262\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\262\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" index a940782..e412030 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\262\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\262\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -1,16 +1,21 @@ Перем Лог; -Перем Имя; -Перем Сервер; -Перем ПутьНаСервере; -Перем Порт; -Перем Приоритет; +Перем Имя Экспорт; +Перем Сервер Экспорт; +Перем ПутьНаСервере Экспорт; +Перем Порт Экспорт; +Перем Приоритет Экспорт; Перем Соединение; -Перем РесурсПубликацииПакетов; +Перем РесурсПубликацииПакетов Экспорт; +Перем Авторизация Экспорт; +Перем ДополнительныеЗаголовки Экспорт; +Перем Таймаут Экспорт; Перем ПакетыХаба; -Процедура ПриСозданииОбъекта(Знач ИмяСервера, Знач АдресСервер, Знач ВходящийПутьНаСервере = "", Знач ВходящийРесурсПубликацииПакетов = "", Знач ВходящийПорт = 80, Знач ВходящийПриоритет = 0) +Процедура ПриСозданииОбъекта(Знач ИмяСервера, Знач АдресСервер, Знач ВходящийПутьНаСервере = "", + Знач ВходящийРесурсПубликацииПакетов = "", Знач ВходящийПорт = 80, Знач ВходящийПриоритет = 0, + Знач ВходящаяАвторизация = Неопределено, Знач Заголовки = Неопределено, Знач ВходящийТаймаут = 60) Имя = ИмяСервера; Сервер = АдресСервер; @@ -18,6 +23,9 @@ Порт = ВходящийПорт; Приоритет = ВходящийПриоритет; РесурсПубликацииПакетов = ВходящийРесурсПубликацииПакетов; + Авторизация = ВходящаяАвторизация; + ДополнительныеЗаголовки = Заголовки; + Таймаут = ВходящийТаймаут; КонецПроцедуры @@ -39,9 +47,9 @@ Настройки = НастройкиOpm.ПолучитьНастройки(); Если Настройки.ИспользоватьПрокси Тогда НастройкиПрокси = НастройкиOpm.ПолучитьИнтернетПрокси(); - Соединение = Новый HTTPСоединение(Сервер, Порт, , , НастройкиПрокси); + Соединение = Новый HTTPСоединение(Сервер, Порт, , , НастройкиПрокси, Таймаут); Иначе - Соединение = Новый HTTPСоединение(Сервер, Порт); + Соединение = Новый HTTPСоединение(Сервер, Порт, , , , Таймаут); КонецЕсли; Возврат Соединение; @@ -55,6 +63,7 @@ Соединение = ИнициализироватьСоединение(); Ресурс = ПутьНаСервере + ИмяРесурса; Запрос = Новый HTTPЗапрос(Ресурс); + ДобавитьЗаголовки(Запрос); Попытка @@ -132,4 +141,40 @@ КонецФункции +Процедура ДобавитьЗаголовки(Знач Запрос) + + Если ЗначениеЗаполнено(ДополнительныеЗаголовки) Тогда + Для Каждого мЗаголовок Из ДополнительныеЗаголовки Цикл + ДобавитьЗаголовокКЗапросу(Запрос, мЗаголовок.Ключ, мЗаголовок.Значение); + КонецЦикла; + КонецЕсли; + + Если ЗначениеЗаполнено(Авторизация) Тогда + ДобавитьЗаголовокКЗапросу(Запрос, "Authorization", Авторизация); + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьЗаголовокКЗапросу(Знач Запрос, Знач Заголовок, Знач Значение) + Запрос.Заголовки.Вставить(Заголовок, ОбщегоНазначенияOpm.ПрименитьПеременныеСреды(Значение)); +КонецПроцедуры + +Функция НастройкаДляВыгрузки() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Имя", Имя); + Результат.Вставить("Сервер", Сервер); + Результат.Вставить("ПутьНаСервере", ПутьНаСервере); + Результат.Вставить("РесурсПубликацииПакетов", РесурсПубликацииПакетов); + Результат.Вставить("Порт", Порт); + Результат.Вставить("Таймаут", Таймаут); + Результат.Вставить("Авторизация", Авторизация); + Результат.Вставить("Заголовки", ДополнительныеЗаголовки); + Результат.Вставить("Приоритет", Приоритет); + + Возврат Результат; + +КонецФункции // + Лог = Логирование.ПолучитьЛог("oscript.app.opm"); +ДополнительныеЗаголовки = Новый Соответствие; \ No newline at end of file diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270Opm.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270Opm.os" index 40f745c..da71e7c 100644 --- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270Opm.os" +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270Opm.os" @@ -85,31 +85,8 @@ КонецПроцедуры -Функция НастройкиСервераПакетов(Знач Имя, Знач Сервер, Знач ПутьНаСервере, Знач РесурсПубликацииПакетов, Знач Порт, Знач Приоритет) - - Результат = Новый Структура; - Результат.Вставить("Имя", Имя); - Результат.Вставить("Сервер", Сервер); - Результат.Вставить("ПутьНаСервере", ПутьНаСервере); - Результат.Вставить("РесурсПубликацииПакетов", РесурсПубликацииПакетов); - Результат.Вставить("Порт", Порт); - Результат.Вставить("Приоритет", Приоритет); - - Возврат Результат; - -КонецФункции // - -Процедура ДобавитьСерверПакетов(Знач Имя, - Знач Сервер, - Знач ПутьНаСервере = "", - Знач РесурсПубликацииПакетов = "", - Знач Порт = 80, - Знач Приоритет = Неопределено) Экспорт - - мНастройки.СервераПакетов.Добавить(НастройкиСервераПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет)); - Лог.Отладка("Добавлен сервер <%1>, Адрес <%2>, ПутьНаСервере <%3>, РесурсПубликацииПакетов <%4>, Порт <%5>, Приоритет <%6>", - Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет); - +Процедура ДобавитьСерверПакетов(Знач СерверПакетов) Экспорт + мНастройки.СервераПакетов.Добавить(СерверПакетов); КонецПроцедуры @@ -121,8 +98,8 @@ Процедура ИнициализацияСерверовПакетов() // Сервера пакетов по умолчанию - ДобавитьСерверПакетов("ОсновнойСерверПакетов", КонстантыOpm.СерверУдаленногоХранилища, КонстантыOpm.ПутьВХранилище, КонстантыOpm.РесурсПубликацииПакетов, 80, 0); - ДобавитьСерверПакетов("ЗапаснойСерверПакетов", КонстантыOpm.СерверЗапасногоХранилища, КонстантыOpm.ПутьВЗапасномХранилище, Неопределено, 80, 1); + ДобавитьСерверПакетов(СерверыПакетов.ОсновнойСервер()); + ДобавитьСерверПакетов(СерверыПакетов.ЗапаснойСервер()); КонецПроцедуры Процедура Инициализация() diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217Opm.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217Opm.os" new file mode 100644 index 0000000..9d79b2d --- /dev/null +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217Opm.os" @@ -0,0 +1,39 @@ +#Использовать strings + +// Подставляет переменные среды в строку +// +// Параметры: +// Значение - Строка - Исходная строка. Подстроки вида ${ИМЯ_ПЕРЕМЕННОЙ} заменяются на значение переменной +// +// Возвращаемое значение: +// Строка - Строка с подставленными значениями переменных +Функция ПрименитьПеременныеСреды(Знач Значение) Экспорт + ПеременныеСреды = КакМассив(ПеременныеСреды()); + Возврат ПрименитьПеременныеСредыШаг(Значение, ПеременныеСреды, 0); +КонецФункции + +Функция ПрименитьПеременныеСредыШаг(Знач Значение, Знач ПеременныеСреды, Знач Индекс) + + ПеременнаяИмя = СтрШаблон("${%1}", ПеременныеСреды[Индекс].Ключ); + Части = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(Значение, ПеременнаяИмя); + Если Индекс < ПеременныеСреды.Количество() - 1 Тогда + Для Инд = 0 По Части.ВГраница() Цикл + Части[Инд] = ПрименитьПеременныеСредыШаг(Части[Инд], ПеременныеСреды, Индекс + 1); + КонецЦикла; + КонецЕсли; + + Результат = СтрСоединить(Части, ПеременныеСреды[Индекс].Значение); + Возврат Результат; + +КонецФункции + +Функция КакМассив(Знач Соответствие) + + Массив = Новый Массив; + Для Каждого мКлючИЗанчение Из Соответствие Цикл + Массив.Добавить(мКлючИЗанчение); + КонецЦикла; + + Возврат Массив; + +КонецФункции \ No newline at end of file diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\262\320\265\321\200\321\213\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\262\320\265\321\200\321\213\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" new file mode 100644 index 0000000..fe3a432 --- /dev/null +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\262\320\265\321\200\321\213\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -0,0 +1,60 @@ + +Функция ИзНастроек(Знач ТекущийСерверПакетов, Знач Индекс) Экспорт + + Сервер = ПолучитьЗначение(ТекущийСерверПакетов, "Сервер", ""); + Порт = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Порт", 80)); + ПутьНаСервере = ПолучитьЗначение(ТекущийСерверПакетов, "ПутьНаСервере", "/"); + Имя = ПолучитьЗначение(ТекущийСерверПакетов, "Имя", СтрШаблон("ДопСервер_%1", Индекс)); + РесурсПубликацииПакетов = ПолучитьЗначение(ТекущийСерверПакетов, "РесурсПубликацииПакетов", "/"); + Приоритет = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Приоритет", 0)); + Авторизация = ПолучитьЗначение(ТекущийСерверПакетов, "Авторизация", ""); + ДополнительныеЗаголовки = ПолучитьЗначение(ТекущийСерверПакетов, "Заголовки", Новый Соответствие); + Таймаут = ПолучитьЗначение(ТекущийСерверПакетов, "Таймаут", 600); + + Если ПустаяСтрока(Сервер) Тогда + ВызватьИсключение СтрШаблон("Для сервера <%1> не задан адрес", Индекс); + КонецЕсли; + + СерверПакетов = Новый СерверПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, + Порт, Приоритет, Авторизация, ДополнительныеЗаголовки, Таймаут + ); + + Возврат СерверПакетов; + +КонецФункции + +Функция ОсновнойСервер() Экспорт + Возврат Новый СерверПакетов("ОсновнойСерверПакетов", + КонстантыOpm.СерверУдаленногоХранилища, + КонстантыOpm.ПутьВХранилище, + КонстантыOpm.РесурсПубликацииПакетов, + 80, + 0 + ); +КонецФункции + +Функция ЗапаснойСервер() Экспорт + Возврат Новый СерверПакетов("ЗапаснойСерверПакетов", + КонстантыOpm.СерверЗапасногоХранилища, + КонстантыOpm.ПутьВЗапасномХранилище, + Неопределено, + 80, + 1 + ); +КонецФункции + +Функция ПолучитьЗначение(Знач ВходящаяСтруктура, Знач Ключ, Знач ЗначениеПоУмолчанию) + + Перем ЗначениеКлюча; + + Если Не ВходящаяСтруктура.Свойство(Ключ, ЗначениеКлюча) Тогда + Возврат ЗначениеПоУмолчанию; + КонецЕсли; + + Если ЗначениеКлюча = Неопределено Тогда + Возврат ЗначениеПоУмолчанию; + КонецЕсли; + + Возврат ЗначениеКлюча; + +КонецФункции diff --git a/tests/fixtures/opm-example.cfg b/tests/fixtures/opm-example.cfg new file mode 100644 index 0000000..f4bf635 --- /dev/null +++ b/tests/fixtures/opm-example.cfg @@ -0,0 +1,33 @@ +{ + "Прокси": { + "ИспользоватьПрокси": false, + "ПроксиПоУмолчанию": false, + "Сервер": "", + "Порт": "", + "Пользователь": "", + "Пароль": "", + "ИспользоватьАутентификациюОС": false + }, + "СоздаватьShСкриптЗапуска": false, + "СервераПакетов": [ + { + "Имя":"defaultrepo", + "Сервер": "http://hub.oscript.io", + "Порт": 80, + "ПутьНаСервере":"/download/", + "РесурсПубликацииПакетов": "/push", + }, + { + "Имя":"mylocalhost", + "Сервер": "http://localhost", + "Порт": 8000, + "Таймаут": 600, + "ПутьНаСервере":"/", + "Авторизация": "OAUTH_TOKEN ${OPM_OAUTH_TOKEN}", + "Заголовки": { + "X-Dummy": "${USERNAME}", + "Any-Header": "Any value with ${ENVIRONMENT_VARIABLE}" + } + } + ] +} diff --git a/tests/fixtures/opm-servers.cfg b/tests/fixtures/opm-servers.cfg index 5e0f772..70a48a5 100644 --- a/tests/fixtures/opm-servers.cfg +++ b/tests/fixtures/opm-servers.cfg @@ -11,7 +11,11 @@ "Имя":"mylocalhost", "Сервер": "http://localhost", "Порт": 8000, - "ПутьНаСервере":"/" + "ПутьНаСервере":"/", + "Авторизация": "", + "Заголовки": { + "X-Dummy": "${USERNAME}" + } } ] } diff --git a/tests/packagelist.os b/tests/packagelist.os index 0efa2a7..3680657 100644 --- a/tests/packagelist.os +++ b/tests/packagelist.os @@ -17,6 +17,9 @@ КонецФункции Процедура ПередЗапускомТеста() Экспорт + // Завязаны на основной хаб. + НастройкиOpm.СброситьНастройки(); + НастройкиOpm.ДобавитьСерверПакетов(СерверыПакетов.ОсновнойСервер()); КонецПроцедуры Процедура ПослеЗапускаТеста() Экспорт