in src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java [478:525]
private void createSingleDownstreamMerge(SingleDownstreamMergeInput sdsMergeInput)
throws RestApiException, ConfigInvalidException, InvalidQueryParameterException,
StorageException {
try (ManualRequestContext ctx = oneOffRequestContext.openAs(config.getContextUserId())) {
String currentTopic = getOrSetTopic(sdsMergeInput.changeNumber, sdsMergeInput.topic);
if (isAlreadyMerged(sdsMergeInput, currentTopic)) {
log.info(
"Commit {} already merged into {}, not automerging again.",
sdsMergeInput.currentRevision,
sdsMergeInput.downstreamBranch);
return;
}
MergeInput mergeInput = new MergeInput();
mergeInput.source = sdsMergeInput.currentRevision;
mergeInput.strategy = "recursive";
log.debug("Creating downstream merge for {}", sdsMergeInput.currentRevision);
ChangeInput downstreamChangeInput = new ChangeInput();
downstreamChangeInput.project = sdsMergeInput.project;
downstreamChangeInput.branch = sdsMergeInput.downstreamBranch;
downstreamChangeInput.subject =
getSubjectForDownstreamMerge(sdsMergeInput.subject, sdsMergeInput.currentRevision, false);
downstreamChangeInput.topic = currentTopic;
downstreamChangeInput.merge = mergeInput;
downstreamChangeInput.notify = NotifyHandling.NONE;
downstreamChangeInput.baseChange =
getBaseChangeId(
getChangeParents(sdsMergeInput.changeNumber, sdsMergeInput.currentRevision),
sdsMergeInput.downstreamBranch);
if (!sdsMergeInput.doMerge) {
mergeInput.strategy = "ours";
downstreamChangeInput.subject =
getSubjectForDownstreamMerge(
sdsMergeInput.subject, sdsMergeInput.currentRevision, true);
log.debug(
"Skipping merge for {} to {}",
sdsMergeInput.currentRevision,
sdsMergeInput.downstreamBranch);
}
ChangeApi downstreamChange = gApi.changes().create(downstreamChangeInput);
tagChange(downstreamChange.get(), "Automerger change created!");
}
}