Browse Source

Fix clearing groups with FileCache and no prefix.

If you used FileCache + groups + an empty prefix cached files would not
be cleared as strpos() would fail.
mark_story 12 years ago
parent
commit
fc2e1fac4e

+ 4 - 1
lib/Cake/Cache/Engine/FileEngine.php

@@ -415,7 +415,10 @@ class FileEngine extends CacheEngine {
 		$contents = new RecursiveIteratorIterator($directoryIterator, RecursiveIteratorIterator::CHILD_FIRST);
 		foreach ($contents as $object) {
 			$containsGroup = strpos($object->getPathName(), DS . $group . DS) !== false;
-			$hasPrefix = strpos($object->getBaseName(), $this->settings['prefix']) === 0;
+			$hasPrefix = true;
+			if (strlen($this->settings['prefix']) !== 0) {
+				$hasPrefix = strpos($object->getBaseName(), $this->settings['prefix']) === 0;
+			}
 			if ($object->isFile() && $containsGroup && $hasPrefix) {
 				$path = $object->getPathName();
 				$object = null;

+ 20 - 0
lib/Cake/Test/Case/Cache/Engine/FileEngineTest.php

@@ -530,4 +530,24 @@ class FileEngineTest extends CakeTestCase {
 		$this->assertFalse(Cache::read('test_groups5', 'file_groups2'));
 		$this->assertEquals('value 3', Cache::read('test_groups6', 'file_groups3'));
 	}
+
+/**
+ * Test that clearGroup works with no prefix.
+ *
+ * @return void
+ */
+	public function testGroupClearNoPrefix() {
+		Cache::config('file_groups', array(
+			'engine' => 'File',
+			'duration' => 3600,
+			'prefix' => '',
+			'groups' => array('group_a', 'group_b')
+		));
+		Cache::write('key_1', 'value', 'file_groups');
+		Cache::write('key_2', 'value', 'file_groups');
+		Cache::clearGroup('group_a', 'file_groups');
+		$this->assertFalse(Cache::read('key_1', 'file_groups'), 'Did not delete');
+		$this->assertFalse(Cache::read('key_2', 'file_groups'), 'Did not delete');
+	}
+
 }