$dbw =& wfGetDB( DB_MASTER );\r
$revisionTable = $dbw->tableName( 'revision' );\r
$res = $dbw->query( "SELECT MIN(rev_id) as minrev, MAX(rev_id) as maxrev FROM $revisionTable " .\r
- "WHERE rev_timestamp BETWEEN $start AND $end", $fname );\r
+ "WHERE rev_timestamp BETWEEN '{$start}' AND '{$end}'", $fname );\r
$row = $dbw->fetchObject( $res );\r
+\r
+if ( is_null( $row->minrev ) ) {\r
+ echo "No revisions in search period.\n";\r
+ exit(0);\r
+}\r
+\r
$minRev = $row->minrev;\r
$maxRev = $row->maxrev;\r
\r
while ( $row = $dbw->fetchObject( $res ) ) {\r
$timestamp = wfTimestamp( TS_UNIX, $row->rev_timestamp );\r
$delta = $timestamp - $lastNormal;\r
- $sign = $delta / abs( $delta );\r
- if ( $sign == $expectedSign ) {\r
+ $sign = $delta == 0 ? 0 : $delta / abs( $delta );\r
+ if ( $sign == 0 || $sign == $expectedSign ) {\r
// Monotonic change\r
$lastNormal = $timestamp;\r
++ $numGoodRevs;\r
}\r
$dbw->freeResult( $res );\r
\r
-if ( count( $badRevs ) > $numGoodRevs ) {\r
+$numBadRevs = count( $badRevs );\r
+if ( $numBadRevs > $numGoodRevs ) {\r
echo \r
"The majority of revisions in the search interval are marked as bad.\r
\r
";\r
\r
exit(1);\r
+} elseif ( $numBadRevs == 0 ) {\r
+ echo "No bad revisions found.\n";\r
+ exit(0);\r
}\r
\r
printf( "Fixing %d revisions (%.2f%% of revisions in search interval)\n", \r
- count( $badRevs ), count($badRevs) / $numGoodRevs * 100 );\r
+ $numBadRevs, $numBadRevs / ($numGoodRevs + $numBadRevs) * 100 );\r
\r
+$fixup = -$offset;\r
$sql = "UPDATE $revisionTable " .\r
"SET rev_timestamp=DATE_FORMAT(DATE_ADD(rev_timestamp, INTERVAL $fixup SECOND), '%Y%m%d%H%i%s') " .\r
"WHERE rev_id IN (" . $dbw->makeList( $badRevs ) . ')';\r
-echo $sql;\r
-//$dbw->query( $sql, $fname );\r
-//echo "Done\n";\r
+//echo "$sql\n";\r
+$dbw->query( $sql, $fname );\r
+echo "Done\n";\r
\r
?>\r