[git] IDEA-59215 Better default Git executable configuration on Windows
authorKirill Likhodedov <Kirill.Likhodedov@jetbrains.com>
Sun, 12 Aug 2012 11:27:31 +0000 (15:27 +0400)
committerKirill Likhodedov <Kirill.Likhodedov@jetbrains.com>
Sun, 12 Aug 2012 11:27:31 +0000 (15:27 +0400)
Try not only git.exe, but git.cmd as well.
Prefer git.cmd over git.exe (because it is a default for Git installations, with some configuration variables (such as HOME) defined.
Prefer C:\Program Files\Git over C:\cygwin\git

plugins/git4idea/src/git4idea/config/GitVcsApplicationSettings.java

index 6542c65311ef2bc4e0b96b63d1cd3eb7e15a6697..23c18e83a8ad868cfee42f457052bc5071f409e8 100644 (file)
@@ -31,10 +31,16 @@ import java.io.File;
   storages = {@Storage(file = StoragePathMacros.APP_CONFIG + "/vcs.xml")})
 public class GitVcsApplicationSettings implements PersistentStateComponent<GitVcsApplicationSettings.State> {
 
   storages = {@Storage(file = StoragePathMacros.APP_CONFIG + "/vcs.xml")})
 public class GitVcsApplicationSettings implements PersistentStateComponent<GitVcsApplicationSettings.State> {
 
-  @NonNls static final String[] DEFAULT_WINDOWS_PATHS = {"C:\\cygwin\\bin", "C:\\Program Files\\Git\\bin", "C:\\Program Files (x86)\\Git\\bin"};
-  @NonNls static final String[] DEFAULT_UNIX_PATHS = {"/usr/local/bin", "/usr/bin", "/opt/local/bin", "/opt/bin", "/usr/local/git/bin"};
-  @NonNls static final String DEFAULT_WINDOWS_GIT = "git.exe";
-  @NonNls static final String DEFAULT_UNIX_GIT = "git";
+  @NonNls private static final String[] DEFAULT_WINDOWS_PATHS = { "C:\\Program Files\\Git\\bin",
+                                                                  "C:\\Program Files (x86)\\Git\\bin",
+                                                                  "C:\\cygwin\\bin" };
+  @NonNls private static final String[] DEFAULT_UNIX_PATHS = { "/usr/local/bin",
+                                                               "/usr/bin",
+                                                               "/opt/local/bin",
+                                                               "/opt/bin",
+                                                               "/usr/local/git/bin" };
+  @NonNls private static final String[] DEFAULT_WINDOWS_GITS = { "git.cmd", "git.exe" };
+  @NonNls private static final String DEFAULT_UNIX_GIT = "git";
   
   private State myState = new State();
 
   
   private State myState = new State();
 
@@ -71,24 +77,27 @@ public class GitVcsApplicationSettings implements PersistentStateComponent<GitVc
   public String defaultGit() {
     if (myState.myPathToGit == null) {
       String[] paths;
   public String defaultGit() {
     if (myState.myPathToGit == null) {
       String[] paths;
-      String program;
+      String[] programVariants;
       if (SystemInfo.isWindows) {
       if (SystemInfo.isWindows) {
-        program = DEFAULT_WINDOWS_GIT;
+        programVariants = DEFAULT_WINDOWS_GITS;
         paths = DEFAULT_WINDOWS_PATHS;
       }
       else {
         paths = DEFAULT_WINDOWS_PATHS;
       }
       else {
-        program = DEFAULT_UNIX_GIT;
+        programVariants = new String[] { DEFAULT_UNIX_GIT };
         paths = DEFAULT_UNIX_PATHS;
       }
         paths = DEFAULT_UNIX_PATHS;
       }
+
       for (String p : paths) {
       for (String p : paths) {
-        File f = new File(p, program);
-        if (f.exists()) {
-          myState.myPathToGit = f.getAbsolutePath();
-          break;
+        for (String program : programVariants) {
+          File f = new File(p, program);
+          if (f.exists()) {
+            myState.myPathToGit = f.getAbsolutePath();
+            break;
+          }
         }
       }
         }
       }
-      if (myState.myPathToGit == null) { // otherwise, hope it's in $PATH
-        myState.myPathToGit = program;
+      if (myState.myPathToGit == null) { // otherwise, take the first variant and hope it's in $PATH
+        myState.myPathToGit = programVariants[0];
       }
     }
     return myState.myPathToGit;
       }
     }
     return myState.myPathToGit;