Skip to content
Permalink
Browse files

Fix FileEngine not clearing keys when groups are used.

Fixes #3930
  • Loading branch information...
markstory committed Jul 28, 2013
1 parent 17b2538 commit 8a81903e372fa07fef9eef089dff667f2bb8fd57
Showing with 22 additions and 5 deletions.
  1. +19 −3 lib/Cake/Cache/Engine/FileEngine.php
  2. +3 −2 lib/Cake/Test/Case/Cache/Engine/FileEngineTest.php
@@ -223,11 +223,28 @@ public function clear($check) {
if (!$this->_init) {
return false;
}
$dir = dir($this->settings['path']);
$threshold = $now = false;
if ($check) {
$now = time();
$threshold = $now - $this->settings['duration'];
}
$this->_clearDirectory($this->settings['path'], $now, $threshold);
foreach ($this->settings['groups'] as $group) {
$this->_clearDirectory($this->settings['path'] . $group . DS, $now, $threshold);
}
return true;
}
/**
* Used to clear a directory of matching files.
*
* @param string $path The path to search.
* @param integer $now The current timestamp
* @param integer $threshold Any file not modified after this value will be deleted.
* @return void
*/
protected function _clearDirectory($path, $now, $threshold) {
$dir = dir($path);
$prefixLength = strlen($this->settings['prefix']);
while (($entry = $dir->read()) !== false) {
if (substr($entry, 0, $prefixLength) !== $this->settings['prefix']) {
@@ -236,7 +253,7 @@ public function clear($check) {
if ($this->_setKey($entry) === false) {
continue;
}
if ($check) {
if ($threshold) {
$mtime = $this->_File->getMTime();
if ($mtime > $threshold) {
@@ -256,7 +273,6 @@ public function clear($check) {
}
}
$dir->close();
return true;
}
/**
@@ -267,9 +267,10 @@ public function testClearWithGroups() {
'duration' => DAY,
'groups' => array('short')
));
$engine->write('test_key', 'it works', DAY);
$key = 'cake_test_test_key';
$engine->write($key, 'it works', DAY);
$engine->clear(false);
$this->assertFalse($engine->read('test_key'), 'Key should have been removed');
$this->assertFalse($engine->read($key), 'Key should have been removed');
}
/**

0 comments on commit 8a81903

Please sign in to comment.
You can’t perform that action at this time.