1
0
Fork 0

Clean up rogue git env vars in case this is running in a git hook, refs #1832

pull/1941/head
Jordi Boggiano 2013-05-27 19:54:46 +02:00
parent 1dd8bffce5
commit b38db73611
2 changed files with 21 additions and 6 deletions

View File

@ -27,12 +27,12 @@ class GitDownloader extends VcsDownloader
*/ */
public function doDownload(PackageInterface $package, $path) public function doDownload(PackageInterface $package, $path)
{ {
$this->cleanEnv();
$ref = $package->getSourceReference(); $ref = $package->getSourceReference();
$command = 'git clone %s %s && cd %2$s && git remote add composer %1$s && git fetch composer'; $command = 'git clone %s %s && cd %2$s && git remote add composer %1$s && git fetch composer';
$this->io->write(" Cloning ".$ref); $this->io->write(" Cloning ".$ref);
// added in git 1.7.1, prevents prompting the user
putenv('GIT_ASKPASS=echo');
$commandCallable = function($url) use ($ref, $path, $command) { $commandCallable = function($url) use ($ref, $path, $command) {
return sprintf($command, escapeshellarg($url), escapeshellarg($path), escapeshellarg($ref)); return sprintf($command, escapeshellarg($url), escapeshellarg($path), escapeshellarg($ref));
}; };
@ -48,6 +48,8 @@ class GitDownloader extends VcsDownloader
*/ */
public function doUpdate(PackageInterface $initial, PackageInterface $target, $path) public function doUpdate(PackageInterface $initial, PackageInterface $target, $path)
{ {
$this->cleanEnv();
$ref = $target->getSourceReference(); $ref = $target->getSourceReference();
$this->io->write(" Checking out ".$ref); $this->io->write(" Checking out ".$ref);
$command = 'git remote set-url composer %s && git fetch composer && git fetch --tags composer'; $command = 'git remote set-url composer %s && git fetch composer && git fetch --tags composer';
@ -58,8 +60,6 @@ class GitDownloader extends VcsDownloader
$this->io->setAuthentication($match[3], urldecode($match[1]), urldecode($match[2])); $this->io->setAuthentication($match[3], urldecode($match[1]), urldecode($match[2]));
} }
// added in git 1.7.1, prevents prompting the user
putenv('GIT_ASKPASS=echo');
$commandCallable = function($url) use ($command) { $commandCallable = function($url) use ($command) {
return sprintf($command, escapeshellarg($url)); return sprintf($command, escapeshellarg($url));
}; };
@ -416,4 +416,14 @@ class GitDownloader extends VcsDownloader
$this->hasStashedChanges = true; $this->hasStashedChanges = true;
} }
protected function cleanEnv()
{
// clean up rogue git env vars in case this is running in a git hook
putenv('GIT_DIR');
putenv('GIT_WORK_TREE');
// added in git 1.7.1, prevents prompting the user for username/password
putenv('GIT_ASKPASS=echo');
}
} }

View File

@ -38,6 +38,13 @@ class GitDriver extends VcsDriver
} else { } else {
$this->repoDir = $this->config->get('cache-vcs-dir') . '/' . preg_replace('{[^a-z0-9.]}i', '-', $this->url) . '/'; $this->repoDir = $this->config->get('cache-vcs-dir') . '/' . preg_replace('{[^a-z0-9.]}i', '-', $this->url) . '/';
// clean up rogue git env vars in case this is running in a git hook
putenv('GIT_DIR');
putenv('GIT_WORK_TREE');
// added in git 1.7.1, prevents prompting the user for username/password
putenv('GIT_ASKPASS=echo');
$fs = new Filesystem(); $fs = new Filesystem();
$fs->ensureDirectoryExists(dirname($this->repoDir)); $fs->ensureDirectoryExists(dirname($this->repoDir));
@ -58,8 +65,6 @@ class GitDriver extends VcsDriver
// clean up directory and do a fresh clone into it // clean up directory and do a fresh clone into it
$fs->removeDirectory($this->repoDir); $fs->removeDirectory($this->repoDir);
// added in git 1.7.1, prevents prompting the user
putenv('GIT_ASKPASS=echo');
$command = sprintf('git clone --mirror %s %s', escapeshellarg($this->url), escapeshellarg($this->repoDir)); $command = sprintf('git clone --mirror %s %s', escapeshellarg($this->url), escapeshellarg($this->repoDir));
if (0 !== $this->process->execute($command, $output)) { if (0 !== $this->process->execute($command, $output)) {
$output = $this->process->getErrorOutput(); $output = $this->process->getErrorOutput();