Composer php 如何从";取消编写器更新操作;“包装前更新”;听众
正在开发一个小型Composer插件,它有一个用于Composer php 如何从";取消编写器更新操作;“包装前更新”;听众,composer-php,Composer Php,正在开发一个小型Composer插件,它有一个用于包前更新事件的侦听器 public function prePackageUpdate(PackageEvent $event): void { /** @var UpdateOperation $operation */ $operation = $event->getOperation(); if ($something) { // I would like the stop the updat
包前更新
事件的侦听器
public function prePackageUpdate(PackageEvent $event): void
{
/** @var UpdateOperation $operation */
$operation = $event->getOperation();
if ($something) {
// I would like the stop the update for this package...
}
}
基于某些逻辑,我希望包不被更新,但我找不到任何方法来做到这一点。。。有吗
理想情况下,我希望命令(安装或更新)继续与其他软件包一起使用,但如果这不可能,则可以取消并恢复整个过程。基于以下内容回答我自己的问题
可以理解,取消特定操作是不可能的。Composer执行依赖项解决过程,并提出一组要执行的操作,这些操作可能是相互依赖的,因此跳过其中一个操作可能会影响其他操作(例如,如果取消包的更新,则选择更新其他包的版本可能需要不同),因此,需要一个新的依赖项解决过程
不过,取消整个过程确实是可能的,只需抛出一个异常即可
但是,从包前更新
侦听器引发异常可能会使供应商处于某种不一致的状态。更好的方法是在后依赖项解决
侦听器中,在那里根本没有执行任何操作
public function postDependenciesSolving(InstallerEvent $event)
{
foreach ($event->getOperations() as $operation) {
if ($something) {
throw new Exception('Whole process cancelled and reverted!');
}
}
}