public function dump(array $packages)
{
$packagesByName = [];
$dumper = new ArrayDumper();
foreach ($packages as $package) {
$packagesByName[$package->getName()][$package->getPrettyVersion()] = $dumper->dump($package);
}
$repo = ['packages' => []];
if (isset($this->config['providers']) && $this->config['providers']) {
$providersUrl = 'p/%package%$%hash%.json';
if (!empty($this->config['homepage'])) {
$repo['providers-url'] = parse_url(rtrim($this->config['homepage'], '/'), PHP_URL_PATH) . '/' . $providersUrl;
} else {
$repo['providers-url'] = $providersUrl;
}
$repo['providers'] = [];
$i = 1;
// Give each version a unique ID
foreach ($packagesByName as $packageName => $versionPackages) {
foreach ($versionPackages as $version => $versionPackage) {
$packagesByName[$packageName][$version]['uid'] = $i++;
}
}
// Dump the packages along with packages they're replaced by
foreach ($packagesByName as $packageName => $versionPackages) {
$dumpPackages = $this->findReplacements($packagesByName, $packageName);
$dumpPackages[$packageName] = $versionPackages;
$includes = $this->dumpPackageIncludeJson($dumpPackages, str_replace('%package%', $packageName, $providersUrl), 'sha256');
$repo['providers'][$packageName] = current($includes);
}
} else {
$repo['includes'] = $this->dumpPackageIncludeJson($packagesByName, $this->includeFileName);
}
$this->dumpPackagesJson($repo);
$this->pruneIncludeDirectories();
}