-
Notifications
You must be signed in to change notification settings - Fork 33
feat: Добавить команду opm uninstall #260
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
base: master
Are you sure you want to change the base?
Changes from 2 commits
723ad34
6162bfb
341f690
61f56d7
a001f81
14a14ab
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| /////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| // Прикладной интерфейс | ||
|
|
||
| Процедура ОписаниеКоманды(Знач КомандаПриложения) Экспорт | ||
|
|
||
| КомандаПриложения.Опция("l local", Ложь, "Удалить пакет из локального каталога oscript_modules"); | ||
|
|
||
| КомандаПриложения.Аргумент("PACKAGE", "", "Имя пакета для удаления") | ||
| .Обязательный(); | ||
|
|
||
| КонецПроцедуры | ||
|
|
||
| Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт | ||
|
|
||
| УдалениеИзЛокальногоКаталога = КомандаПриложения.ЗначениеОпции("local"); | ||
| ИмяПакета = КомандаПриложения.ЗначениеАргумента("PACKAGE"); | ||
|
|
||
| РежимУстановки = РежимУстановкиПакетов.Глобально; | ||
| Если УдалениеИзЛокальногоКаталога Тогда | ||
| РежимУстановки = РежимУстановкиПакетов.Локально; | ||
| КонецЕсли; | ||
|
|
||
| РаботаСПакетами.УдалитьПакет(ИмяПакета, РежимУстановки); | ||
|
|
||
| КонецПроцедуры |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -235,6 +235,86 @@ | |
|
|
||
| КонецФункции | ||
|
|
||
| Процедура УдалитьПакет(Знач ИмяПакета, Знач РежимУстановки) Экспорт | ||
|
|
||
| КэшПакетов = ПолучитьУстановленныеПакеты(РежимУстановки); | ||
| УстановленныеПакеты = КэшПакетов.ПолучитьУстановленныеПакеты(); | ||
|
|
||
| ДанныеПакета = УстановленныеПакеты.Получить(ИмяПакета); | ||
| Если ДанныеПакета = Неопределено Тогда | ||
| ВызватьИсключение СтрШаблон("Пакет '%1' не установлен", ИмяПакета); | ||
| КонецЕсли; | ||
|
|
||
| КаталогПакета = ДанныеПакета.КаталогПакета; | ||
|
|
||
| // Удалить скрипты запуска, если есть метаданные с исполняемыми файлами | ||
| МетаданныеПакета = ДанныеПакета.МетаданныеПакета; | ||
| Если ТипЗнч(МетаданныеПакета) <> Тип("Булево") Тогда | ||
| УдалитьСкриптыЗапуска(МетаданныеПакета, ИмяПакета, РежимУстановки); | ||
| КонецЕсли; | ||
|
|
||
| // Удалить каталог пакета | ||
| Лог.Отладка("Удаляю каталог пакета: %1", КаталогПакета); | ||
| УдалитьФайлы(КаталогПакета); | ||
|
|
||
| ОбщегоНазначенияOpm.СообщениеПользователю(Лог, "Пакет удалён: %1", ИмяПакета); | ||
|
|
||
| КонецПроцедуры | ||
|
|
||
| Процедура УдалитьСкриптыЗапуска(Знач МетаданныеПакета, Знач ИмяПакета, Знач РежимУстановки) | ||
|
|
||
| СИ = Новый СистемнаяИнформация(); | ||
| ЭтоWindows = Найти(НРег(СИ.ВерсияОС), "windows") > 0; | ||
|
|
||
| ИсполняемыеФайлы = МетаданныеПакета.ИсполняемыеФайлы(); | ||
| Если ИсполняемыеФайлы.Количество() = 0 Тогда | ||
| Возврат; | ||
| КонецЕсли; | ||
|
|
||
| Если РежимУстановки = РежимУстановкиПакетов.Локально Тогда | ||
| КаталогСкриптов = ОбъединитьПути(КонстантыOpm.ЛокальныйКаталогУстановкиПакетов, "bin"); | ||
| Иначе | ||
| КаталогСкриптов = ?(ЭтоWindows, КаталогПрограммы(), ПолучитьКаталогСкриптовLinux()); | ||
| Если НЕ ПустаяСтрока(ПолучитьПеременнуюСреды("OSCRIPTBIN")) Тогда | ||
| КаталогСкриптов = ПолучитьПеременнуюСреды("OSCRIPTBIN"); | ||
| КонецЕсли; | ||
| КонецЕсли; | ||
|
|
||
| Для Каждого ФайлПриложения Из ИсполняемыеФайлы Цикл | ||
|
|
||
| ИмяСкриптаЗапуска = ?(ПустаяСтрока(ФайлПриложения.ИмяПриложения), ИмяПакета, ФайлПриложения.ИмяПриложения); | ||
|
|
||
| Если ЭтоWindows Тогда | ||
| ПутьКСкрипту = ОбъединитьПути(КаталогСкриптов, ИмяСкриптаЗапуска + ".bat"); | ||
| Если ФС.ФайлСуществует(ПутьКСкрипту) Тогда | ||
| Лог.Отладка("Удаляю скрипт запуска: %1", ПутьКСкрипту); | ||
| УдалитьФайлы(ПутьКСкрипту); | ||
| КонецЕсли; | ||
| КонецЕсли; | ||
|
|
||
| ПутьКСкрипту = ОбъединитьПути(КаталогСкриптов, ИмяСкриптаЗапуска); | ||
| Если ФС.ФайлСуществует(ПутьКСкрипту) Тогда | ||
| Лог.Отладка("Удаляю скрипт запуска: %1", ПутьКСкрипту); | ||
| УдалитьФайлы(ПутьКСкрипту); | ||
| КонецЕсли; | ||
|
|
||
| КонецЦикла; | ||
|
|
||
| КонецПроцедуры | ||
|
|
||
| Функция ПолучитьКаталогСкриптовLinux() | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @copilot скрипты ставятся в тот же каталог, где лежит исполняемый файл oscript
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Исправил — теперь для глобального режима используется |
||
|
|
||
| ТекстовыйДокумент = Новый ТекстовыйДокумент(); | ||
| Попытка | ||
| ТекстовыйДокумент.Записать("/usr/bin/opm-check-temp.txt"); | ||
| УдалитьФайлы("/usr/bin/opm-check-temp.txt"); | ||
| Возврат "/usr/bin"; | ||
| Исключение | ||
| Возврат "/usr/local/bin"; | ||
| КонецПопытки; | ||
|
|
||
| КонецФункции | ||
|
|
||
| Функция ПолучитьКаталогСистемныхБиблиотек() | ||
|
|
||
| СистемныеБиблиотеки = ОбъединитьПути(КаталогПрограммы(), ПолучитьЗначениеСистемнойНастройки("lib.system")); | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,60 @@ | ||
| #Использовать "../src/core" | ||
| #Использовать asserts | ||
| #Использовать fs | ||
| #Использовать tempfiles | ||
|
|
||
| Перем юТест; | ||
| Перем мВременныеФайлы; | ||
|
|
||
| Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт | ||
|
|
||
| юТест = Тестирование; | ||
|
|
||
| ИменаТестов = Новый Массив; | ||
|
|
||
| ИменаТестов.Добавить("ТестДолжен_УдалитьУстановленныйПакет"); | ||
|
|
||
| Возврат ИменаТестов; | ||
|
|
||
| КонецФункции | ||
|
|
||
| Процедура ПередЗапускомТеста() Экспорт | ||
| КонецПроцедуры | ||
|
|
||
| Процедура ПослеЗапускаТеста() Экспорт | ||
| мВременныеФайлы.Удалить(); | ||
| ПутьККаталогу = ОбъединитьПути(ТекущийКаталог(), "oscript_modules", "test"); | ||
| Если ФС.КаталогСуществует(ПутьККаталогу) Тогда | ||
| УдалитьФайлы(ПутьККаталогу); | ||
| КонецЕсли; | ||
| КонецПроцедуры | ||
|
|
||
| Процедура ТестДолжен_УдалитьУстановленныйПакет() Экспорт | ||
|
nixel2007 marked this conversation as resolved.
Outdated
|
||
|
|
||
| // Собираем тестовый пакет | ||
| Сборщик = Новый СборщикПакета; | ||
| КаталогСборки = мВременныеФайлы.СоздатьКаталог(); | ||
|
|
||
| Сборщик.СобратьПакет( | ||
| ОбъединитьПути(ТекущийСценарий().Каталог, "testpackage", "testpackage-0.3.1"), | ||
| Неопределено, КаталогСборки); | ||
|
|
||
| ФайлПакета = Новый Файл(ОбъединитьПути(КаталогСборки, "test-0.3.1.ospx")); | ||
|
|
||
| // Устанавливаем пакет локально | ||
| Установщик = Новый МенеджерУстановкиПакетов(); | ||
| Установщик.УстановитьРежимУстановкиПакетов(РежимУстановкиПакетов.Локально); | ||
| Установщик.УстановитьПакетИзАрхива(ФайлПакета.ПолноеИмя, Истина); | ||
|
|
||
| ПутьКПакету = ОбъединитьПути(КонстантыOpm.ЛокальныйКаталогУстановкиПакетов, "test"); | ||
| Ожидаем.Что(ФС.КаталогСуществует(ПутьКПакету), "Каталог пакета должен существовать после установки").ЭтоИстина(); | ||
|
|
||
| // Удаляем пакет | ||
| РаботаСПакетами.УдалитьПакет("test", РежимУстановкиПакетов.Локально); | ||
|
|
||
| // Проверяем, что каталог пакета удалён | ||
| Ожидаем.Что(ФС.КаталогСуществует(ПутьКПакету), "Каталог пакета не должен существовать после удаления").ЭтоЛожь(); | ||
|
|
||
| КонецПроцедуры | ||
|
|
||
| мВременныеФайлы = Новый МенеджерВременныхФайлов; | ||
Uh oh!
There was an error while loading. Please reload this page.