GitBranch#getShortName to get "local" name of a remote branch
authorKirill Likhodedov <Kirill.Likhodedov@jetbrains.com>
Wed, 1 Feb 2012 13:14:18 +0000 (17:14 +0400)
committerKirill Likhodedov <Kirill.Likhodedov@jetbrains.com>
Wed, 1 Feb 2012 14:01:21 +0000 (18:01 +0400)
plugins/git4idea/src/git4idea/GitBranch.java
plugins/git4idea/src/git4idea/push/GitPushDialog.java

index f878b16ea1eef66a777f2306789ed17a82a10e5c..1714fe74e3040322d3c9d3bbd3cff4f2d150f6d2 100644 (file)
@@ -79,6 +79,26 @@ public class GitBranch extends GitReference {
   }
 
   /**
+   * <p>
+   *   Returns the "local" name of a remote branch.
+   *   For example, for "origin/master" returns "master".
+   * </p>
+   * <p>
+   *   Note that slashes are not permitted in remote names, so if we know that a branch is a remote branch,
+   *   we know that local branch name is tha part after the slash.
+   * </p>
+   * @return "local" name of a remote branch, or just {@link #getName()} for local branches.
+   */
+  @NotNull
+  public String getShortName() {
+    String name = getName();
+    if (myRemote) {
+      return name.substring(name.indexOf('/') + 1);
+    }
+    return name;
+  }
+
+  /**
    * Get tracked remote for the branch
    *
    * @param project the context project
index 781dbae73e4e1f310f0a6e38836a8f6646cde72f..dc42b4c33b94f2a5dc86b8abd7ab1848cb2a4e52 100644 (file)
@@ -165,30 +165,13 @@ public class GitPushDialog extends DialogWrapper {
           LOG.info("Couldn't retrieve tracked branch for current branch " + currentBranch, e);
           remoteName = DEFAULT_REMOTE;
         }
-        String targetBranch = getNameWithoutRemote(myGitCommitsToPush.get(repository).get(currentBranch).getDestBranch(), remoteName);
+        String targetBranch = myGitCommitsToPush.get(repository).get(currentBranch).getDestBranch().getShortName();
         return Pair.create(remoteName, targetBranch);
       }
     }
     return Pair.create(DEFAULT_REMOTE, "");
   }
 
-  @NotNull
-  private static String getNameWithoutRemote(@NotNull GitBranch remoteBranch, @NotNull String remoteName) {
-    remoteName += "/";
-    String branchName = remoteBranch.getName();
-    if (branchName.startsWith(remoteName)) {
-      return branchName.substring(remoteName.length());
-    }
-    else {
-      // we are taking the current branch of the first repository
-      // it is possible (though unlikely), that this branch has other remote than the common remote selected in the refspec panel
-      // then we return the full branch name.
-      // the push won't work absolutely correct, if the remote doesn't have this branch, but it is not our problem in the case of 
-      // several repositories with different remotes sets and different branches.
-      return remoteBranch.getFullName();
-    }
-  }
-
   @Nullable
   private String collectInfoToPush() {
     try {