protected function composerUpdate($updates = false, $refresh = [], $packagist = false, $preferSource = false)
{
$installed = new JsonFile($this->paths['path.vendor'] . '/composer/installed.json');
$internal = new CompositeRepository([]);
$internal->addRepository(new InstalledFilesystemRepository($installed));
$composer = $this->getComposer($packagist);
$composer->getDownloadManager()->setOutputProgress(false);
$local = $composer->getRepositoryManager()->getLocalRepository();
foreach ($refresh as $package) {
$local->removePackage($package);
}
$installer = Installer::create($this->getIO(), $composer)->setAdditionalInstalledRepository($internal)->setOptimizeAutoloader(true)->setUpdate(true);
if ($preferSource) {
$installer->setPreferSource(true);
} else {
$installer->setPreferDist(true);
}
if ($updates) {
$installer->setUpdateWhitelist($updates)->setWhitelistDependencies();
}
$installer->run();
}