From 0175c3b05466f0e7f8601d4d507e94e256b2486d Mon Sep 17 00:00:00 2001 From: Amir Sarabadani Date: Fri, 18 May 2018 15:46:47 +0200 Subject: [PATCH] Enable deleteAutoPatrolLogs to delete pre-2011 autopatrol logs as well Bug: T184485 Change-Id: I3f123ea0ae69f80beec7425be0f3e4c00a409c0d --- maintenance/deleteAutoPatrolLogs.php | 27 ++++++++++----- .../maintenance/deleteAutoPatrolLogsTest.php | 33 +++++++++++++++++++ 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/maintenance/deleteAutoPatrolLogs.php b/maintenance/deleteAutoPatrolLogs.php index c1935a7625..82bb928fb8 100644 --- a/maintenance/deleteAutoPatrolLogs.php +++ b/maintenance/deleteAutoPatrolLogs.php @@ -31,8 +31,7 @@ class DeleteAutoPatrolLogs extends Maintenance { $this->addOption( 'dry-run', 'Print debug info instead of actually deleting' ); $this->addOption( 'check-old', - 'Check old patrol logs (for deleting old format autopatrols).' . - 'Note that this will not delete rows older than 2011 (MediaWiki 1.18).' + 'Check old patrol logs (for deleting old format autopatrols).' ); $this->addOption( 'before', @@ -156,17 +155,27 @@ class DeleteAutoPatrolLogs extends Maintenance { $autopatrols = []; foreach ( $result as $row ) { $last = $row->log_id; - Wikimedia\suppressWarnings(); - $params = unserialize( $row->log_params ); - Wikimedia\restoreWarnings(); + $logEntry = DatabaseLogEntry::newFromRow( $row ); + $params = $logEntry->getParameters(); + if ( !is_array( $params ) ) { + continue; + } - // Skipping really old rows, before 2011 - if ( !is_array( $params ) || !array_key_exists( '6::auto', $params ) ) { + // This logic belongs to PatrolLogFormatter::getMessageKey + // and LogFormatter::extractParameters the 'auto' value is logically presented as key [5]. + // For legacy case the logical key is index + 3, meaning [2]. + // For the modern case, the logical key is index - 1 meaning [6]. + if ( array_key_exists( '6::auto', $params ) ) { + // Between 2011-2016 autopatrol logs + $auto = $params['6::auto'] === true; + } elseif ( $logEntry->isLegacy() === true && array_key_exists( 2, $params ) ) { + // Pre-2011 autopatrol logs + $auto = $params[2] === '1'; + } else { continue; } - $auto = $params['6::auto']; - if ( $auto ) { + if ( $auto === true ) { $autopatrols[] = $row->log_id; } } diff --git a/tests/phpunit/maintenance/deleteAutoPatrolLogsTest.php b/tests/phpunit/maintenance/deleteAutoPatrolLogsTest.php index c141817478..cd68fa50dc 100644 --- a/tests/phpunit/maintenance/deleteAutoPatrolLogsTest.php +++ b/tests/phpunit/maintenance/deleteAutoPatrolLogsTest.php @@ -92,6 +92,24 @@ class DeleteAutoPatrolLogsTest extends MaintenanceBaseTestCase { 'log_timestamp' => 20091223210426 ]; + // Autopatrol #4 very old way + $logs[] = [ + 'log_type' => 'patrol', + 'log_action' => 'patrol', + 'log_user' => 7257, + 'log_params' => "9227851\n0\n1", + 'log_timestamp' => 20081223210426 + ]; + + // Manual patrol #3 very old way + $logs[] = [ + 'log_type' => 'patrol', + 'log_action' => 'patrol', + 'log_user' => 7258, + 'log_params' => "9227851\n0\n0", + 'log_timestamp' => 20091223210426 + ]; + wfGetDB( DB_MASTER )->insert( 'logging', $logs ); } @@ -132,6 +150,16 @@ class DeleteAutoPatrolLogsTest extends MaintenanceBaseTestCase { 'log_action' => 'patrol', 'log_user' => '7256', ], + (object)[ + 'log_type' => 'patrol', + 'log_action' => 'patrol', + 'log_user' => '7257', + ], + (object)[ + 'log_type' => 'patrol', + 'log_action' => 'patrol', + 'log_user' => '7258', + ], ]; $cases = [ @@ -146,6 +174,8 @@ class DeleteAutoPatrolLogsTest extends MaintenanceBaseTestCase { $allRows[3], $allRows[5], $allRows[6], + $allRows[7], + $allRows[8], ], [ '--sleep', '0', '-q' ] ], @@ -157,6 +187,8 @@ class DeleteAutoPatrolLogsTest extends MaintenanceBaseTestCase { $allRows[4], $allRows[5], $allRows[6], + $allRows[7], + $allRows[8], ], [ '--sleep', '0', '--before', '20060123210426', '-q' ] ], @@ -168,6 +200,7 @@ class DeleteAutoPatrolLogsTest extends MaintenanceBaseTestCase { $allRows[3], $allRows[4], $allRows[6], + $allRows[8], ], [ '--sleep', '0', '--check-old', '-q' ] ], -- 2.20.1