Skip to content

Commit

Permalink
Merge pull request #8 from 240596448/feature/get-current-version
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 authored Aug 15, 2022
2 parents cd34333 + d74519b commit fbed2c5
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 17 deletions.
2 changes: 1 addition & 1 deletion features/install-with-alias.feature
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Функциональность: Установка движка с алиасом

Как разработчик библиотек
Я иметь возможность установить несколько версий одного и того же движка
Я хочу иметь возможность установить несколько версий одного и того же движка
Чтобы тестировать свою библиотеку с разным набором системных пакетов

Контекст:
Expand Down
2 changes: 1 addition & 1 deletion features/install-with-clean.feature
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Функциональность: Установка движка с учетом сохранения библиотек

Как пользователь OneScript
Я иметь возможность обновлять движок без последующей переустановки библиотек
Я хочу иметь возможность обновлять движок без последующей переустановки библиотек
Чтобы не тратить свое время

Контекст:
Expand Down
13 changes: 12 additions & 1 deletion features/integration.feature
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
Сценарий: Вывод справки
Когда Я выполняю команду "ovm"
Тогда я вижу в консоли вывод "OneScript Version Manager"
И я вижу в консоли вывод "Строка запуска: ovm [ОПЦИИ] КОМАНДА [аргументы...]"
И я вижу в консоли вывод "Строка запуска: ovm [ОПЦИИ] КОМАНДА [аргументы...]"

Сценарий: Вывод версии
Когда Я выполняю команду "ovm -v"
Expand All @@ -32,6 +32,17 @@
И Я выполняю команду "ovm use stable"
Тогда я вижу в консоли вывод "OneScript stable активирован"

Сценарий: Удаление версии тождественной текущей
Когда Я выполняю команду "ovm install --name latest stable"
Тогда я вижу в консоли вывод "Установка OneScript stable..."
И я вижу в консоли вывод "Установка OneScript stable завершена"
И я вижу в консоли вывод "ovm use latest"

Когда Я выполняю команду "ovm delete latest"
Тогда Я Показываю вывод команды
И я не вижу в консоли вывод "Версия <latest> не удалена, т.к. является текущей."
И я вижу в консоли вывод "Версия latest удалена"

Сценарий: Проверка использования версии
Когда Я выполняю команду "ovm ls"
И Я Показываю вывод команды
Expand Down
8 changes: 7 additions & 1 deletion features/step_definitions/install-with-alias.os
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,13 @@
//Я удаляю каталог "./temp/ovm"
Процедура ЯУдаляюКаталог(Знач ПутьККаталогу) Экспорт
Если ФС.Существует(ПутьККаталогу) Тогда
УдалитьФайлы(Новый Файл(ПутьККаталогу).ПолноеИмя);
ПолноеИмя = Новый Файл(ПутьККаталогу).ПолноеИмя;

// Обход ошибки удаления каталога с символической ссылкой внутри (windows only)
// junction нужно удалять явно
УдалитьФайлы(ОбъединитьПути(ПолноеИмя, "current"));

УдалитьФайлы(ПолноеИмя);
КонецЕсли;
КонецПроцедуры

59 changes: 46 additions & 13 deletions src/core/Модули/ВерсииOneScript.os
Original file line number Diff line number Diff line change
Expand Up @@ -48,18 +48,12 @@
Если НЕ ВерсияУстановлена(ПроверяемаяВерсия) Тогда
Возврат Ложь;
КонецЕсли;

ПутьКДвижкуТекущейВерсии = ПолучитьПутьКУстановленномуДвижкуOneScript("current");
ПутьКДвижкуПроверяемойВерсии = ПолучитьПутьКУстановленномуДвижкуOneScript(ПроверяемаяВерсия);

ФайлДвижкаТекущейВерсии = Новый Файл(ПутьКДвижкуТекущейВерсии);
ФайлДвижкаПроверяемойВерсии = Новый Файл(ПутьКДвижкуПроверяемойВерсии);
АлиасыСимлинков = ПолучитьАлиасыСимлинков();

ФайлыПроверяемойВерсииСовпадаетСТекущейВерсией =
ФайлДвижкаТекущейВерсии.ПолучитьВремяИзменения() = ФайлДвижкаПроверяемойВерсии.ПолучитьВремяИзменения()
И ФайлДвижкаТекущейВерсии.ПолучитьВремяСоздания() = ФайлДвижкаПроверяемойВерсии.ПолучитьВремяСоздания();
ТекущаяВерсия = АлиасыСимлинков["current"];

Возврат ФайлыПроверяемойВерсииСовпадаетСТекущейВерсией;
Возврат ПроверяемаяВерсия = ТекущаяВерсия;

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

Expand All @@ -80,9 +74,7 @@
УстановленныеВерсии.Колонки.Добавить("Версия");
УстановленныеВерсии.Колонки.Добавить("ЭтоСимлинк");

// TODO: определение симлинка на основании аттрибутов файла?
МассивИменСимлинков = Новый Массив;
МассивИменСимлинков.Добавить("current");
АлиасыСимлинков = ПолучитьАлиасыСимлинков();

КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();
НайденныеФайлы = НайтиФайлы(КаталогУстановки, ПолучитьМаскуВсеФайлы());
Expand All @@ -95,14 +87,55 @@
СтрокаВерсии.Алиас = НайденныйФайл.Имя;
СтрокаВерсии.Путь = НайденныйФайл.ПолноеИмя;
СтрокаВерсии.Версия = ПолучитьТочнуюВерсиюOneScript(СтрокаВерсии.Алиас);
СтрокаВерсии.ЭтоСимлинк = МассивИменСимлинков.Найти(НайденныйФайл.Имя) <> Неопределено;
СтрокаВерсии.ЭтоСимлинк = АлиасыСимлинков.Получить(НайденныйФайл.Имя) <> Неопределено;

КонецЦикла;

Возврат УстановленныеВерсии;

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

Функция ПолучитьАлиасыСимлинков()

КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию();

Команда = Новый Команда();

Если ЭтоWindows Тогда
Команда.УстановитьКоманду("dir");
Иначе
Команда.УстановитьКоманду("ls");
Команда.ДобавитьПараметр("-la");
КонецЕсли;
Команда.ДобавитьПараметр(КаталогУстановки);

Команда.Исполнить();

ВыводКоманды = Команда.ПолучитьВывод();

Если ЭтоWindows Тогда
Выражение = "(<JUNCTION>|<SYMLINKD>)\s*(.+?)\s*\[(.+)\]";
Иначе
Выражение = "l.+?(\d\d:\d\d)\s*(.+?)\s*->\s*(.+)";
КонецЕсли;

РВ = Новый РегулярноеВыражение(Выражение);
РВ.МногоСтрочный = Ложь;
Совпадения = РВ.НайтиСовпадения(ВыводКоманды);

АлиасыСимлинков = Новый Соответствие;
РазделительПути = ПолучитьРазделительПути();

Для Каждого Совпадение Из Совпадения Цикл
Группы = Совпадение.Группы;
ЧастиПути = СтрРазделить(Группы[3].Значение, РазделительПути);
АлиасыСимлинков.Вставить(Группы[2].Значение, ЧастиПути[ЧастиПути.ВГраница()]);
КонецЦикла;

Возврат АлиасыСимлинков;

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

// Получить информацию о версиях, доступных к установке
//
// Возвращаемое значение:
Expand Down

0 comments on commit fbed2c5

Please sign in to comment.