CLI_Command::update()publicWP-CLI 1.0

Updates WP-CLI to the latest release.

Default behavior is to check the releases API for the newest stable version, and prompt if one is available.

Use --stable to install or reinstall the latest stable version.

Use --nightly to install the latest built version of the master branch. While not recommended for production, nightly contains the latest and greatest, and should be stable enough for development and staging environments.

Only works for the Phar installation mechanism.

OPTIONS

[--patch]
Only perform patch updates.
[--minor]
Only perform minor updates.
[--major]
Only perform major updates.
[--stable]
Update to the latest stable release. Skips update check.
[--nightly]
Update to the latest built version of the master branch. Potentially unstable.
[--yes]
Do not prompt for confirmation.
[--insecure]
Retry without certificate validation if TLS handshake fails. Note: This makes the request vulnerable to a MITM attack.

EXAMPLES

# Update CLI.
$ wp cli update
You have version 0.24.0. Would you like to update to 0.24.1? [y/n] y
Downloading from https://github.com/wp-cli/wp-cli/releases/download/v0.24.1/wp-cli-0.24.1.phar...
New version works. Proceeding to replace.
Success: Updated WP-CLI to 0.24.1.

Метод класса: CLI_Command{}

Хуков нет.

Возвращает

null. Ничего (null).

Использование

$CLI_Command = new CLI_Command();
$CLI_Command->update( $_, $assoc_args );
$_ (обязательный)
-
$assoc_args (обязательный)
-

Код CLI_Command::update() WP-CLI 2.8.0-alpha

public function update( $_, $assoc_args ) {
	if ( ! Utils\inside_phar() ) {
		WP_CLI::error( 'You can only self-update Phar files.' );
	}

	$old_phar = realpath( $_SERVER['argv'][0] );

	if ( ! is_writable( $old_phar ) ) {
		WP_CLI::error( sprintf( '%s is not writable by current user.', $old_phar ) );
	} elseif ( ! is_writable( dirname( $old_phar ) ) ) {
		WP_CLI::error( sprintf( '%s is not writable by current user.', dirname( $old_phar ) ) );
	}

	if ( Utils\get_flag_value( $assoc_args, 'nightly' ) ) {
		WP_CLI::confirm( sprintf( 'You have version %s. Would you like to update to the latest nightly?', WP_CLI_VERSION ), $assoc_args );
		$download_url = 'https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli-nightly.phar';
		$md5_url      = 'https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli-nightly.phar.md5';
	} elseif ( Utils\get_flag_value( $assoc_args, 'stable' ) ) {
		WP_CLI::confirm( sprintf( 'You have version %s. Would you like to update to the latest stable release?', WP_CLI_VERSION ), $assoc_args );
		$download_url = 'https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar';
		$md5_url      = 'https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar.md5';
	} else {

		$updates = $this->get_updates( $assoc_args );

		if ( empty( $updates ) ) {
			$update_type = $this->get_update_type_str( $assoc_args );
			WP_CLI::success( "WP-CLI is at the latest{$update_type}version." );
			return;
		}

		$newest = $updates[0];

		WP_CLI::confirm( sprintf( 'You have version %s. Would you like to update to %s?', WP_CLI_VERSION, $newest['version'] ), $assoc_args );

		$download_url = $newest['package_url'];
		$md5_url      = str_replace( '.phar', '.phar.md5', $download_url );
	}

	WP_CLI::log( sprintf( 'Downloading from %s...', $download_url ) );

	$temp = Utils\get_temp_dir() . uniqid( 'wp_', true ) . '.phar';

	$headers = [];
	$options = [
		'timeout'  => 600,  // 10 minutes ought to be enough for everybody.
		'filename' => $temp,
		'insecure' => (bool) Utils\get_flag_value( $assoc_args, 'insecure', false ),
	];

	Utils\http_request( 'GET', $download_url, null, $headers, $options );

	unset( $options['filename'] );
	$md5_response = Utils\http_request( 'GET', $md5_url, null, $headers, $options );
	if ( '20' !== substr( $md5_response->status_code, 0, 2 ) ) {
		WP_CLI::error( "Couldn't access md5 hash for release (HTTP code {$md5_response->status_code})." );
	}
	$md5_file     = md5_file( $temp );
	$release_hash = trim( $md5_response->body );
	if ( $md5_file === $release_hash ) {
		WP_CLI::log( 'md5 hash verified: ' . $release_hash );
	} else {
		WP_CLI::error( "md5 hash for download ({$md5_file}) is different than the release hash ({$release_hash})." );
	}

	$allow_root = WP_CLI::get_runner()->config['allow-root'] ? '--allow-root' : '';
	$php_binary = Utils\get_php_binary();
	$process    = Process::create( "{$php_binary} $temp --info {$allow_root}" );
	$result     = $process->run();
	if ( 0 !== $result->return_code || false === stripos( $result->stdout, 'WP-CLI version' ) ) {
		$multi_line = explode( PHP_EOL, $result->stderr );
		WP_CLI::error_multi_line( $multi_line );
		WP_CLI::error( 'The downloaded PHAR is broken, try running wp cli update again.' );
	}

	WP_CLI::log( 'New version works. Proceeding to replace.' );

	$mode = fileperms( $old_phar ) & 511;

	if ( false === chmod( $temp, $mode ) ) {
		WP_CLI::error( sprintf( 'Cannot chmod %s.', $temp ) );
	}

	class_exists( '\cli\Colors' ); // This autoloads \cli\Colors - after we move the file we no longer have access to this class.

	if ( false === rename( $temp, $old_phar ) ) {
		WP_CLI::error( sprintf( 'Cannot move %s to %s', $temp, $old_phar ) );
	}

	if ( Utils\get_flag_value( $assoc_args, 'nightly', false ) ) {
		$updated_version = 'the latest nightly release';
	} elseif ( Utils\get_flag_value( $assoc_args, 'stable', false ) ) {
		$updated_version = 'the latest stable release';
	} else {
		$updated_version = isset( $newest['version'] ) ? $newest['version'] : '<not provided>';
	}
	WP_CLI::success( sprintf( 'Updated WP-CLI to %s.', $updated_version ) );
}