RecursiveMerger merger = (RecursiveMerger) MergeStrategy.RECURSIVE.newMerger(repository, true);
boolean merged = merger.merge(branchTip, srcTip);
if (merged) {
// create a merge commit and a reference to track the merge commit
ObjectId treeId = merger.getResultTreeId();
ObjectInserter odi = repository.newObjectInserter();
try {
// Create a commit object
CommitBuilder commitBuilder = new CommitBuilder();
commitBuilder.setCommitter(committer);
commitBuilder.setAuthor(committer);
commitBuilder.setEncoding(Constants.CHARSET);
if (StringUtils.isEmpty(message)) {
message = MessageFormat.format("merge {0} into {1}", srcTip.getName(), branchTip.getName());
}
commitBuilder.setMessage(message);
commitBuilder.setParentIds(branchTip.getId(), srcTip.getId());
commitBuilder.setTreeId(treeId);
// Insert the merge commit into the repository
ObjectId mergeCommitId = odi.insert(commitBuilder);
odi.flush();
// set the merge ref to the merge commit
RevCommit mergeCommit = revWalk.parseCommit(mergeCommitId);
RefUpdate mergeRefUpdate = repository.updateRef(toBranch);
mergeRefUpdate.setNewObjectId(mergeCommitId);
mergeRefUpdate.setRefLogMessage("commit: " + mergeCommit.getShortMessage(), false);
RefUpdate.Result rc = mergeRefUpdate.update();
switch (rc) {
case FAST_FORWARD:
// successful, clean merge
break;
default:
throw new GitBlitException(MessageFormat.format("Unexpected result \"{0}\" when merging commit {1} into {2} in {3}",
rc.name(), srcTip.getName(), branchTip.getName(), repository.getDirectory()));
}
// return the merge commit id
return new MergeResult(MergeStatus.MERGED, mergeCommitId.getName());
} finally {
odi.release();
}
}
} catch (IOException e) {
LOGGER.error("Failed to merge", e);
} finally {