X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=maintenance%2FfixTimestamps.php;h=3a952512de32823a9fc908542924d91605731569;hb=125d6d5feceba4d3d740efb5be0be83058546a20;hp=c9589f5999f69ee1f84bc73fa74b30046b44a7fb;hpb=30468dbcf754c38a8f4e534951015159748776bc;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/fixTimestamps.php b/maintenance/fixTimestamps.php index c9589f5999..3a952512de 100644 --- a/maintenance/fixTimestamps.php +++ b/maintenance/fixTimestamps.php @@ -1,10 +1,10 @@ mDescription = ""; - $this->addArgs( array( 'offset', 'start', 'end' ) ); + $this->addArg( 'offset', '' ); + $this->addArg( 'start', 'Starting timestamp' ); + $this->addArg( 'end', 'Ending timestamp' ); } public function execute() { - $offset = $this->getArg(0) * 3600; - $start = $this->getArg(1); - $end = $this->getArg(2); + $offset = $this->getArg( 0 ) * 3600; + $start = $this->getArg( 1 ); + $end = $this->getArg( 2 ); $grace = 60; // maximum normal clock offset - + # Find bounding revision IDs $dbw = wfGetDB( DB_MASTER ); $revisionTable = $dbw->tableName( 'revision' ); $res = $dbw->query( "SELECT MIN(rev_id) as minrev, MAX(rev_id) as maxrev FROM $revisionTable " . "WHERE rev_timestamp BETWEEN '{$start}' AND '{$end}'", __METHOD__ ); $row = $dbw->fetchObject( $res ); - + if ( is_null( $row->minrev ) ) { $this->error( "No revisions in search period.", true ); } - + $minRev = $row->minrev; $maxRev = $row->maxrev; - + # Select all timestamps and IDs $sql = "SELECT rev_id, rev_timestamp FROM $revisionTable " . "WHERE rev_id BETWEEN $minRev AND $maxRev"; @@ -62,14 +71,14 @@ class FixTimestamps extends Maintenance { } else { $expectedSign = 1; } - + $res = $dbw->query( $sql, __METHOD__ ); - + $lastNormal = 0; $badRevs = array(); $numGoodRevs = 0; - - while ( $row = $dbw->fetchObject( $res ) ) { + + foreach ( $res as $row ) { $timestamp = wfTimestamp( TS_UNIX, $row->rev_timestamp ); $delta = $timestamp - $lastNormal; $sign = $delta == 0 ? 0 : $delta / abs( $delta ); @@ -87,26 +96,25 @@ class FixTimestamps extends Maintenance { $badRevs[] = $row->rev_id; } } - $dbw->freeResult( $res ); - + $numBadRevs = count( $badRevs ); if ( $numBadRevs > $numGoodRevs ) { - $this->error( + $this->error( "The majority of revisions in the search interval are marked as bad. - Are you sure the offset ($offset) has the right sign? Positive means the clock + Are you sure the offset ($offset) has the right sign? Positive means the clock was incorrectly set forward, negative means the clock was incorrectly set back. - If the offset is right, then increase the search interval until there are enough + If the offset is right, then increase the search interval until there are enough good revisions to provide a majority reference.", true ); } elseif ( $numBadRevs == 0 ) { $this->output( "No bad revisions found.\n" ); - exit(0); + exit( 0 ); } - - $this->output( sprintf( "Fixing %d revisions (%.2f%% of revisions in search interval)\n", - $numBadRevs, $numBadRevs / ($numGoodRevs + $numBadRevs) * 100 ) ); - + + $this->output( sprintf( "Fixing %d revisions (%.2f%% of revisions in search interval)\n", + $numBadRevs, $numBadRevs / ( $numGoodRevs + $numBadRevs ) * 100 ) ); + $fixup = -$offset; $sql = "UPDATE $revisionTable " . "SET rev_timestamp=DATE_FORMAT(DATE_ADD(rev_timestamp, INTERVAL $fixup SECOND), '%Y%m%d%H%i%s') " . @@ -117,4 +125,4 @@ class FixTimestamps extends Maintenance { } $maintClass = "FixTimestamps"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN );