Merge pull request #11763 from owncloud/stable-etags
Generate stable etags for local files
This commit is contained in:
commit
8de287f2ef
|
@ -90,6 +90,7 @@ if (\OC_Util::runningOnWindows()) {
|
|||
}
|
||||
|
||||
public function stat($path) {
|
||||
clearstatcache();
|
||||
$fullPath = $this->datadir . $path;
|
||||
$statResult = stat($fullPath);
|
||||
if (PHP_INT_SIZE === 4 && !$this->is_dir($path)) {
|
||||
|
@ -276,5 +277,25 @@ if (\OC_Util::runningOnWindows()) {
|
|||
public function isLocal() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the ETag for a file or folder
|
||||
*
|
||||
* @param string $path
|
||||
* @return string
|
||||
*/
|
||||
public function getETag($path) {
|
||||
if ($this->is_file($path)) {
|
||||
$stat = $this->stat($path);
|
||||
return md5(
|
||||
$stat['mtime'] .
|
||||
$stat['ino'] .
|
||||
$stat['dev'] .
|
||||
$stat['size']
|
||||
);
|
||||
} else {
|
||||
return parent::getETag($path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ class Local extends Storage {
|
|||
* @var string tmpDir
|
||||
*/
|
||||
private $tmpDir;
|
||||
|
||||
public function setUp() {
|
||||
$this->tmpDir = \OC_Helper::tmpFolder();
|
||||
$this->instance = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir));
|
||||
|
@ -35,5 +36,21 @@ class Local extends Storage {
|
|||
public function tearDown() {
|
||||
\OC_Helper::rmdirr($this->tmpDir);
|
||||
}
|
||||
|
||||
public function testStableEtag() {
|
||||
$this->instance->file_put_contents('test.txt', 'foobar');
|
||||
$etag1 = $this->instance->getETag('test.txt');
|
||||
$etag2 = $this->instance->getETag('test.txt');
|
||||
$this->assertEquals($etag1, $etag2);
|
||||
}
|
||||
|
||||
public function testEtagChange() {
|
||||
$this->instance->file_put_contents('test.txt', 'foo');
|
||||
$this->instance->touch('test.txt', time() - 2);
|
||||
$etag1 = $this->instance->getETag('test.txt');
|
||||
$this->instance->file_put_contents('test.txt', 'bar');
|
||||
$etag2 = $this->instance->getETag('test.txt');
|
||||
$this->assertNotEquals($etag1, $etag2);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue