diff --git a/src/Composer/Repository/Vcs/GitLabDriver.php b/src/Composer/Repository/Vcs/GitLabDriver.php index 5f3538869..c5d794321 100644 --- a/src/Composer/Repository/Vcs/GitLabDriver.php +++ b/src/Composer/Repository/Vcs/GitLabDriver.php @@ -220,7 +220,9 @@ class GitLabDriver extends VcsDriver $encoded = ''; for ($i = 0; isset($string[$i]); $i++) { $character = $string[$i]; - if (!ctype_alnum($character)) $character = '%' . sprintf('%02X', ord($character)); + if (!ctype_alnum($character) && !in_array($character, array('-', '_'), true)) { + $character = '%' . sprintf('%02X', ord($character)); + } $encoded .= $character; } return $encoded; diff --git a/tests/Composer/Test/Repository/Vcs/GitLabDriverTest.php b/tests/Composer/Test/Repository/Vcs/GitLabDriverTest.php index 268d0c0a0..2190410e3 100644 --- a/tests/Composer/Test/Repository/Vcs/GitLabDriverTest.php +++ b/tests/Composer/Test/Repository/Vcs/GitLabDriverTest.php @@ -290,8 +290,8 @@ JSON; public function testGitlabSubDirectory() { - $url = 'https://mycompany.com/gitlab/mygroup/myproject'; - $apiUrl = 'https://mycompany.com/gitlab/api/v3/projects/mygroup%2Fmyproject'; + $url = 'https://mycompany.com/gitlab/mygroup/my-pro.ject'; + $apiUrl = 'https://mycompany.com/gitlab/api/v3/projects/mygroup%2Fmy-pro%2Eject'; $driver = new GitLabDriver(array('url' => $url), $this->io->reveal(), $this->config, $this->process->reveal(), $this->remoteFilesystem->reveal()); $driver->initialize();