Skip to content
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
1 change: 1 addition & 0 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@
.ЗависитОт("gitrunner", "1.6.0")
.ВключитьФайл("packagedef")
.ВключитьФайл("src")
.ВключитьФайл("tasks")
.ВключитьФайл("oscript_modules")
.ОпределяетКласс("КэшУстановленныхПакетов", "src/core/Классы/КэшУстановленныхПакетов.os")
.ОпределяетКласс("МенеджерПолученияПакетов", "src/core/Классы/МенеджерПолученияПакетов.os")
Expand Down
4 changes: 4 additions & 0 deletions src/cmd/Классы/КомандаOpm_Install.os
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
КомандаПриложения.Опция("a all", Ложь, "Установить все пакеты, зарегистрированные в хабе");
КомандаПриложения.Опция("f file", "", "Указать файл из которого нужно установить пакет. Поддерживает указание маски файла для пакетной установки");
КомандаПриложения.Опция("l local", Ложь, "Установить пакеты в локальный каталог oscript_modules");
КомандаПриложения.Опция("dev", Ложь, "Признак установки пакетов для разработки");
КомандаПриложения.Опция("s skip-install-deps", Ложь, "признак пропуска установки зависимых пакетов");
КомандаПриложения.Опция("skip-create-app", Ложь, "признак отключения создания файла запуска");
КомандаПриложения.Опция("d dest", "", "Переопределить стандартный каталог в который устанавливаются пакеты (вместо oscript_modules)");
Expand All @@ -31,6 +32,7 @@
Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт

УстановкаВЛокальныйКаталог = КомандаПриложения.ЗначениеОпции("local");
УстановкаПакетовРазработчика = КомандаПриложения.ЗначениеОпции("dev");
УстановкаВсехПакетов = КомандаПриложения.ЗначениеОпции("all");
КаталогУстановки = КомандаПриложения.ЗначениеОпции("dest");
ФайлПакетаУстановки = КомандаПриложения.ЗначениеОпции("file");
Expand Down Expand Up @@ -58,6 +60,7 @@
КонецЕсли;

Лог.Отладка("УстановкаВЛокальныйКаталог: %1", УстановкаВЛокальныйКаталог);
Лог.Отладка("УстановкаПакетовРазработчика: %1", УстановкаПакетовРазработчика);
Лог.Отладка("УстановкаВсехПакетов: %1", УстановкаВсехПакетов);
Лог.Отладка("КаталогУстановки: %1", КаталогУстановки);
Лог.Отладка("ФайлПакетаУстановки: %1", ФайлПакетаУстановки);
Expand All @@ -67,6 +70,7 @@

НастройкаУстановки = РаботаСПакетами.ПолучитьНастройкуУстановки();
НастройкаУстановки.УстанавливатьЗависимости = НеобходимоУстановитьЗависимости;
НастройкаУстановки.УстанавливатьЗависимостиРазработчика = УстановкаПакетовРазработчика;
НастройкаУстановки.СоздаватьФайлыЗапуска = СоздаватьФайлыЗапуска;
НастройкаУстановки.ИмяСервера = ИмяСервера;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
Перем ИмяСервера;

Перем УстанавливатьЗависимости;
Перем УстанавливатьЗависимостиРазработчика;
Перем СоздаватьФайлыЗапуска;

Процедура ПриСозданииОбъекта(Знач ВходящийРежимУстановкиПакетов = Неопределено, Знач ВходящийКаталогУстановки = Неопределено, Знач ВходящийКаталогУстановкиЗависимостей = Неопределено, Знач ВходящийИмяСервера = "")
Expand Down Expand Up @@ -52,6 +53,7 @@

КешУстановленныхПакетов = Новый Соответствие;
УстанавливатьЗависимости = Истина;
УстанавливатьЗависимостиРазработчика = Ложь;
СоздаватьФайлыЗапуска = Истина;
ИмяСервера = ВходящийИмяСервера;
КонецПроцедуры
Expand All @@ -60,6 +62,10 @@
УстанавливатьЗависимости = ПУстанавливатьЗависимости;
КонецПроцедуры

