Make WordPress Core


Ignore:
Timestamp:
10/14/2013 09:02:46 PM (13 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.