public List<String> execute() {
existsBranch(git,
sourceBranch);
existsBranch(git,
targetBranch);
final Repository repo = git.getRepository();
final RevCommit lastSourceCommit = git.getLastCommit(sourceBranch);
final RevCommit lastTargetCommit = git.getLastCommit(targetBranch);
final RevCommit commonAncestor = getCommonAncestor(lastSourceCommit,
lastTargetCommit);
final List<RevCommit> commits = git.listCommits(commonAncestor,
lastSourceCommit);
Collections.reverse(commits);
final String[] commitsIDs = commits.stream().map(AnyObjectId::getName).toArray(String[]::new);
canMerge(repo,
commonAncestor,
lastSourceCommit,
lastTargetCommit,
sourceBranch,
targetBranch);
git.cherryPick(targetBranch,
commitsIDs);
if (logger.isDebugEnabled()) {
logger.debug("Merging commits from <{}> to <{}>",
sourceBranch,
targetBranch);
}
return Arrays.asList(commitsIDs);
}