Ver Fonte

Merge branch '1.6'

Jordi Boggiano há 7 anos atrás
pai
commit
ad8b44a4c8

+ 3 - 2
doc/05-repositories.md

@@ -284,8 +284,9 @@ VCS repository provides `dist`s for them that fetch the packages as zips.
 * **BitBucket:** [bitbucket.org](https://bitbucket.org) (Git and Mercurial)
 * **BitBucket:** [bitbucket.org](https://bitbucket.org) (Git and Mercurial)
 
 
 The VCS driver to be used is detected automatically based on the URL. However,
 The VCS driver to be used is detected automatically based on the URL. However,
-should you need to specify one for whatever reason, you can use `fossil`, `git`,
-`svn` or `hg` as the repository type instead of `vcs`.
+should you need to specify one for whatever reason, you can use `git-bitbucket`,
+`hg-bitbucket`, `github`, `gitlab`, `perforce`, `fossil`, `git`, `svn` or `hg`
+as the repository type instead of `vcs`.
 
 
 If you set the `no-api` key to `true` on a github repository it will clone the
 If you set the `no-api` key to `true` on a github repository it will clone the
 repository as it would with any other git repository instead of using the
 repository as it would with any other git repository instead of using the

+ 10 - 5
src/Composer/Command/CreateProjectCommand.php

@@ -75,7 +75,8 @@ class CreateProjectCommand extends BaseCommand
                 new InputOption('no-scripts', null, InputOption::VALUE_NONE, 'Whether to prevent execution of all defined scripts in the root package.'),
                 new InputOption('no-scripts', null, InputOption::VALUE_NONE, 'Whether to prevent execution of all defined scripts in the root package.'),
                 new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'),
                 new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'),
                 new InputOption('no-secure-http', null, InputOption::VALUE_NONE, 'Disable the secure-http config option temporarily while installing the root package. Use at your own risk. Using this flag is a bad idea.'),
                 new InputOption('no-secure-http', null, InputOption::VALUE_NONE, 'Disable the secure-http config option temporarily while installing the root package. Use at your own risk. Using this flag is a bad idea.'),
-                new InputOption('keep-vcs', null, InputOption::VALUE_NONE, 'Whether to prevent deletion vcs folder.'),
+                new InputOption('keep-vcs', null, InputOption::VALUE_NONE, 'Whether to prevent deleting the vcs folder.'),
+                new InputOption('remove-vcs', null, InputOption::VALUE_NONE, 'Whether to force deletion of the vcs folder without prompting.'),
                 new InputOption('no-install', null, InputOption::VALUE_NONE, 'Whether to skip installation of the package dependencies.'),
                 new InputOption('no-install', null, InputOption::VALUE_NONE, 'Whether to skip installation of the package dependencies.'),
                 new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'),
                 new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'),
             ))
             ))
@@ -140,11 +141,12 @@ EOT
             $input->getOption('no-progress'),
             $input->getOption('no-progress'),
             $input->getOption('no-install'),
             $input->getOption('no-install'),
             $input->getOption('ignore-platform-reqs'),
             $input->getOption('ignore-platform-reqs'),
-            !$input->getOption('no-secure-http')
+            !$input->getOption('no-secure-http'),
+            $input->getOption('remove-vcs')
         );
         );
     }
     }
 
 
-    public function installProject(IOInterface $io, Config $config, InputInterface $input, $packageName, $directory = null, $packageVersion = null, $stability = 'stable', $preferSource = false, $preferDist = false, $installDevPackages = false, $repository = null, $disablePlugins = false, $noScripts = false, $keepVcs = false, $noProgress = false, $noInstall = false, $ignorePlatformReqs = false, $secureHttp = true)
+    public function installProject(IOInterface $io, Config $config, InputInterface $input, $packageName, $directory = null, $packageVersion = null, $stability = 'stable', $preferSource = false, $preferDist = false, $installDevPackages = false, $repository = null, $disablePlugins = false, $noScripts = false, $keepVcs = false, $noProgress = false, $noInstall = false, $ignorePlatformReqs = false, $secureHttp = true, $removeVcs = false)
     {
     {
         $oldCwd = getcwd();
         $oldCwd = getcwd();
 
 
@@ -195,9 +197,12 @@ EOT
         }
         }
 
 
         $hasVcs = $installedFromVcs;
         $hasVcs = $installedFromVcs;
