Эх сурвалжийг харах

Fix passing of options to remotefilesystem in composer repo

Jordi Boggiano 9 жил өмнө
parent
commit
33c123e8c2

+ 7 - 3
src/Composer/Repository/ComposerRepository.php

@@ -90,7 +90,11 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
         $this->io = $io;
         $this->cache = new Cache($io, $config->get('cache-repo-dir').'/'.preg_replace('{[^a-z0-9.]}i', '-', $this->url), 'a-z0-9.$');
         $this->loader = new ArrayLoader();
-        $this->rfs = $rfs ?: Factory::createRemoteFilesystem($this->io, $this->config);
+        if ($rfs) {
+            $rfs = clone $rfs;
+            $rfs->setOptions($this->options);
+        }
+        $this->rfs = $rfs ?: Factory::createRemoteFilesystem($this->io, $this->config, $this->options);
         $this->eventDispatcher = $eventDispatcher;
         $this->repoConfig = $repoConfig;
     }
@@ -190,7 +194,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
             $url = str_replace('%query%', $query, $this->searchUrl);
 
             $hostname = parse_url($url, PHP_URL_HOST) ?: $url;
-            $json = $this->rfs->getContents($hostname, $url, false, $this->options);
+            $json = $this->rfs->getContents($hostname, $url, false);
             $results = JsonFile::parseJson($json, $url);
 
             return $results['results'];
@@ -607,7 +611,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
                 }
 
                 $hostname = parse_url($filename, PHP_URL_HOST) ?: $filename;
-                $json = $preFileDownloadEvent->getRemoteFilesystem()->getContents($hostname, $filename, false, $this->options);
+                $json = $preFileDownloadEvent->getRemoteFilesystem()->getContents($hostname, $filename, false);
                 if ($sha256 && $sha256 !== hash('sha256', $json)) {
                     if ($retries) {
                         usleep(100000);

+ 10 - 0
src/Composer/Util/RemoteFilesystem.php

@@ -113,6 +113,16 @@ class RemoteFilesystem
         return $this->options;
     }
 
+    /**
+     * Merges new options
+     *
+     * @return array $options
+     */
+    public function setOptions(array $options)
+    {
+        $this->options = array_replace_recursive($this->options, $options);
+    }
+
     public function isTlsDisabled()
     {
         return $this->disableTls === true;