When uploading multiple file revisions with fitting text revisions to
core the UploadRevisionImporter will create a unwanted NullRevision on
the file page.
This NullRevision originates from LocalFile:upload() and is added there
in recordUpload2 as part of the normal upload process. There it is meant
to leave a hint on the text revision history.
This whole area is in need of heavy refactoring. But since the issue is
blocking the current implementation of the FileImporter extension, a
parameter is added to control the creation of that NullRevision.
Bug: T193621
Change-Id: I57c947eb63a7627ab1eec850cdf5e076f5f62df5
* @param User|null $user User object or null to use $wgUser
* @param string[] $tags Change tags to add to the log entry and page revision.
* (This doesn't check $user's permissions.)
* @param User|null $user User object or null to use $wgUser
* @param string[] $tags Change tags to add to the log entry and page revision.
* (This doesn't check $user's permissions.)
+ * @param bool $createNullRevision Set to false to avoid creation of a null revision on file
+ * upload, see T193621
* @return Status On success, the value member contains the
* archive name, or an empty string if it was a new file.
*/
function upload( $src, $comment, $pageText, $flags = 0, $props = false,
* @return Status On success, the value member contains the
* archive name, or an empty string if it was a new file.
*/
function upload( $src, $comment, $pageText, $flags = 0, $props = false,
- $timestamp = false, $user = null, $tags = []
+ $timestamp = false, $user = null, $tags = [],
+ $createNullRevision = true
) {
if ( $this->getRepo()->getReadOnlyReason() !== false ) {
return $this->readOnlyFatalStatus();
) {
if ( $this->getRepo()->getReadOnlyReason() !== false ) {
return $this->readOnlyFatalStatus();
$props,
$timestamp,
$user,
$props,
$timestamp,
$user,
+ $tags,
+ $createNullRevision
);
if ( !$uploadStatus->isOK() ) {
if ( $uploadStatus->hasMessage( 'filenotfound' ) ) {
);
if ( !$uploadStatus->isOK() ) {
if ( $uploadStatus->hasMessage( 'filenotfound' ) ) {
* @param string|bool $timestamp
* @param null|User $user
* @param string[] $tags
* @param string|bool $timestamp
* @param null|User $user
* @param string[] $tags
+ * @param bool $createNullRevision Set to false to avoid creation of a null revision on file
+ * upload, see T193621
* @return Status
*/
function recordUpload2(
* @return Status
*/
function recordUpload2(
- $oldver, $comment, $pageText, $props = false, $timestamp = false, $user = null, $tags = []
+ $oldver, $comment, $pageText, $props = false, $timestamp = false, $user = null, $tags = [],
+ $createNullRevision = true
) {
global $wgCommentTableSchemaMigrationStage, $wgActorTableSchemaMigrationStage;
) {
global $wgCommentTableSchemaMigrationStage, $wgActorTableSchemaMigrationStage;
$formatter->setContext( RequestContext::newExtraneousContext( $descTitle ) );
$editSummary = $formatter->getPlainActionText();
$formatter->setContext( RequestContext::newExtraneousContext( $descTitle ) );
$editSummary = $formatter->getPlainActionText();
- $nullRevision = Revision::newNullRevision(
+ $nullRevision = $createNullRevision === false ? null : Revision::newNullRevision(
$dbw,
$descId,
$editSummary,
$dbw,
$descId,
$editSummary,
*/
private $enableUploads;
*/
private $enableUploads;
+ /**
+ * @var bool
+ */
+ private $shouldCreateNullRevision = true;
+
/**
* @param bool $enableUploads
* @param LoggerInterface $logger
/**
* @param bool $enableUploads
* @param LoggerInterface $logger
$this->logger = $logger;
}
$this->logger = $logger;
}
+ /**
+ * Setting this to false will deactivate the creation of a null revision as part of the upload
+ * process logging in LocalFile::recordUpload2, see T193621
+ *
+ * @param bool $shouldCreateNullRevision
+ */
+ public function setNullRevisionCreation( $shouldCreateNullRevision ) {
+ $this->shouldCreateNullRevision = $shouldCreateNullRevision;
+ }
+
/**
* @return StatusValue
*/
/**
* @return StatusValue
*/
$flags,
false,
$importableRevision->getTimestamp(),
$flags,
false,
$importableRevision->getTimestamp(),
+ $user,
+ [],
+ $this->shouldCreateNullRevision