52 $parserCache = $services->getParserCache();
53 $renderer = $services->getRevisionRenderer();
54 $wikiPageFactory = $services->getWikiPageFactory();
55 while ( $pages-- > 0 ) {
56 $row = $dbr->newSelectQueryBuilder()
68 'page_namespace' => $this->
getOption(
'namespace' ),
69 'page_is_redirect' => 0,
70 $dbr->expr(
'page_random',
'>=',
wfRandom() ),
72 ->orderBy(
'page_random' )
73 ->caller( __METHOD__ )->fetchRow();
80 $title = Title::newFromRow( $row );
81 $page = $wikiPageFactory->newFromTitle( $title );
82 $revision = $page->getRevisionRecord();
83 $parserOptions = $page->makeParserOptions(
'canonical' );
84 $parserOutputOld = $parserCache->get( $page, $parserOptions );
86 if ( $parserOutputOld ) {
87 $t1 = microtime(
true );
88 $parserOutputNew = $renderer->getRenderedRevision( $revision, $parserOptions )
89 ->getRevisionParserOutput();
91 $sec = microtime(
true ) - $t1;
94 $this->
output(
"Parsed '{$title->getPrefixedText()}' in $sec seconds.\n" );
96 $this->
output(
"Found cache entry found for '{$title->getPrefixedText()}'..." );
98 $oldHtml = trim( preg_replace(
'#<!-- .+-->#Us',
'',
99 $parserOutputOld->getRawText() ) );
100 $newHtml = trim( preg_replace(
'#<!-- .+-->#Us',
'',
101 $parserOutputNew->getRawText() ) );
102 $diffs =
new Diff( explode(
"\n", $oldHtml ), explode(
"\n", $newHtml ) );
104 $unifiedDiff = $formatter->format( $diffs );
106 if ( $unifiedDiff !==
'' ) {
107 $this->
output(
"differences found:\n\n$unifiedDiff\n\n" );
110 $this->
output(
"No differences found.\n" );
114 $this->
output(
"No parser cache entry found for '{$title->getPrefixedText()}'.\n" );
118 $ave = $totalsec ? $totalsec / $scanned : 0;
119 $this->
output(
"Checked $scanned pages; $withcache had prior cache entries.\n" );
120 $this->
output(
"Pages with differences found: $withdiff\n" );
121 $this->
output(
"Average parse time: $ave sec\n" );