Replace remaining uses and hard deprecate Revision::newFromArchiveRow

Bug: T248772
Change-Id: I44d0573b8af14d55e1c7423197dfae3cd55d7417
This commit is contained in:
DannyS712 2020-04-01 17:47:23 +00:00
parent 507501d6ee
commit fda65e7a27
8 changed files with 55 additions and 21 deletions

View file

@ -697,6 +697,7 @@ because of Phabricator reports.
- ::userWasLastToEdit - use RevisionStore::userWasLastToEdit instead
- ::userCan and userCanBitfield - use RevisionRecord::userCanBitfield instead
- ::newFromPageId - use RevisionStore::getRevisionByPageId instead
- ::newFromArchiveRow - use RevisionFactory::newRevisionFromArchiveRow
- ::loadFromTitle - use RevisionStore::getRevisionByTitle instead
- ::loadFromPageId - use RevisionStore::getRevisionByPageId instead
- ::getTimestampFromId - use RevisionStore::getTimestampFromId instead

View file

@ -166,6 +166,8 @@ class Revision implements IDBAccessObject {
* Make a fake revision object from an archive table row. This is queried
* for permissions or even inserted (as in Special:Undelete)
*
* @deprecated since 1.31 (soft), 1.35 (hard)
*
* @param object $row
* @param array $overrides
*
@ -173,6 +175,8 @@ class Revision implements IDBAccessObject {
* @return Revision
*/
public static function newFromArchiveRow( $row, $overrides = [] ) {
wfDeprecated( __METHOD__, '1.31' );
/**
* MCR Migration: https://phabricator.wikimedia.org/T183564
* This method used to overwrite attributes, then passed to Revision::__construct

View file

@ -436,7 +436,8 @@ class DifferenceEngine extends ContextSource {
$permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
if ( $permissionManager->userHasRight( $this->getUser(), 'deletedhistory' ) ) {
$dbr = wfGetDB( DB_REPLICA );
$arQuery = $this->revisionStore->getArchiveQueryInfo();
$revStore = $this->revisionStore;
$arQuery = $revStore->getArchiveQueryInfo();
$row = $dbr->selectRow(
$arQuery['tables'],
array_merge( $arQuery['fields'], [ 'ar_namespace', 'ar_title' ] ),
@ -446,12 +447,12 @@ class DifferenceEngine extends ContextSource {
$arQuery['joins']
);
if ( $row ) {
$rev = Revision::newFromArchiveRow( $row );
$revRecord = $revStore->newRevisionFromArchiveRow( $row );
$title = Title::makeTitleSafe( $row->ar_namespace, $row->ar_title );
return SpecialPage::getTitleFor( 'Undelete' )->getFullURL( [
'target' => $title->getPrefixedText(),
'timestamp' => $rev->getTimestamp()
'timestamp' => $revRecord->getTimestamp()
] );
}
}

View file

@ -19,13 +19,25 @@
* @ingroup RevisionDelete
*/
use MediaWiki\MediaWikiServices;
use MediaWiki\Revision\RevisionFactory;
/**
* Item class for a archive table row
*/
class RevDelArchiveItem extends RevDelRevisionItem {
protected static function initRevision( $list, $row ) {
return Revision::newFromArchiveRow( $row,
[ 'page' => $list->title->getArticleID() ] );
$revRecord = MediaWikiServices::getInstance()
->getRevisionFactory()
->newRevisionFromArchiveRow(
$row,
RevisionFactory::READ_NORMAL,
null,
[ 'page_id' => $list->title->getArticleID() ]
);
// TODO return a RevisionRecord instead
return new Revision( $revRecord );
}
public function getIdField() {

View file

@ -22,6 +22,7 @@
*/
use MediaWiki\MediaWikiServices;
use MediaWiki\Revision\RevisionFactory;
use MediaWiki\Revision\RevisionRecord;
use MediaWiki\Storage\NameTableAccessException;
use Wikimedia\Rdbms\IResultWrapper;
@ -958,10 +959,14 @@ class SpecialUndelete extends SpecialPage {
}
protected function formatRevisionRow( $row, $earliestLiveTime, $remaining ) {
$rev = Revision::newFromArchiveRow( $row,
[
'title' => $this->mTargetObj
] );
$revRecord = MediaWikiServices::getInstance()
->getRevisionFactory()
->newRevisionFromArchiveRow(
$row,
RevisionFactory::READ_NORMAL,
$this->mTargetObj
);
$revObject = new Revision( $revRecord );
$revTextSize = '';
$ts = wfTimestamp( TS_MW, $row->ar_timestamp );
@ -986,14 +991,14 @@ class SpecialUndelete extends SpecialPage {
$titleObj = $this->getPageTitle();
# Last link
if ( !RevisionRecord::userCanBitfield(
$rev->getVisibility(),
$revRecord->getVisibility(),
RevisionRecord::DELETED_TEXT,
$this->getUser()
) ) {
$pageLink = htmlspecialchars( $this->getLanguage()->userTimeAndDate( $ts, $user ) );
$last = $this->msg( 'diff' )->escaped();
} elseif ( $remaining > 0 || ( $earliestLiveTime && $ts > $earliestLiveTime ) ) {
$pageLink = $this->getPageLink( $rev, $titleObj, $ts );
$pageLink = $this->getPageLink( $revObject, $titleObj, $ts );
$last = $this->getLinkRenderer()->makeKnownLink(
$titleObj,
$this->msg( 'diff' )->text(),
@ -1005,7 +1010,7 @@ class SpecialUndelete extends SpecialPage {
]
);
} else {
$pageLink = $this->getPageLink( $rev, $titleObj, $ts );
$pageLink = $this->getPageLink( $revObject, $titleObj, $ts );
$last = $this->msg( 'diff' )->escaped();
}
} else {
@ -1014,10 +1019,10 @@ class SpecialUndelete extends SpecialPage {
}
// User links
$userLink = Linker::revUserTools( $rev );
$userLink = Linker::revUserTools( $revObject );
// Minor edit
$minor = $rev->isMinor() ? ChangesList::flag( 'minor' ) : '';
$minor = $revRecord->isMinor() ? ChangesList::flag( 'minor' ) : '';
// Revision text size
$size = $row->ar_len;
@ -1026,7 +1031,7 @@ class SpecialUndelete extends SpecialPage {
}
// Edit summary
$comment = Linker::revComment( $rev );
$comment = Linker::revComment( $revObject );
// Tags
$attribs = [];

View file

@ -236,6 +236,8 @@ class DeletedContribsPager extends IndexPager {
$classes = [];
$attribs = [];
$revFactory = MediaWikiServices::getInstance()->getRevisionFactory();
/*
* There may be more than just revision rows. To make sure that we'll only be processing
* revisions here, let's _try_ to build a revision out of our row (without displaying
@ -245,15 +247,15 @@ class DeletedContribsPager extends IndexPager {
*/
Wikimedia\suppressWarnings();
try {
$rev = Revision::newFromArchiveRow( $row );
$validRevision = (bool)$rev->getId();
$revRecord = $revFactory->newRevisionFromArchiveRow( $row );
$validRevision = (bool)$revRecord->getId();
} catch ( Exception $e ) {
$validRevision = false;
}
Wikimedia\restoreWarnings();
if ( $validRevision ) {
$attribs['data-mw-revid'] = $rev->getId();
$attribs['data-mw-revid'] = $revRecord->getId();
$ret = $this->formatRevisionRow( $row );
}

View file

@ -154,9 +154,14 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
protected function upgradeRow( $row, $table, $idCol, $prefix ) {
$dbw = $this->getDB( DB_MASTER );
$rev = ( $table === 'archive' )
? Revision::newFromArchiveRow( $row )
: new Revision( $row );
if ( $table === 'archive' ) {
$revRecord = MediaWikiServices::getInstance()
->getRevisionFactory()
->newRevisionFromArchiveRow( $row );
$rev = new Revision( $revRecord );
} else {
$rev = new Revision( $row );
}
$content = $rev->getContent( RevisionRecord::RAW );
if ( !$content ) {

View file

@ -440,6 +440,8 @@ class RevisionDbTest extends MediaWikiIntegrationTestCase {
* @covers Revision::newFromArchiveRow
*/
public function testNewFromArchiveRow( $selectModifier ) {
$this->hideDeprecated( 'Revision::newFromArchiveRow' );
$services = MediaWikiServices::getInstance();
$store = new RevisionStore(
@ -490,6 +492,8 @@ class RevisionDbTest extends MediaWikiIntegrationTestCase {
* @covers Revision::newFromArchiveRow
*/
public function testNewFromArchiveRowOverrides() {
$this->hideDeprecated( 'Revision::newFromArchiveRow' );
$page = $this->createPage(
'RevisionStorageTest_testNewFromArchiveRow',
'Lorem Ipsum',