Go to the documentation of this file.
25 require __DIR__ .
'/../Maintenance.php';
50 parent::__construct();
52 $this->
addArg(
'title',
'The name of the page to parse' );
53 $this->
addOption(
'warmup',
'Repeat the parse operation this number of times to warm the cache',
55 $this->
addOption(
'loops',
'Number of times to repeat parse operation post-warmup',
58 'Use the version of the page which was current at the given time',
61 'Use templates which were current at the given time (except that moves and ' .
62 'deletes are not handled properly)',
64 $this->
addOption(
'reset-linkcache',
'Reset the LinkCache after every parse.',
71 Hooks::register(
'BeforeParserFetchTemplateAndtitle', [ $this,
'onFetchTemplate' ] );
74 $this->clearLinkCache = $this->
hasOption(
'reset-linkcache' );
76 $this->linkCache = MediaWikiServices::getInstance()->getLinkCache();
80 $this->
error(
"Invalid title" );
88 $this->
error(
"The page did not exist at that time" );
98 $this->
error(
"Unable to load revision, incorrect title?" );
102 $warmup = $this->
getOption(
'warmup', 1 );
103 for ( $i = 0; $i < $warmup; $i++ ) {
109 $this->
fatalError(
'Invalid number of loops specified' );
111 $startUsage = getrusage();
112 $startTime = microtime(
true );
113 for ( $i = 0; $i < $loops; $i++ ) {
116 $endUsage = getrusage();
117 $endTime = microtime(
true );
119 printf(
"CPU time = %.3f s, wall clock time = %.3f s\n",
121 ( $endUsage[
'ru_utime.tv_sec'] + $endUsage[
'ru_utime.tv_usec'] * 1e-6
122 - $startUsage[
'ru_utime.tv_sec'] - $startUsage[
'ru_utime.tv_usec'] * 1e-6 ) / $loops,
124 ( $endTime - $startTime ) / $loops
138 $id =
$dbr->selectField(
139 [
'revision',
'page' ],
142 'page_namespace' =>
$title->getNamespace(),
143 'page_title' =>
$title->getDBkey(),
144 'rev_timestamp <= ' .
$dbr->addQuotes( $timestamp )
147 [
'ORDER BY' =>
'rev_timestamp DESC',
'LIMIT' => 1 ],
148 [
'revision' => [
'JOIN',
'rev_page=page_id' ] ]
162 if ( $this->clearLinkCache ) {
163 $this->linkCache->clear();
178 $pdbk =
$title->getPrefixedDBkey();
179 if ( !isset( $this->idCache[$pdbk] ) ) {
180 $proposedId = $this->
getRevIdForTime( $title, $this->templateTimestamp );
181 $this->idCache[$pdbk] = $proposedId;
183 if ( $this->idCache[$pdbk] !==
false ) {
184 $id = $this->idCache[$pdbk];
const RUN_MAINTENANCE_IF_MAIN
Cache for article titles (prefixed DB keys) and ids linked from one source.
static newFromText( $text, $defaultNamespace=NS_MAIN)
Create a new Title from text, such as what one would find in a link.
static newFromId( $id, $flags=0)
Load a page revision from a given revision ID number.
fatalError( $msg, $exitCode=1)
Output a message and terminate the current script.
addDescription( $text)
Set the description text.
getContent( $audience=self::FOR_PUBLIC, User $user=null)
Fetch revision content if it's available to the specified audience.
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
static newFromTitle(LinkTarget $linkTarget, $id=0, $flags=0)
Load either the current, or a specified, revision that's attached to a given link target.
Maintenance script to benchmark how long it takes to parse a given title at an optionally specified t...
addOption( $name, $description, $required=false, $withArg=false, $shortName=false, $multiOccurrence=false)
Add a parameter to the script.
string $templateTimestamp
MediaWiki concatenated string timestamp (YYYYMMDDHHMMSS)
getTitle()
Returns the title of the page associated with this entry.
onFetchTemplate(Parser $parser, Title $title, &$skip, &$id)
Hook into the parser's revision ID fetcher.
runParser(Revision $revision)
Parse the text from a given Revision.
static register( $name, $callback)
Attach an event handler to a given hook.
getDB( $db, $groups=[], $dbDomain=false)
Returns a database to be used by current maintenance script.
execute()
Do the actual work.
Represents a title within MediaWiki.
getOption( $name, $default=null)
Get an option, or return the default.
addArg( $arg, $description, $required=true)
Add some args that are needed.
__construct()
Default constructor.
error( $err, $die=0)
Throw an error to the user.
hasOption( $name)
Checks to see if a particular option exists.
getArg( $argId=0, $default=null)
Get an argument.
array $idCache
Cache that maps a Title DB key to revision ID for the requested timestamp.
getRevIdForTime(Title $title, $timestamp)
Fetch the ID of the revision of a Title that occurred.