From d1afa62d28d8e9becc2941c0d57d7a5d50a9afb7 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Sat, 10 Mar 2012 15:56:42 +0400 Subject: [PATCH] Git fetch: update remote branch ref 'git fetch origin master' only updates the FETCH_HEAD without updating refs/remotes/origin/master. We don't read FETCH_HEAD for merging, preferring to call 'git log master..origin/master' to decide if we need to merge => updating the remote ref is necessary. Supply the full refspec to 'git fetch' to update the remote ref. --- .../src/git4idea/update/GitFetcher.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/plugins/git4idea/src/git4idea/update/GitFetcher.java b/plugins/git4idea/src/git4idea/update/GitFetcher.java index 2eb080ef59de..1891a93155d4 100644 --- a/plugins/git4idea/src/git4idea/update/GitFetcher.java +++ b/plugins/git4idea/src/git4idea/update/GitFetcher.java @@ -46,6 +46,9 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Matcher; import java.util.regex.Pattern; +import static git4idea.GitBranch.REFS_HEADS_PREFIX; +import static git4idea.GitBranch.REFS_REMOTES_PREFIX; + /** * @author Kirill Likhodedov */ @@ -158,10 +161,14 @@ public class GitFetcher { if (GitVersionSpecialty.SUPPORTS_FETCH_PRUNE.existsIn(myVcs.getVersion())) { h.addParameters("--prune"); } - h.addParameters(remote.getName()); + + String remoteName = remote.getName(); + h.addParameters(remoteName); if (branch != null) { - h.addParameters(branch); + branch = getRidOfPrefixIfExists(branch); + h.addParameters(REFS_HEADS_PREFIX + branch + ":" + REFS_REMOTES_PREFIX + remoteName + "/" + branch); } + final GitTask fetchTask = new GitTask(myProject, h, "Fetching..."); fetchTask.setProgressIndicator(myProgressIndicator); fetchTask.setProgressAnalyzer(new GitStandardProgressAnalyzer()); @@ -198,6 +205,13 @@ public class GitFetcher { return result.get(); } + private static String getRidOfPrefixIfExists(String branch) { + if (branch.startsWith(REFS_HEADS_PREFIX)) { + return branch.substring(REFS_HEADS_PREFIX.length()); + } + return branch; + } + @NotNull public Collection getErrors() { return myErrors;