add prefix option to OC_Cache::clear

remotes/origin/stable45
Robin Appelman 13 years ago
parent 2b74778958
commit 51566e87c7
  1. 7
      lib/cache.php
  2. 5
      lib/cache/apc.php
  3. 6
      lib/cache/broker.php
  4. 5
      lib/cache/file.php
  5. 5
      lib/cache/xcache.php
  6. 21
      tests/lib/cache.php

@ -99,12 +99,13 @@ class OC_Cache {
}
/**
* clear the user cache
* clear the user cache of all entries starting with a prefix
* @param string prefix (optional)
* @return bool
*/
static public function clear() {
static public function clear($prefix='') {
$user_cache = self::getUserCache();
return $user_cache->clear();
return $user_cache->clear($prefix);
}
/**

5
lib/cache/apc.php vendored

@ -43,14 +43,15 @@ class OC_Cache_APC {
return apc_delete($this->getNamespace().$key);
}
public function clear(){
$ns = $this->getNamespace();
public function clear($prefix=''){
$ns = $this->getNamespace().$prefix;
$cache = apc_cache_info('user');
foreach($cache['cache_list'] as $entry) {
if (strpos($entry['info'], $ns) === 0) {
apc_delete($entry['info']);
}
}
return true;
}
}
if(!function_exists('apc_exists')) {

@ -46,8 +46,8 @@ class OC_Cache_Broker {
return $this->slow_cache->remove($key);
}
public function clear(){
$this->fast_cache->clear();
$this->slow_cache->clear();
public function clear($prefix=''){
$this->fast_cache->clear($prefix);
$this->slow_cache->clear($prefix);
}
}

@ -62,15 +62,16 @@ class OC_Cache_File{
return $storage->unlink($key);
}
public function clear(){
public function clear($prefix=''){
$storage = $this->getStorage();
if($storage and $storage->is_dir('/')){
$dh=$storage->opendir('/');
while($file=readdir($dh)){
if($file!='.' and $file!='..'){
if($file!='.' and $file!='..' and ($prefix==='' || strpos($file, $prefix) === 0)){
$storage->unlink('/'.$file);
}
}
}
return true;
}
}

@ -43,7 +43,8 @@ class OC_Cache_XCache {
return xcache_unset($this->getNamespace().$key);
}
public function clear(){
return xcache_unset_by_prefix($this->getNamespace());
public function clear($prefix=''){
xcache_unset_by_prefix($this->getNamespace().$prefix);
return true;
}
}

@ -42,6 +42,27 @@ abstract class Test_Cache extends UnitTestCase {
$this->assertNull($this->instance->get('not_set'),'Unset value not equal to null');
$this->assertTrue($this->instance->remove('value1'));
$this->assertFalse($this->instance->hasKey('value1'));
}
function testClear(){
$value='ipsum lorum';
$this->instance->set('1_value1',$value);
$this->instance->set('1_value2',$value);
$this->instance->set('2_value1',$value);
$this->instance->set('3_value1',$value);
$this->assertTrue($this->instance->clear('1_'));
$this->assertFalse($this->instance->hasKey('1_value1'));
$this->assertFalse($this->instance->hasKey('1_value2'));
$this->assertTrue($this->instance->hasKey('2_value1'));
$this->assertTrue($this->instance->hasKey('3_value1'));
$this->assertTrue($this->instance->clear());
$this->assertFalse($this->instance->hasKey('1_value1'));
$this->assertFalse($this->instance->hasKey('1_value2'));
$this->assertFalse($this->instance->hasKey('2_value1'));
$this->assertFalse($this->instance->hasKey('3_value1'));
}
function testTTL(){

Loading…
Cancel
Save