Skip to content

Commit

Permalink
Merge branch 'release/v0.9.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Jan 11, 2017
2 parents fa6e04a + 1ab9759 commit c4d9533
Show file tree
Hide file tree
Showing 9 changed files with 219 additions and 102 deletions.
5 changes: 4 additions & 1 deletion packagedef
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@

Константы_ЛокальнаяВерсия = ЗагрузитьСценарий("src/Модули/Константы.os");

Описание.Имя("opm")
.Версия("0.8.0")
.Версия(Константы_ЛокальнаяВерсия.ВерсияПродукта)
.ЗависитОт("fs", "0.3")
.ЗависитОт("logos")
.ЗависитОт("cmdline")
.ЗависитОт("tempfiles")
Expand Down
100 changes: 65 additions & 35 deletions src/Классы/ДиспетчерКомандПриложения.os
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ДобавитьКомандуApp(Парсер);
ДобавитьКомандуConfig(Парсер);
ДобавитьКомандуList(Парсер);
ДобавитьКомандуVersion(Парсер);
ДобавитьКомандуHelp(Парсер);
КонецПроцедуры

Expand Down Expand Up @@ -51,6 +52,7 @@
Команда = Парсер.ОписаниеКоманды("install", "Выполнить установку. Если указано имя пакета, происходит установка из хаба или из файла. В обратном случае устанавливаются зависимости текущего пакета по файлу packagedef.");
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-all", "Установить все пакеты, зарегистрированные в хабе");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-f", "Указать файл из которого нужно установить пакет");
Парсер.ДобавитьПараметрФлагКоманды(Команда, "-l", "Установить пакеты в локальный каталог oscript_modules");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ИмяПакета", "Имя пакета в хабе. Чтобы установить конкретную версию, используйте ИмяПакета@ВерсияПакета");
Парсер.ДобавитьКоманду(Команда);
КонецПроцедуры
Expand All @@ -73,6 +75,7 @@

Процедура ДобавитьКомандуConfig(Знач Парсер)
Команда = Парсер.ОписаниеКоманды("config", "Задать пользовательские настройки");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-winCreateBashLauncher","Создавать sh-скрипт запуска для пакетов приложений в среде Windows");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "-proxyusedefault","Использовать ПроксиПоУмолчанию (системные настройки)");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-proxyserver", "Адрес прокси");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-proxyport", "Порт прокси");
Expand All @@ -88,13 +91,22 @@
Парсер.ДобавитьКоманду(Команда);
КонецПроцедуры

Процедура ДобавитьКомандуVersion(Знач Парсер)
Команда = Парсер.ОписаниеКоманды("version", "Вывести версию продукта");
Парсер.ДобавитьКоманду(Команда);
КонецПроцедуры

Процедура ДобавитьКомандуHelp(Знач Парсер) Экспорт
Команда = Парсер.ОписаниеКоманды("help", "Справка по командам");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ИмяКоманды", "Имя команды по которой надо получить справку");
Парсер.ДобавитьКоманду(Команда);
КонецПроцедуры

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

Если ПараметрыКоманды.Команда <> "version" И ПараметрыКоманды.Команда <> "help" Тогда
ВывестиВерсию();
КонецЕсли;

ЗначенияПараметров = ПараметрыКоманды.ЗначенияПараметров;
Если ПараметрыКоманды.Команда = "build" Тогда
Expand All @@ -114,19 +126,28 @@
ИначеЕсли ПараметрыКоманды.Команда = "config" Тогда
НастройкиПриложения.СохранитьНастройки(ЗначенияПараметров);
ИначеЕсли ПараметрыКоманды.Команда = "list" Тогда
ВывестиСписокПакетов(ЗначенияПараметров);
ВывестиСписокПакетов(ЗначенияПараметров);
ИначеЕсли ПараметрыКоманды.Команда = "version" Тогда
ВывестиВерсиюКратко();
ИначеЕсли ПараметрыКоманды.Команда = "help" Тогда
ВывестиСправку(ЗначенияПараметров);
КонецЕсли;

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

/////////////////////////////////////////////////////////////////////////
// Реализация команд

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

Установщик = Новый УстановкаПакета;

Если ЗначенияПараметров["-l"] Тогда
Установщик.УстановитьРежимУстановкиПакетов(РежимУстановкиПакетов.Локально);
Иначе
Установщик.УстановитьРежимУстановкиПакетов(РежимУстановкиПакетов.Глобально);
КонецЕсли;

Если ЗначенияПараметров["-all"] Тогда
Установщик.УстановитьВсеПакетыИзОблака();
ИначеЕсли ЗначенияПараметров["-f"] = Неопределено И ЗначенияПараметров["ИмяПакета"] = Неопределено Тогда
Expand All @@ -136,32 +157,32 @@
Иначе
Установщик.УстановитьПакетИзОблака(ЗначенияПараметров["ИмяПакета"]);
КонецЕсли;

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

