1
0
Fork 0

fixes rename bug (closes #900)

pull/940/head
Johannes M. Schmitt 2012-07-23 17:30:11 +02:00
parent ac29308eb7
commit 2a6b12fb65
2 changed files with 17 additions and 2 deletions

View File

@ -50,12 +50,12 @@ abstract class ArchiveDownloader extends FileDownloader
// Rename the content directory to avoid error when moving up
// a child folder with the same name
$temporaryName = md5(time().rand());
rename($contentDir, $temporaryName);
$this->filesystem->rename($contentDir, $temporaryName);
$contentDir = $temporaryName;
foreach (array_merge(glob($contentDir . '/.*'), glob($contentDir . '/*')) as $file) {
if (trim(basename($file), '.')) {
rename($file, $path . '/' . basename($file));
$this->filesystem->rename($file, $path . '/' . basename($file));
}
}
rmdir($contentDir);

View File

@ -14,6 +14,7 @@ namespace Composer\Util;
/**
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
*/
class Filesystem
{
@ -53,6 +54,20 @@ class Filesystem
}
}
public function rename($source, $target)
{
if (defined('PHP_WINDOWS_VERSION_BUILD') || ! function_exists('exec')) {
rename($source, $target);
return;
}
exec('mv '.escapeshellarg($source).' '.escapeshellarg($target), $output, $returnCode);
if (0 !== $returnCode) {
throw new \RuntimeException(sprintf('Could not rename "%s" to "%s".', $source, $target));
}
}
/**
* Returns the shortest path from $from to $to
*