0

\Composer\ 名前空間を介して予行演習を使用してアプリケーション コードから composer update を呼び出し、 udpates に関する情報を取得することは可能ですか?

Google で検索したところ、Composer プラグインまたは (post|pre)-(install|update) フック スクリプトの記述に関する情報しか見つかりませんでしたが、そのような情報の取得に関する情報は見つかりませんでした。

解決済み:カスタム コンポーザー スクリプトを入れて作業しましたpre-update-cmd:

<?php

namespace MyNamespace;

use Composer\Script\Event;
use Composer\Plugin\CommandEvent;
use Composer\Plugin\PluginEvents;

class CheckStatus
{
    public static function preUpdate(Event $event)
    {
        /* get composer */
        $composer = $event->getComposer();

        $installedRepo = $composer->getRepositoryManager()->getLocalRepository();

        $dm = $composer->getDownloadManager();
        $im = $composer->getInstallationManager();

        $errors = array();

        /* list packages */
        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;
                }
            }
        }

        if (!$errors) {
            $status['changes'] = null;
        } else {
            $status['changes'] = $errors;
        }

        // in $status['changes'] we have all pending updates
    }
}

</code>
4

1 に答える 1

0

コマンドexec("php composer.phar update") exec descriptionを試しましたか?

ディスカッション後に更新:
コードに関する回答composer.phar/src/Composer/Command/StatusCommand.php [lines 43-92]- リポジトリの更新のチェックに使用できます

于 2013-10-10T11:55:10.043 に答える