protected function parse_tags($response, $repo_type)
{
$tags = array();
$rollback = array();
if (false !== $response) {
switch ($repo_type['repo']) {
case 'github':
foreach ((array) $response as $tag) {
$download_base = implode('/', array($repo_type['base_uri'], 'repos', $this->type->owner, $this->type->repo, 'zipball/'));
$tags[] = $tag;
$rollback[$tag] = $download_base . $tag;
}
break;
case 'bitbucket':
foreach ((array) $response as $tag) {
$download_base = implode('/', array($repo_type['base_download'], $this->type->owner, $this->type->repo, 'get/'));
$tags[] = $tag;
$rollback[$tag] = $download_base . $tag . '.zip';
}
break;
case 'gitlab':
foreach ((array) $response as $tag) {
$download_link = implode('/', array($repo_type['base_download'], $this->type->owner, $this->type->repo, 'repository/archive.zip'));
$download_link = add_query_arg('ref', $tag, $download_link);
$tags[] = $tag;
$rollback[$tag] = $download_link;
}
break;
}
}
if (empty($tags)) {
return false;
}
usort($tags, 'version_compare');
krsort($rollback);
$newest_tag = null;
$newest_tag_key = key(array_slice($tags, -1, 1, true));
$newest_tag = $tags[$newest_tag_key];
$this->type->newest_tag = $newest_tag;
$this->type->tags = $tags;
$this->type->rollback = $rollback;
return true;
}