Changeset 6061
- Timestamp:
- 10/31/2017 06:42:21 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/zip/class-builder.php
r6047 r6061 12 12 13 13 const TMP_DIR = '/tmp/plugin-zip-builder'; 14 const SVN_URL = 'http ://plugins.svn.wordpress.org';14 const SVN_URL = 'https://plugins.svn.wordpress.org'; 15 15 const ZIP_SVN_URL = PLUGIN_ZIP_SVN_URL; 16 16 … … 24 24 protected $context = ''; 25 25 protected $stable_tag = ''; 26 27 // The SVN url of the plugin version being packaged. 28 protected $plugin_version_svn_url = ''; 26 29 27 30 /** … … 204 207 $existing_json_checksum_file = file_exists( $this->checksum_file ); 205 208 206 $this->exec( sprintf( 207 'cd %s && find . -type f -print0 | sort -z | xargs -0 md5sum 2>&1', 208 escapeshellarg( $this->tmp_build_dir . '/' . $this->slug ) 209 ), $checksum_output, $return_value ); 210 211 if ( $return_value ) { 212 // throw new Exception( __METHOD__ . ': Checksum generation failed, return code: ' . $return_value, 503 ); 213 // For now, just silently bail. 214 return; 215 } 216 217 $checksums = array(); 218 foreach ( $checksum_output as $line ) { 219 list( $md5, $filename ) = preg_split( '!\s+!', $line ); 220 $filename = preg_replace( '!^./!', '', $filename ); 221 $checksums[ trim( $filename ) ] = trim( $md5 ); 209 $checksums = array( 210 'md5' => array(), 211 'sha256' => array() 212 ); 213 foreach ( array( 'md5' => 'md5sum', 'sha256' => 'sha256sum' ) as $checksum_type => $checksum_bin ) { 214 $this->exec( sprintf( 215 'cd %s && find . -type f -print0 | sort -z | xargs -0 ' . $checksum_bin . ' 2>&1', 216 escapeshellarg( $this->tmp_build_dir . '/' . $this->slug ) 217 ), $checksum_output, $return_value ); 218 219 if ( $return_value ) { 220 // throw new Exception( __METHOD__ . ': Checksum generation failed, return code: ' . $return_value, 503 ); 221 // TODO For now, just silently keep going. 222 continue; 223 } 224 225 foreach ( $checksum_output as $line ) { 226 list( $checksum, $filename ) = preg_split( '!\s+!', $line ); 227 $filename = trim( preg_replace( '!^./!', '', $filename ) ); 228 $checksum = trim( $checksum ); 229 $checksums[ $checksum_type][ $filename ] = $checksum; 230 } 222 231 } 223 232 … … 225 234 'plugin' => $this->slug, 226 235 'version' => $plugin_version, 227 'source_tag' => $this->version, 228 'zip' => basename( $this->zip_file ), 229 'checksums' => $checksums 236 'source' => $this->plugin_version_svn_url, 237 'zip' => 'https://downloads.wordpress.org/plugins/' . basename( $this->zip_file ), 238 'md5' => $checksums['md5'], 239 'sha256' => $checksums['sha256'], 230 240 ); 231 241 … … 234 244 $existing_json_checksum_file = json_decode( file_get_contents( $this->checksum_file ) ); 235 245 236 if ( $existing_json_checksum_file && ! empty( $existing_json_checksum_file->checksums ) ) { 237 foreach ( $existing_json_checksum_file->checksums as $file => $checksum_details ) { 238 239 if ( ! isset( $json_checksum_file->checksums[ $file ] ) ) { 240 // Deleted file, include it in checksums. 241 $json_checksum_file->checksums[ $file ] = $checksum_details; 242 243 } elseif ( $json_checksum_file->checksums[ $file ] != $checksum_details ) { 244 // Checksum has changed, include both in the resulting json file. 245 if ( is_array( $checksum_details ) ) { 246 $checksum_details[] = $json_checksum_file->checksums[ $file ]; 247 $json_checksum_file->checksums[ $file ] = array_unique( $checksum_details ); 248 } else { 249 $json_checksum_file->checksums[ $file ] = array( 250 $json_checksum_file->checksums[ $file ], 251 $checksum_details 252 ); 253 } 246 // Sometimes plugin versions exist in multiple tags/zips, include all the SVN urls & ZIP urls 247 foreach ( array( 'source', 'zip' ) as $maybe_different ) { 248 if ( !empty( $existing_json_checksum_file->{$maybe_different} ) && 249 $existing_json_checksum_file->{$maybe_different} != $json_checksum_file->{$maybe_different} 250 ) { 251 $json_checksum_file->{$maybe_different} = array_unique( array_merge( 252 (array) $existing_json_checksum_file->{$maybe_different}, 253 (array) $json_checksum_file->{$maybe_different} 254 ) ); 255 256 // Reduce single arrays back to a string when possible. 257 if ( 1 == count( $json_checksum_file->{$maybe_different} ) ) { 258 $json_checksum_file->{$maybe_different} = array_shift( $json_checksum_file->{$maybe_different} ); 254 259 } 255 260 } 261 } 262 263 // Combine Checksums from existing files and the new files 264 foreach ( array( 'md5', 'sha256' ) as $checksum_type ) { 265 if ( ! $existing_json_checksum_file || empty( $existing_json_checksum_file->{$checksum_type} ) ) { 266 continue; 267 } 268 $existing_checksums = (array) $existing_json_checksum_file->{$checksum_type}; // Assoc array => Object in JSON 269 $new_checksums = &$json_checksum_file->{$checksum_type}; // byref to update new array 270 271 foreach ( $existing_checksums as $file => $checksums ) { 272 if ( ! isset( $new_checksums[ $file ] ) ) { 273 // Deleted file, include it in checksums. 274 $new_checksums[ $file ] = $existing_checksums[ $file ]; 275 276 } elseif ( $new_checksums[ $file ] != $existing_checksums[ $file ] ) { 277 // Checksum has changed, include both in the resulting json file. 278 279 $new_checksums[ $file ] = array_unique( array_merge( 280 (array) $existing_checksums[ $file ], // May already be an array 281 (array) $new_checksums[ $file ] 282 ) ); 283 } 284 } 285 256 286 } 257 287 } … … 303 333 protected function export_plugin() { 304 334 if ( 'trunk' == $this->version ) { 305 $ svn_url = self::SVN_URL . "/{$this->slug}/trunk/";335 $this->plugin_version_svn_url = self::SVN_URL . "/{$this->slug}/trunk/"; 306 336 } else { 307 $svn_url = self::SVN_URL . "/{$this->slug}/tags/{$this->version}/"; 308 } 337 $this->plugin_version_svn_url = self::SVN_URL . "/{$this->slug}/tags/{$this->version}/"; 338 } 339 309 340 $build_dir = "{$this->tmp_build_dir}/{$this->slug}/"; 310 341 … … 315 346 } 316 347 317 $res = SVN::export( $ svn_url, $build_dir, $svn_params );348 $res = SVN::export( $this->plugin_version_svn_url, $build_dir, $svn_params ); 318 349 // Handle tags which we store as 0.blah but are in /tags/.blah 319 350 if ( ! $res['result'] && '0.' == substr( $this->version, 0, 2 ) ) { 320 351 $_version = substr( $this->version, 1 ); 321 $svn_url = self::SVN_URL . "/{$this->slug}/tags/{$_version}/";322 $res = SVN::export( $ svn_url, $build_dir, $svn_params );352 $this->plugin_version_svn_url = self::SVN_URL . "/{$this->slug}/tags/{$_version}/"; 353 $res = SVN::export( $this->plugin_version_svn_url, $build_dir, $svn_params ); 323 354 } 324 355 if ( ! $res['result'] ) {
Note: See TracChangeset
for help on using the changeset viewer.