Making WordPress.org


Ignore:
Timestamp:
07/09/2020 07:35:02 AM (4 years ago)
Author:
dd32
Message:

Plugin Directory: When importing plugins, use the last commit date to the stable tag as the Last Updated value for the plugin.

This allows for WordPress.org to re-import plugins/blocks without affecting the last-updated date displayed.

Props coreymckrill, dd32.
Fixes #5242.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php

    r10014 r10044  
    7575        $stable_tag      = $data['stable_tag'];
    7676        $tagged_versions = $data['tagged_versions'];
     77        $last_modified   = $data['last_modified'];
    7778        $blocks          = $data['blocks'];
    7879        $block_files     = $data['block_files'];
     
    103104            ( $svn_changed_tags && in_array( ( $stable_tag ?: 'trunk' ), $svn_changed_tags, true ) )
    104105        ) {
    105             $plugin->post_modified = $plugin->post_modified_gmt = current_time( 'mysql' );
     106            if ( $last_modified ) {
     107                $plugin->post_modified = $plugin->post_modified_gmt = $last_modified;
     108            } else {
     109                $plugin->post_modified = $plugin->post_modified_gmt = current_time( 'mysql' );
     110            }
    106111        }
    107112
     
    331336        if ( $trunk_readme_files ) {
    332337            $trunk_readme_file = reset( $trunk_readme_files );
     338            // Preference readme.txt over readme.md if both exist.
    333339            foreach ( $trunk_readme_files as $f ) {
    334340                if ( '.txt' == strtolower( substr( $f, -4 ) ) ) {
     
    344350        }
    345351
    346         $exported = false;
     352        $svn_info = false;
    347353        if ( $stable_tag && 'trunk' != $stable_tag ) {
    348             $svn_export = SVN::export(
    349                 self::PLUGIN_SVN_BASE . "/{$plugin_slug}/tags/{$stable_tag}",
    350                 $tmp_dir . '/export',
    351                 array(
    352                     'ignore-externals',
    353                 )
    354             );
    355             // Handle tags which we store as 0.blah but are in /tags/.blah
    356             if ( ! $svn_export['result'] && '0.' == substr( $stable_tag, 0, 2 ) ) {
     354            $stable_url = self::PLUGIN_SVN_BASE . "/{$plugin_slug}/tags/{$stable_tag}";
     355            $svn_info = SVN::info( $stable_url );
     356
     357            if ( ! $svn_info['result'] && '0.' === substr( $stable_tag, 0, 2 ) ) {
     358                // Handle tags which we store as 0.blah but are in /tags/.blah
    357359                $_stable_tag = substr( $stable_tag, 1 );
    358                 $svn_export  = SVN::export(
    359                     self::PLUGIN_SVN_BASE . "/{$plugin_slug}/tags/{$_stable_tag}",
    360                     $tmp_dir . '/export',
    361                     array(
    362                         'ignore-externals',
    363                     )
    364                 );
    365             }
    366             if ( $svn_export['result'] && false !== $this->find_readme_file( $tmp_dir . '/export' ) ) {
    367                 $exported = true;
    368             } else {
    369                 // Clear out any files that exist in the export.
    370                 Filesystem::rmdir( $tmp_dir . '/export' );
    371             }
    372         }
    373         if ( ! $exported ) {
     360                $stable_url  = self::PLUGIN_SVN_BASE . "/{$plugin_slug}/tags/{$_stable_tag}";
     361                $svn_info    = SVN::info( $stable_url );
     362            }
     363
     364            // Verify that the tag has files, falling back to trunk if not.
     365            if ( ! SVN::ls( $stable_tag ) ) {
     366                $svn_info = false;
     367            }
     368        }
     369
     370        if ( ! $svn_info || ! $svn_info['result'] ) {
     371            $stable_tag = 'trunk';
     372            $stable_url = self::PLUGIN_SVN_BASE . "/{$plugin_slug}/trunk";
     373            $svn_info   = SVN::info( $stable_url );
     374        }
     375
     376        if ( ! $svn_info['result'] ) {
     377            throw new Exception( 'Could not find stable SVN URL: ' . implode( ' ', reset( $svn_info['errors'] ) ) );
     378        }
     379
     380        $last_modified = false;
     381        if ( preg_match( '/^([0-9]{4}\-[0-9]{2}\-[0-9]{2} [0-9]{1,2}:[0-9]{2}:[0-9]{2})/', $svn_info['result']['Last Changed Date'] ?? '', $m ) ) {
     382            $last_modified = $m[0];
     383        }
     384
     385        $svn_export = SVN::export(
     386            $stable_url,
     387            $tmp_dir . '/export',
     388            array(
     389                'ignore-externals',
     390            )
     391        );
     392
     393        if ( ! $svn_export['result'] || empty( $svn_export['revision'] ) ) {
    374394            // Catch the case where exporting a tag finds nothing, but there was nothing in trunk either.
    375395            if ( ! $trunk_files ) {
     
    377397            }
    378398
    379             $stable_tag = 'trunk';
    380             // Either stable_tag = trunk, or the stable_tag tag didn't exist.
    381             $svn_export = SVN::export(
    382                 self::PLUGIN_SVN_BASE . "/{$plugin_slug}/trunk",
    383                 $tmp_dir . '/export',
    384                 array(
    385                     'ignore-externals',
    386                 )
    387             );
    388             if ( ! $svn_export['result'] || empty( $svn_export['revision'] ) ) {
    389                 throw new Exception( 'Could not create SVN export: ' . implode( ' ', reset( $svn_export['errors'] ) ) );
    390             }
     399            throw new Exception( 'Could not create SVN export: ' . implode( ' ', reset( $svn_export['errors'] ) ) );
    391400        }
    392401
     
    402411
    403412        // Now we look in the /assets/ folder for banners, screenshots, and icons.
    404         $assets            = array(
     413        $assets = array(
    405414            'screenshot' => array(),
    406415            'banner'     => array(),
    407416            'icon'       => array(),
    408417        );
     418
    409419        $svn_assets_folder = SVN::ls( self::PLUGIN_SVN_BASE . "/{$plugin_slug}/assets/", true /* verbose */ );
    410420        if ( $svn_assets_folder ) { // /assets/ may not exist.
     
    557567        } ) );
    558568
    559         return compact( 'readme', 'stable_tag', 'tmp_dir', 'plugin_headers', 'assets', 'tagged_versions', 'blocks', 'block_files' );
     569        return compact( 'readme', 'stable_tag', 'last_modified', 'tmp_dir', 'plugin_headers', 'assets', 'tagged_versions', 'blocks', 'block_files' );
    560570    }
    561571
Note: See TracChangeset for help on using the changeset viewer.