38 $parserCache = $services->getParserCache();
39 $renderer = $services->getRevisionRenderer();
40 $wikiPageFactory = $services->getWikiPageFactory();
41 while ( $pages-- > 0 ) {
42 $row = $dbr->newSelectQueryBuilder()
54 'page_namespace' => $this->
getOption(
'namespace' ),
55 'page_is_redirect' => 0,
56 $dbr->expr(
'page_random',
'>=',
wfRandom() ),
58 ->orderBy(
'page_random' )
59 ->caller( __METHOD__ )->fetchRow();
66 $title = Title::newFromRow( $row );
67 $page = $wikiPageFactory->newFromTitle( $title );
68 $revision = $page->getRevisionRecord();
69 $parserOptions = $page->makeParserOptions(
'canonical' );
70 $parserOutputOld = $parserCache->get( $page, $parserOptions );
72 if ( $parserOutputOld ) {
73 $t1 = microtime(
true );
74 $parserOutputNew = $renderer->getRenderedRevision( $revision, $parserOptions )
75 ->getRevisionParserOutput();
77 $sec = microtime(
true ) - $t1;
80 $this->
output(
"Parsed '{$title->getPrefixedText()}' in $sec seconds.\n" );
82 $this->
output(
"Found cache entry found for '{$title->getPrefixedText()}'..." );
84 $oldHtml = trim( preg_replace(
'#<!-- .+-->#Us',
'',
85 $parserOutputOld->getRawText() ) );
86 $newHtml = trim( preg_replace(
'#<!-- .+-->#Us',
'',
87 $parserOutputNew->getRawText() ) );
88 $diffs =
new Diff( explode(
"\n", $oldHtml ), explode(
"\n", $newHtml ) );
90 $unifiedDiff = $formatter->format( $diffs );
92 if ( $unifiedDiff !==
'' ) {
93 $this->
output(
"differences found:\n\n$unifiedDiff\n\n" );
96 $this->
output(
"No differences found.\n" );
100 $this->
output(
"No parser cache entry found for '{$title->getPrefixedText()}'.\n" );
104 $ave = $totalsec ? $totalsec / $scanned : 0;
105 $this->
output(
"Checked $scanned pages; $withcache had prior cache entries.\n" );
106 $this->
output(
"Pages with differences found: $withdiff\n" );
107 $this->
output(
"Average parse time: $ave sec\n" );