/**
  * Move or copy a file to a specified location. Returns a FileRepoStatus
  * object with the archive name in the "value" member on success.
  *
  * The archive name should be passed through to recordUpload for database
  * registration.
  *
  * @param string $srcPath local filesystem path to the source image
  * @param string $dstRel target relative path
  * @param $flags Integer: a bitwise combination of:
  *     File::DELETE_SOURCE	Delete the source file, i.e. move rather than copy
  * @param array $options Optional additional parameters
  * @return FileRepoStatus object. On success, the value member contains the
  *     archive name, or an empty string if it was a new file.
  */
 function publishTo($srcPath, $dstRel, $flags = 0, array $options = array())
 {
     if ($this->getRepo()->getReadOnlyReason() !== false) {
         return $this->readOnlyFatalStatus();
     }
     $this->lock();
     // begin
     $archiveName = wfTimestamp(TS_MW) . '!' . $this->getName();
     $archiveRel = 'archive/' . $this->getHashPath() . $archiveName;
     $flags = $flags & File::DELETE_SOURCE ? LocalRepo::DELETE_SOURCE : 0;
     $status = $this->repo->publish($srcPath, $dstRel, $archiveRel, $flags, $options);
     if ($status->value == 'new') {
         $status->value = '';
     } else {
         $status->value = $archiveName;
     }
     $this->unlock();
     // done
     return $status;
 }