1
0
Fork 0

GitlabDriver V4 Paging

V4 of gitlab api requires paging in tags/branches
pull/6592/head
Helmut Januschka 2017-08-07 21:17:32 +02:00
parent b07be842a0
commit be1f675992
1 changed files with 26 additions and 8 deletions

View File

@ -280,17 +280,20 @@ class GitLabDriver extends VcsDriver
{ {
$resource = $this->getApiUrl().'/repository/'.$type; $resource = $this->getApiUrl().'/repository/'.$type;
$data = JsonFile::parseJson($this->getContents($resource), $resource); do {
$data = JsonFile::parseJson($this->getContents($resource), $resource);
$references = array(); $references = array();
foreach ($data as $datum) { foreach ($data as $datum) {
$references[$datum['name']] = $datum['commit']['id']; $references[$datum['name']] = $datum['commit']['id'];
// Keep the last commit date of a reference to avoid // Keep the last commit date of a reference to avoid
// unnecessary API call when retrieving the composer file. // unnecessary API call when retrieving the composer file.
$this->commits[$datum['commit']['id']] = $datum['commit']; $this->commits[$datum['commit']['id']] = $datum['commit'];
} }
$resource = $this->getNextPage();
} while ($resource);
return $references; return $references;
} }
@ -444,6 +447,21 @@ class GitLabDriver extends VcsDriver
return true; return true;
} }
protected function getNextPage()
{
$headers = $this->remoteFilesystem->getLastHeaders();
foreach ($headers as $header) {
if (substr($header, 0, 5) === 'Link:') {
$links = explode(',', substr($header, 5));
foreach ($links as $link) {
if (preg_match('{<(.+?)>; *rel="next"}', $link, $match)) {
return $match[1];
}
}
}
}
}
/** /**
* @param array $configuredDomains * @param array $configuredDomains
* @param string $guessedDomain * @param string $guessedDomain