Процедура УстанавливатьЗависимостиРазработчика(Знач ПУстанавливатьЗависимостиРазработчика) Экспорт
УстанавливатьЗависимостиРазработчика = ПУстанавливатьЗависимостиРазработчика;
КонецПроцедуры

Процедура СоздаватьФайлыЗапуска(Знач ПСоздаватьФайлыЗапуска) Экспорт
СоздаватьФайлыЗапуска = ПСоздаватьФайлыЗапуска;
КонецПроцедуры
Expand Down Expand Up @@ -95,9 +101,19 @@

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

Процедура УстановитьПакетПоОписанию(Знач ОписаниеПакета) Экспорт
Процедура УстановитьПакетПоОписанию(Знач ЗависимостьПакета) Экспорт

УстановитьПакетПоИмениИВерсии(ОписаниеПакета.ИмяПакета, ОписаниеПакета.МинимальнаяВерсия, Истина);
Если ЗависимостьПакета.ДляРазработки Тогда
Если УстанавливатьЗависимостиРазработчика Тогда
Лог.Информация("<%1> отмечена как зависимость для разработчика. Устанавливаем.", ЗависимостьПакета.ИмяПакета);
Иначе
Лог.Информация("<%1> отмечена как зависимость для разработчика, " +
"но установка зависимостей для разработчика не активирована. Пропускаем.", ЗависимостьПакета.ИмяПакета);
Возврат;
КонецЕсли;
КонецЕсли;

УстановитьПакетПоИмениИВерсии(ЗависимостьПакета.ИмяПакета, ЗависимостьПакета.МинимальнаяВерсия, Истина);

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

Expand Down
35 changes: 33 additions & 2 deletions src/core/Классы/ОписаниеПакета.os
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@
Возврат ЭтотОбъект;
КонецФункции

Функция ВерсияМанифеста(Знач Параметр) Экспорт
УстановитьСвойствоПакета("ВерсияМанифеста", Параметр);
Возврат ЭтотОбъект;
КонецФункции

Функция ТочкаВхода(Знач Параметр) Экспорт
УстановитьСвойствоПакета("ТочкаВхода", Параметр);
Возврат ЭтотОбъект;
Expand Down Expand Up @@ -81,10 +86,35 @@

Функция ЗависитОт(Знач ИмяПакета, Знач МинимальнаяВерсия = Неопределено, Знач МаксимальнаяВерсия = Неопределено) Экспорт

ТекЗависимость = Зависимость(ИмяПакета);
Если ТекЗависимость = Неопределено Тогда
Зависимость = Зависимость(ИмяПакета);
Если Зависимость = Неопределено Тогда
Зависимость = мЗависимости.Добавить();
Зависимость.ИмяПакета = ИмяПакета;
КонецЕсли;

Зависимость.ДляРазработки = Ложь;

Если МинимальнаяВерсия = Неопределено Тогда
Возврат ЭтотОбъект;
КонецЕсли;

Зависимость.МинимальнаяВерсия = МинимальнаяВерсия;
Зависимость.МаксимальнаяВерсия = МаксимальнаяВерсия;

Возврат ЭтотОбъект;

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

Функция РазработкаЗависитОт(
Знач ИмяПакета,
Знач МинимальнаяВерсия = Неопределено,
Знач МаксимальнаяВерсия = Неопределено) Экспорт

Зависимость = Зависимость(ИмяПакета);
Если Зависимость = Неопределено Тогда
Зависимость = мЗависимости.Добавить();
Зависимость.ИмяПакета = ИмяПакета;
Зависимость.ДляРазработки = Истина;
КонецЕсли;

Если МинимальнаяВерсия = Неопределено Тогда
Expand Down Expand Up @@ -195,6 +225,7 @@

мЗависимости = Новый ТаблицаЗначений;
мЗависимости.Колонки.Добавить("ИмяПакета");
мЗависимости.Колонки.Добавить("ДляРазработки", Новый ОписаниеТипов("Булево"));
мЗависимости.Колонки.Добавить("МинимальнаяВерсия");
мЗависимости.Колонки.Добавить("МаксимальнаяВерсия");

