/** * Returns Git info * * @return array */ public static function getGitInfo() { $gitBinary = VP_GIT_BINARY; $info = []; $process = new Process(ProcessUtils::escapeshellarg($gitBinary) . " --version"); $process->run(); $info['git-binary-as-configured'] = $gitBinary; $info['git-available'] = $process->getErrorOutput() === null || !strlen($process->getErrorOutput()); if ($info['git-available'] === false) { $info['output'] = ['stdout' => trim($process->getOutput()), 'stderr' => trim($process->getErrorOutput())]; $info['env-path'] = getenv('PATH'); return $info; } $output = trim($process->getOutput()); $match = Strings::match($output, "~git version (\\d[\\d\\.]+\\d).*~"); $version = $match[1]; $gitPath = "unknown"; if ($gitBinary == "git") { $osSpecificWhereCommand = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' ? "where" : "which"; $process = new Process("{$osSpecificWhereCommand} git"); $process->run(); if ($process->isSuccessful()) { $gitPath = $process->getOutput(); } } else { $gitPath = $gitBinary; } $info['git-version'] = $version; $info['git-binary-as-called-by-vp'] = $gitBinary; $info['git-full-path'] = $gitPath; $info['versionpress-min-required-version'] = RequirementsChecker::GIT_MINIMUM_REQUIRED_VERSION; $info['matches-min-required-version'] = RequirementsChecker::gitMatchesMinimumRequiredVersion($version); return $info; }
/** * Low-level helper, generally use runShellCommand() * * @param $cmd * @return array */ private function runProcess($cmd) { /* * MAMP / XAMPP issue on Mac OS X, see #106. * * http://stackoverflow.com/a/16903162/1243495 */ $dyldLibraryPath = getenv("DYLD_LIBRARY_PATH"); if ($dyldLibraryPath != "") { putenv("DYLD_LIBRARY_PATH="); } $process = new Process($cmd, $this->workingDirectoryRoot); if ($this->gitProcessTimeout !== null) { $process->setTimeout($this->gitProcessTimeout); } $process->run(); $result = ['stdout' => $process->getOutput(), 'stderr' => $process->getErrorOutput()]; putenv("DYLD_LIBRARY_PATH={$dyldLibraryPath}"); if ($result['stdout'] !== null) { $result['stdout'] = trim($result['stdout']); } if ($result['stderr'] !== null) { $result['stderr'] = trim($result['stderr']); } return $result; }