Skip to content
Browse files

MDL-36963 Improve mdeploy worker::move_directory() method

The additional parameter allows to use this method without actual
removing the root of the source location. That is, it is now possible to
move the content of a folder only.

Also, a small refactoring happened here as we will need a variant of
this method that does not throw exception if the target already exists.
  • Loading branch information...
1 parent 325e266 commit 606e2c8ebe8e6186761be811cc3d9b0d80a04994 @mudrd8mz mudrd8mz committed Dec 6, 2012
Showing with 34 additions and 5 deletions.
  1. +34 −5 mdeploy.php
View
39 mdeploy.php
@@ -1136,23 +1136,45 @@ protected function move_directory_target_precheck($target) {
/**
* Moves the given source into a new location recursively
*
+ * The target location can not exist.
+ *
* @param string $source full path to the existing directory
* @param string $destination full path to the new location of the folder
+ * @param bool $keepsourceroot should the root of the $source be kept or removed at the end
* @return bool
*/
- protected function move_directory($source, $target) {
+ protected function move_directory($source, $target, $keepsourceroot = false) {
if (file_exists($target)) {
throw new filesystem_exception('Unable to move the directory - target location already exists');
}
+ return $this->move_directory_into($source, $target, $keepsourceroot);
+ }
+
+ /**
+ * Moves the given source into a new location recursively
+ *
+ * If the target already exists, files are moved into it. The target is created otherwise.
+ *
+ * @param string $source full path to the existing directory
+ * @param string $destination full path to the new location of the folder
+ * @param bool $keepsourceroot should the root of the $source be kept or removed at the end
+ * @return bool
+ */
+ protected function move_directory_into($source, $target, $keepsourceroot = false) {
+
if (is_dir($source)) {
$handle = opendir($source);
} else {
throw new filesystem_exception('Source location is not a directory');
}
- mkdir($target, 02777);
+ if (is_dir($target)) {
+ $result = true;
+ } else {
+ $result = mkdir($target, 02777);
+ }
while ($filename = readdir($handle)) {
$sourcepath = $source.'/'.$filename;
@@ -1163,15 +1185,22 @@ protected function move_directory($source, $target) {
}
if (is_dir($sourcepath)) {
- $this->move_directory($sourcepath, $targetpath);
+ $result = $result && $this->move_directory($sourcepath, $targetpath, false);
} else {
- rename($sourcepath, $targetpath);
+ $result = $result && rename($sourcepath, $targetpath);
}
}
closedir($handle);
- return rmdir($source);
+
+ if (!$keepsourceroot) {
+ $result = $result && rmdir($source);
+ }
+
+ clearstatcache();
+
+ return $result;
}
/**

0 comments on commit 606e2c8

Please sign in to comment.
Something went wrong with that request. Please try again.