Browse Source

Remove all possible cd calls, refs #1971

Jordi Boggiano 11 years ago
parent
commit
8b8dc1fd70

+ 10 - 6
src/Composer/Downloader/HgDownloader.php

@@ -28,10 +28,14 @@ class HgDownloader extends VcsDownloader
         $ref = escapeshellarg($package->getSourceReference());
         $path = escapeshellarg($path);
         $this->io->write("    Cloning ".$package->getSourceReference());
-        $command = sprintf('hg clone %s %s && cd %2$s && hg up %s', $url, $path, $ref);
+        $command = sprintf('hg clone %s %s', $url, $path);
         if (0 !== $this->process->execute($command, $ignoredOutput)) {
             throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput());
         }
+        $command = sprintf('hg up %s', $ref);
+        if (0 !== $this->process->execute($command, $ignoredOutput, $path)) {
+            throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput());
+        }
     }
 
     /**
@@ -43,8 +47,8 @@ class HgDownloader extends VcsDownloader
         $ref = escapeshellarg($target->getSourceReference());
         $path = escapeshellarg($path);
         $this->io->write("    Updating to ".$target->getSourceReference());
-        $command = sprintf('cd %s && hg pull %s && hg up %s', $path, $url, $ref);
-        if (0 !== $this->process->execute($command, $ignoredOutput)) {
+        $command = sprintf('hg pull %s && hg up %s', $url, $ref);
+        if (0 !== $this->process->execute($command, $ignoredOutput, $path)) {
             throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput());
         }
     }
@@ -58,7 +62,7 @@ class HgDownloader extends VcsDownloader
             return;
         }
 
-        $this->process->execute(sprintf('cd %s && hg st', escapeshellarg($path)), $output);
+        $this->process->execute('hg st', $output, $path);
 
         return trim($output) ?: null;
     }
@@ -68,9 +72,9 @@ class HgDownloader extends VcsDownloader
      */
     protected function getCommitLogs($fromReference, $toReference, $path)
     {
-        $command = sprintf('cd %s && hg log -r %s:%s --style compact', escapeshellarg($path), $fromReference, $toReference);
+        $command = sprintf('hg log -r %s:%s --style compact', $fromReference, $toReference);
 
-        if (0 !== $this->process->execute($command, $output)) {
+        if (0 !== $this->process->execute($command, $output, $path)) {
             throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput());
         }
 

+ 2 - 2
src/Composer/Downloader/SvnDownloader.php

@@ -144,9 +144,9 @@ class SvnDownloader extends VcsDownloader
         $fromRevision = preg_replace('{.*@(\d+)$}', '$1', $fromReference);
         $toRevision = preg_replace('{.*@(\d+)$}', '$1', $toReference);
 
-        $command = sprintf('cd %s && svn log -r%s:%s --incremental', escapeshellarg($path), $fromRevision, $toRevision);
+        $command = sprintf('svn log -r%s:%s --incremental', $fromRevision, $toRevision);
 
-        if (0 !== $this->process->execute($command, $output)) {
+        if (0 !== $this->process->execute($command, $output, $path)) {
             throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput());
         }
 

+ 12 - 5
tests/Composer/Test/Downloader/HgDownloaderTest.php

@@ -42,7 +42,6 @@ class HgDownloaderTest extends \PHPUnit_Framework_TestCase
 
     public function testDownload()
     {
-        $expectedGitCommand = $this->getCmd('hg clone \'https://mercurial.dev/l3l0/composer\' \'composerPath\' && cd \'composerPath\' && hg up \'ref\'');
         $packageMock = $this->getMock('Composer\Package\PackageInterface');
         $packageMock->expects($this->any())
             ->method('getSourceReference')
@@ -51,7 +50,15 @@ class HgDownloaderTest extends \PHPUnit_Framework_TestCase
             ->method('getSourceUrl')
             ->will($this->returnValue('https://mercurial.dev/l3l0/composer'));
         $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
-        $processExecutor->expects($this->once())
+
+        $expectedGitCommand = $this->getCmd('hg clone \'https://mercurial.dev/l3l0/composer\' \'composerPath\'');
+        $processExecutor->expects($this->at(0))
+            ->method('execute')
+            ->with($this->equalTo($expectedGitCommand))
+            ->will($this->returnValue(0));
+
+        $expectedGitCommand = $this->getCmd('hg up \'ref\'');
+        $processExecutor->expects($this->at(1))
             ->method('execute')
             ->with($this->equalTo($expectedGitCommand))
             ->will($this->returnValue(0));
@@ -77,8 +84,6 @@ class HgDownloaderTest extends \PHPUnit_Framework_TestCase
 
     public function testUpdate()
     {
-        $expectedUpdateCommand = $this->getCmd("cd 'composerPath' && hg pull 'https://github.com/l3l0/composer' && hg up 'ref'");
-
         $packageMock = $this->getMock('Composer\Package\PackageInterface');
         $packageMock->expects($this->any())
             ->method('getSourceReference')
@@ -87,9 +92,11 @@ class HgDownloaderTest extends \PHPUnit_Framework_TestCase
             ->method('getSourceUrl')
             ->will($this->returnValue('https://github.com/l3l0/composer'));
         $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
+
+        $expectedGitCommand = $this->getCmd("hg pull 'https://github.com/l3l0/composer' && hg up 'ref'");
         $processExecutor->expects($this->at(0))
             ->method('execute')
-            ->with($this->equalTo($expectedUpdateCommand))
+            ->with($this->equalTo($expectedGitCommand))
             ->will($this->returnValue(0));
 
         $downloader = $this->getDownloaderMock(null, null, $processExecutor);