* - describe (since 1.21)
* - null
*
+ * FSFile/TempFSFile object support was added in 1.27.
+ *
* a) Create a new file in storage with the contents of a string
* @code
* array(
* @code
* array(
* 'op' => 'store',
- * 'src' => <file system path>,
+ * 'src' => <file system path, FSFile, or TempFSFile>,
* 'dst' => <storage path>,
* 'overwrite' => <boolean>,
* 'overwriteSame' => <boolean>,
if ( !count( $ops ) ) {
return Status::newGood(); // nothing to do
}
+
+ $ops = $this->resolveFSFileObjects( $ops );
if ( empty( $opts['force'] ) ) { // sanity
unset( $opts['nonLocking'] );
}
+
/** @noinspection PhpUnusedLocalVariableInspection */
$scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
+
return $this->doOperationsInternal( $ops, $opts );
}
* - describe (since 1.21)
* - null
*
+ * FSFile/TempFSFile object support was added in 1.27.
+ *
* a) Create a new file in storage with the contents of a string
* @code
* array(
* @code
* array(
* 'op' => 'store',
- * 'src' => <file system path>,
+ * 'src' => <file system path, FSFile, or TempFSFile>,
* 'dst' => <storage path>,
* 'headers' => <HTTP header name/value map> # since 1.21
* )
if ( !count( $ops ) ) {
return Status::newGood(); // nothing to do
}
+
+ $ops = $this->resolveFSFileObjects( $ops );
foreach ( $ops as &$op ) {
$op['overwrite'] = true; // avoids RTTs in key/value stores
}
+
/** @noinspection PhpUnusedLocalVariableInspection */
$scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
+
return $this->doQuickOperationsInternal( $ops );
}
return $this->fileJournal;
}
+ /**
+ * Convert FSFile 'src' paths to string paths (with an 'srcRef' field set to the FSFile)
+ *
+ * The 'srcRef' field keeps any TempFSFile objects in scope for the backend to have it
+ * around as long it needs (which may vary greatly depending on configuration)
+ *
+ * @param array $ops File operation batch for FileBaclend::doOperations()
+ * @return array File operation batch
+ */
+ protected function resolveFSFileObjects( array $ops ) {
+ foreach ( $ops as &$op ) {
+ $src = isset( $op['src'] ) ? $op['src'] : null;
+ if ( $src instanceof FSFile ) {
+ $op['srcRef'] = $src;
+ $op['src'] = $src->getPath();
+ }
+ }
+ unset( $op );
+
+ return $ops;
+ }
+
/**
* Check if a given path is a "mwstore://" path.
* This does not do any further validation or any existence checks.