Merge pull request #6008 from owncloud/extstorage-smb-webdav-renamefix
Fixed SMB rename function to overwrite target file
This commit is contained in:
commit
2653d914d9
|
@ -302,6 +302,7 @@ class smb {
|
|||
}
|
||||
|
||||
function rename ($url_from, $url_to) {
|
||||
$replace = false;
|
||||
list ($from, $to) = array (smb::parse_url($url_from), smb::parse_url($url_to));
|
||||
if ($from['host'] <> $to['host'] ||
|
||||
$from['share'] <> $to['share'] ||
|
||||
|
@ -314,7 +315,20 @@ class smb {
|
|||
trigger_error('rename(): error in URL', E_USER_ERROR);
|
||||
}
|
||||
smb::clearstatcache ($url_from);
|
||||
$result = smb::execute ('rename "'.$from['path'].'" "'.$to['path'].'"', $to);
|
||||
$cmd = '';
|
||||
// check if target file exists
|
||||
if (smb::url_stat($url_to)) {
|
||||
// delete target file first
|
||||
$cmd = 'del "' . $to['path'] . '"; ';
|
||||
$replace = true;
|
||||
}
|
||||
$cmd .= 'rename "' . $from['path'] . '" "' . $to['path'] . '"';
|
||||
$result = smb::execute($cmd, $to);
|
||||
if ($replace) {
|
||||
// clear again, else the cache will return the info
|
||||
// from the old file
|
||||
smb::clearstatcache ($url_to);
|
||||
}
|
||||
return $result !== false;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ abstract class StreamWrapper extends Common {
|
|||
}
|
||||
|
||||
public function filetype($path) {
|
||||
return filetype($this->constructUrl($path));
|
||||
return @filetype($this->constructUrl($path));
|
||||
}
|
||||
|
||||
public function file_exists($path) {
|
||||
|
|
|
@ -139,7 +139,15 @@ abstract class Storage extends \PHPUnit_Framework_TestCase {
|
|||
$this->instance->rename('/source.txt', '/target2.txt');
|
||||
$this->assertTrue($this->instance->file_exists('/target2.txt'));
|
||||
$this->assertFalse($this->instance->file_exists('/source.txt'));
|
||||
$this->assertEquals(file_get_contents($textFile), $this->instance->file_get_contents('/target.txt'));
|
||||
$this->assertEquals(file_get_contents($textFile), $this->instance->file_get_contents('/target2.txt'));
|
||||
|
||||
// move to overwrite
|
||||
$testContents = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
$this->instance->file_put_contents('/target3.txt', $testContents);
|
||||
$this->instance->rename('/target2.txt', '/target3.txt');
|
||||
$this->assertTrue($this->instance->file_exists('/target3.txt'));
|
||||
$this->assertFalse($this->instance->file_exists('/target2.txt'));
|
||||
$this->assertEquals(file_get_contents($textFile), $this->instance->file_get_contents('/target3.txt'));
|
||||
}
|
||||
|
||||
public function testLocal() {
|
||||
|
|
Loading…
Reference in New Issue