WordPress.org

Make WordPress Core

Changeset 25777


Ignore:
Timestamp:
10/14/13 21:02:46 (4 years ago)
Author:
nacin
Message:

Auto updates: Only attempt a roll back when we've hit a critical error code.

Specifically, this means when we've failed in copying files.

see #22704.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/class-wp-upgrader.php

    r25770 r25777  
    160160 
    161161        // Unzip package to working directory 
    162         $result = unzip_file($package, $working_dir); //TODO optimizations, Copy when Move/Rename would suffice? 
     162        $result = unzip_file( $package, $working_dir ); 
    163163 
    164164        // Once extracted, delete the package if required. 
     
    12991299        $result = update_core( $working_dir, $wp_dir ); 
    13001300 
    1301         // In the event of an error, rollback to the previous version 
    1302         if ( is_wp_error( $result ) && $parsed_args['attempt_rollback'] && $current->packages->rollback && ! $parsed_args['do_rollback'] ) { 
    1303             apply_filters( 'update_feedback', $result ); 
    1304             apply_filters( 'update_feedback', $this->strings['start_rollback'] ); 
    1305  
    1306             $rollback_result = $this->upgrade( $current, array_merge( $parsed_args, array( 'do_rollback' => true ) ) ); 
    1307  
    1308             $result = new WP_Error( 'rollback_was_required', $this->strings['rollback_was_required'], array( 'rollback' => $rollback_result, 'update' => $result ) ); 
    1309         } 
     1301        // In the event of an issue, we may be able to roll back. 
     1302        if ( $parsed_args['attempt_rollback'] && $current->packages->rollback && ! $parsed_args['do_rollback'] ) { 
     1303            $try_rollback = false; 
     1304            if ( is_wp_error( $result ) ) { 
     1305                $error_code = $result->get_error_code(); 
     1306                // Not all errors are equal. These codes are critical: copy_failed__copy_dir, 
     1307                // mkdir_failed__copy_dir, copy_failed__copy_dir_retry, and disk_full. 
     1308                if ( false !== strpos( $error_code, '__copy_dir' ) ) 
     1309                    $try_rollback = true; 
     1310                elseif ( 'disk_full' === $error_code ) 
     1311                    $try_rollback = true; 
     1312            } 
     1313 
     1314            if ( $try_rollback ) { 
     1315                apply_filters( 'update_feedback', $result ); 
     1316                apply_filters( 'update_feedback', $this->strings['start_rollback'] ); 
     1317 
     1318                $rollback_result = $this->upgrade( $current, array_merge( $parsed_args, array( 'do_rollback' => true ) ) ); 
     1319 
     1320                $result = new WP_Error( 'rollback_was_required', $this->strings['rollback_was_required'], array( 'rollback' => $rollback_result, 'update' => $result ) ); 
     1321            } 
     1322        } 
     1323 
    13101324        do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'core' ), $result ); 
    13111325        return $result; 
Note: See TracChangeset for help on using the changeset viewer.