src/Composer/Config.php
public function merge($config)
    {
        // override defaults with given config
        if (!empty($config['config']) && is_array($config['config'])) {
            foreach ($config['config'] as $key => $val) {
                if (in_array($key, array('bitbucket-oauth', 'github-oauth', 'gitlab-oauth', 'gitlab-token', 'http-basic')) && isset($this->config[$key])) {
                    $this->config[$key] = array_merge($this->config[$key], $val);
                } elseif ('preferred-install' === $key && isset($this->config[$key])) {
                    if (is_array($val) || is_array($this->config[$key])) {
                        if (is_string($val)) {
                            $val = array('*' => $val);
                        }
                        if (is_string($this->config[$key])) {
                            $this->config[$key] = array('*' => $this->config[$key]);
                        }
                        $this->config[$key] = array_merge($this->config[$key], $val);
                        // the full match pattern needs to be last
                        if (isset($this->config[$key]['*'])) {
                            $wildcard = $this->config[$key]['*'];
                            unset($this->config[$key]['*']);
                            $this->config[$key]['*'] = $wildcard;
                        }
                    } else {
                        $this->config[$key] = $val;
                    }
                } else {
                    $this->config[$key] = $val;
                }
            }
        }

        if (!empty($config['repositories']) && is_array($config['repositories'])) {
            $this->repositories = array_reverse($this->repositories, true);
            $newRepos = array_reverse($config['repositories'], true);
            foreach ($newRepos as $name => $repository) {
                // disable a repository by name
                if (false === $repository) {
                    $this->disableRepoByName($name);
                    continue;
                }

                // disable a repository with an anonymous {"name": false} repo
                if (is_array($repository) && 1 === count($repository) && false === current($repository)) {
                    $this->disableRepoByName(key($repository));
                    continue;
                }

                // store repo
                if (is_int($name)) {
                    $this->repositories[] = $repository;
                } else {
                    if ($name === 'packagist') { // BC support for default "packagist" named repo
                        $this->repositories[$name . '.org'] = $repository;
                    } else {
                        $this->repositories[$name] = $repository;
                    }
                }
            }
            $this->repositories = array_reverse($this->repositories, true);
        }
    }
public function merge($config)
    {
        // override defaults with given config
        if (!empty($config['config']) && is_array($config['config'])) {
            foreach ($config['config'] as $key => $val) {
                if (in_array($key, array('bitbucket-oauth', 'github-oauth', 'gitlab-oauth', 'gitlab-token', 'http-basic')) && isset($this->config[$key])) {
                    $this->config[$key] = array_merge($this->config[$key], $val);
                } elseif ('preferred-install' === $key && isset($this->config[$key])) {
                    if (is_array($val) || is_array($this->config[$key])) {
                        if (is_string($val)) {
                            $val = array('*' => $val);
                        }
                        if (is_string($this->config[$key])) {
                            $this->config[$key] = array('*' => $this->config[$key]);
                        }
                        $this->config[$key] = array_merge($this->config[$key], $val);
                        // the full match pattern needs to be last
                        if (isset($this->config[$key]['*'])) {
                            $wildcard = $this->config[$key]['*'];
                            unset($this->config[$key]['*']);
                            $this->config[$key]['*'] = $wildcard;
                        }
                    } else {
                        $this->config[$key] = $val;
                    }
                } else {
                    $this->config[$key] = $val;
                }
            }
        }

        if (!empty($config['repositories']) && is_array($config['repositories'])) {
            $this->repositories = array_reverse($this->repositories, true);
            $newRepos = array_reverse($config['repositories'], true);
            foreach ($newRepos as $name => $repository) {
                // disable a repository by name
                if (false === $repository) {
                    $this->disableRepoByName($name);
                    continue;
                }

                // disable a repository with an anonymous {"name": false} repo
                if (is_array($repository) && 1 === count($repository) && false === current($repository)) {
                    $this->disableRepoByName(key($repository));
                    continue;
                }

                // store repo
                if (is_int($name)) {
                    $this->repositories[] = $repository;
                } else {
                    if ($name === 'packagist') { // BC support for default "packagist" named repo
                        $this->repositories[$name . '.org'] = $repository;
                    } else {
                        $this->repositories[$name] = $repository;
                    }
                }
            }
            $this->repositories = array_reverse($this->repositories, true);
        }
    }
public function merge ( $ config ) { // override defaults with given config if ( ! empty ( $ config [ 'config' ] ) && is_array ( $ config [ 'config' ] ) ) { foreach ( $ config [ 'config' ] as $ key => $ val ) { if ( in_array ( $ key , array ( 'bitbucket-oauth' , 'github-oauth' , 'gitlab-oauth' , 'gitlab-token' , 'http-basic' ) ) && isset ( $ this -> config [ $ key ] ) ) { $ this -> config [ $ key ] = array_merge ( $ this -> config [ $ key ] , $ val ) ; } elseif ( 'preferred-install' === $ key && isset ( $ this -> config [ $ key ] ) ) { if ( is_array ( $ val ) || is_array ( $ this -> config [ $ key ] ) ) { if ( is_string ( $ val ) ) { $ val = array ( '*' => $ val ) ; } if ( is_string ( $ this -> config [ $ key ] ) ) { $ this -> config [ $ key ] = array ( '*' => $ this -> config [ $ key ] ) ; } $ this -> config [ $ key ] = array_merge ( $ this -> config [ $ key ] , $ val ) ; // the full match pattern needs to be last if ( isset ( $ this -> config [ $ key ] [ '*' ] ) ) { $ wildcard = $ this -> config [ $ key ] [ '*' ] ; unset ( $ this -> config [ $ key ] [ '*' ] ) ; $ this -> config [ $ key ] [ '*' ] = $ wildcard ; } } else { $ this -> config [ $ key ] = $ val ; } } else { $ this -> config [ $ key ] = $ val ; } } } if ( ! empty ( $ config [ 'repositories' ] ) && is_array ( $ config [ 'repositories' ] ) ) { $ this -> repositories = array_reverse ( $ this -> repositories , true ) ; $ newRepos = array_reverse ( $ config [ 'repositories' ] , true ) ; foreach ( $ newRepos as $ name => $ repository ) { // disable a repository by name if ( false === $ repository ) { $ this -> disableRepoByName ( $ name ) ; continue ; } // disable a repository with an anonymous {"name": false} repo if ( is_array ( $ repository ) && 1 === count ( $ repository ) && false === current ( $ repository ) ) { $ this -> disableRepoByName ( key ( $ repository ) ) ; continue ; } // store repo if ( is_int ( $ name ) ) { $ this -> repositories [ ] = $ repository ; } else { if ( $ name === 'packagist' ) { // BC support for default "packagist" named repo $ this -> repositories [ $ name . '.org' ] = $ repository ; } else { $ this -> repositories [ $ name ] = $ repository ; } } } $ this -> repositories = array_reverse ( $ this -> repositories , true ) ; } }
Merges new config values with the existing ones (overriding)

@param array $config
Merges new config values with the existing ones ( overriding )