From 04e8bb4bb5ed37dade1b1ddda634e45f7503820d Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Tue, 18 Oct 2022 20:37:34 +0000 Subject: [PATCH] Upgrade/Install: Add a conditional to facilitate testing of the Rollbacks feature project. The [https://make.wordpress.org/core/2021/02/19/feature-plugin-rollback-update-failure/ Rollback Update Failure feature project] creates a temporary backup of plugins and themes before updating. This aims to make the update process more reliable and ensure that if a plugin or theme update fails, the previous version can be safely restored. If the [https://wordpress.org/plugins/rollback-update-failure/ Rollback Update Failure plugin] is installed, `WP_Upgrader::install_package()` will use the `move_dir()` function from there for better performance. Instead of copying a directory from one location to another, it uses the `rename()` PHP function to speed up the process, which is instrumental in creating a temporary backup without a delay. If the renaming failed, it falls back to `copy_dir()` WP function. This conditional aims to facilitate broader testing of the feature. It is temporary, until the plugin is merged into core. Follow-up to [53578], [54484]. Props afragen, pbiron, costdev, davidbaumwald, audrasjb, jrf, SergeyBiryukov. See #56057. git-svn-id: https://develop.svn.wordpress.org/trunk@54643 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/class-wp-upgrader.php | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/wp-admin/includes/class-wp-upgrader.php b/src/wp-admin/includes/class-wp-upgrader.php index 50309630dc..a2b2c9ed06 100644 --- a/src/wp-admin/includes/class-wp-upgrader.php +++ b/src/wp-admin/includes/class-wp-upgrader.php @@ -594,7 +594,23 @@ class WP_Upgrader { } // Copy new version of item into place. - $result = copy_dir( $source, $remote_destination ); + if ( class_exists( 'Rollback_Update_Failure\WP_Upgrader' ) + && function_exists( '\Rollback_Update_Failure\move_dir' ) + ) { + /* + * If the {@link https://wordpress.org/plugins/rollback-update-failure/ Rollback Update Failure} + * feature plugin is installed, use the move_dir() function from there for better performance. + * Instead of copying a directory from one location to another, it uses the rename() PHP function + * to speed up the process. If the renaming failed, it falls back to copy_dir(). + * + * This condition aims to facilitate broader testing of the Rollbacks (temp backups) feature project. + * It is temporary, until the plugin is merged into core. + */ + $result = \Rollback_Update_Failure\move_dir( $source, $remote_destination ); + } else { + $result = copy_dir( $source, $remote_destination ); + } + if ( is_wp_error( $result ) ) { if ( $args['clear_working'] ) { $wp_filesystem->delete( $remote_source, true );