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.
This commit is contained in:
David Mudrák
2012-12-06 11:03:35 +08:00
committed by Dan Poltawski
parent ee22329a90
commit b68bbc5ae1
+34 -5
View File
@@ -1136,23 +1136,45 @@ class worker extends singleton_pattern {
/**
* 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 @@ class worker extends singleton_pattern {
}
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;
}
/**