diff options
author | Christian Halstrick <christian.halstrick@sap.com> | 2010-08-20 17:17:01 +0200 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2010-08-26 18:52:26 -0700 |
commit | 0e7a38b60fbb88db4c61fd185ec17416540463d2 (patch) | |
tree | 6e6897aae5482aa5ebfd708607e57e71d971ea76 | |
parent | c869f187b754c6364a0ecf1f02e30e52b08ddeb1 (diff) | |
download | jgit-0e7a38b60fbb88db4c61fd185ec17416540463d2.tar.gz jgit-0e7a38b60fbb88db4c61fd185ec17416540463d2.zip |
Add getBaseCommit() to Merger
The Merger was was only exposing the merge base as an
AbstractTreeIterator. Since we need the merge base as
RevCommit to generate the merge result I expose it here.
Change-Id: Ibe846370a35ac9bdb0c97ce2e36b2287577fbcad
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/merge/Merger.java | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/merge/Merger.java b/org.eclipse.jgit/src/org/eclipse/jgit/merge/Merger.java index 68d60c0077..1bfa269f25 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/merge/Merger.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/merge/Merger.java @@ -176,27 +176,46 @@ public abstract class Merger { */ protected AbstractTreeIterator mergeBase(final int aIdx, final int bIdx) throws IOException { + RevCommit base = getBaseCommit(aIdx, bIdx); + return (base == null) ? new EmptyTreeIterator() : openTree(base.getTree()); + } + + /** + * Return the merge base of two commits. + * + * @param aIdx + * index of the first commit in {@link #sourceObjects}. + * @param bIdx + * index of the second commit in {@link #sourceObjects}. + * @return the merge base of two commits + * @throws IncorrectObjectTypeException + * one of the input objects is not a commit. + * @throws IOException + * objects are missing or multiple merge bases were found. + */ + public RevCommit getBaseCommit(final int aIdx, final int bIdx) + throws IncorrectObjectTypeException, + IOException { if (sourceCommits[aIdx] == null) throw new IncorrectObjectTypeException(sourceObjects[aIdx], Constants.TYPE_COMMIT); if (sourceCommits[bIdx] == null) throw new IncorrectObjectTypeException(sourceObjects[bIdx], Constants.TYPE_COMMIT); - walk.reset(); walk.setRevFilter(RevFilter.MERGE_BASE); walk.markStart(sourceCommits[aIdx]); walk.markStart(sourceCommits[bIdx]); final RevCommit base = walk.next(); if (base == null) - return new EmptyTreeIterator(); + return null; final RevCommit base2 = walk.next(); if (base2 != null) { throw new IOException(MessageFormat.format(JGitText.get().multipleMergeBasesFor , sourceCommits[aIdx].name(), sourceCommits[bIdx].name() , base.name(), base2.name())); } - return openTree(base.getTree()); + return base; } /** |