From c841178f6bedc12b7cdbd924e92e8a7c74f10f0b Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Fri, 11 Jul 2025 22:20:22 +0300 Subject: [PATCH 1/4] #82: opm show --- src/cmd/opm.os | 5 + ...20\260\320\275\320\264\320\260Opm_Show.os" | 103 ++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 "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_Show.os" diff --git a/src/cmd/opm.os b/src/cmd/opm.os index dc91f2d..86e4744 100644 --- a/src/cmd/opm.os +++ b/src/cmd/opm.os @@ -42,6 +42,11 @@ НСтр("ru='Скачать файл пакета и файлы зависимостей'; |en='Download package and dependencies'"), Новый КомандаOpm_Download); + + Приложение.ДобавитьКоманду("show s", + НСтр("ru='Показать информацию об установленном пакете'; + |en='Show installed package info'"), + Новый КомандаOpm_Show); Приложение.Запустить(АргументыКоманднойСтроки); 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_Show.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_Show.os" new file mode 100644 index 0000000..53db748 --- /dev/null +++ "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_Show.os" @@ -0,0 +1,103 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Прикладной интерфейс + +Процедура ОписаниеКоманды(Знач КомандаПриложения) Экспорт + + КомандаПриложения.Опция("l local", Ложь, "Искать в локально установленных пакета"); + + КомандаПриложения.Аргумент("PACKAGE", "", "Строка поиска пакета в хабе") + .ТМассивСтрок() + .Обязательный(Истина); + +КонецПроцедуры + +Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт + + УстановкаВЛокальныйКаталог = КомандаПриложения.ЗначениеОпции("local"); + МассивПоисковыхЗапросов = КомандаПриложения.ЗначениеАргумента("PACKAGE"); + + МассивРегулярныхВыражений = Новый Массив; + + Для Каждого мТекстЗапроса Из МассивПоисковыхЗапросов Цикл + + РегулярноеВыражение = Новый РегулярноеВыражение(мТекстЗапроса); + РегулярноеВыражение.ИгнорироватьРегистр = Истина; + + МассивРегулярныхВыражений.Добавить(РегулярноеВыражение); + + КонецЦикла; + + ПутьККаталогуПакетов = ПолучитьЗначениеСистемнойНастройки("lib.system"); + Если УстановкаВЛокальныйКаталог Тогда + ПутьККаталогуПакетов = ОбъединитьПути(ТекущийКаталог(), КонстантыOpm.ЛокальныйКаталогУстановкиПакетов); + КонецЕсли; + + КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов(ПутьККаталогуПакетов); + УстановленныеПакеты = КэшУстановленныхПакетов.ПолучитьУстановленныеПакеты(); + + КоличествоНайденныхПакетов = 0; + Для Каждого УстановленныйПакет Из УстановленныеПакеты Цикл + + ИмяПакета = УстановленныйПакет.Ключ; + Для Каждого мРегулярноеВыражение Из МассивРегулярныхВыражений Цикл + + Если мРегулярноеВыражение.Совпадает(ИмяПакета) Тогда + КоличествоНайденныхПакетов = КоличествоНайденныхПакетов + 1; + ВывестиИнформациюОПакете(УстановленныйПакет.Значение); + Прервать; + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + Сообщить(СтрШаблон("Найдено пакетов: %1", КоличествоНайденныхПакетов)); + +КонецПроцедуры + +Процедура ВывестиИнформациюОПакете(Знач УстановленныйПакет) + + Сообщить(СтрШаблон("Каталог: %1", УстановленныйПакет.КаталогПакета)); + + ОписаниеПакета = УстановленныйПакет.МетаданныеПакета; + Если ТипЗнч(ОписаниеПакета) <> Тип("Булево") Тогда + + Свойства = ОписаниеПакета.Свойства(); + Для Каждого мСвойство Из Свойства Цикл + Сообщить(СтрШаблон(" %1: %2", мСвойство.Ключ, мСвойство.Значение)); + КонецЦикла; + + Зависимости = ОписаниеПакета.Зависимости(); + Зависимости.Сортировать("ДляРазработки"); + Для Каждого мЗависимость Из Зависимости Цикл + + Префикс = ?(мЗависимость.ДляРазработки, "Разработка зависит от", "Зависит от"); + СтрокаВерсииЗависимости = СтрокаВерсииЗависимости(мЗависимость); + + Сообщить(СтрШаблон(" %1 %2%3", Префикс, мЗависимость.ИмяПакета, СтрокаВерсииЗависимости)); + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +Функция СтрокаВерсииЗависимости(Знач мЗависимость) + + Подстроки = Новый Массив; + + Если ЗначениеЗаполнено(мЗависимость.МинимальнаяВерсия) Тогда + Подстроки.Добавить(">=" + мЗависимость.МинимальнаяВерсия); + КонецЕсли; + + Если ЗначениеЗаполнено(мЗависимость.МаксимальнаяВерсия) Тогда + Подстроки.Добавить("<=" + мЗависимость.МаксимальнаяВерсия); + КонецЕсли; + + Если ЗначениеЗаполнено(Подстроки) Тогда + Возврат " (" + СтрСоединить(Подстроки, ", ") + ")"; + КонецЕсли; + + Возврат ""; + +КонецФункции From 8fe7cb3649d490e0015c1700680556b4d745e674 Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Fri, 11 Jul 2025 22:23:48 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=B0?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\276\320\274\320\260\320\275\320\264\320\260Opm_Show.os" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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_Show.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_Show.os" index 53db748..02f04c1 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_Show.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_Show.os" @@ -3,9 +3,9 @@ Процедура ОписаниеКоманды(Знач КомандаПриложения) Экспорт - КомандаПриложения.Опция("l local", Ложь, "Искать в локально установленных пакета"); + КомандаПриложения.Опция("l local", Ложь, "Искать в локально установленных пакетах"); - КомандаПриложения.Аргумент("PACKAGE", "", "Строка поиска пакета в хабе") + КомандаПриложения.Аргумент("PACKAGE", "", "Строка поиска пакета") .ТМассивСтрок() .Обязательный(Истина); From 298dd4e5a4305737257400492931605cfb088ef7 Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Sat, 12 Jul 2025 02:00:33 +0300 Subject: [PATCH 3/4] =?UTF-8?q?opm=20show=20=D1=81=20=D1=83=D1=87=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=BC=20lib.additional?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\260\320\275\320\264\320\260Opm_Show.os" | 34 +++++++- ...20\272\320\265\321\202\320\276\320\262.os" | 87 +++++++++++++------ ...20\260\320\272\320\265\321\202\320\260.os" | 4 +- ...202\320\260\320\275\321\202\321\213Opm.os" | 2 + 4 files changed, 96 insertions(+), 31 deletions(-) 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_Show.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_Show.os" index 02f04c1..0bcb750 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_Show.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_Show.os" @@ -27,17 +27,17 @@ КонецЦикла; - ПутьККаталогуПакетов = ПолучитьЗначениеСистемнойНастройки("lib.system"); Если УстановкаВЛокальныйКаталог Тогда ПутьККаталогуПакетов = ОбъединитьПути(ТекущийКаталог(), КонстантыOpm.ЛокальныйКаталогУстановкиПакетов); + КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов(ПутьККаталогуПакетов); + Иначе + КэшУстановленныхПакетов = КэшУстановленныхПакетовГлобальныхПакетов(); КонецЕсли; - КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов(ПутьККаталогуПакетов); УстановленныеПакеты = КэшУстановленныхПакетов.ПолучитьУстановленныеПакеты(); КоличествоНайденныхПакетов = 0; Для Каждого УстановленныйПакет Из УстановленныеПакеты Цикл - ИмяПакета = УстановленныйПакет.Ключ; Для Каждого мРегулярноеВыражение Из МассивРегулярныхВыражений Цикл @@ -58,9 +58,17 @@ Процедура ВывестиИнформациюОПакете(Знач УстановленныйПакет) Сообщить(СтрШаблон("Каталог: %1", УстановленныйПакет.КаталогПакета)); - + Если УстановленныйПакет.Свойство("Перекрывает") Тогда + + Для Каждого мПакет Из УстановленныйПакет.Перекрывает Цикл + Сообщить(СтрШаблон(" ! Перекрывает: %1", мПакет.КаталогПакета)); + КонецЦикла; + + КонецЕсли; + ОписаниеПакета = УстановленныйПакет.МетаданныеПакета; Если ТипЗнч(ОписаниеПакета) <> Тип("Булево") Тогда + Свойства = ОписаниеПакета.Свойства(); Для Каждого мСвойство Из Свойства Цикл @@ -101,3 +109,21 @@ Возврат ""; КонецФункции + +Функция КэшУстановленныхПакетовГлобальныхПакетов() + + ПутьККаталогуПакетов = ПолучитьЗначениеСистемнойНастройки("lib.system"); + КэшУстановленныхПакетов = Новый КэшУстановленныхПакетов(ПутьККаталогуПакетов); + + ДополнительныеКаталоги = ПолучитьЗначениеСистемнойНастройки("lib.additional"); + Если ЗначениеЗаполнено(ДополнительныеКаталоги) Тогда + + Для Каждого мКаталогПоиска Из СтрРазделить(ДополнительныеКаталоги, ";") Цикл + КэшУстановленныхПакетов.ДобавитьКаталогБиблиотек(СокрЛП(мКаталогПоиска)); + КонецЦикла; + + КонецЕсли; + + Возврат КэшУстановленныхПакетов; + +КонецФункции diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\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\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" index f2338de..54db500 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\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\232\321\215\321\210\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\275\321\213\321\205\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -42,20 +42,20 @@ УстановленаКорректнаяВерсия = Истина; ИначеЕсли ОписаниеЗависимости.МинимальнаяВерсия = ВерсияSNAPSHOT И УстановленнаяВерсия <> ВерсияSNAPSHOT Тогда УстановленаКорректнаяВерсия = Ложь; - Иначе - Если ОписаниеЗависимости.МинимальнаяВерсия = Неопределено Тогда - УстановленаКорректнаяВерсия = Истина; - Иначе - Попытка - // Сначала пытаемся использовать семвер - РезультатСравнения = Версии.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); - Исключение - // Если семвер не может обработать версию (например, 4-значную), используем модуль РаботаСВерсиями - РезультатСравнения = РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); - КонецПопытки; - - УстановленаКорректнаяВерсия = РезультатСравнения >= 0; - КонецЕсли; + Иначе + Если ОписаниеЗависимости.МинимальнаяВерсия = Неопределено Тогда + УстановленаКорректнаяВерсия = Истина; + Иначе + Попытка + // Сначала пытаемся использовать семвер + РезультатСравнения = Версии.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); + Исключение + // Если семвер не может обработать версию (например, 4-значную), используем модуль РаботаСВерсиями + РезультатСравнения = РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия); + КонецПопытки; + + УстановленаКорректнаяВерсия = РезультатСравнения >= 0; + КонецЕсли; КонецЕсли; Лог.Отладка("Пакет установлен: " + ПакетУстановлен); @@ -104,12 +104,11 @@ КонецПроцедуры Процедура ДобавитьУстановленныйПакет(Знач ФайлКаталога) + + ИмяПакета = ФайлКаталога.Имя; - ПутьКФайлуМетаданных = ОбъединитьПути(ФайлКаталога.ПолноеИмя, КонстантыOpm.ИмяФайлаМетаданныхПакета); - ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных); - Если ФайлМетаданных.Существует() Тогда - МетаОписаниеПакета = РаботаСПакетами.ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных); - Иначе + МетаОписаниеПакета = НайтиМетаОписаниеПакета(ФайлКаталога); + Если МетаОписаниеПакета = Неопределено Тогда // @deprecated МетаОписаниеПакета = Истина; КонецЕсли; @@ -118,10 +117,49 @@ СтруктураДанных.Вставить("МетаданныеПакета", МетаОписаниеПакета); СтруктураДанных.Вставить("КаталогПакета", ФайлКаталога.ПолноеИмя); - УстановленныеПакеты.Вставить(ФайлКаталога.Имя, СтруктураДанных); + УжеДобавленныйПакет = УстановленныеПакеты.Получить(ИмяПакета); + Если УжеДобавленныйПакет <> Неопределено Тогда + + СтруктураДанных.Вставить("Перекрывает", Новый Массив); + СтруктураДанных.Перекрывает.Добавить(УжеДобавленныйПакет); + + Если УжеДобавленныйПакет.Свойство("Перекрывает") Тогда + + Для Каждого мПакет Из УжеДобавленныйПакет.Перекрывает Цикл + СтруктураДанных.Перекрывает.Добавить(мПакет); + КонецЦикла; + + УжеДобавленныйПакет.Удалить("Перекрывает"); + + КонецЕсли; + + КонецЕсли; + + УстановленныеПакеты.Вставить(ИмяПакета, СтруктураДанных); КонецПроцедуры +Функция НайтиМетаОписаниеПакета(Знач ФайлКаталога) + + ПутьКФайлуМетаданных = ОбъединитьПути(ФайлКаталога.ПолноеИмя, КонстантыOpm.ИмяФайлаМетаданныхПакета); + ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных); + Если ФайлМетаданных.Существует() Тогда + Возврат РаботаСПакетами.ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных); + КонецЕсли; + + ПутьКФайлуМетаданных = ОбъединитьПути(ФайлКаталога.ПолноеИмя, КонстантыOpm.ИмяФайлаКонфигурацииБиблиотеки); + ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных); + Если ФайлМетаданных.Существует() Тогда + ОписаниеПакета = Новый ОписаниеПакета(); + ОписаниеПакета.Имя(ФайлКаталога.Имя); + ОписаниеПакета.Версия("<НЕТ>"); + Возврат ОписаниеПакета; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + Функция ПолучитьПутьКФайлуМетаданныхБиблиотеки(ИмяПакета) Экспорт ПутьКФайлуМетаданных = ""; @@ -140,10 +178,10 @@ Возврат ПутьКФайлуМетаданных; -КонецФункции - - - +КонецФункции + + + Процедура ПриСозданииОбъекта(КаталогПоискаБиблиотек = "") Лог = Логирование.ПолучитьЛог("oscript.app.opm"); @@ -162,4 +200,3 @@ КонецЕсли; КонецПроцедуры - diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\321\211\320\270\320\272\320\237\320\260\320\272\320\265\321\202\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\321\211\320\270\320\272\320\237\320\260\320\272\320\265\321\202\320\260.os" index 55abcbb..16bb622 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\321\211\320\270\320\272\320\237\320\260\320\272\320\265\321\202\320\260.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\261\320\276\321\200\321\211\320\270\320\272\320\237\320\260\320\272\320\265\321\202\320\260.os" @@ -126,9 +126,9 @@ Возврат; КонецЕсли; - Лог.Информация("Формирую определения модулей пакета (lib.config)"); + Лог.Информация("Формирую определения модулей пакета (%1)", КонстантыOpm.ИмяФайлаКонфигурацииБиблиотеки); - ПутьКонфигурацииПакета = ОбъединитьПути(ВремКаталогСборки, "lib.config"); + ПутьКонфигурацииПакета = ОбъединитьПути(ВремКаталогСборки, КонстантыOpm.ИмяФайлаКонфигурацииБиблиотеки); Запись = Новый ЗаписьXML; Запись.ОткрытьФайл(ПутьКонфигурацииПакета); Запись.ЗаписатьОбъявлениеXML(); diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213Opm.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213Opm.os" index 376d787..039d70f 100644 --- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213Opm.os" +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\321\202\320\260\320\275\321\202\321\213Opm.os" @@ -11,12 +11,14 @@ Перем ИмяЛога Экспорт; Перем ВерсияПродукта Экспорт; Перем ИмяФайлаНастроек Экспорт; +Перем ИмяФайлаКонфигурацииБиблиотеки Экспорт; /////////////////////////////////////////////////////////////// ИмяФайлаСпецификацииПакета = "packagedef"; ИмяФайлаСодержимогоПакета = "content.zip"; ИмяФайлаМетаданныхПакета = "opm-metadata.xml"; +ИмяФайлаКонфигурацииБиблиотеки = "lib.config"; СерверУдаленногоХранилища = "http://hub.oscript.io"; РесурсПубликацииПакетов = "/push"; ПутьВХранилище = "/download/"; From dc2e5a4ed4c91a9079e83b9880771c5c147cacd2 Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Sun, 20 Jul 2025 12:05:19 +0300 Subject: [PATCH 4/4] =?UTF-8?q?opm=20show:=20=D0=A0=D0=B5=D0=B3=D1=83?= =?UTF-8?q?=D0=BB=D1=8F=D1=80=D0=BA=D0=B0=20=D0=BA=D0=B0=D0=BA=20=D0=BF?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit По-умолчанию выполняем строгое сравнение искомой строки и имени пакета. Использование регулярного выражения включается отдельным флагом. --- ...20\260\320\275\320\264\320\260Opm_Show.os" | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) 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_Show.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_Show.os" index 0bcb750..b841244 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_Show.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_Show.os" @@ -4,6 +4,7 @@ Процедура ОписаниеКоманды(Знач КомандаПриложения) Экспорт КомандаПриложения.Опция("l local", Ложь, "Искать в локально установленных пакетах"); + КомандаПриложения.Опция("r regex", Ложь, "Строка поиска будет использоваться как регулярное выражение"); КомандаПриложения.Аргумент("PACKAGE", "", "Строка поиска пакета") .ТМассивСтрок() @@ -14,16 +15,23 @@ Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт УстановкаВЛокальныйКаталог = КомандаПриложения.ЗначениеОпции("local"); + ИспользоватьРегулярныеВыражения = КомандаПриложения.ЗначениеОпции("regex"); МассивПоисковыхЗапросов = КомандаПриложения.ЗначениеАргумента("PACKAGE"); - МассивРегулярныхВыражений = Новый Массив; + ШаблоныПоиска = Новый Массив; Для Каждого мТекстЗапроса Из МассивПоисковыхЗапросов Цикл - РегулярноеВыражение = Новый РегулярноеВыражение(мТекстЗапроса); - РегулярноеВыражение.ИгнорироватьРегистр = Истина; - - МассивРегулярныхВыражений.Добавить(РегулярноеВыражение); + Если ИспользоватьРегулярныеВыражения Тогда + + РегулярноеВыражение = Новый РегулярноеВыражение(мТекстЗапроса); + РегулярноеВыражение.ИгнорироватьРегистр = Истина; + + ШаблоныПоиска.Добавить(РегулярноеВыражение); + + Иначе + ШаблоныПоиска.Добавить(ВРЕГ(СокрЛП(мТекстЗапроса))); + КонецЕсли; КонецЦикла; @@ -39,9 +47,9 @@ КоличествоНайденныхПакетов = 0; Для Каждого УстановленныйПакет Из УстановленныеПакеты Цикл ИмяПакета = УстановленныйПакет.Ключ; - Для Каждого мРегулярноеВыражение Из МассивРегулярныхВыражений Цикл + Для Каждого мШаблонПоиска Из ШаблоныПоиска Цикл - Если мРегулярноеВыражение.Совпадает(ИмяПакета) Тогда + Если Совпадает(мШаблонПоиска, ИмяПакета) Тогда КоличествоНайденныхПакетов = КоличествоНайденныхПакетов + 1; ВывестиИнформациюОПакете(УстановленныйПакет.Значение); Прервать; @@ -55,6 +63,16 @@ КонецПроцедуры +Функция Совпадает(Знач ОбъектСравнения, Знач СтрокаПоиска) + + Если ТипЗнч(ОбъектСравнения) = Тип("РегулярноеВыражение") Тогда + Возврат ОбъектСравнения.Совпадает(СтрокаПоиска); + Иначе + Возврат ВРЕГ(СокрЛП(СтрокаПоиска)) = ОбъектСравнения; + КонецЕсли; + +КонецФункции + Процедура ВывестиИнформациюОПакете(Знач УстановленныйПакет) Сообщить(СтрШаблон("Каталог: %1", УстановленныйПакет.КаталогПакета));