io = $io; $this->config = $config; } public function fetch($version, $destination) { if (class_exists(CurlMulti::class)) { $this->fetchWithPrestissimo($version, $destination); return; } parent::fetch($version, $destination); } protected function fetchWithPrestissimo($version, $destination) { $requests = []; array_walk($this->filenames, function ($filename) use ($version, $destination, &$requests) { $url = $this->getUri($filename, $version); $this->fs->ensureDirectoryExists($destination . '/' . dirname($filename)); $requests[] = new CopyRequest($url, $destination . '/' . $filename, false, $this->io, $this->config); }); $successCnt = $failureCnt = 0; $totalCnt = count($requests); $multi = new CurlMulti; $multi->setRequests($requests); do { $multi->setupEventLoop(); $multi->wait(); $result = $multi->getFinishedResults(); $successCnt += $result['successCnt']; $failureCnt += $result['failureCnt']; foreach ($result['urls'] as $url) { $this->io->writeError(" $successCnt/$totalCnt:\t$url", true, \Composer\IO\IOInterface::VERBOSE); } } while ($multi->remain()); } }