Page MenuHomePhorge

No OneTemporary

Size
5 KB
Referenced Files
None
Subscribers
None
diff --git a/includes/Storage/DerivedPageDataUpdater.php b/includes/Storage/DerivedPageDataUpdater.php
index a2d3f980c50..9d1e84219c4 100644
--- a/includes/Storage/DerivedPageDataUpdater.php
+++ b/includes/Storage/DerivedPageDataUpdater.php
@@ -40,6 +40,7 @@ use MediaWiki\HookContainer\HookRunner;
use MediaWiki\JobQueue\JobQueueGroup;
use MediaWiki\JobQueue\Jobs\ParsoidCachePrewarmJob;
use MediaWiki\Language\Language;
+use MediaWiki\Logging\LogPage;
use MediaWiki\MainConfigNames;
use MediaWiki\Page\Event\PageRevisionUpdatedEvent;
use MediaWiki\Page\PageIdentity;
@@ -1770,14 +1771,20 @@ class DerivedPageDataUpdater implements LoggerAwareInterface, PreparedUpdate {
* @param int $revisionId
*/
private function maybeAddRecreateChangeTag( WikiPage $wikiPage, int $revisionId ) {
- if ( $this->loadbalancerFactory->getReplicaDatabase()->newSelectQueryBuilder()
+ $dbr = $this->loadbalancerFactory->getReplicaDatabase();
+
+ if ( $dbr->newSelectQueryBuilder()
->select( [ '1' ] )
->from( 'logging' )
->where( [
'log_type' => 'delete',
'log_title' => $wikiPage->getTitle()->getDBkey(),
'log_namespace' => $wikiPage->getNamespace(),
- ] )->caller( __METHOD__ )->limit( 1 )->fetchField() ) {
+ ] )
+ ->where(
+ $dbr->bitAnd( 'log_deleted', LogPage::DELETED_ACTION ) .
+ ' != ' . LogPage::DELETED_ACTION // T385792
+ )->caller( __METHOD__ )->limit( 1 )->fetchField() ) {
$this->changeTagsStore->addTags(
[ ChangeTags::TAG_RECREATE ],
null,
diff --git a/tests/phpunit/includes/Storage/DerivedPageDataUpdaterTest.php b/tests/phpunit/includes/Storage/DerivedPageDataUpdaterTest.php
index 4ddd3d7f3a5..2eb3b5ebc5d 100644
--- a/tests/phpunit/includes/Storage/DerivedPageDataUpdaterTest.php
+++ b/tests/phpunit/includes/Storage/DerivedPageDataUpdaterTest.php
@@ -1390,7 +1390,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiIntegrationTestCase {
* @covers \MediaWiki\Storage\DerivedPageDataUpdater::doUpdates()
* @covers \MediaWiki\Storage\DerivedPageDataUpdater::maybeAddRecreateChangeTag
*/
- public function testDoUpdatesTagsEditAsRecreatedWhenDeletedLogEntry() {
+ public function testDoUpdatesTagsEditAsRecreatedWhenDeletionLogEntry() {
$page = $this->getPage( __METHOD__ );
$title = $this->getTitle( __METHOD__ );
@@ -1400,7 +1400,6 @@ class DerivedPageDataUpdaterTest extends MediaWikiIntegrationTestCase {
$deleteLogEntry = new ManualLogEntry( 'delete', 'delete' );
$deleteLogEntry->setPerformer( $this->getTestUser()->getUser() );
$deleteLogEntry->setTarget( $title );
- $deleteLogEntry->setDeleted( LogPage::DELETED_ACTION );
$logId = $deleteLogEntry->insert( $this->getDb() );
$deleteLogEntry->publish( $logId );
@@ -1426,7 +1425,6 @@ class DerivedPageDataUpdaterTest extends MediaWikiIntegrationTestCase {
$deleteLogEntry = new ManualLogEntry( 'delete', 'delete' );
$deleteLogEntry->setPerformer( $this->getTestUser()->getUser() );
$deleteLogEntry->setTarget( $title );
- $deleteLogEntry->setDeleted( LogPage::DELETED_ACTION );
$logId = $deleteLogEntry->insert( $this->getDb() );
$deleteLogEntry->publish( $logId );
@@ -1440,7 +1438,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiIntegrationTestCase {
* @covers \MediaWiki\Storage\DerivedPageDataUpdater::doUpdates()
* @covers \MediaWiki\Storage\DerivedPageDataUpdater::maybeAddRecreateChangeTag
*/
- public function testDoUpdatesTagsEditAsRecreatedWhenDeletedLogEntryAndUndelete() {
+ public function testDoUpdatesDoesNotTagEditAsRecreatedWhenDeletionLogEntryAndUndelete() {
$page = $this->getPage( __METHOD__ );
$title = $this->getTitle( __METHOD__ );
$user = $this->getMutableTestUser()->getUser();
@@ -1459,7 +1457,6 @@ class DerivedPageDataUpdaterTest extends MediaWikiIntegrationTestCase {
$deleteLogEntry = new ManualLogEntry( 'delete', 'delete' );
$deleteLogEntry->setPerformer( $this->getTestUser()->getUser() );
$deleteLogEntry->setTarget( $title );
- $deleteLogEntry->setDeleted( LogPage::DELETED_ACTION );
$logId = $deleteLogEntry->insert( $this->getDb() );
$deleteLogEntry->publish( $logId );
// undelete the page
@@ -1475,7 +1472,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiIntegrationTestCase {
* @covers \MediaWiki\Storage\DerivedPageDataUpdater::doUpdates()
* @covers \MediaWiki\Storage\DerivedPageDataUpdater::maybeAddRecreateChangeTag
*/
- public function testDoUpdatesDoesNotTagEditAsRecreatedWhenNoDeletedLogEntry() {
+ public function testDoUpdatesDoesNotTagEditAsRecreatedWhenNoDeletionLogEntry() {
$page = $this->getPage( __METHOD__ );
$content = [ SlotRecord::MAIN => new WikitextContent( 'rev ID ver #1: {{REVISIONID}}' ) ];
@@ -1485,6 +1482,35 @@ class DerivedPageDataUpdaterTest extends MediaWikiIntegrationTestCase {
$this->getDb(), null, $rev->getId() ) );
}
+ /**
+ * See T385792
+ *
+ * @covers \MediaWiki\Storage\DerivedPageDataUpdater::doUpdates()
+ * @covers \MediaWiki\Storage\DerivedPageDataUpdater::maybeAddRecreateChangeTag
+ */
+ public function testDoUpdatesDoesNotTagEditAsRecreatedWhenDeletionLogEntryActionHidden() {
+ $page = $this->getPage( __METHOD__ );
+ $title = $this->getTitle( __METHOD__ );
+
+ $content = [ SlotRecord::MAIN => new WikitextContent( 'rev ID ver #1: {{REVISIONID}}' ) ];
+
+ // create a deletion log entry
+ $deleteLogEntry = new ManualLogEntry( 'delete', 'delete' );
+ $deleteLogEntry->setPerformer( $this->getTestUser()->getUser() );
+ $deleteLogEntry->setTarget( $title );
+
+ // hide the target of the deletion log entry
+ $deleteLogEntry->setDeleted( LogPage::DELETED_ACTION );
+
+ $logId = $deleteLogEntry->insert( $this->getDb() );
+ $deleteLogEntry->publish( $logId );
+
+ $rev = $this->createRevision( $page, 'first', $content );
+
+ $this->assertSame( [], $this->getServiceContainer()->getChangeTagsStore()->getTags(
+ $this->getDb(), null, $rev->getId() ) );
+ }
+
public static function provideEnqueueRevertedTagUpdateJob() {
return [
'not patrolled' => [ true, 0, 0 ],

File Metadata

Mime Type
text/x-diff
Expires
Sat, Jul 5, 5:32 AM (18 h, 8 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
227530
Default Alt Text
(5 KB)

Event Timeline