Skip to content
Open
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
5 changes: 5 additions & 0 deletions src/cmd/opm.os
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@
НСтр("ru='Скачать файл пакета и файлы зависимостей';
|en='Download package and dependencies'"),
Новый КомандаOpm_Download);

Приложение.ДобавитьКоманду("show s",
НСтр("ru='Показать информацию об установленном пакете';
|en='Show installed package info'"),
Новый КомандаOpm_Show);

Приложение.Запустить(АргументыКоманднойСтроки);

Expand Down
147 changes: 147 additions & 0 deletions src/cmd/Классы/КомандаOpm_Show.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
///////////////////////////////////////////////////////////////////////////////////////////////////
// Прикладной интерфейс

Процедура ОписаниеКоманды(Знач КомандаПриложения) Экспорт

КомандаПриложения.Опция("l local", Ложь, "Искать в локально установленных пакетах");
КомандаПриложения.Опция("r regex", Ложь, "Строка поиска будет использоваться как регулярное выражение");

КомандаПриложения.Аргумент("PACKAGE", "", "Строка поиска пакета")
.ТМассивСтрок()
.Обязательный(Истина);

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

Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт

УстановкаВЛокальныйКаталог = КомандаПриложения.ЗначениеОпции("local");
ИспользоватьРегулярныеВыражения = КомандаПриложения.ЗначениеОпции("regex");
МассивПоисковыхЗапросов = КомандаПриложения.ЗначениеАргумента("PACKAGE");

ШаблоныПоиска = Новый Массив;

Для Каждого мТекстЗапроса Из МассивПоисковыхЗапросов Цикл

Если ИспользоватьРегулярныеВыражения Тогда

РегулярноеВыражение = Новый РегулярноеВыражение(мТекстЗапроса);
РегулярноеВыражение.ИгнорироватьРегистр = Истина;

ШаблоныПоиска.Добавить(РегулярноеВыражение);

Иначе
ШаблоныПоиска.Добавить(ВРЕГ(СокрЛП(мТекстЗапроса)));
КонецЕсли;

КонецЦикла;

Если УстановкаВЛокальныйКаталог Тогда
ПутьККаталогуПакетов = ОбъединитьПути(ТекущийКаталог(), КонстантыOpm.ЛокальныйКаталогУстановкиПакетов);
КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов(ПутьККаталогуПакетов);
Иначе
КэшУстановленныхПакетов = КэшУстановленныхПакетовГлобальныхПакетов();
КонецЕсли;

УстановленныеПакеты = КэшУстановленныхПакетов.ПолучитьУстановленныеПакеты();

КоличествоНайденныхПакетов = 0;
Для Каждого УстановленныйПакет Из УстановленныеПакеты Цикл
ИмяПакета = УстановленныйПакет.Ключ;
Для Каждого мШаблонПоиска Из ШаблоныПоиска Цикл

Если Совпадает(мШаблонПоиска, ИмяПакета) Тогда
КоличествоНайденныхПакетов = КоличествоНайденныхПакетов + 1;
ВывестиИнформациюОПакете(УстановленныйПакет.Значение);
Прервать;
КонецЕсли;

КонецЦикла;

КонецЦикла;

Сообщить(СтрШаблон("Найдено пакетов: %1", КоличествоНайденныхПакетов));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Может быть логгер с выключенной раскладкой?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

результат работы не есть логи, на мой взгляд.


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

Функция Совпадает(Знач ОбъектСравнения, Знач СтрокаПоиска)

Если ТипЗнч(ОбъектСравнения) = Тип("РегулярноеВыражение") Тогда
Возврат ОбъектСравнения.Совпадает(СтрокаПоиска);
Иначе
Возврат ВРЕГ(СокрЛП(СтрокаПоиска)) = ОбъектСравнения;
КонецЕсли;

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

Процедура ВывестиИнформациюОПакете(Знач УстановленныйПакет)

Сообщить(СтрШаблон("Каталог: %1", УстановленныйПакет.КаталогПакета));
Если УстановленныйПакет.Свойство("Перекрывает") Тогда

Для Каждого мПакет Из УстановленныйПакет.Перекрывает Цикл
Сообщить(СтрШаблон(" ! Перекрывает: %1", мПакет.КаталогПакета));
КонецЦикла;

КонецЕсли;

ОписаниеПакета = УстановленныйПакет.МетаданныеПакета;
Если ТипЗнч(ОписаниеПакета) <> Тип("Булево") Тогда


Свойства = ОписаниеПакета.Свойства();
Для Каждого мСвойство Из Свойства Цикл
Сообщить(СтрШаблон(" %1: %2", мСвойство.Ключ, мСвойство.Значение));
КонецЦикла;

Зависимости = ОписаниеПакета.Зависимости();
Зависимости.Сортировать("ДляРазработки");
Для Каждого мЗависимость Из Зависимости Цикл

Префикс = ?(мЗависимость.ДляРазработки, "Разработка зависит от", "Зависит от");
СтрокаВерсииЗависимости = СтрокаВерсииЗависимости(мЗависимость);

Сообщить(СтрШаблон(" %1 %2%3", Префикс, мЗависимость.ИмяПакета, СтрокаВерсииЗависимости));

КонецЦикла;

КонецЕсли;

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

Функция СтрокаВерсииЗависимости(Знач мЗависимость)

Подстроки = Новый Массив;

Если ЗначениеЗаполнено(мЗависимость.МинимальнаяВерсия) Тогда
Подстроки.Добавить(">=" + мЗависимость.МинимальнаяВерсия);
КонецЕсли;

Если ЗначениеЗаполнено(мЗависимость.МаксимальнаяВерсия) Тогда
Подстроки.Добавить("<=" + мЗависимость.МаксимальнаяВерсия);
КонецЕсли;

Если ЗначениеЗаполнено(Подстроки) Тогда
Возврат " (" + СтрСоединить(Подстроки, ", ") + ")";
КонецЕсли;

Возврат "";

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

Функция КэшУстановленныхПакетовГлобальныхПакетов()

ПутьККаталогуПакетов = ПолучитьЗначениеСистемнойНастройки("lib.system");
КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов(ПутьККаталогуПакетов);

ДополнительныеКаталоги = ПолучитьЗначениеСистемнойНастройки("lib.additional");
Если ЗначениеЗаполнено(ДополнительныеКаталоги) Тогда

Для Каждого мКаталогПоиска Из СтрРазделить(ДополнительныеКаталоги, ";") Цикл
КэшУстановленныхПакетов.ДобавитьКаталогБиблиотек(СокрЛП(мКаталогПоиска));
КонецЦикла;

КонецЕсли;

Возврат КэшУстановленныхПакетов;

КонецФункции
Original file line number Diff line number Diff line change
Expand Up @@ -42,20 +42,20 @@
УстановленаКорректнаяВерсия = Истина;
ИначеЕсли ОписаниеЗависимости.МинимальнаяВерсия = ВерсияSNAPSHOT И УстановленнаяВерсия <> ВерсияSNAPSHOT Тогда
УстановленаКорректнаяВерсия = Ложь;
Иначе
Если ОписаниеЗависимости.МинимальнаяВерсия = Неопределено Тогда
УстановленаКорректнаяВерсия = Истина;
Иначе
Попытка
// Сначала пытаемся использовать семвер
РезультатСравнения = Версии.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия);
Исключение
// Если семвер не может обработать версию (например, 4-значную), используем модуль РаботаСВерсиями
РезультатСравнения = РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия);
КонецПопытки;

