summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/archive.php21
-rw-r--r--tests/lib/archive.php8
2 files changed, 29 insertions, 0 deletions
diff --git a/lib/archive.php b/lib/archive.php
index 113f92e9604..fabd7cc7a51 100644
--- a/lib/archive.php
+++ b/lib/archive.php
@@ -112,4 +112,25 @@ abstract class OC_Archive{
* @return resource
*/
abstract function getStream($path,$mode);
+ /**
+ * add a folder and all it's content
+ * @param string $path
+ * @param string source
+ * @return bool
+ */
+ function addRecursive($path,$source){
+ if($dh=opendir($source)){
+ $this->addFolder($path);
+ while($file=readdir($dh)){
+ if($file=='.' or $file=='..'){
+ continue;
+ }
+ if(is_dir($source.'/'.$file)){
+ $this->addRecursive($path.'/'.$file,$source.'/'.$file);
+ }else{
+ $this->addFile($path.'/'.$file,$source.'/'.$file);
+ }
+ }
+ }
+ }
}
diff --git a/tests/lib/archive.php b/tests/lib/archive.php
index 1779127c932..1711be58e01 100644
--- a/tests/lib/archive.php
+++ b/tests/lib/archive.php
@@ -130,4 +130,12 @@ abstract class Test_Archive extends UnitTestCase {
$this->instance->remove('target.txt');
$this->assertFalse($this->instance->fileExists('target.txt'));
}
+ public function testRecursive(){
+ $dir=OC::$SERVERROOT.'/apps/files_archive/tests/data';
+ $this->instance=$this->getNew();
+ $this->instance->addRecursive('/dir',$dir);
+ $this->assertTrue($this->instance->fileExists('/dir/lorem.txt'));
+ $this->assertTrue($this->instance->fileExists('/dir/data.zip'));
+ $this->assertTrue($this->instance->fileExists('/dir/data.tar.gz'));
+ }
}