示例#1
0
 /**
  * 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;
 }