1
0
Fork 0

Merge pull request #4417 from sroze/path-repository-store-relative-path

Path repository store relative path
pull/4421/head
Jordi Boggiano 2015-09-14 11:42:03 +01:00
commit 013a748cb9
2 changed files with 34 additions and 14 deletions

View File

@ -33,16 +33,27 @@ class PathDownloader extends FileDownloader
$this->filesystem->removeDirectory($path); $this->filesystem->removeDirectory($path);
$this->io->writeError(sprintf( $this->io->writeError(sprintf(
' - Installing <info>%s</info> (<comment>%s</comment>) from %s', ' - Installing <info>%s</info> (<comment>%s</comment>)',
$package->getName(), $package->getName(),
$package->getFullPrettyVersion(), $package->getFullPrettyVersion()
$package->getDistUrl()
)); ));
try { $url = $package->getDistUrl();
$fileSystem->symlink($package->getDistUrl(), $path); if (!file_exists($url) || !is_dir($url)) {
} catch (IOException $e) { throw new \RuntimeException(sprintf(
$fileSystem->mirror($package->getDistUrl(), $path); 'Path "%s" is not found',
$path
));
} }
try {
$fileSystem->symlink($url, $path);
$this->io->writeError(sprintf(' Symlinked from %s', $url));
} catch (IOException $e) {
$fileSystem->mirror($url, $path);
$this->io->writeError(sprintf(' Mirrored from %s', $url));
}
$this->io->writeError('');
} }
} }

View File

@ -60,7 +60,7 @@ class PathRepository extends ArrayRepository
/** /**
* @var string * @var string
*/ */
private $path; private $url;
/** /**
* @var ProcessExecutor * @var ProcessExecutor
@ -81,7 +81,7 @@ class PathRepository extends ArrayRepository
} }
$this->loader = new ArrayLoader(); $this->loader = new ArrayLoader();
$this->path = realpath(rtrim($repoConfig['url'], '/')) . '/'; $this->url = $repoConfig['url'];
$this->process = new ProcessExecutor($io); $this->process = new ProcessExecutor($io);
$this->versionGuesser = new VersionGuesser($config, $this->process, new VersionParser()); $this->versionGuesser = new VersionGuesser($config, $this->process, new VersionParser());
@ -97,27 +97,36 @@ class PathRepository extends ArrayRepository
{ {
parent::initialize(); parent::initialize();
$composerFilePath = $this->path.'composer.json'; $path = $this->getPath();
$composerFilePath = $path.'composer.json';
if (!file_exists($composerFilePath)) { if (!file_exists($composerFilePath)) {
throw new \RuntimeException(sprintf('No `composer.json` file found in path repository "%s"', $this->path)); throw new \RuntimeException(sprintf('No `composer.json` file found in path repository "%s"', $path));
} }
$json = file_get_contents($composerFilePath); $json = file_get_contents($composerFilePath);
$package = JsonFile::parseJson($json, $composerFilePath); $package = JsonFile::parseJson($json, $composerFilePath);
$package['dist'] = array( $package['dist'] = array(
'type' => 'path', 'type' => 'path',
'url' => $this->path, 'url' => $this->url,
'reference' => '', 'reference' => '',
); );
if (!isset($package['version'])) { if (!isset($package['version'])) {
$package['version'] = $this->versionGuesser->guessVersion($package, $this->path) ?: 'dev-master'; $package['version'] = $this->versionGuesser->guessVersion($package, $path) ?: 'dev-master';
} }
if (is_dir($this->path.'/.git') && 0 === $this->process->execute('git log -n1 --pretty=%H', $output, $this->path)) { if (is_dir($path.'/.git') && 0 === $this->process->execute('git log -n1 --pretty=%H', $output, $path)) {
$package['dist']['reference'] = trim($output); $package['dist']['reference'] = trim($output);
} }
$package = $this->loader->load($package); $package = $this->loader->load($package);
$this->addPackage($package); $this->addPackage($package);
} }
/**
* @return string
*/
private function getPath()
{
return realpath(rtrim($this->url, '/')) . '/';
}
} }