diff --git a/src/Composer/Command/CreateProjectCommand.php b/src/Composer/Command/CreateProjectCommand.php
index 960f0e003..59cd51fa7 100644
--- a/src/Composer/Command/CreateProjectCommand.php
+++ b/src/Composer/Command/CreateProjectCommand.php
@@ -32,10 +32,10 @@ use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Finder\Finder;
use Composer\Json\JsonFile;
+use Composer\Config\JsonConfigSource;
use Composer\Util\Filesystem;
use Composer\Util\RemoteFilesystem;
use Composer\Package\Version\VersionParser;
-use Composer\Json\JsonManipulator;
/**
* Install a package as new project into new directory.
@@ -236,7 +236,7 @@ EOT
return 1;
}
- $vcsWasRemoved = false;
+ $hasVcs = $installedFromVcs;
if (!$keepVcs && $installedFromVcs
&& (
!$io->isInteractive()
@@ -262,46 +262,25 @@ EOT
$io->write('An error occurred while removing the VCS metadata: '.$e->getMessage().'');
}
- $vcsWasRemoved = true;
+ $hasVcs = false;
}
- // Rewriting self.version dependencies with explicit version numbers
- if($vcsWasRemoved || !$installedFromVcs) {
+ // rewriting self.version dependencies with explicit version numbers if the package's vcs metadata is gone
+ if (!$hasVcs) {
$package = $composer->getPackage();
- $requires = $package->getRequires();
-
- $requirementsToUpdate = array();
- foreach($requires as $require) {
- if($require->getPrettyConstraint() == 'self.version') {
- $requirementsToUpdate[] = $require->getTarget();
+ $configSource = new JsonConfigSource(new JsonFile('composer.json'));
+ foreach (BasePackage::$supportedLinkTypes as $type => $meta) {
+ foreach ($package->{'get'.$meta['method']}() as $link) {
+ if ($link->getPrettyConstraint() === 'self.version') {
+ $configSource->addLink($type, $link->getTarget(), $package->getPrettyVersion());
+ }
}
}
-
- if($requirementsToUpdate) {
- $io->write("Rewriting self.version entries for " . implode(", ",$requirementsToUpdate) . " to " . $package->getVersion() . "");
- $this->rewriteSelfVersion(Factory::getComposerFile(), $requirementsToUpdate, $package->getVersion());
- }
}
return 0;
}
- private function rewriteSelfVersion($filename, array $packages, $newVersion)
- {
- $contents = file_get_contents($filename);
- $manipulator = new JsonManipulator($contents);
-
- foreach ($packages as $package) {
- if (!$manipulator->addLink('require', $package, $newVersion)) {
- return false;
- }
- }
-
- file_put_contents($filename, $manipulator->getContents());
-
- return true;
- }
-
protected function createDownloadManager(IOInterface $io, Config $config)
{
$factory = new Factory();