1
0
Fork 0

Allow wildcards in repository path names.

pull/4422/head
Dennis Birkholz 2015-09-15 16:41:07 +02:00
parent 7267b2ed90
commit 323537ad0f
4 changed files with 52 additions and 27 deletions

View File

@ -97,36 +97,39 @@ class PathRepository extends ArrayRepository
{
parent::initialize();
$path = $this->getPath();
$composerFilePath = $path.'composer.json';
if (!file_exists($composerFilePath)) {
throw new \RuntimeException(sprintf('No `composer.json` file found in path repository "%s"', $path));
}
foreach ($this->getPaths() as $path) {
$composerFilePath = $path.'composer.json';
if (!file_exists($composerFilePath)) {
continue;
}
$json = file_get_contents($composerFilePath);
$package = JsonFile::parseJson($json, $composerFilePath);
$package['dist'] = array(
'type' => 'path',
'url' => $this->url,
'reference' => '',
);
$json = file_get_contents($composerFilePath);
$package = JsonFile::parseJson($json, $composerFilePath);
$package['dist'] = array(
'type' => 'path',
'url' => $this->url,
'reference' => '',
);
if (!isset($package['version'])) {
$package['version'] = $this->versionGuesser->guessVersion($package, $path) ?: 'dev-master';
}
if (is_dir($path.'/.git') && 0 === $this->process->execute('git log -n1 --pretty=%H', $output, $path)) {
$package['dist']['reference'] = trim($output);
}
if (!isset($package['version'])) {
$package['version'] = $this->versionGuesser->guessVersion($package, $path) ?: 'dev-master';
}
if (is_dir($path.'/.git') && 0 === $this->process->execute('git log -n1 --pretty=%H', $output, $path)) {
$package['dist']['reference'] = trim($output);
}
$package = $this->loader->load($package);
$this->addPackage($package);
$package = $this->loader->load($package);
$this->addPackage($package);
}
}
/**
* @return string
* Get a list of all absolute path names matching the supplied urls
*
* @return string[]
*/
private function getPath()
private function getPaths()
{
return realpath(rtrim($this->url, '/')) . '/';
return glob($this->url, GLOB_MARK|GLOB_ONLYDIR);
}
}

View File

@ -1,4 +1,4 @@
{
"name": "test/path",
"name": "test/path-versioned",
"version": "0.0.2"
}

View File

@ -1,3 +1,3 @@
{
"name": "test/path"
"name": "test/path-unversioned"
}

View File

@ -35,7 +35,7 @@ class PathRepositoryTest extends TestCase
$repository->getPackages();
$this->assertEquals(1, $repository->count());
$this->assertTrue($repository->hasPackage($this->getPackage('test/path', '0.0.2')));
$this->assertTrue($repository->hasPackage($this->getPackage('test/path-versioned', '0.0.2')));
}
public function testLoadPackageFromFileSystemWithoutVersion()
@ -54,9 +54,31 @@ class PathRepositoryTest extends TestCase
$this->assertEquals(1, $repository->count());
$package = $packages[0];
$this->assertEquals('test/path', $package->getName());
$this->assertEquals('test/path-unversioned', $package->getName());
$packageVersion = $package->getVersion();
$this->assertTrue(!empty($packageVersion));
}
public function testLoadPackageFromFileSystemWithWildcard()
{
$ioInterface = $this->getMockBuilder('Composer\IO\IOInterface')
->getMock();
$config = new \Composer\Config();
$loader = new ArrayLoader(new VersionParser());
$versionGuesser = null;
$repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', '*'));
$repository = new PathRepository(array('url' => $repositoryUrl), $ioInterface, $config, $loader);
$packages = $repository->getPackages();
$this->assertEquals(2, $repository->count());
$package = $packages[0];
$this->assertEquals('test/path-versioned', $package->getName());
$package = $packages[1];
$this->assertEquals('test/path-unversioned', $package->getName());
}
}