УстановленаКорректнаяВерсия = РезультатСравнения >= 0;
КонецЕсли;
Иначе
Если ОписаниеЗависимости.МинимальнаяВерсия = Неопределено Тогда
УстановленаКорректнаяВерсия = Истина;
Иначе
Попытка
// Сначала пытаемся использовать семвер
РезультатСравнения = Версии.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия);
Исключение
// Если семвер не может обработать версию (например, 4-значную), используем модуль РаботаСВерсиями
РезультатСравнения = РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия);
КонецПопытки;
УстановленаКорректнаяВерсия = РезультатСравнения >= 0;
КонецЕсли;
КонецЕсли;

Лог.Отладка("Пакет установлен: " + ПакетУстановлен);
Expand Down Expand Up @@ -104,12 +104,11 @@
КонецПроцедуры

Процедура ДобавитьУстановленныйПакет(Знач ФайлКаталога)

ИмяПакета = ФайлКаталога.Имя;

ПутьКФайлуМетаданных = ОбъединитьПути(ФайлКаталога.ПолноеИмя, КонстантыOpm.ИмяФайлаМетаданныхПакета);
ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных);
Если ФайлМетаданных.Существует() Тогда
МетаОписаниеПакета = РаботаСПакетами.ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных);
Иначе
МетаОписаниеПакета = НайтиМетаОписаниеПакета(ФайлКаталога);
Если МетаОписаниеПакета = Неопределено Тогда
// @deprecated
МетаОписаниеПакета = Истина;
КонецЕсли;
Expand All @@ -118,10 +117,49 @@
СтруктураДанных.Вставить("МетаданныеПакета", МетаОписаниеПакета);
СтруктураДанных.Вставить("КаталогПакета", ФайлКаталога.ПолноеИмя);

