2013-10-10 3 views
1

Можно ли вызвать обновление композитора из кода приложения с помощью сухого пробега \ Composer \ namespace, чтобы получить информацию об udpates?Calling Composer от php

Я искал в google и нашел только информацию о плагинах Composer или записи (post | pre) - (установить | обновление) скриптов hook, но не нашел никакой информации о получении такой информации.

РЕШИТЬ: Работал ввод пользовательских композитор сценария в 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> 
+0

дублировать? http://stackoverflow.com/questions/17219436/run-composer-with-a-php-script-in-browser/17244866#17244866 – Danack

+0

Это то же самое, что и ответ @CreatoR, но я узнал, что могу расширьте https://github.com/composer/composer/blob/master/src/Composer/Command/UpdateCommand.php класс (который обычно находится в формате composer.phar или только в каталоге поставщика при добавлении «композитор/композитор» в пакет dev к моему composer.json) и напишите больше как возврат массива/объекта с информацией об ожидающих обновлениях. – brzuchal

ответ

1

Did you try command exec("php composer.phar update")exec description?

ОБНОВЛЕНО ПОСЛЕ ОБСУЖДЕНИЯ:
Ответ на код composer.phar/src/Composer/Command/StatusCommand.php [lines 43-92] - он может использоваться для проверки обновлений репозиториев

+0

Ваш недостающий мой вопрос, я почему-то не вызываю классы Compsoer, создающие экземпляр композитора, а затем запускаю обновление, чтобы получить информацию об обновлении. Я не собираюсь разбирать exec ('php composer.phar update'), выход cli ansi для человека, разбор - это последнее, что я хочу сделать. – brzuchal

+0

Хорошо. Другое дело: попробуйте извлечь композитор и получить источники (я нашел эту функцию http://php.net/manual/en/phar.extractto.php или вы можете получить прямой доступ к файлам из PhpStorm). Тогда вы увидите логику и исправьте ее для своих целей. – CreatoR

+0

Да, логику я вижу в коде пакета «Композитор/композитор». Я узнал, что есть возможность получить экземпляр композитора, менеджера хранилища, менеджера пакетов и установки через сценарии (post | pre) - (install | update) -cmd, но пока не выяснили, как их использовать для получения информации о ожидающие обновления. – brzuchal

Смежные вопросы