<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[18225] trunk: Core support for partial updates.</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg > ul, #logmsg > ol { margin-left: 0; margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.wordpress.org/changeset/18225">18225</a></dd>
<dt>Author</dt> <dd>nacin</dd>
<dt>Date</dt> <dd>2011-06-10 05:47:44 +0000 (Fri, 10 Jun 2011)</dd>
</dl>
<h3>Log Message</h3>
<pre>Core support for partial updates. see <a href="http://trac.wordpress.org/ticket/10611">#10611</a>.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkwpadminincludesclasswpupgraderphp">trunk/wp-admin/includes/class-wp-upgrader.php</a></li>
<li><a href="#trunkwpadminupdatecorephp">trunk/wp-admin/update-core.php</a></li>
<li><a href="#trunkwpincludesupdatephp">trunk/wp-includes/update.php</a></li>
<li><a href="#trunkwpincludesversionphp">trunk/wp-includes/version.php</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkwpadminincludesclasswpupgraderphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/includes/class-wp-upgrader.php (18224 => 18225)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/class-wp-upgrader.php        2011-06-10 05:37:51 UTC (rev 18224)
+++ trunk/wp-admin/includes/class-wp-upgrader.php        2011-06-10 05:47:44 UTC (rev 18225)
</span><span class="lines">@@ -885,7 +885,21 @@
</span><span class="cx">
</span><span class="cx">                 $wp_dir = trailingslashit($wp_filesystem->abspath());
</span><span class="cx">
</span><del>-                $download = $this->download_package( $current->package );
</del><ins>+                // If partial update is returned from the API, use that, unless we're doing a reinstall.
+                // If we cross the new_bundled version number, then use the new_bundled zip.
+                // Don't though if the constant is set to skip bundled items.
+                // If the API returns a no_content zip, go with it. Finally, default to the full zip.
+                if ( $current->packages->partial && 'reinstall' != $current->response )
+                        $to_download = 'partial';
+                elseif ( $current->packages->new_bundled && version_compare( $wp_version, $current->new_bundled, '<' )
+                        && ( ! defined( 'CORE_UPGRADE_SKIP_NEW_BUNDLED' ) || ! CORE_UPGRADE_SKIP_NEW_BUNDLED ) )
+                        $to_download = 'new_bundled';
+                elseif ( $current->packages->no_content )
+                        $to_download = 'no_content';
+                else
+                        $to_download = 'full';
+
+                $download = $this->download_package( $current->packages->$to_download );
</ins><span class="cx">                 if ( is_wp_error($download) )
</span><span class="cx">                         return $download;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkwpadminupdatecorephp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/update-core.php (18224 => 18225)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/update-core.php        2011-06-10 05:37:51 UTC (rev 18224)
+++ trunk/wp-admin/update-core.php        2011-06-10 05:47:44 UTC (rev 18225)
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx">                 } else {
</span><span class="cx">                         submit_button( $submit, 'button', 'upgrade', false );
</span><span class="cx">                 }
</span><del>-                echo '&nbsp;<a href="' . esc_url( $update->package ) . '" class="button">' . $download . '</a>&nbsp;';
</del><ins>+                echo '&nbsp;<a href="' . esc_url( $update->download ) . '" class="button">' . $download . '</a>&nbsp;';
</ins><span class="cx">         }
</span><span class="cx">         if ( 'en_US' != $update->locale )
</span><span class="cx">                 if ( !isset( $update->dismissed ) || !$update->dismissed )
</span></span></pre></div>
<a id="trunkwpincludesupdatephp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/update.php (18224 => 18225)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/update.php        2011-06-10 05:37:51 UTC (rev 18224)
+++ trunk/wp-includes/update.php        2011-06-10 05:47:44 UTC (rev 18225)
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx">         }
</span><span class="cx">
</span><span class="cx">         $local_package = isset( $wp_local_package )? $wp_local_package : '';
</span><del>-        $url = "http://api.wordpress.org/core/version-check/1.5/?version=$wp_version&php=$php_version&locale=$locale&mysql=$mysql_version&local_package=$local_package&blogs=$num_blogs&users={$user_count['total_users']}&multisite_enabled=$multisite_enabled";
</del><ins>+        $url = "http://api.wordpress.org/core/version-check/1.6-beta/?version=$wp_version&php=$php_version&locale=$locale&mysql=$mysql_version&local_package=$local_package&blogs=$num_blogs&users={$user_count['total_users']}&multisite_enabled=$multisite_enabled";
</ins><span class="cx">
</span><span class="cx">         $options = array(
</span><span class="cx">                 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3 ),
</span><span class="lines">@@ -75,29 +75,26 @@
</span><span class="cx">                 return false;
</span><span class="cx">
</span><span class="cx">         $body = trim( wp_remote_retrieve_body( $response ) );
</span><del>-        $body = str_replace(array("\r\n", "\r"), "\n", $body);
-        $new_options = array();
-        foreach ( explode( "\n\n", $body ) as $entry ) {
-                $returns = explode("\n", $entry);
-                $new_option = new stdClass();
-                $new_option->response = esc_attr( $returns[0] );
-                if ( isset( $returns[1] ) )
-                        $new_option->url = esc_url( $returns[1] );
-                if ( isset( $returns[2] ) )
-                        $new_option->package = esc_url( $returns[2] );
-                if ( isset( $returns[3] ) )
-                        $new_option->current = esc_attr( $returns[3] );
-                if ( isset( $returns[4] ) )
-                        $new_option->locale = esc_attr( $returns[4] );
-                if ( isset( $returns[5] ) )
-                        $new_option->php_version = esc_attr( $returns[5] );
-                if ( isset( $returns[6] ) )
-                        $new_option->mysql_version = esc_attr( $returns[6] );
-                $new_options[] = $new_option;
</del><ins>+        if ( ! $body = maybe_unserialize( $body ) )
+                return false;
+        if ( ! isset( $body['offers'] ) )
+                return false;
+        $offers = $body['offers'];
+
+        foreach ( $offers as &$offer ) {
+                foreach ( $offer as $offer_key => $value ) {
+                        if ( 'packages' == $offer_key )
+                                $offer['packages'] = (object) array_intersect_key( array_map( 'esc_url', $offer['packages'] ), array_fill_keys( array( 'full', 'no_content', 'new_bundled', 'partial' ), '' ) );
+                        elseif ( 'download' == $offer_key )
+                                $offer['download'] = esc_url( $value );
+                        else
+                                $offer[ $offer_key ] = esc_html( $value );
+                }
+                $offer = (object) array_intersect_key( $offer, array_fill_keys( array( 'response', 'download', 'locale', 'packages', 'current', 'php_version', 'mysql_version', 'new_bundled' ), '' ) );
</ins><span class="cx">         }
</span><span class="cx">
</span><span class="cx">         $updates = new stdClass();
</span><del>-        $updates->updates = $new_options;
</del><ins>+        $updates->updates = $offers;
</ins><span class="cx">         $updates->last_checked = time();
</span><span class="cx">         $updates->version_checked = $wp_version;
</span><span class="cx">         set_site_transient( 'update_core', $updates);
</span></span></pre></div>
<a id="trunkwpincludesversionphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/version.php (18224 => 18225)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/version.php        2011-06-10 05:37:51 UTC (rev 18224)
+++ trunk/wp-includes/version.php        2011-06-10 05:47:44 UTC (rev 18225)
</span><span class="lines">@@ -11,7 +11,7 @@
</span><span class="cx"> *
</span><span class="cx"> * @global int $wp_db_version
</span><span class="cx"> */
</span><del>-$wp_db_version = 17517;
</del><ins>+$wp_db_version = 18220;
</ins><span class="cx">
</span><span class="cx"> /**
</span><span class="cx"> * Holds the TinyMCE version
</span></span></pre>
</div>
</div>
</body>
</html>