Give pages with ~~~~ a different cache TTL
authorAryeh Gregor <ayg@aryeh.name>
Mon, 6 Aug 2018 17:48:15 +0000 (20:48 +0300)
committerLegoktm <legoktm@member.fsf.org>
Sun, 12 Aug 2018 06:19:51 +0000 (06:19 +0000)
This was supposed to already be the case, but it wasn't. The flag that
was set got cleared and never did anything.

Change-Id: Ide960f8cb9228f9a9d68c540369f122ada0a2a6f

includes/content/WikitextContent.php
tests/phpunit/includes/content/WikitextContentTest.php

index 21947d2..a7021b1 100644 (file)
@@ -35,6 +35,12 @@ use MediaWiki\MediaWikiServices;
 class WikitextContent extends TextContent {
        private $redirectTargetAndText = null;
 
+       /**
+        * @var bool Tracks if the parser set the user-signature flag when creating this content, which
+        *   would make it expire faster in ApiStashEdit.
+        */
+       private $hadSignature = false;
+
        public function __construct( $text ) {
                parent::__construct( $text, CONTENT_MODEL_WIKITEXT );
        }
@@ -140,7 +146,17 @@ class WikitextContent extends TextContent {
                $text = $this->getNativeData();
                $pst = $wgParser->preSaveTransform( $text, $title, $user, $popts );
 
-               return ( $text === $pst ) ? $this : new static( $pst );
+               if ( $text === $pst ) {
+                       return $this;
+               }
+
+               $ret = new static( $pst );
+
+               if ( $wgParser->getOutput()->getFlag( 'user-signature' ) ) {
+                       $ret->hadSignature = true;
+               }
+
+               return $ret;
        }
 
        /**
@@ -337,6 +353,11 @@ class WikitextContent extends TextContent {
                                $output->addModuleStyles( 'mediawiki.action.view.redirectPage' );
                        }
                }
+
+               // Pass along user-signature flag
+               if ( $this->hadSignature ) {
+                       $output->setFlag( 'user-signature' );
+               }
        }
 
        /**
index 687c7e0..91255eb 100644 (file)
@@ -442,4 +442,19 @@ just a test"
                        // @todo more...?
                ];
        }
+
+       /**
+        * @covers WikitextContent::preSaveTransform
+        * @covers WikitextContent::fillParserOutput
+        */
+       public function testHadSignature() {
+               $titleObj = Title::newFromText( __CLASS__ );
+
+               $content = new WikitextContent( '~~~~' );
+               $pstContent = $content->preSaveTransform(
+                       $titleObj, $this->getTestUser()->getUser(), new ParserOptions()
+               );
+
+               $this->assertTrue( $pstContent->getParserOutput( $titleObj )->getFlag( 'user-signature' ) );
+       }
 }