From daf707c19d22f56f762de86d2ad78539be7139ec Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 16 Feb 2022 18:10:20 +0100 Subject: [PATCH] Use relative URLs when index.json provides them --- src/Downloader.php | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/Downloader.php b/src/Downloader.php index 3c78c9de9..2807e26c6 100644 --- a/src/Downloader.php +++ b/src/Downloader.php @@ -203,27 +203,38 @@ public function getRecipes(array $operations): array $version = $version[0].'.'.($version[1] ?? '9999999'); foreach (array_reverse($recipeVersions) as $v => $endpoint) { - if (version_compare($version, $v, '>=')) { - $data['locks'][$package->getName()]['version'] = $version; - $data['locks'][$package->getName()]['recipe']['version'] = $v; + if (version_compare($version, $v, '<')) { + continue; + } - if (null !== $recipeRef && isset($this->endpoints[$endpoint]['_links']['archived_recipes_template'])) { - $urls[] = strtr($this->endpoints[$endpoint]['_links']['archived_recipes_template'], [ - '{package_dotted}' => str_replace('/', '.', $package->getName()), - '{ref}' => $recipeRef, - ]); + $data['locks'][$package->getName()]['version'] = $version; + $data['locks'][$package->getName()]['recipe']['version'] = $v; + $links = $this->endpoints[$endpoint]['_links']; - break; + if (null !== $recipeRef && isset($links['archived_recipes_template'])) { + if (isset($links['archived_recipes_template_relative'])) { + $links['archived_recipes_template'] = preg_replace('{[^/\?]*+(?=\?|$)}', $links['archived_recipes_template_relative'], $endpoint); } - $urls[] = strtr($this->endpoints[$endpoint]['_links']['recipe_template'], [ + $urls[] = strtr($links['archived_recipes_template'], [ '{package_dotted}' => str_replace('/', '.', $package->getName()), - '{package}' => $package->getName(), - '{version}' => $v, + '{ref}' => $recipeRef, ]); break; } + + if (isset($links['recipes_template_relative'])) { + $links['recipes_template'] = preg_replace('{[^/\?]*+(?=\?|$)}', $links['recipes_template_relative'], $endpoint); + } + + $urls[] = strtr($links['recipe_template'], [ + '{package_dotted}' => str_replace('/', '.', $package->getName()), + '{package}' => $package->getName(), + '{version}' => $v, + ]); + + break; } continue;