]> source.dussan.org Git - nextcloud-server.git/commitdiff
Also support removeable mounts with rmdir
authorRobin Appelman <icewind@owncloud.com>
Mon, 16 Jun 2014 14:24:42 +0000 (16:24 +0200)
committerRobin Appelman <icewind@owncloud.com>
Mon, 16 Jun 2014 14:24:42 +0000 (16:24 +0200)
lib/private/files/view.php

index b168d177ab2debeb74bc28fd4e52fa49b4d32f6e..91d7ea260d3a5fd5b4a4d9e7ca00c3df1ef93e01 100644 (file)
@@ -161,7 +161,34 @@ class View {
                return $this->basicOperation('mkdir', $path, array('create', 'write'));
        }
 
+       protected function removeMount($mount, $path){
+               if ($mount instanceof MoveableMount) {
+                       \OC_Hook::emit(
+                               Filesystem::CLASSNAME, "umount",
+                               array(Filesystem::signal_param_path => $path)
+                       );
+                       $result = $mount->removeMount();
+                       if ($result) {
+                               \OC_Hook::emit(
+                                       Filesystem::CLASSNAME, "post_umount",
+                                       array(Filesystem::signal_param_path => $path)
+                               );
+                       }
+                       return $result;
+               } else {
+                       // do not allow deleting the storage's root / the mount point
+                       // because for some storages it might delete the whole contents
+                       // but isn't supposed to work that way
+                       return false;
+               }
+       }
+
        public function rmdir($path) {
+               $absolutePath= $this->getAbsolutePath($path);
+               $mount = Filesystem::getMountManager()->find($absolutePath);
+               if ($mount->getInternalPath($absolutePath) === '') {
+                       return $this->removeMount($mount, $path);
+               }
                if ($this->is_dir($path)) {
                        return $this->basicOperation('rmdir', $path, array('delete'));
                } else {
@@ -360,25 +387,7 @@ class View {
                $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
                $mount = Filesystem::getMountManager()->find($absolutePath . $postFix);
                if ($mount->getInternalPath($absolutePath) === '') {
-                       if ($mount instanceof MoveableMount) {
-                               \OC_Hook::emit(
-                                               Filesystem::CLASSNAME, "umount",
-                                               array(Filesystem::signal_param_path => $path)
-                                               );
-                               $result = $mount->removeMount();
-                               if ($result) {
-                                       \OC_Hook::emit(
-                                                       Filesystem::CLASSNAME, "post_umount",
-                                                       array(Filesystem::signal_param_path => $path)
-                                                       );
-                               }
-                               return $result;
-                       } else {
-                               // do not allow deleting the storage's root / the mount point
-                               // because for some storages it might delete the whole contents
-                               // but isn't supposed to work that way
-                               return false;
-                       }
+                       return $this->removeMount($mount, $path);
                }
                return $this->basicOperation('unlink', $path, array('delete'));
        }