Процедура ВыполнитьСборку(Знач КаталогИсходников, Знач ФайлМанифеста, Знач ВыходнойКаталог) Экспорт

Сборщик = Новый СборщикПакета();
Сборщик.СобратьПакет(КаталогИсходников, ФайлМанифеста, ВыходнойКаталог);

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

Процедура ПодготовитьКаталогПроекта(Знач ВыходнойКаталог) Экспорт

Сборщик = Новый СборщикПакета();
Сборщик.ПодготовитьКаталогПроекта(ВыходнойКаталог);

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

Процедура ВыполнитьЗадачу(Знач ИмяЗадачи, Знач ПараметрыЗадачи)

ИсполнительЗадач = Новый ИсполнительЗадач();
ИсполнительЗадач.ВыполнитьЗадачу(ИмяЗадачи, ПараметрыЗадачи);

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

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

Установщик = Новый УстановкаПакета;
Если ЗначенияПараметров["-all"] Тогда
Установщик.ОбновитьУстановленныеПакеты();
Expand All @@ -170,14 +191,14 @@
Иначе
Установщик.ОбновитьПакетИзОблака(ЗначенияПараметров["ИмяПакета"]);
КонецЕсли;

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

Процедура СоздатьСкриптЗапуска(Знач ИмяСкрипта, Знач Каталог, Знач ИмяФайлаЗапуска) Экспорт
Если ИмяСкрипта = Неопределено Тогда
ВызватьИсключение "Не указано имя файла скрипта";
КонецЕсли;

ФайлСкрипта = Новый Файл(ИмяСкрипта);
ПолноеИмяСкрипта = ФайлСкрипта.ПолноеИмя;
Если Не ФайлСкрипта.Существует() Тогда
Expand All @@ -188,15 +209,15 @@
ПолноеИмяСкрипта = ФайлСкрипта.ПолноеИмя;
КонецЕсли;
КонецЕсли;

