Отвечая на мой собственный вопрос, основанный на этой проблеме, я кросс-постил на GitHub .
Понятно, что отмена указанной операции c невозможна. Composer выполняет процесс решения зависимостей и предлагает набор выполняемых операций, которые потенциально взаимозависимы, поэтому пропуск одной из них может повлиять на другие (например, если вы отмените обновление пакета, версии, выбранные для обновление других пакетов может потребоваться по-другому), поэтому потребуется новый процесс решения зависимостей.
Отмена всего процесса действительно возможна, хотя и может быть осуществлена путем простого исключения.
Однако, исключение из прослушивателя pre-package-update
может оставить поставщика в несколько несовместимом состоянии. Лучшее место для этого - слушатель post-dependencies-solving
, где операции вообще не выполнялись.
public function postDependenciesSolving(InstallerEvent $event)
{
foreach ($event->getOperations() as $operation) {
if ($something) {
throw new Exception('Whole process cancelled and reverted!');
}
}
}