From f8af77dd9dd59b2aeaf849596d0d2fb14fe46675 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Tue, 30 Apr 2013 18:42:03 -0700 Subject: [PATCH] Reduced memory usage a bit for copyFileBackend.php with --missingonly. Change-Id: Iae650b5c3a5f99c5b2e31e29c276957ea6b8bb50 --- maintenance/copyFileBackend.php | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/maintenance/copyFileBackend.php b/maintenance/copyFileBackend.php index f2c4ac5414..fe422b38a3 100644 --- a/maintenance/copyFileBackend.php +++ b/maintenance/copyFileBackend.php @@ -79,24 +79,28 @@ class CopyFileBackend extends Maintenance { // Do a listing comparison if specified if ( $this->hasOption( 'missingonly' ) ) { - $relFilesSrc = array(); - $relFilesDst = array(); - foreach ( $srcPathsRel as $srcPathRel ) { - $relFilesSrc[] = $srcPathRel; - } $dstPathsRel = $dst->getFileList( array( 'dir' => $dst->getRootStoragePath() . "/$backendRel" ) ); if ( $dstPathsRel === null ) { $this->error( "Could not list files in $container.", 1 ); // die } + // Get the list of destination files + $relFilesDstSha1 = array(); foreach ( $dstPathsRel as $dstPathRel ) { - $relFilesDst[] = $dstPathRel; + $relFilesDstSha1[sha1( $dstPathRel )] = 1; + } + unset( $dstPathsRel ); // free + // Get the list of missing files + $missingPathsRel = array(); + foreach ( $srcPathsRel as $srcPathRel ) { + if ( !isset( $relFilesDstSha1[sha1( $srcPathRel )] ) ) { + $missingPathsRel[] = $srcPathRel; + } } + unset( $srcPathsRel ); // free // Only copy the missing files over in the next loop - $srcPathsRel = array_diff( $relFilesSrc, $relFilesDst ); + $srcPathsRel = $missingPathsRel; $this->output( count( $srcPathsRel ) . " file(s) need to be copied.\n" ); - unset( $relFilesSrc ); - unset( $relFilesDst ); } $batchPaths = array(); -- 2.20.1