Emulate touch() for backends that don't support it
This commit is contained in:
parent
3e70d563a6
commit
9738fae3cf
|
@ -242,7 +242,11 @@ class View {
|
||||||
if (!is_null($mtime) and !is_numeric($mtime)) {
|
if (!is_null($mtime) and !is_numeric($mtime)) {
|
||||||
$mtime = strtotime($mtime);
|
$mtime = strtotime($mtime);
|
||||||
}
|
}
|
||||||
return $this->basicOperation('touch', $path, array('write'), $mtime);
|
$result = $this->basicOperation('touch', $path, array('write'), $mtime);
|
||||||
|
if (!$result) { //if native touch fails, we emulate it by changing the mtime in the cache
|
||||||
|
$this->putFileInfo($path, array('mtime' => $mtime));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function file_get_contents($path) {
|
public function file_get_contents($path) {
|
||||||
|
@ -917,11 +921,11 @@ class View {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the owner for a file or folder
|
* Get the owner for a file or folder
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getOwner($path) {
|
public function getOwner($path) {
|
||||||
return $this->basicOperation('getOwner', $path);
|
return $this->basicOperation('getOwner', $path);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,12 @@
|
||||||
|
|
||||||
namespace Test\Files;
|
namespace Test\Files;
|
||||||
|
|
||||||
|
class TemporaryNoTouch extends \OC\Files\Storage\Temporary {
|
||||||
|
public function touch($path, $mtime = null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class View extends \PHPUnit_Framework_TestCase {
|
class View extends \PHPUnit_Framework_TestCase {
|
||||||
/**
|
/**
|
||||||
* @var \OC\Files\Storage\Storage[] $storages;
|
* @var \OC\Files\Storage\Storage[] $storages;
|
||||||
|
@ -228,12 +234,36 @@ class View extends \PHPUnit_Framework_TestCase {
|
||||||
$this->assertEquals(3, $cachedData['size']);
|
$this->assertEquals(3, $cachedData['size']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testTouch() {
|
||||||
|
$storage = $this->getTestStorage(true, '\Test\Files\TemporaryNoTouch');
|
||||||
|
|
||||||
|
\OC\Files\Filesystem::mount($storage, array(), '/');
|
||||||
|
|
||||||
|
$rootView = new \OC\Files\View('');
|
||||||
|
$oldCachedData = $rootView->getFileInfo('foo.txt');
|
||||||
|
|
||||||
|
$rootView->touch('foo.txt', 500);
|
||||||
|
|
||||||
|
$cachedData = $rootView->getFileInfo('foo.txt');
|
||||||
|
$this->assertEquals(500, $cachedData['mtime']);
|
||||||
|
$this->assertEquals($oldCachedData['storage_mtime'], $cachedData['storage_mtime']);
|
||||||
|
|
||||||
|
$rootView->putFileInfo('foo.txt', array('storage_mtime' => 1000)); //make sure the watcher detects the change
|
||||||
|
$rootView->file_put_contents('foo.txt', 'asd');
|
||||||
|
$cachedData = $rootView->getFileInfo('foo.txt');
|
||||||
|
$this->assertGreaterThanOrEqual($cachedData['mtime'], $oldCachedData['mtime']);
|
||||||
|
$this->assertEquals($cachedData['storage_mtime'], $cachedData['mtime']);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param bool $scan
|
* @param bool $scan
|
||||||
* @return \OC\Files\Storage\Storage
|
* @return \OC\Files\Storage\Storage
|
||||||
*/
|
*/
|
||||||
private function getTestStorage($scan = true) {
|
private function getTestStorage($scan = true, $class = '\OC\Files\Storage\Temporary') {
|
||||||
$storage = new \OC\Files\Storage\Temporary(array());
|
/**
|
||||||
|
* @var \OC\Files\Storage\Storage $storage
|
||||||
|
*/
|
||||||
|
$storage = new $class(array());
|
||||||
$textData = "dummy file data\n";
|
$textData = "dummy file data\n";
|
||||||
$imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
|
$imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
|
||||||
$storage->mkdir('folder');
|
$storage->mkdir('folder');
|
||||||
|
|
Loading…
Reference in New Issue