Improve reporting of github rate limiting errors, fixes #2183
parent
8369624c49
commit
1a50f74c4c
|
@ -304,7 +304,12 @@ class GitHubDriver extends VcsDriver
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($rateLimited) {
|
if ($rateLimited) {
|
||||||
$this->io->write('<error>GitHub API limit exhausted. You are already authorized so you will have to wait a while before doing more requests</error>');
|
$rateLimit = $this->getRateLimit($e->getHeaders());
|
||||||
|
$this->io->write(sprintf(
|
||||||
|
'<error>GitHub API limit (%d calls/hr) is exhausted. You are already authorized so you have to wait until %s before doing more requests</error>',
|
||||||
|
$rateLimit['limit'],
|
||||||
|
$rateLimit['reset']
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
throw $e;
|
throw $e;
|
||||||
|
@ -315,6 +320,39 @@ class GitHubDriver extends VcsDriver
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract ratelimit from response.
|
||||||
|
*
|
||||||
|
* @param array $headers Headers from Composer\Downloader\TransportException.
|
||||||
|
*
|
||||||
|
* @return array Associative array with the keys limit and reset.
|
||||||
|
*/
|
||||||
|
protected function getRateLimit(array $headers)
|
||||||
|
{
|
||||||
|
$rateLimit = array(
|
||||||
|
'limit' => '?',
|
||||||
|
'reset' => '?',
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($headers as $header) {
|
||||||
|
$header = trim($header);
|
||||||
|
if (false === strpos($header, 'X-RateLimit-')) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
list($type, $value) = explode(':', $header, 2);
|
||||||
|
switch ($type) {
|
||||||
|
case 'X-RateLimit-Limit':
|
||||||
|
$rateLimit['limit'] = (int) trim($value);
|
||||||
|
break;
|
||||||
|
case 'X-RateLimit-Reset':
|
||||||
|
$rateLimit['reset'] = date('Y-m-d H:i:s', (int) trim($value));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $rateLimit;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch root identifier from GitHub
|
* Fetch root identifier from GitHub
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue