From ff03cf38ccceaa6485d72450ba1427396861af27 Mon Sep 17 00:00:00 2001
From: daniel
Date: Fri, 14 Sep 2012 13:13:29 +0200
Subject: [PATCH] get rid of Revision::getText
Change-Id: Ia0b16813fa1688b6faccbe8ca81b1099001b1f3b
---
includes/FeedUtils.php | 28 +++++++++++++++++++++++----
includes/Import.php | 24 ++++++++++++++++++++++-
includes/api/ApiFeedContributions.php | 16 +++++++++++++--
includes/job/DoubleRedirectJob.php | 2 --
maintenance/Maintenance.php | 3 ++-
maintenance/compareParsers.php | 15 +++++++++++---
maintenance/dumpIterator.php | 2 +-
maintenance/getText.php | 6 +++---
maintenance/preprocessDump.php | 8 +++++++-
maintenance/renderDump.php | 4 ++--
10 files changed, 88 insertions(+), 20 deletions(-)
diff --git a/includes/FeedUtils.php b/includes/FeedUtils.php
index 242f65c397..b0a0e2b9c3 100644
--- a/includes/FeedUtils.php
+++ b/includes/FeedUtils.php
@@ -172,16 +172,36 @@ class FeedUtils {
} else {
$rev = Revision::newFromId( $newid );
if( $wgFeedDiffCutoff <= 0 || is_null( $rev ) ) {
- $newtext = '';
+ $newContent = ContentHandler::getForTitle( $title )->makeEmptyContent();
} else {
- $newtext = $rev->getText();
+ $newContent = $rev->getContent();
}
- if ( $wgFeedDiffCutoff <= 0 || strlen( $newtext ) > $wgFeedDiffCutoff ) {
+
+ if ( $newContent instanceof TextContent ) {
+ // only textual content has a "source view".
+ $text = $newContent->getNativeData();
+
+ if ( $wgFeedDiffCutoff <= 0 || strlen( $text ) > $wgFeedDiffCutoff ) {
+ $html = null;
+ } else {
+ $html = nl2br( htmlspecialchars( $text ) );
+ }
+ } else {
+ //XXX: we could get an HTML representation of the content via getParserOutput, but that may
+ // contain JS magic and generally may not be suitable for inclusion in a feed.
+ // Perhaps Content should have a getDescriptiveHtml method and/or a getSourceText method.
+ //Compare also ApiFeedContributions::feedItemDesc
+ $html = null;
+ }
+
+ if ( $html === null ) {
+
// Omit large new page diffs, bug 29110
+ // Also use diff link for non-textual content
$diffText = self::getDiffLink( $title, $newid );
} else {
$diffText = '' . wfMessage( 'newpage' )->text() . '
' .
- '' . nl2br( htmlspecialchars( $newtext ) ) . '
';
+ '' . $html . '
';
}
}
$completeText .= $diffText;
diff --git a/includes/Import.php b/includes/Import.php
index 5f59b1c122..3035005569 100644
--- a/includes/Import.php
+++ b/includes/Import.php
@@ -1017,6 +1017,7 @@ class WikiRevision {
var $model = null;
var $format = null;
var $text = "";
+ var $content = null;
var $comment = "";
var $minor = false;
var $type = "";
@@ -1209,11 +1210,32 @@ class WikiRevision {
/**
* @return string
+ *
+ * @deprecated Since 1.WD, use getContent() instead.
*/
function getText() {
+ wfDeprecated( "Use getContent() instead." );
+
return $this->text;
}
+ /**
+ * @return Content
+ */
+ function getContent() {
+ if ( is_null( $this->content ) ) {
+ $this->content =
+ ContentHandler::makeContent(
+ $this->text,
+ $this->getTitle(),
+ $this->getModel(),
+ $this->getFormat()
+ );
+ }
+
+ return $this->content;
+ }
+
/**
* @return String
*/
@@ -1377,7 +1399,7 @@ class WikiRevision {
'page' => $pageId,
'content_model' => $this->getModel(),
'content_format' => $this->getFormat(),
- 'text' => $this->getText(),
+ 'text' => $this->getContent()->serialize( $this->getFormat() ), //XXX: just set 'content' => $this->getContent()?
'comment' => $this->getComment(),
'user' => $userId,
'user_text' => $userText,
diff --git a/includes/api/ApiFeedContributions.php b/includes/api/ApiFeedContributions.php
index 1cf760aea9..fb6a06ffcb 100644
--- a/includes/api/ApiFeedContributions.php
+++ b/includes/api/ApiFeedContributions.php
@@ -130,10 +130,22 @@ class ApiFeedContributions extends ApiBase {
protected function feedItemDesc( $revision ) {
if( $revision ) {
$msg = wfMessage( 'colon-separator' )->inContentLanguage()->text();
+ $content = $revision->getContent();
+
+ if ( $content instanceof TextContent ) {
+ // only textual content has a "source view".
+ $html = nl2br( htmlspecialchars( $content->getNativeData() ) );
+ } else {
+ //XXX: we could get an HTML representation of the content via getParserOutput, but that may
+ // contain JS magic and generally may not be suitable for inclusion in a feed.
+ // Perhaps Content should have a getDescriptiveHtml method and/or a getSourceText method.
+ //Compare also FeedUtils::formatDiffRow.
+ $html = '';
+ }
+
return '' . htmlspecialchars( $revision->getUserText() ) . $msg .
htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) .
- "
\n
\n" .
- nl2br( htmlspecialchars( $revision->getText() ) ) . "
";
+ "
\n
\n" . $html . "
";
}
return '';
}
diff --git a/includes/job/DoubleRedirectJob.php b/includes/job/DoubleRedirectJob.php
index 2d12908841..ebbd8343b6 100644
--- a/includes/job/DoubleRedirectJob.php
+++ b/includes/job/DoubleRedirectJob.php
@@ -124,8 +124,6 @@ class DoubleRedirectJob extends Job {
$newTitle = Title::makeTitle( $newTitle->getNamespace(), $newTitle->getDBkey(),
$currentDest->getFragment() );
- $text = ContentHandler::getContentText( $content ); #FIXME: get rid of this!
-
# Fix the text
$newContent = $content->updateRedirect( $newTitle );
diff --git a/maintenance/Maintenance.php b/maintenance/Maintenance.php
index 69d113138a..ec89cd72b8 100644
--- a/maintenance/Maintenance.php
+++ b/maintenance/Maintenance.php
@@ -1144,7 +1144,8 @@ abstract class Maintenance {
$title = $titleObj->getPrefixedDBkey();
$this->output( "$title..." );
# Update searchindex
- $u = new SearchUpdate( $pageId, $titleObj->getText(), $rev->getText() );
+ # TODO: pass the Content object to SearchUpdate, let the search engine decide how to deal with it.
+ $u = new SearchUpdate( $pageId, $titleObj->getText(), $rev->getContent()->getTextForSearchIndex() );
$u->doUpdate();
$this->output( "\n" );
}
diff --git a/maintenance/compareParsers.php b/maintenance/compareParsers.php
index a3337173c2..1f3ac1c3b3 100644
--- a/maintenance/compareParsers.php
+++ b/maintenance/compareParsers.php
@@ -114,15 +114,24 @@ class CompareParsers extends DumpIterator {
$parser1 = new $parser1Name();
$parser2 = new $parser2Name();
- $output1 = $parser1->parse( $rev->getText(), $title, $this->options );
- $output2 = $parser2->parse( $rev->getText(), $title, $this->options );
+ $content = $rev->getContent();
+
+ if ( $content->getModel() !== CONTENT_MODEL_WIKITEXT ) {
+ $this->error( "Page {$title->getPrefixedText()} does not contain wikitext but {$content->getModel()}\n" );
+ return;
+ }
+
+ $text = strval( $content->getNativeData() );
+
+ $output1 = $parser1->parse( $text, $title, $this->options );
+ $output2 = $parser2->parse( $text, $title, $this->options );
if ( $output1->getText() != $output2->getText() ) {
$this->failed++;
$this->error( "Parsing for {$title->getPrefixedText()} differs\n" );
if ( $this->saveFailed ) {
- file_put_contents( $this->saveFailed . '/' . rawurlencode( $title->getPrefixedText() ) . ".txt", $rev->getText());
+ file_put_contents( $this->saveFailed . '/' . rawurlencode( $title->getPrefixedText() ) . ".txt", $text );
}
if ( $this->showDiff ) {
$this->output( wfDiff( $this->stripParameters( $output1->getText() ), $this->stripParameters( $output2->getText() ), '' ) );
diff --git a/maintenance/dumpIterator.php b/maintenance/dumpIterator.php
index 3657f960f7..870d632126 100644
--- a/maintenance/dumpIterator.php
+++ b/maintenance/dumpIterator.php
@@ -168,7 +168,7 @@ class SearchDump extends DumpIterator {
* @param $rev Revision
*/
public function processRevision( $rev ) {
- if ( preg_match( $this->getOption( 'regex' ), $rev->getText() ) ) {
+ if ( preg_match( $this->getOption( 'regex' ), $rev->getContent()->getTextForSearchIndex() ) ) {
$this->output( $rev->getTitle() . " matches at edit from " . $rev->getTimestamp() . "\n" );
}
}
diff --git a/maintenance/getText.php b/maintenance/getText.php
index 3e2f854010..f6adfe2be1 100644
--- a/maintenance/getText.php
+++ b/maintenance/getText.php
@@ -52,12 +52,12 @@ class GetTextMaint extends Maintenance {
$titleText = $title->getPrefixedText();
$this->error( "Page $titleText does not exist.\n", true );
}
- $text = $rev->getText( $this->hasOption( 'show-private' ) ? Revision::RAW : Revision::FOR_PUBLIC );
- if ( $text === false ) {
+ $content = $rev->getContent( $this->hasOption( 'show-private' ) ? Revision::RAW : Revision::FOR_PUBLIC );
+ if ( $content === false ) {
$titleText = $title->getPrefixedText();
$this->error( "Couldn't extract the text from $titleText.\n", true );
}
- $this->output( $text );
+ $this->output( $content->serialize() );
}
}
diff --git a/maintenance/preprocessDump.php b/maintenance/preprocessDump.php
index 5952fd960c..87fc997454 100644
--- a/maintenance/preprocessDump.php
+++ b/maintenance/preprocessDump.php
@@ -78,8 +78,14 @@ class PreprocessDump extends DumpIterator {
* @param $rev Revision
*/
public function processRevision( $rev ) {
+ $content = $rev->getContent( Revision::RAW );
+
+ if ( $content->getModel() !== CONTENT_MODEL_WIKITEXT ) {
+ return;
+ }
+
try {
- $this->mPreprocessor->preprocessToObj( $rev->getText(), 0 );
+ $this->mPreprocessor->preprocessToObj( strval( $content->getNativeData() ), 0 );
}
catch(Exception $e) {
$this->error("Caught exception " . $e->getMessage() . " in " . $rev->getTitle()->getPrefixedText() );
diff --git a/maintenance/renderDump.php b/maintenance/renderDump.php
index 24bedfa4b4..ad9a380f7b 100644
--- a/maintenance/renderDump.php
+++ b/maintenance/renderDump.php
@@ -100,10 +100,10 @@ class DumpRenderer extends Maintenance {
$this->output( sprintf( "%s\n", $filename, $display ) );
$user = new User();
- $parser = new $wgParserConf['class']();
$options = ParserOptions::newFromUser( $user );
- $output = $parser->parse( $rev->getText(), $title, $options );
+ $content = $rev->getContent();
+ $output = $content->getParserOutput( $title, null, $options );
file_put_contents( $filename,
"