-
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
Conversation
исправил ошибку с некорректным вызовом РаботаСПакетами.УстановитьПакетИзФайла (был пропущен аргумент) добавил параметр, позволяющий при неудачном обновлении пакета не удалять в целевом каталоге исходный пакет добавил тест, имитирующий установку пакета с последующим его неудачным обновлением из-за меньшей версией среды
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.
Есть вопросы
@@ -0,0 +1 @@ | |||
// заглушка |
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 и как он связан с "воспроизведением ситуации" и обновлением манифестов
@@ -0,0 +1 @@ | |||
// заглушка |
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.
см. выше
// КаталогУстановкиПакета - строка. Путь в который пакетный менеджер устанавливает текущий пакет. | ||
// ЧтениеZipФайла - ЧтениеZipФайла. Архив пакета. | ||
// | ||
Процедура ПередУстановкой(Знач КаталогУстановкиПакета, Знач ЧтениеZipФайла) Экспорт |
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.
возможно, не требуется. попробую его упростить.
@@ -49,11 +49,12 @@ | |||
НастройкаУстановки.УстанавливатьЗависимости = НеобходимУстановитьЗависимости; | |||
НастройкаУстановки.СоздаватьФайлыЗапуска = СоздаватьФайлыЗапуска; | |||
НастройкаУстановки.ИмяСервера = ИмяСервера; | |||
НастройкаУстановки.УдалятьКаталогПриОшибкеУстановки = Ложь; |
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.
Судя по истории, такое поведение закладывалось изначально. Не смогли установить - очистили каталог.
@artbear в свое время исправил баг, когда opm пытался очистить несуществующий каталог типа ""
или Неопределено
. При установке пакета такое поведение может и подходит, но вот при обновлении - нет.
Попутно обнаружил, что даже с учетом моего PR opm может отрабатывать некорректно, т.к. в процессе обновления часть файлов может успеть перезаписаться. По-моему, уж лучше случайно удалить библиотеку, чем "побить" ее. Займусь этим вопросом.
Попутно также обнаружил, что билды на CI уже давно не билдятся, исправлю сперва это.
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.
по поводу ci - может заодно на GA переедем? пример работающих пайплайнов можно подсмотреть в entity, я ее недавно перевел.
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.
Я за. Будет и win, и linux, и macOS сразу. Отдельным PR пульну.
Процедура УстановитьПакетИзАрхива(Знач ФайлПакета, Знач ЭтоЗависимыйПакет = Ложь) Экспорт | ||
Процедура УстановитьПакетИзАрхива(Знач ФайлПакета, | ||
Знач ЭтоЗависимыйПакет = Ложь, | ||
Знач УдалятьКаталогПриОшибкеУстановки = Истина) Экспорт |
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.
см. выше
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.
Я не понял, что написано выше (
Если мы удаляем каталог - надо удалять его всегда. Зачем нужен флаг, кто будет менять его значение?
@@ -33,7 +33,8 @@ | |||
|
|||
Если Не ВходящийКаталогУстановки = Неопределено Тогда | |||
УстановитьЦелевойКаталог(ВходящийКаталогУстановки); | |||
ИначеЕсли ТекущийРежимУстановкиПакетов = РежимУстановкиПакетов.Локально Тогда | |||
ИначеЕсли ВходящийКаталогУстановки = Неопределено |
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.
Вот поэтому и не надо в операторах ИначеЕсли одного уровня проверять совершенно разные условия. 😄
Сейчас видится, что правильнее вложить Если
с режимом установки внутрь Если
с входящим каталогом. Парой строчек ниже это фрагмента так и сделано. Исправлю.
@ovcharenko-di @nixel2007 @nixel2007 Коллеги - мне видится, что мы делаем заплатку. Хотя может я просто слишком замороченный :) |
Я именно так и планировал дорабатывать этот PR! Заодно посмотрю как в других менеджерах пакетов решается подобная проблема. |
Так и решается. Кроме того, создается служебный .lock-файл, который в случае успех а- удаляется. Соответственно, если файл на месте - значит либо идет параллельный процесс установки, либо предыдущая упала и не является валидной. |
@ovcharenko-di мы же ждем доработки, да? Можешь в таком случае WIP поставить в заголовке? |
@ovcharenko-di подниму? |
@EvilBeaver спасибо за пинг, я уже и забыл об этом PR! |
close #176