Expand Down
1 change: 1 addition & 0 deletions src/core/Классы/СборщикПакета.os
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
УстановитьТекущийКаталог(РабочийКаталог);
УточнитьФайлМанифеста(ФайлМанифеста);
Манифест = ПрочитатьМанифест(ФайлМанифеста);
РаботаСОписаниемПакета.ПроверитьВерсиюМанифеста(Манифест);
ВызватьСобытиеПередСборкой();
СобратьПакетВКаталогеСборки(Манифест, ВыходнойКаталог);
УстановитьТекущийКаталог(ТекущийРабКаталог);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
СоответствиеИменСвойств.Вставить("Описание" , "description");
СоответствиеИменСвойств.Вставить("АдресАвтора", "author-email");
СоответствиеИменСвойств.Вставить("ВерсияСреды", "engine-version");
СоответствиеИменСвойств.Вставить("ВерсияМанифеста", "manifest-version");
СоответствиеИменСвойств.Вставить("Задачи", "tasks");

Возврат СоответствиеИменСвойств;
Expand Down Expand Up @@ -88,6 +89,7 @@
Для Каждого Зависимость Из Зависимости Цикл
Запись.ЗаписатьНачалоЭлемента(ИменаКоллекцийПакета().Зависимости);
Запись.ЗаписатьАтрибут("name", Зависимость.ИмяПакета);
Запись.ЗаписатьАтрибут("dev", Формат(Зависимость.ДляРазработки, "БЛ=false; БИ=true"));
Если Не ПустаяСтрока(Зависимость.МинимальнаяВерсия) Тогда
Запись.ЗаписатьАтрибут("version", Зависимость.МинимальнаяВерсия);
КонецЕсли;
Expand Down Expand Up @@ -235,10 +237,21 @@

МинимальнаяВерсия = ЧтениеXML.ПолучитьАтрибут("version");
МаксимальнаяВерсия = ЧтениеXML.ПолучитьАтрибут("version-max");

Лог.Отладка("Добавляем зависимость " + ИмяЗависимости + " " + МинимальнаяВерсия + " " + МаксимальнаяВерсия);
ОписаниеПакета.ЗависитОт(ИмяЗависимости, МинимальнаяВерсия, МаксимальнаяВерсия);

ДляРазработки = ЧтениеXML.ПолучитьАтрибут("dev");

Лог.Отладка(
"Добавляем зависимость %1 %2 %3 %4",
ИмяЗависимости,
МинимальнаяВерсия,
МаксимальнаяВерсия,
ДляРазработки
);

Если ДляРазработки = "true" Тогда
ОписаниеПакета.РазработкаЗависитОт(ИмяЗависимости, МинимальнаяВерсия, МаксимальнаяВерсия);
Иначе
ОписаниеПакета.ЗависитОт(ИмяЗависимости, МинимальнаяВерсия, МаксимальнаяВерсия);
КонецЕсли;
ЧтениеXML.Прочитать();

КонецПроцедуры
Expand Down
31 changes: 2 additions & 29 deletions src/core/Классы/УстановкаПакета.os
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@
ПутьУстановки = ОбъектКаталогУстановки.ПолноеИмя;

Лог.Информация("Устанавливаю пакет " + ИмяПакета);
ПроверитьВерсиюСреды(Метаданные);
РаботаСОписаниемПакета.ПроверитьВерсиюМанифеста(Метаданные);
РаботаСОписаниемПакета.ПроверитьВерсиюСреды(Метаданные);
Если мЗависимостиВРаботе[ИмяПакета] = "ВРаботе" Тогда
ВызватьИсключение "Циклическая зависимость по пакету " + ИмяПакета;
КонецЕсли;
Expand Down Expand Up @@ -91,34 +92,6 @@
СоздаватьФайлЗапуска = ПСоздаватьФайлЗапуска;
КонецПроцедуры

Процедура ПроверитьВерсиюСреды(Манифест)

Свойства = Манифест.Свойства();
Если НЕ Свойства.Свойство("ВерсияСреды") Тогда
Возврат;
КонецЕсли;

