allow deleting "ghost files" trough the View and Node api
This commit is contained in:
parent
44f72412bf
commit
67c2c85b05
|
@ -337,10 +337,17 @@ class View {
|
||||||
return $this->removeMount($mount, $absolutePath);
|
return $this->removeMount($mount, $absolutePath);
|
||||||
}
|
}
|
||||||
if ($this->is_dir($path)) {
|
if ($this->is_dir($path)) {
|
||||||
return $this->basicOperation('rmdir', $path, array('delete'));
|
$result = $this->basicOperation('rmdir', $path, array('delete'));
|
||||||
} else {
|
} else {
|
||||||
return false;
|
$result = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!$result && !$this->file_exists($path)) { //clear ghost files from the cache on delete
|
||||||
|
$storage = $mount->getStorage();
|
||||||
|
$internalPath = $mount->getInternalPath($absolutePath);
|
||||||
|
$storage->getUpdater()->remove($internalPath);
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -679,7 +686,13 @@ class View {
|
||||||
if ($mount and $mount->getInternalPath($absolutePath) === '') {
|
if ($mount and $mount->getInternalPath($absolutePath) === '') {
|
||||||
return $this->removeMount($mount, $absolutePath);
|
return $this->removeMount($mount, $absolutePath);
|
||||||
}
|
}
|
||||||
return $this->basicOperation('unlink', $path, array('delete'));
|
$result = $this->basicOperation('unlink', $path, array('delete'));
|
||||||
|
if (!$result && !$this->file_exists($path)) { //clear ghost files from the cache on delete
|
||||||
|
$storage = $mount->getStorage();
|
||||||
|
$internalPath = $mount->getInternalPath($absolutePath);
|
||||||
|
$storage->getUpdater()->remove($internalPath);
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2444,4 +2444,53 @@ class ViewTest extends \Test\TestCase {
|
||||||
$data = $view->getFileInfo('.');
|
$data = $view->getFileInfo('.');
|
||||||
$this->assertEquals('', $data->getChecksum());
|
$this->assertEquals('', $data->getChecksum());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testDeleteGhostFile() {
|
||||||
|
$storage = new Temporary(array());
|
||||||
|
$scanner = $storage->getScanner();
|
||||||
|
$cache = $storage->getCache();
|
||||||
|
$storage->file_put_contents('foo.txt', 'bar');
|
||||||
|
\OC\Files\Filesystem::mount($storage, array(), '/test/');
|
||||||
|
$scanner->scan('');
|
||||||
|
|
||||||
|
$storage->unlink('foo.txt');
|
||||||
|
|
||||||
|
$this->assertTrue($cache->inCache('foo.txt'));
|
||||||
|
|
||||||
|
$view = new \OC\Files\View('/test');
|
||||||
|
$rootInfo = $view->getFileInfo('');
|
||||||
|
$this->assertEquals(3, $rootInfo->getSize());
|
||||||
|
$view->unlink('foo.txt');
|
||||||
|
$newInfo = $view->getFileInfo('');
|
||||||
|
|
||||||
|
$this->assertFalse($cache->inCache('foo.txt'));
|
||||||
|
$this->assertNotEquals($rootInfo->getEtag(), $newInfo->getEtag());
|
||||||
|
$this->assertEquals(0, $newInfo->getSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDeleteGhostFolder() {
|
||||||
|
$storage = new Temporary(array());
|
||||||
|
$scanner = $storage->getScanner();
|
||||||
|
$cache = $storage->getCache();
|
||||||
|
$storage->mkdir('foo');
|
||||||
|
$storage->file_put_contents('foo/foo.txt', 'bar');
|
||||||
|
\OC\Files\Filesystem::mount($storage, array(), '/test/');
|
||||||
|
$scanner->scan('');
|
||||||
|
|
||||||
|
$storage->rmdir('foo');
|
||||||
|
|
||||||
|
$this->assertTrue($cache->inCache('foo'));
|
||||||
|
$this->assertTrue($cache->inCache('foo/foo.txt'));
|
||||||
|
|
||||||
|
$view = new \OC\Files\View('/test');
|
||||||
|
$rootInfo = $view->getFileInfo('');
|
||||||
|
$this->assertEquals(3, $rootInfo->getSize());
|
||||||
|
$view->rmdir('foo');
|
||||||
|
$newInfo = $view->getFileInfo('');
|
||||||
|
|
||||||
|
$this->assertFalse($cache->inCache('foo'));
|
||||||
|
$this->assertFalse($cache->inCache('foo/foo.txt'));
|
||||||
|
$this->assertNotEquals($rootInfo->getEtag(), $newInfo->getEtag());
|
||||||
|
$this->assertEquals(0, $newInfo->getSize());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue