Browse Source

fix gitlab not telling visibilty if user is not logged in

Mikk Tendermann 7 years ago
parent
commit
2a89d37651

+ 6 - 1
src/Composer/Repository/Vcs/GitLabDriver.php

@@ -308,7 +308,12 @@ class GitLabDriver extends VcsDriver
         // we need to fetch the default branch from the api
         $resource = $this->getApiUrl();
         $this->project = JsonFile::parseJson($this->getContents($resource, true), $resource);
-        $this->isPrivate = $this->project['visibility'] !== 'public';
+        if (isset($this->project['visibility'])) {
+            $this->isPrivate = $this->project['visibility'] !== 'public';
+        } else {
+            // client is not authendicated, therefore repository has to be public 
+            $this->isPrivate = false;
+        }
     }
 
     protected function attemptCloneFallback()

+ 38 - 0
tests/Composer/Test/Repository/Vcs/GitLabDriverTest.php

@@ -142,6 +142,44 @@ JSON;
         return $driver;
     }
 
+        /**
+         * @dataProvider getInitializeUrls
+         */
+        public function testInitializePublicProjectAsAnonymous($url, $apiUrl)
+        {
+            // @link http://doc.gitlab.com/ce/api/projects.html#get-single-project
+            $projectData = <<<JSON
+{
+    "id": 17,
+    "default_branch": "mymaster",
+    "http_url_to_repo": "https://gitlab.com/mygroup/myproject.git",
+    "ssh_url_to_repo": "git@gitlab.com:mygroup/myproject.git",
+    "last_activity_at": "2014-12-01T09:17:51.000+01:00",
+    "name": "My Project",
+    "name_with_namespace": "My Group / My Project",
+    "path": "myproject",
+    "path_with_namespace": "mygroup/myproject",
+    "web_url": "https://gitlab.com/mygroup/myproject"
+}
+JSON;
+
+        $this->remoteFilesystem
+            ->getContents('gitlab.com', $apiUrl, false, array())
+            ->willReturn($projectData)
+            ->shouldBeCalledTimes(1)
+        ;
+
+        $driver = new GitLabDriver(array('url' => $url), $this->io->reveal(), $this->config, $this->process->reveal(), $this->remoteFilesystem->reveal());
+        $driver->initialize();
+
+        $this->assertEquals($apiUrl, $driver->getApiUrl(), 'API URL is derived from the repository URL');
+        $this->assertEquals('mymaster', $driver->getRootIdentifier(), 'Root identifier is the default branch in GitLab');
+        $this->assertEquals('https://gitlab.com/mygroup/myproject.git', $driver->getRepositoryUrl(), 'The repository URL is the SSH one by default');
+        $this->assertEquals('https://gitlab.com/mygroup/myproject', $driver->getUrl());
+
+        return $driver;
+    }
+
     public function testGetDist()
     {
         $driver = $this->testInitialize('https://gitlab.com/mygroup/myproject', 'https://gitlab.com/api/v4/projects/mygroup%2Fmyproject');