Пример #1
0
 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));
 }
Пример #2
0
 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));
 }
Пример #3
0
 /**
  * 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);
 }
Пример #4
0
 /**
  * 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);
 }
Пример #5
0
 /**
  * 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);
 }