diff options
author | Matthias Sohn <matthias.sohn@sap.com> | 2012-08-18 00:29:45 +0200 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2012-08-18 00:29:45 +0200 |
commit | 376a741d8f2ddbd7d801067fdbf304ea3ba3a2bb (patch) | |
tree | 8ed57ec38b27ac2e4eda511516eccf26bf34b4eb /org.eclipse.jgit | |
parent | 5854ca091a22346e1c710ca9f875165afb3f2cc8 (diff) | |
download | jgit-376a741d8f2ddbd7d801067fdbf304ea3ba3a2bb.tar.gz jgit-376a741d8f2ddbd7d801067fdbf304ea3ba3a2bb.zip |
Teach BranchTrackingStatus to handle tracking of local branches
EGit wasn't able to decorate local branches tracking another local
branch with number of commits the checked out local branch differs from
the other local branch it's tracking.
Bug: 376970
Change-Id: I74e932d5eacd74dbf6b0dffcfc65ba3222a8250e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/lib/BranchConfig.java | 36 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/lib/BranchTrackingStatus.java | 9 |
2 files changed, 39 insertions, 6 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/BranchConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/BranchConfig.java index ae05fd95e0..b0883e3f43 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/BranchConfig.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/BranchConfig.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2011, Robin Stocker <robin@nibor.org> + * Copyright (C) 2012, Matthias Sohn <matthias.sohn@sap.com> * and other copyright owners as documented in the project's IP log. * * This program and the accompanying materials are made available @@ -71,8 +72,25 @@ public class BranchConfig { } /** - * @return the full remote-tracking branch name or <code>null</code> if it - * could not be determined + * @return the full tracking branch name or <code>null</code> if it could + * not be determined + */ + public String getTrackingBranch() { + String remote = getRemote(); + String mergeRef = getMergeBranch(); + if (remote == null || mergeRef == null) + return null; + + if (remote.equals(".")) + return mergeRef; + + return findRemoteTrackingBranch(remote, mergeRef); + } + + /** + * @return the full remote-tracking branch name or {@code null} if it could + * not be determined. If you also want local tracked branches use + * {@link #getTrackingBranch()} instead. */ public String getRemoteTrackingBranch() { String remote = getRemote(); @@ -80,6 +98,20 @@ public class BranchConfig { if (remote == null || mergeRef == null) return null; + return findRemoteTrackingBranch(remote, mergeRef); + } + + /** + * Finds the tracked remote tracking branch + * + * @param remote + * Remote name + * @param mergeRef + * merge Ref of the local branch tracking the remote tracking + * branch + * @return full remote tracking branch name or null + */ + private String findRemoteTrackingBranch(String remote, String mergeRef) { RemoteConfig remoteConfig; try { remoteConfig = new RemoteConfig(config, remote); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/BranchTrackingStatus.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/BranchTrackingStatus.java index 4d69e602ee..7844fd819f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/BranchTrackingStatus.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/BranchTrackingStatus.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2011, Robin Stocker <robin@nibor.org> + * Copyright (C) 2012, Matthias Sohn <matthias.sohn@sap.com> * and other copyright owners as documented in the project's IP log. * * This program and the accompanying materials are made available @@ -72,11 +73,11 @@ public class BranchTrackingStatus { BranchConfig branchConfig = new BranchConfig(repository.getConfig(), branchName); - String remoteTrackingBranch = branchConfig.getRemoteTrackingBranch(); - if (remoteTrackingBranch == null) + String trackingBranch = branchConfig.getTrackingBranch(); + if (trackingBranch == null) return null; - Ref tracking = repository.getRef(remoteTrackingBranch); + Ref tracking = repository.getRef(trackingBranch); if (tracking == null) return null; @@ -99,7 +100,7 @@ public class BranchTrackingStatus { int aheadCount = RevWalkUtils.count(walk, localCommit, mergeBase); int behindCount = RevWalkUtils.count(walk, trackingCommit, mergeBase); - return new BranchTrackingStatus(remoteTrackingBranch, aheadCount, behindCount); + return new BranchTrackingStatus(trackingBranch, aheadCount, behindCount); } private final String remoteTrackingBranch; |