Respect locked files, surface correct exception.
This commit is contained in:
parent
428510a4f8
commit
6b94732bdf
|
@ -0,0 +1,28 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* ownCloud
|
||||||
|
*
|
||||||
|
* @author Owen Winkler
|
||||||
|
* @copyright 2013 Owen Winkler <owen@owncloud.com>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class OC_Connector_Sabre_Exception_FileLocked extends Sabre_DAV_Exception {
|
||||||
|
|
||||||
|
public function __construct($message = "", $code = 0, Exception $previous = null) {
|
||||||
|
if($previous instanceof \OCP\Files\LockNotAcquiredException) {
|
||||||
|
$message = sprintf('Target file %s is locked by another process. %s', $previous->path, $previous->getMessage());
|
||||||
|
}
|
||||||
|
parent::__construct($message, $code, $previous);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the HTTP statuscode for this exception
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getHTTPCode() {
|
||||||
|
|
||||||
|
return 503;
|
||||||
|
}
|
||||||
|
}
|
|
@ -97,15 +97,24 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
|
||||||
// the path for the file was not valid
|
// the path for the file was not valid
|
||||||
// TODO: find proper http status code for this case
|
// TODO: find proper http status code for this case
|
||||||
throw new Sabre_DAV_Exception_Forbidden($e->getMessage());
|
throw new Sabre_DAV_Exception_Forbidden($e->getMessage());
|
||||||
|
} catch (\OCP\Files\LockNotAcquiredException $e) {
|
||||||
|
// the file is currently being written to by another process
|
||||||
|
throw new OC_Connector_Sabre_Exception_FileLocked(sprintf('Target file %s is locked by another process. %s', $e->path, $e->getMessage()), $e->getCode(), $e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// rename to correct path
|
// rename to correct path
|
||||||
$renameOkay = $this->fileView->rename($partpath, $this->path);
|
try {
|
||||||
$fileExists = $this->fileView->file_exists($this->path);
|
$renameOkay = $this->fileView->rename($partpath, $this->path);
|
||||||
if ($renameOkay === false || $fileExists === false) {
|
$fileExists = $this->fileView->file_exists($this->path);
|
||||||
\OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR);
|
if ($renameOkay === false || $fileExists === false) {
|
||||||
$this->fileView->unlink($partpath);
|
\OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR);
|
||||||
throw new Sabre_DAV_Exception('Could not rename part file to final file');
|
$this->fileView->unlink($partpath);
|
||||||
|
throw new Sabre_DAV_Exception('Could not rename part file to final file');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (\OCP\Files\LockNotAcquiredException $e) {
|
||||||
|
// the file is currently being written to by another process
|
||||||
|
throw new OC_Connector_Sabre_Exception_FileLocked($e->getMessage(), $e->getCode(), $e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// allow sync clients to send the mtime along in a header
|
// allow sync clients to send the mtime along in a header
|
||||||
|
|
Loading…
Reference in New Issue