Если Не ФайлСкрипта.ЭтоФайл() Тогда
ВызватьИсключение "Указанный скрипт """ + ПолноеИмяСкрипта + """ не является файлом";
КонецЕсли;

Если Каталог = Неопределено Тогда
Каталог = КаталогПрограммы();
КонецЕсли;

ФайлКаталога = Новый Файл(Каталог);
Каталог = ФайлКаталога.ПолноеИмя;
Если ФайлКаталога.Существует() Тогда
Expand All @@ -209,34 +230,34 @@
ВызватьИсключение "Не удалось создать каталог """ + Каталог + """";
КонецЕсли;
КонецЕсли;

ИмяСкриптаЗапуска = ?(ИмяФайлаЗапуска = Неопределено, ФайлСкрипта.ИмяБезРасширения, ИмяФайлаЗапуска);
Установщик = Новый УстановкаПакета;
Установщик.СоздатьСкриптЗапуска(ИмяСкриптаЗапуска, ПолноеИмяСкрипта, Каталог);

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

Процедура ВывестиСписокПакетов(Знач ЗначенияПараметров)

ТихийРежим = ЗначенияПараметров["-q"];

Если ЗначенияПараметров["-remote"] Тогда
ТекстСообщения = СтрШаблон("Пакеты в хабе:");
КэшПакетовВХабе = Новый КэшПакетовХаба();
УстановленныеПакеты = КэшПакетовВХабе.ПолучитьПакетыХаба();
Иначе

ПутьККаталогуПакетов = ПолучитьЗначениеСистемнойНастройки("lib.system");
ТекстСообщения = СтрШаблон("Пакеты в системном каталоге библиотек <%1>:", ПутьККаталогуПакетов);

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

Если НЕ ТихийРежим Тогда
Сообщить(ТекстСообщения);
Сообщить(ТекстСообщения);
КонецЕсли;

Для Каждого УстановленныйПакет Из УстановленныеПакеты Цикл
СтрокаСообщения = УстановленныйПакет.Ключ;
Если ТипЗнч(УстановленныйПакет.Значение) = Тип("ОписаниеПакета") Тогда
Expand All @@ -248,6 +269,15 @@

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

Процедура ВывестиВерсиюКратко()
Сообщить(Константы.ВерсияПродукта);
КонецПроцедуры

Процедура ВывестиВерсию()
Сообщить("OneScript Package Manager v" + Константы.ВерсияПродукта);
Сообщить("");
КонецПроцедуры

Процедура ВывестиСправку(Знач ЗначенияПараметров)
Если ЗначенияПараметров["ИмяКоманды"] = Неопределено Тогда
ВывестиСправкуПоКомандам();
Expand All @@ -257,14 +287,14 @@
КонецПроцедуры

Процедура ВывестиСправкуПоКомандам() Экспорт

Парсер = Новый ПарсерАргументовКоманднойСтроки;
ДобавитьОписанияКоманд(Парсер);

ВозможныеКоманды = Парсер.СправкаВозможныеКоманды();
Сообщить("OneScript Package Manager
|Возможные команды:");

ВывестиВерсию();
Сообщить("Возможные команды:");
МаксШирина = 0;
Поле = " ";
Для Каждого Команда Из ВозможныеКоманды Цикл
Expand All @@ -273,27 +303,27 @@
МаксШирина = ТекШирина;
КонецЕсли;
КонецЦикла;

Для Каждого Команда Из ВозможныеКоманды Цикл
Сообщить(" " + Лев(Команда.Команда + Поле, МаксШирина + 2) + "- " + Команда.Пояснение);
КонецЦикла;

Сообщить("Наберите opm help <команда>, чтобы вывести справку по команде");

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

Процедура ВывестиСправкуПоКоманде(Знач ИмяКоманды)

Парсер = Новый ПарсерАргументовКоманднойСтроки;
ДобавитьОписанияКоманд(Парсер);

ВозможныеКоманды = Парсер.СправкаВозможныеКоманды();
ОписаниеКоманды = ВозможныеКоманды.Найти(ИмяКоманды, "Команда");
Если ОписаниеКоманды = Неопределено Тогда
Сообщить("Команда отсуствует: " + ИмяКоманды);
Возврат;
КонецЕсли;

Сообщить("" + ОписаниеКоманды.Команда + " - " + ОписаниеКоманды.Пояснение);
Сообщить("Параметры:");
Для Каждого СтрПараметр Из ОписаниеКоманды.Параметры Цикл
Expand All @@ -303,7 +333,7 @@
Сообщить(СтрШаблон(" %1 - %2", СтрПараметр.Имя, СтрПараметр.Пояснение));
КонецЕсли;
КонецЦикла;

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

/////////////////////////////////////////////////////////////////////
Expand Down
62 changes: 47 additions & 15 deletions src/Классы/КэшУстановленныхПакетов.os
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,30 @@

Перем УстановленныеПакеты;

Функция ПакетУстановлен(Знач ИмяПакета) Экспорт

Возврат УстановленныеПакеты[ИмяПакета] = Истина;

Функция ПакетУстановлен(Знач ОписаниеЗависимости) Экспорт

ПакетУстановлен = УстановленныеПакеты.Получить(ОписаниеЗависимости.ИмяПакета) <> Неопределено;

КаталогБиблиотек = ОбъединитьПути(КаталогПрограммы(), ПолучитьЗначениеСистемнойНастройки("lib.system"));
ПутьКФайлуМетаданных = ОбъединитьПути(
КаталогБиблиотек,
ОписаниеЗависимости.ИмяПакета,
Константы.ИмяФайлаМетаданныхПакета
);
ФайлМетаданных = Новый Файл(ПутьКФайлуМетаданных);
Если ФайлМетаданных.Существует() Тогда
МетаОписаниеПакета = ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных);
УстановленнаяВерсия = МетаОписаниеПакета.Свойства().Версия;
Иначе
// @deprecated
УстановленнаяВерсия = 0;
КонецЕсли;

УстановленаКорректнаяВерсия = ОписаниеЗависимости.МинимальнаяВерсия = Неопределено
ИЛИ РаботаСВерсиями.СравнитьВерсии(УстановленнаяВерсия, ОписаниеЗависимости.МинимальнаяВерсия) = 1;

Возврат ПакетУстановлен И УстановленаКорректнаяВерсия;

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

Процедура Обновить() Экспорт
Expand All @@ -31,7 +51,7 @@
КонецФункции

Процедура Инициализация()

Лог = Логирование.ПолучитьЛог("oscript.app.opm");
//Лог.УстановитьУровень(УровниЛога.Отладка);

Expand All @@ -43,22 +63,34 @@

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

Если ФайлМетаданных.Существует() Тогда
МетаОписаниеПакета = ПрочитатьМетаданныеПакета(ПутьКФайлуМетаданных);
Иначе
// @deprecated
МетаОписаниеПакета = Истина;
КонецЕсли;

УстановленныеПакеты.Вставить(ФайлКаталога.Имя, МетаОписаниеПакета);

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

Функция ПрочитатьМетаданныеПакета(Знач ПутьКФайлуМетаданных)

Перем Метаданные;
Попытка
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ПутьКФайлуМетаданных);
Лог.Отладка("XML загружен");
Сериализатор = Новый СериализацияМетаданныхПакета;
МетаОписаниеПакета = Сериализатор.ПрочитатьXML(Чтение);
Метаданные = Сериализатор.ПрочитатьXML(Чтение);

Чтение.Закрыть();
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;

Иначе
МетаОписаниеПакета = Истина;
КонецЕсли;

УстановленныеПакеты.Вставить(ФайлКаталога.Имя, МетаОписаниеПакета);
Возврат Метаданные;

КонецПроцедуры
КонецФункции

Инициализация();
Loading

0 comments on commit c4d9533

Please sign in to comment.