【发布时间】:2013-10-10 09:59:26
【问题描述】:
是否可以通过 \Composer\ 命名空间从应用程序代码中调用 composer update 以获取有关 udpates 的信息?
我在 google 中搜索过,仅找到有关 Composer 插件或编写 (post|pre)-(install|update) 挂钩脚本的信息,但没有找到任何有关获取此类信息的信息。
已解决:
将自定义作曲家脚本放入pre-update-cmd:
getComposer();
$installedRepo = $composer->getRepositoryManager()->getLocalRepository();
$dm = $composer->getDownloadManager();
$im = $composer->getInstallationManager();
$errors = 数组();
/* 列出包 */
foreach ($installedRepo->getPackages() as $package) {
$downloader = $dm->getDownloaderForInstalledPackage($package);
if ($downloader instanceof ChangeReportInterface) {
$targetDir = $im->getInstallPath($package);
if ($changes = $downloader->getLocalChanges($package, $targetDir)) {
$errors[$targetDir] = $changes;
}
}
}
如果(!$错误){
$status['changes'] = null;
} 别的 {
$status['changes'] = $errors;
}
// 在 $status['changes'] 我们有所有待处理的更新
}
}
【问题讨论】:
-
这与@CreatoR 的答案完全相同,但我发现我可以扩展github.com/composer/composer/blob/master/src/Composer/Command/… 类(通常在composer.phar 中,或者在添加“composer/composer”时仅在供应商目录中“在我的composer.json的开发包中)并编写更像是返回一个带有待处理更新信息的数组/对象。
标签: php composer-php