in src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java [563:600]
private void automergeChanges(ChangeInfo change, RevisionInfo revisionInfo)
throws RestApiException, IOException, ConfigInvalidException, InvalidQueryParameterException,
StorageException {
String currentRevision =
gApi.changes().id(change._number).revision(revisionInfo._number).commit(false).commit;
log.debug(
"Handling patchsetevent with change id {} and revision {}", change.id, currentRevision);
Set<String> downstreamBranches = config.getDownstreamBranches(change.branch, change.project);
if (downstreamBranches.isEmpty()) {
log.debug("Downstream branches of {} on {} are empty", change.branch, change.project);
return;
}
// Map whether or not we should merge it or skip it for each downstream
Map<String, Boolean> dsBranchMap = new HashMap<>();
for (String downstreamBranch : downstreamBranches) {
boolean isSkipMerge = config.isSkipMerge(change.branch, downstreamBranch, change.subject);
dsBranchMap.put(downstreamBranch, !isSkipMerge);
}
log.debug("Automerging change {} from branch {}", change.id, change.branch);
ChangeApi currentChange = gApi.changes().id(change._number);
String previousRevision = getPreviousRevision(currentChange, revisionInfo._number);
MultipleDownstreamMergeInput mdsMergeInput = new MultipleDownstreamMergeInput();
mdsMergeInput.dsBranchMap = dsBranchMap;
mdsMergeInput.changeNumber = change._number;
mdsMergeInput.patchsetNumber = revisionInfo._number;
mdsMergeInput.project = change.project;
mdsMergeInput.topic = getOrSetTopic(change._number, change.topic);
mdsMergeInput.subject = change.subject;
mdsMergeInput.obsoleteRevision = previousRevision;
mdsMergeInput.currentRevision = currentRevision;
createMergesAndHandleConflicts(mdsMergeInput);
}