public function testGetSemVerWP() { $original_version = '3.0'; $this->assertEmpty(Utils\get_named_sem_ver('2.8', $original_version)); $this->assertEmpty(Utils\get_named_sem_ver('2.9.1', $original_version)); $this->assertEquals('patch', Utils\get_named_sem_ver('3.0.1', $original_version)); $this->assertEquals('minor', Utils\get_named_sem_ver('3.1', $original_version)); $this->assertEquals('minor', Utils\get_named_sem_ver('3.1.1', $original_version)); $this->assertEquals('major', Utils\get_named_sem_ver('4.0', $original_version)); $this->assertEquals('major', Utils\get_named_sem_ver('4.1.1', $original_version)); }
public function testGetSemVer() { $original_version = '0.19.1'; $this->assertEmpty(Utils\get_named_sem_ver('0.18.0', $original_version)); $this->assertEmpty(Utils\get_named_sem_ver('0.19.1', $original_version)); $this->assertEquals('patch', Utils\get_named_sem_ver('0.19.2', $original_version)); $this->assertEquals('minor', Utils\get_named_sem_ver('0.20.0', $original_version)); $this->assertEquals('minor', Utils\get_named_sem_ver('0.20.3', $original_version)); $this->assertEquals('major', Utils\get_named_sem_ver('1.0.0', $original_version)); $this->assertEquals('major', Utils\get_named_sem_ver('1.1.1', $original_version)); }
/** * Returns update information. */ private function get_updates($assoc_args) { $url = 'https://api.github.com/repos/wp-cli/wp-cli/releases'; $options = array('timeout' => 30); $headers = array('Accept' => 'application/json'); $response = Utils\http_request('GET', $url, $headers, $options); if (!$response->success || 200 !== $response->status_code) { WP_CLI::error(sprintf("Failed to get latest version (HTTP code %d).", $response->status_code)); } $release_data = json_decode($response->body); $updates = array('major' => false, 'minor' => false, 'patch' => false); foreach ($release_data as $release) { // Get rid of leading "v" if there is one set. $release_version = $release->tag_name; if ('v' === substr($release_version, 0, 1)) { $release_version = ltrim($release_version, 'v'); } $update_type = Utils\get_named_sem_ver($release_version, WP_CLI_VERSION); if (!$update_type) { continue; } if (!empty($updates[$update_type]) && !Comparator::greaterThan($release_version, $updates[$update_type]['version'])) { continue; } $updates[$update_type] = array('version' => $release_version, 'update_type' => $update_type, 'package_url' => $release->assets[0]->browser_download_url); } foreach ($updates as $type => $value) { if (empty($value)) { unset($updates[$type]); } } foreach (array('major', 'minor', 'patch') as $type) { if (true === \WP_CLI\Utils\get_flag_value($assoc_args, $type)) { return !empty($updates[$type]) ? array($updates[$type]) : false; } } if (empty($updates) && preg_match('#-alpha-(.+)$#', WP_CLI_VERSION, $matches)) { $version_url = 'https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/NIGHTLY_VERSION'; $response = Utils\http_request('GET', $version_url); if (!$response->success || 200 !== $response->status_code) { WP_CLI::error(sprintf("Failed to get current nightly version (HTTP code %d)", $response->status_code)); } $nightly_version = trim($response->body); if (WP_CLI_VERSION != $nightly_version) { $updates['nightly'] = array('version' => $nightly_version, 'update_type' => 'nightly', 'package_url' => 'https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli-nightly.phar'); } } return array_values($updates); }
/** * Returns update information */ private function get_updates($assoc_args) { global $wp_version; $versions_path = ABSPATH . 'wp-includes/version.php'; include $versions_path; $url = 'https://api.wordpress.org/core/stable-check/1.0/'; $options = array('timeout' => 30); $headers = array('Accept' => 'application/json'); $response = Utils\http_request('GET', $url, $headers, $options); if (!$response->success || 200 !== $response->status_code) { WP_CLI::error("Failed to get latest version list."); } $release_data = json_decode($response->body); $release_versions = array_keys((array) $release_data); usort($release_versions, function ($a, $b) { return 1 === version_compare($a, $b); }); $locale = get_locale(); $compare_version = str_replace('-src', '', $GLOBALS['wp_version']); $updates = array('major' => false, 'minor' => false); foreach ($release_versions as $release_version) { $update_type = Utils\get_named_sem_ver($release_version, $compare_version); if (!$update_type) { continue; } // WordPress follow its own versioning which is roughly equivalent to semver if ('minor' === $update_type) { $update_type = 'major'; } else { if ('patch' === $update_type) { $update_type = 'minor'; } } if (!empty($updates[$update_type]) && !Comparator::greaterThan($release_version, $updates[$update_type]['version'])) { continue; } $updates[$update_type] = array('version' => $release_version, 'update_type' => $update_type, 'package_url' => $this->get_download_url($release_version, $locale)); } foreach ($updates as $type => $value) { if (empty($value)) { unset($updates[$type]); } } foreach (array('major', 'minor') as $type) { if (true === \WP_CLI\Utils\get_flag_value($assoc_args, $type)) { return !empty($updates[$type]) ? array($updates[$type]) : false; } } return array_values($updates); }
/** * Returns update information */ private function get_updates($assoc_args) { wp_version_check(); $from_api = get_site_transient('update_core'); if (!$from_api) { return array(); } $compare_version = str_replace('-src', '', $GLOBALS['wp_version']); $updates = array('major' => false, 'minor' => false); foreach ($from_api->updates as $offer) { $update_type = Utils\get_named_sem_ver($offer->version, $compare_version); if (!$update_type) { continue; } // WordPress follow its own versioning which is roughly equivalent to semver if ('minor' === $update_type) { $update_type = 'major'; } else { if ('patch' === $update_type) { $update_type = 'minor'; } } if (!empty($updates[$update_type]) && !Comparator::greaterThan($offer->version, $updates[$update_type]['version'])) { continue; } $updates[$update_type] = array('version' => $offer->version, 'update_type' => $update_type, 'package_url' => !empty($offer->packages->partial) ? $offer->packages->partial : $offer->packages->full); } foreach ($updates as $type => $value) { if (empty($value)) { unset($updates[$type]); } } foreach (array('major', 'minor') as $type) { if (true === \WP_CLI\Utils\get_flag_value($assoc_args, $type)) { return !empty($updates[$type]) ? array($updates[$type]) : false; } } return array_values($updates); }