Ticket #18201: 18201.3.diff
File 18201.3.diff, 5.2 KB (added by , 11 years ago) |
---|
-
wp-admin/includes/update.php
57 57 return $result; 58 58 } 59 59 60 function get_core_checksums( $version ) { 61 if ( $checksums = get_site_transient( "core_checksums_$version" ) ) 62 return $checksums; 63 64 $url = 'http://api.wordpress.org/core/checksum/1.0/?' . http_build_query( array( 'version' => $version ), null, '&' ); 65 66 if ( wp_http_supports( array( 'ssl' ) ) ) 67 $url = set_url_scheme( $url, 'https' ); 68 69 $options = array( 70 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3 ), 71 'user-agent' => 'WordPress/' . $version . '; ' . home_url( '/' ) 72 ); 73 74 $response = wp_remote_get( $url, $options ); 75 76 if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) 77 return false; 78 79 $body = trim( wp_remote_retrieve_body( $response ) ); 80 $body = json_decode( $body, true ); 81 82 if ( ! is_array( $body ) || ! isset( $body['checksums'] ) || ! is_array( $body['checksums'] ) ) 83 return false; 84 85 set_site_transient( "core_checksums_$version", $body['checksums'], HOUR_IN_SECONDS ); 86 87 return $body['checksums']; 88 } 89 60 90 function dismiss_core_update( $update ) { 61 91 $dismissed = get_site_option( 'dismissed_update_core' ); 62 92 $dismissed[ $update->current . '|' . $update->locale ] = true; -
wp-admin/includes/class-wp-upgrader.php
1090 1090 1091 1091 $wp_dir = trailingslashit($wp_filesystem->abspath()); 1092 1092 1093 $no_partial = false; 1094 if ( ! $this->check_files() ) 1095 $no_partial = true; 1096 1093 1097 // If partial update is returned from the API, use that, unless we're doing a reinstall. 1094 1098 // If we cross the new_bundled version number, then use the new_bundled zip. 1095 1099 // Don't though if the constant is set to skip bundled items. 1096 1100 // If the API returns a no_content zip, go with it. Finally, default to the full zip. 1097 if ( $current->packages->partial && 'reinstall' != $current->response && $wp_version == $current->partial_version )1101 if ( $current->packages->partial && 'reinstall' != $current->response && $wp_version == $current->partial_version && ! $no_partial ) 1098 1102 $to_download = 'partial'; 1099 1103 elseif ( $current->packages->new_bundled && version_compare( $wp_version, $current->new_bundled, '<' ) 1100 1104 && ( ! defined( 'CORE_UPGRADE_SKIP_NEW_BUNDLED' ) || ! CORE_UPGRADE_SKIP_NEW_BUNDLED ) ) … … 1129 1133 return $result; 1130 1134 } 1131 1135 1136 function check_files() { 1137 global $wp_version; 1138 1139 if ( ! function_exists( 'md5_file' ) ) 1140 return false; 1141 1142 $checksums = get_core_checksums( $wp_version ); 1143 1144 if ( empty( $checksums ) ) 1145 return false; 1146 1147 $home = get_home_path(); 1148 1149 foreach ( $checksums as $file => $checksum ) { 1150 if ( md5_file( $home . $file ) !== $checksum ) 1151 return false; 1152 } 1153 1154 return true; 1155 } 1132 1156 } 1133 1157 1134 1158 /** -
wp-admin/includes/update-core.php
690 690 691 691 apply_filters('update_feedback', __('Installing the latest version…')); 692 692 693 // Check to see which files don't really need updating 694 $skip = array( 'wp-content' ); 695 $checksums = array(); 696 if ( function_exists( 'md5_file' ) ) { 697 $checksums = get_core_checksums( $wp_version ); 698 if ( ! empty( $checksums ) ) { 699 foreach( $checksums as $file => $checksum ) { 700 if ( md5_file( $to . $file ) === $checksum ) 701 $skip[] = $file; 702 } 703 } 704 } 705 693 706 // Create maintenance file to signal that we are upgrading 694 707 $maintenance_string = '<?php $upgrading = ' . time() . '; ?>'; 695 708 $maintenance_file = $to . '.maintenance'; … … 697 710 $wp_filesystem->put_contents($maintenance_file, $maintenance_string, FS_CHMOD_FILE); 698 711 699 712 // Copy new versions of WP files into place. 700 $result = _copy_dir($from . $distro, $to, array('wp-content') ); 713 $result = _copy_dir($from . $distro, $to, $skip ); 714 715 // Check to make sure everything copied correctly 716 $skip = array( 'wp-content' ); 717 $failed = array(); 718 if ( function_exists( 'md5_file' ) ) { 719 if ( ! empty( $checksums ) ) { 720 foreach( $checksums as $file => $checksum ) { 721 if ( md5_file( $to . $file ) === $checksum ) 722 $skip[] = $file; 723 else 724 $failed[] = $file; 725 } 726 } 727 } 728 729 // Some files didn't copy properly 730 if ( ! empty( $failed ) ) { 731 $total_size = 0; 732 foreach ( $failed as $file => $checksum ) 733 $total_size += filesize( $from . $file ); 734 735 if ( $total_size >= disk_free_space( $to ) ) { 736 // If we don't have enough free space, it isn't worth trying again 737 $result = new WP_Error( 'disk_full', __( "There isn't enough free disk space to complete the upgrade." ), $to ); 738 } else { 739 // Let's wait a few seconds, in case it's some sort of temporary destination issue, then try once more 740 sleep( 3 ); 741 $result = _copy_dir( $from . $distro, $to, $skip ); 742 } 743 } 701 744 702 745 // Custom Content Directory needs updating now. 703 746 // Copy Languages