УстановленныеПакеты.Вставить(ФайлКаталога.Имя, СтруктураДанных);
УжеДобавленныйПакет = УстановленныеПакеты.Получить(ИмяПакета);
Если УжеДобавленныйПакет <> Неопределено Тогда

СтруктураДанных.Вставить("Перекрывает", Новый Массив);
СтруктураДанных.Перекрывает.Добавить(УжеДобавленныйПакет);

Если УжеДобавленныйПакет.Свойство("Перекрывает") Тогда

Для Каждого мПакет Из УжеДобавленныйПакет.Перекрывает Цикл
СтруктураДанных.Перекрывает.Добавить(мПакет);
КонецЦикла;

УжеДобавленныйПакет.Удалить("Перекрывает");

КонецЕсли;

КонецЕсли;

УстановленныеПакеты.Вставить(ИмяПакета, СтруктураДанных);

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

Функция НайтиМетаОписаниеПакета(Знач ФайлКаталога)

ПутьКФайлуМетаданных = ОбъединитьПути(ФайлКаталога.ПолноеИмя, КонстантыOpm.ИмяФайлаМетаданныхПакета);
ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных);
Если ФайлМетаданных.Существует() Тогда
Возврат РаботаСПакетами.ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных);
КонецЕсли;

ПутьКФайлуМетаданных = ОбъединитьПути(ФайлКаталога.ПолноеИмя, КонстантыOpm.ИмяФайлаКонфигурацииБиблиотеки);
ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных);
Если ФайлМетаданных.Существует() Тогда
ОписаниеПакета = Новый ОписаниеПакета();
ОписаниеПакета.Имя(ФайлКаталога.Имя);
ОписаниеПакета.Версия("<НЕТ>");
Возврат ОписаниеПакета;
КонецЕсли;

Возврат Неопределено;

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

Функция ПолучитьПутьКФайлуМетаданныхБиблиотеки(ИмяПакета) Экспорт

ПутьКФайлуМетаданных = "";
Expand All @@ -140,10 +178,10 @@

Возврат ПутьКФайлуМетаданных;

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



КонецФункции
Процедура ПриСозданииОбъекта(КаталогПоискаБиблиотек = "")

Лог = Логирование.ПолучитьЛог("oscript.app.opm");
Expand All @@ -162,4 +200,3 @@
КонецЕсли;

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

4 changes: 2 additions & 2 deletions src/core/Классы/СборщикПакета.os
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,9 @@
Возврат;
КонецЕсли;

Лог.Информация("Формирую определения модулей пакета (lib.config)");
Лог.Информация("Формирую определения модулей пакета (%1)", КонстантыOpm.ИмяФайлаКонфигурацииБиблиотеки);

ПутьКонфигурацииПакета = ОбъединитьПути(ВремКаталогСборки, "lib.config");
ПутьКонфигурацииПакета = ОбъединитьПути(ВремКаталогСборки, КонстантыOpm.ИмяФайлаКонфигурацииБиблиотеки);
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ПутьКонфигурацииПакета);
Запись.ЗаписатьОбъявлениеXML();
Expand Down
2 changes: 2 additions & 0 deletions src/core/Модули/КонстантыOpm.os
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@
Перем ИмяЛога Экспорт;
Перем ВерсияПродукта Экспорт;
Перем ИмяФайлаНастроек Экспорт;
Перем ИмяФайлаКонфигурацииБиблиотеки Экспорт;

///////////////////////////////////////////////////////////////

ИмяФайлаСпецификацииПакета = "packagedef";
ИмяФайлаСодержимогоПакета = "content.zip";
ИмяФайлаМетаданныхПакета = "opm-metadata.xml";
ИмяФайлаКонфигурацииБиблиотеки = "lib.config";
СерверУдаленногоХранилища = "http://hub.oscript.io";
РесурсПубликацииПакетов = "/push";
ПутьВХранилище = "/download/";
Expand Down
Loading