diff --git a/src/Composer/Util/RemoteFilesystem.php b/src/Composer/Util/RemoteFilesystem.php index ef2a91e26..1216761ec 100644 --- a/src/Composer/Util/RemoteFilesystem.php +++ b/src/Composer/Util/RemoteFilesystem.php @@ -38,7 +38,7 @@ class RemoteFilesystem private $lastHeaders; private $storeAuth; private $degradedMode = false; - private $redirects = 0; + private $redirects; private $maxRedirects = 20; /** @@ -208,6 +208,7 @@ class RemoteFilesystem $this->lastProgress = null; $this->retryAuthFailure = true; $this->lastHeaders = array(); + $this->redirects = 1; // The first request counts. // capture username/password from URL if there is one if (preg_match('{^https?://(.+):(.+)@([^/]+)}i', $fileUrl, $match)) { @@ -220,6 +221,12 @@ class RemoteFilesystem unset($additionalOptions['retry-auth-failure']); } + if (isset($additionalOptions['redirects'])) { + $this->redirects = $additionalOptions['redirects']; + + unset($additionalOptions['redirects']); + } + $options = $this->getOptionsForUrl($originUrl, $additionalOptions); $userlandFollow = isset($options['http']['follow_location']) && !$options['http']['follow_location']; @@ -351,12 +358,10 @@ class RemoteFilesystem $this->io->writeError(sprintf('Following redirect (%u)', $this->redirects)); } - // TODO: Not so sure about preserving origin here... - $result = $this->get($this->originUrl, $targetUrl, $additionalOptions, $this->fileName, $this->progress); - - $this->redirects--; + $additionalOptions['redirects'] = $this->redirects; - return $result; + // TODO: Not so sure about preserving origin here... + return $this->get($this->originUrl, $targetUrl, $additionalOptions, $this->fileName, $this->progress); } if (!$this->retry) {