Extract methods to emphasize flow

This commit is contained in:
René Pfeuffer
2018-11-08 09:53:35 +01:00
parent 0714d5f960
commit 5ca8d4d049

View File

@@ -60,6 +60,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
private final String toMerge; private final String toMerge;
private final Person author; private final Person author;
private final Git clone; private final Git clone;
private MergeWorker(Repository clone, MergeCommandRequest request) { private MergeWorker(Repository clone, MergeCommandRequest request) {
this.target = request.getTargetBranch(); this.target = request.getTargetBranch();
this.toMerge = request.getBranchToMerge(); this.toMerge = request.getBranchToMerge();
@@ -70,7 +71,13 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
private MergeCommandResult merge() throws IOException { private MergeCommandResult merge() throws IOException {
createClone(); createClone();
MergeResult result = doMergeInClone(); MergeResult result = doMergeInClone();
return analyzeResult(result); if (result.getMergeStatus().isSuccessful()) {
doCommit();
push();
return MergeCommandResult.success();
} else {
return analyseFailure(result);
}
} }
private void createClone() { private void createClone() {
@@ -94,30 +101,32 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
return result; return result;
} }
private MergeCommandResult analyzeResult(MergeResult result) { private void doCommit() {
if (result.getMergeStatus().isSuccessful()) { logger.debug("merged branch {} into {}", toMerge, target);
logger.debug("merged branch {} into {}", toMerge, target); try {
try { clone.commit()
clone.commit() .setAuthor(author.getName(), author.getMail())
.setAuthor(author.getName(), author.getMail()) .setMessage(String.format(MERGE_COMMIT_MESSAGE_TEMPLATE, toMerge, target))
.setMessage(String.format(MERGE_COMMIT_MESSAGE_TEMPLATE, toMerge, target)) .call();
.call(); } catch (GitAPIException e) {
} catch (GitAPIException e) { throw new InternalRepositoryException("could not commit merge between branch " + toMerge + " and " + target, e);
throw new InternalRepositoryException("could not commit merge between branch " + toMerge + " and " + target, e);
}
try {
clone.push().call();
} catch (GitAPIException e) {
throw new InternalRepositoryException("could not push merged branch " + toMerge + " to origin", e);
}
logger.debug("pushed merged branch {}", target);
return MergeCommandResult.success();
} else {
logger.info("could not merged branch {} into {} due to conflict in paths {}", toMerge, target, result.getConflicts().keySet());
return MergeCommandResult.failure(result.getConflicts().keySet());
} }
} }
private void push() {
try {
clone.push().call();
} catch (GitAPIException e) {
throw new InternalRepositoryException("could not push merged branch " + toMerge + " to origin", e);
}
logger.debug("pushed merged branch {}", target);
}
private MergeCommandResult analyseFailure(MergeResult result) {
logger.info("could not merged branch {} into {} due to conflict in paths {}", toMerge, target, result.getConflicts().keySet());
return MergeCommandResult.failure(result.getConflicts().keySet());
}
private ObjectId resolveRevision(String branchToMerge) throws IOException { private ObjectId resolveRevision(String branchToMerge) throws IOException {
ObjectId resolved = clone.getRepository().resolve(branchToMerge); ObjectId resolved = clone.getRepository().resolve(branchToMerge);
if (resolved == null) { if (resolved == null) {