ИмяПакета = Свойства.Имя;
ТребуемаяВерсияСреды = Свойства.ВерсияСреды;
СистемнаяИнформация = Новый СистемнаяИнформация;
ВерсияСреды = СистемнаяИнформация.Версия;
Лог.Отладка("ПроверитьВерсиюСреды: Перед вызовом СравнитьВерсии(ЭтаВерсия = <%1>, БольшеЧемВерсия = <%2>)", ТребуемаяВерсияСреды, ВерсияСреды);
Если РаботаСВерсиями.СравнитьВерсии(ТребуемаяВерсияСреды, ВерсияСреды) > 0 Тогда
ТекстСообщения = СтрШаблон(
"Ошибка установки пакета <%1>: Обнаружена устаревшая версия движка OneScript.
|Требуемая версия: %2
|Текущая версия: %3
|Обновите OneScript перед установкой пакета",
ИмяПакета,
ТребуемаяВерсияСреды,
ВерсияСреды
);

ВызватьИсключение ТекстСообщения;
КонецЕсли;

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

Процедура УстановитьЦелевойКаталог(Знач ЦелевойКаталогУстановки) Экспорт
Лог.Отладка("Каталог установки пакета '%1'", ЦелевойКаталогУстановки);
ФС.ОбеспечитьКаталог(ЦелевойКаталогУстановки);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
Перем Лог;

Функция ПрочитатьОписаниеПакета() Экспорт

Описание = Новый ОписаниеПакета();
Expand All @@ -12,4 +14,65 @@

Возврат Описание;

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

Процедура ПроверитьВерсиюМанифеста(Манифест) Экспорт

Свойства = Манифест.Свойства();
Если НЕ Свойства.Свойство("ВерсияМанифеста") Тогда
Возврат;
КонецЕсли;

ИмяПакета = Свойства.Имя;
ТребуемаяВерсияМанифеста = Свойства.ВерсияМанифеста;
ТекущаяВерсияМанифеста = КонстантыOpm.ВерсияПродукта;
Лог.Отладка(
"ПроверитьВерсиюМанифеста: Перед вызовом СравнитьВерсии(ЭтаВерсия = <%1>, БольшеЧемВерсия = <%2>)",
ТребуемаяВерсияМанифеста,
ТекущаяВерсияМанифеста
);
Если РаботаСВерсиями.СравнитьВерсии(ТребуемаяВерсияМанифеста, ТекущаяВерсияМанифеста) > 0 Тогда
ТекстСообщения = СтрШаблон(
"Ошибка установки пакета <%1>: Обнаружена устаревшая версия opm.
|Требуемая версия: %2
|Текущая версия: %3
|Обновите opm перед установкой пакета",
ИмяПакета,
ТребуемаяВерсияМанифеста,
ТекущаяВерсияМанифеста
);

ВызватьИсключение ТекстСообщения;
КонецЕсли;

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

Процедура ПроверитьВерсиюСреды(Манифест) Экспорт

Свойства = Манифест.Свойства();
Если НЕ Свойства.Свойство("ВерсияСреды") Тогда
Возврат;
КонецЕсли;

ИмяПакета = Свойства.Имя;
ТребуемаяВерсияСреды = Свойства.ВерсияСреды;
СистемнаяИнформация = Новый СистемнаяИнформация;
ВерсияСреды = СистемнаяИнформация.Версия;
Лог.Отладка("ПроверитьВерсиюСреды: Перед вызовом СравнитьВерсии(ЭтаВерсия = <%1>, БольшеЧемВерсия = <%2>)", ТребуемаяВерсияСреды, ВерсияСреды);
Если РаботаСВерсиями.СравнитьВерсии(ТребуемаяВерсияСреды, ВерсияСреды) > 0 Тогда
ТекстСообщения = СтрШаблон(
"Ошибка установки пакета <%1>: Обнаружена устаревшая версия движка OneScript.
|Требуемая версия: %2
|Текущая версия: %3
|Обновите OneScript перед установкой пакета",
ИмяПакета,
ТребуемаяВерсияСреды,
ВерсияСреды
);

ВызватьИсключение ТекстСообщения;
КонецЕсли;

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

Лог = Логирование.ПолучитьЛог("oscript.app.opm");
Loading