-        if (!$keepVcs && $installedFromVcs
+        if (
+            !$keepVcs
+            && $installedFromVcs
             && (
             && (
-                !$io->isInteractive()
+                $removeVcs
+                || !$io->isInteractive()
                 || $io->askConfirmation('<info>Do you want to remove the existing VCS (.git, .svn..) history?</info> [<comment>Y,n</comment>]? ', true)
                 || $io->askConfirmation('<info>Do you want to remove the existing VCS (.git, .svn..) history?</info> [<comment>Y,n</comment>]? ', true)
             )
             )
         ) {
         ) {

+ 4 - 0
src/Composer/DependencyResolver/Problem.php

@@ -108,6 +108,10 @@ class Problem
 
 
                 // handle php extensions
                 // handle php extensions
                 if (0 === stripos($job['packageName'], 'ext-')) {
                 if (0 === stripos($job['packageName'], 'ext-')) {
+                    if (false !== strpos($job['packageName'], ' ')) {
+                        return "\n    - The requested PHP extension ".$job['packageName'].' should be required as '.str_replace(' ', '-', $job['packageName']).'.';
+                    }
+
                     $ext = substr($job['packageName'], 4);
                     $ext = substr($job['packageName'], 4);
                     $error = extension_loaded($ext) ? 'has the wrong version ('.(phpversion($ext) ?: '0').') installed' : 'is missing from your system';
                     $error = extension_loaded($ext) ? 'has the wrong version ('.(phpversion($ext) ?: '0').') installed' : 'is missing from your system';
 
 

+ 1 - 1
src/Composer/Repository/ComposerRepository.php

@@ -677,7 +677,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
                     }
                     }
 
 
                     // TODO use scarier wording once we know for sure it doesn't do false positives anymore
                     // TODO use scarier wording once we know for sure it doesn't do false positives anymore
-                    throw new RepositorySecurityException('The contents of '.$filename.' do not match its signature. This could indicate a man-in-the-middle attack. Try running composer again and report this if you think it is a mistake.');
+                    throw new RepositorySecurityException('The contents of '.$filename.' do not match its signature. This could indicate a man-in-the-middle attack or e.g. antivirus software corrupting files. Try running composer again and report this if you think it is a mistake.');
                 }
                 }
 
 
                 $data = JsonFile::parseJson($json, $filename);
                 $data = JsonFile::parseJson($json, $filename);

+ 1 - 1
src/Composer/Repository/PlatformRepository.php

@@ -24,7 +24,7 @@ use Composer\Util\Silencer;
  */
  */
 class PlatformRepository extends ArrayRepository
 class PlatformRepository extends ArrayRepository
 {
 {
-    const PLATFORM_PACKAGE_REGEX = '{^(?:php(?:-64bit|-ipv6|-zts|-debug)?|hhvm|(?:ext|lib)-[^/]+)$}i';
+    const PLATFORM_PACKAGE_REGEX = '{^(?:php(?:-64bit|-ipv6|-zts|-debug)?|hhvm|(?:ext|lib)-[^/ ]+)$}i';
 
 
     private $versionParser;
     private $versionParser;
 
 

+ 2 - 0
src/Composer/Repository/RepositoryFactory.php

@@ -119,12 +119,14 @@ class RepositoryFactory
         $rm->setRepositoryClass('package', 'Composer\Repository\PackageRepository');
         $rm->setRepositoryClass('package', 'Composer\Repository\PackageRepository');
         $rm->setRepositoryClass('pear', 'Composer\Repository\PearRepository');
         $rm->setRepositoryClass('pear', 'Composer\Repository\PearRepository');
         $rm->setRepositoryClass('git', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('git', 'Composer\Repository\VcsRepository');
+        $rm->setRepositoryClass('git-bitbucket', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('github', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('github', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('gitlab', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('gitlab', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('svn', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('svn', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('fossil', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('fossil', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('perforce', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('perforce', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('hg', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('hg', 'Composer\Repository\VcsRepository');
+        $rm->setRepositoryClass('hg-bitbucket', 'Composer\Repository\VcsRepository');
         $rm->setRepositoryClass('artifact', 'Composer\Repository\ArtifactRepository');
         $rm->setRepositoryClass('artifact', 'Composer\Repository\ArtifactRepository');
         $rm->setRepositoryClass('path', 'Composer\Repository\PathRepository');
         $rm->setRepositoryClass('path', 'Composer\Repository\PathRepository');
 
 

+ 2 - 0
tests/Composer/Test/Repository/RepositoryFactoryTest.php

@@ -34,12 +34,14 @@ class RepositoryFactoryTest extends TestCase
             'package',
             'package',
             'pear',
             'pear',
             'git',
             'git',
+            'git-bitbucket',
             'github',
             'github',
             'gitlab',
             'gitlab',
             'svn',
             'svn',
             'fossil',
             'fossil',
             'perforce',
             'perforce',
             'hg',
             'hg',
+            'hg-bitbucket',
             'artifact',
             'artifact',
             'path',
             'path',
         ), array_keys($repositoryClasses));
         ), array_keys($repositoryClasses));