-
Notifications
You must be signed in to change notification settings - Fork 31
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
[WIP] Исправил ошибку, которая приводила к удалению установленного пакета при его неудачном обновлении #185
Changes from all commits
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 @@ | ||
// заглушка | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
// заглушка | ||
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. Зачем это? 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. см. выше |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
//////////////////////////////////////////////////////////// | ||
// Описание пакета для сборки и установки | ||
// Полную документацию см. на hub.oscript.io/packaging | ||
// | ||
|
||
/////////////////////////////////////////////////////////////////// | ||
// Процедуры установки пакета с клиентской машины | ||
/////////////////////////////////////////////////////////////////// | ||
|
||
// Вызывается пакетным менеджером перед установкой пакета на клиентскую машину. | ||
// | ||
// Параметры: | ||
// КаталогУстановкиПакета - строка. Путь в который пакетный менеджер устанавливает текущий пакет. | ||
// ЧтениеZipФайла - ЧтениеZipФайла. Архив пакета. | ||
// | ||
Процедура ПередУстановкой(Знач КаталогУстановкиПакета, Знач ЧтениеZipФайла) Экспорт | ||
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. Требуется ли здесь полный packagedef со всеми процедурами? 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. возможно, не требуется. попробую его упростить. |
||
Сообщить(СтрШаблон("Событие установки - ПередУстановкой - КаталогУстановкиПакета %1", | ||
КаталогУстановкиПакета)); | ||
КонецПроцедуры | ||
|
||
// Вызывается пакетным менеджером после распаковки пакета на клиентскую машину. | ||
// | ||
// Параметры: | ||
// КаталогУстановкиПакета - строка. Путь в который пакетный менеджер устанавливает текущий пакет. | ||
// | ||
Процедура ПриУстановке(Знач КаталогУстановкиПакета, СтандартнаяОбработка) Экспорт | ||
|
||
Сообщить(СтрШаблон("Событие установки - ПриУстановке - КаталогУстановкиПакета %1", | ||
КаталогУстановкиПакета)); | ||
|
||
КонецПроцедуры | ||
|
||
/////////////////////////////////////////////////////////////////// | ||
// Процедуры сборки пакета | ||
/////////////////////////////////////////////////////////////////// | ||
|
||
|
||
// Вызывается пакетным менеджером перед началом сборки пакета. | ||
// | ||
// Параметры: | ||
// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета. | ||
// | ||
Процедура ПередСборкой(Знач РабочийКаталог) Экспорт | ||
|
||
Сообщить(СтрШаблон("Событие установки - ПередСборкой - рабочий каталог %1", | ||
РабочийКаталог)); | ||
|
||
КонецПроцедуры | ||
|
||
// Вызывается пакетным менеджером после помещения файлов в пакет. | ||
// | ||
// Параметры: | ||
// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета. | ||
// АрхивПакета - ЗаписьZIPФайла - ZIP-архив с содержимым пакета (включаемые файлы). | ||
// | ||
Процедура ПриСборке(Знач РабочийКаталог, Знач АрхивПакета) Экспорт | ||
|
||
Сообщить(СтрШаблон("Событие установки - ПриСборке - рабочий каталог %1", | ||
РабочийКаталог)); | ||
|
||
КонецПроцедуры | ||
|
||
|
||
// Вызывается пакетным менеджером после сборки пакета. | ||
// | ||
// Параметры: | ||
// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета. | ||
// ПутьКФайлуПакета - Строка - Полный путь к собранному файлу пакета. | ||
// | ||
Процедура ПослеСборки(Знач РабочийКаталог, Знач ПутьКФайлуПакета) Экспорт | ||
|
||
Сообщить(СтрШаблон("Событие установки - ПослеСборки - рабочий каталог %1, ПутьКФайлуПакета %2", | ||
РабочийКаталог, ПутьКФайлуПакета)); | ||
|
||
КонецПроцедуры | ||
|
||
Описание.Имя("test") | ||
.Версия("0.3.1") | ||
.ВерсияСреды("999.1.0") | ||
.ВключитьФайл("packagedef") | ||
.ВключитьФайл("folder"); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# language: ru | ||
|
||
Функциональность: Настройки продукта | ||
|
||
Как разработчик | ||
Я хочу при возникновении ошибки во время обновления пакета сохранять в каталоге ранее установленный пакет | ||
Чтобы избежать ошибок, связанных с отсутствием пакетов, которые ранее были установлены | ||
|
||
|
||
Контекст: Тестовый контекст | ||
Допустим Я создаю временный каталог и сохраняю его в переменной "РабочийКаталог" | ||
|
||
Допустим Я очищаю параметры команды "opm" в контексте | ||
И Я устанавливаю путь выполнения команды "opm" к текущей библиотеке | ||
И Я создаю временный каталог и сохраняю его в переменной "КаталогСборкиПакета" | ||
И Я выполняю сборку пакета "fixtures/testpackage" в каталог из переменной "КаталогСборкиПакета" | ||
И Я сохраняю файл пакета из каталога "КаталогСборкиПакета" в переменную "ИмяФайлаПакета" | ||
|
||
Допустим Я очищаю параметры команды "opm" в контексте | ||
И Я устанавливаю путь выполнения команды "opm" к текущей библиотеке | ||
И Я создаю временный каталог и сохраняю его в переменной "КаталогСборкиПакета_v999" | ||
И Я выполняю сборку пакета "fixtures/testpackage_v999" в каталог из переменной "КаталогСборкиПакета_v999" | ||
И Я сохраняю файл пакета из каталога "КаталогСборкиПакета_v999" в переменную "ИмяФайлаПакета_v999" | ||
|
||
Сценарий: Установка пакета с последующим обновлением из файла в локальном каталоге | ||
Допустим Я установил рабочий каталог из переменной "РабочийКаталог" | ||
И Я добавляю параметр "install" для команды "opm" | ||
И Я добавляю параметр "--local" для команды "opm" | ||
И Я добавляю опцию "-f" для команды "opm" из переменной "ИмяФайлаПакета" | ||
И Я выполняю команду "opm" | ||
И Код возврата команды "opm" равен 0 | ||
|
||
И Я очищаю параметры команды "opm" в контексте | ||
И Я добавляю параметр "update" для команды "opm" | ||
И Я добавляю опцию "-f" для команды "opm" из переменной "ИмяФайлаПакета_v999" | ||
Когда Я выполняю команду "opm" | ||
И я вижу в консоли вывод | ||
| Требуемая версия: 999.1.0 | | ||
И Вывод команды "opm" не содержит "Внешнее исключение" | ||
И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules" | ||
И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules/test" |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -49,11 +49,12 @@ | |
НастройкаУстановки.УстанавливатьЗависимости = НеобходимУстановитьЗависимости; | ||
НастройкаУстановки.СоздаватьФайлыЗапуска = СоздаватьФайлыЗапуска; | ||
НастройкаУстановки.ИмяСервера = ИмяСервера; | ||
НастройкаУстановки.УдалятьКаталогПриОшибкеУстановки = Ложь; | ||
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. В каких случаях может быть Истина? Т.е. почему это настройка, а не жесткое поведение? 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. Судя по истории, такое поведение закладывалось изначально. Не смогли установить - очистили каталог. Попутно обнаружил, что даже с учетом моего PR opm может отрабатывать некорректно, т.к. в процессе обновления часть файлов может успеть перезаписаться. По-моему, уж лучше случайно удалить библиотеку, чем "побить" ее. Займусь этим вопросом. Попутно также обнаружил, что билды на CI уже давно не билдятся, исправлю сперва это. 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. по поводу ci - может заодно на GA переедем? пример работающих пайплайнов можно подсмотреть в entity, я ее недавно перевел. 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. Я за. Будет и win, и linux, и macOS сразу. Отдельным PR пульну. |
||
|
||
Если ОбновлениеВсехПакетов Тогда | ||
РаботаСПакетами.ОбновитьУстановленныеПакеты(РежимУстановки, , НастройкаУстановки); | ||
ИначеЕсли НЕ ПустаяСтрока(ФайлПакетаУстановки) Тогда | ||
РаботаСПакетами.УстановитьПакетИзФайла(ФайлПакетаУстановки, РежимУстановки, НастройкаУстановки); | ||
РаботаСПакетами.УстановитьПакетИзФайла(ФайлПакетаУстановки, РежимУстановки, Неопределено, НастройкаУстановки); | ||
Иначе | ||
|
||
Для каждого ИмяПакета Из МассивПакетовКОбновлению Цикл | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -33,7 +33,8 @@ | |
|
||
Если Не ВходящийКаталогУстановки = Неопределено Тогда | ||
УстановитьЦелевойКаталог(ВходящийКаталогУстановки); | ||
ИначеЕсли ТекущийРежимУстановкиПакетов = РежимУстановкиПакетов.Локально Тогда | ||
ИначеЕсли ВходящийКаталогУстановки = Неопределено | ||
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. зачем? выше же идет проверка на "не неопределено" 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. Вот поэтому и не надо в операторах ИначеЕсли одного уровня проверять совершенно разные условия. 😄 Сейчас видится, что правильнее вложить |
||
Или ТекущийРежимУстановкиПакетов = РежимУстановкиПакетов.Локально Тогда | ||
УстановитьЦелевойКаталог(ПутьККаталогуЛокальнойУстановки); | ||
Иначе | ||
КаталогСистемныхБиблиотек = ПолучитьКаталогСистемныхБиблиотек(); | ||
|
@@ -117,7 +118,9 @@ | |
|
||
КонецПроцедуры | ||
|
||
Процедура УстановитьПакетИзАрхива(Знач ФайлПакета, Знач ЭтоЗависимыйПакет = Ложь) Экспорт | ||
Процедура УстановитьПакетИзАрхива(Знач ФайлПакета, | ||
Знач ЭтоЗависимыйПакет = Ложь, | ||
Знач УдалятьКаталогПриОшибкеУстановки = Истина) Экспорт | ||
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. Когда можем ХОТЕТЬ чтобы каталог удалился несмотря на ошибки? 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. см. выше 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. Я не понял, что написано выше ( |
||
|
||
КаталогУстановки = ?(ЭтоЗависимыйПакет, КаталогУстановкиЗависимостей, ЦелевойКаталогУстановки); | ||
УстановкаПакета = Новый УстановкаПакета(); | ||
|
@@ -131,7 +134,7 @@ | |
УстановкаПакета.УстановитьРежимУстановкиПакета(ТекущийРежимУстановкиПакетов); | ||
|
||
Попытка | ||
УстановкаПакета.УстановитьПакетИзАрхива(ФайлПакета); | ||
УстановкаПакета.УстановитьПакетИзАрхива(ФайлПакета, УдалятьКаталогПриОшибкеУстановки); | ||
Исключение | ||
ВызватьИсключение ОписаниеОшибки(); | ||
КонецПопытки; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Зачем это?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
я скопировал каталог с тестовым пакетом, это все оттуда. Но в новом каталоге в packagedef изменил версию среды на заведомо недостижимую.
Есть ли более простой способ воспроизвести ситуацию, когда пакет обновляется на меньшей версии среды, чем требует обновленный манифест?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не понял вопроса. Зачем нужен файл src.dll и как он связан с "воспроизведением ситуации" и обновлением манифестов