in src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java [107:177]
public Integer call() {
try {
CommandLine commandLine = spec.commandLine();
if (commandLine.isUsageHelpRequested()) {
commandLine.usage(commandLine.getOut());
} else {
StagingRepository repo = repositoryService.find(repositoryId);
Set<Release> releases = repositoryService.getReleases(repo);
List<Version> versions = releases.stream()
.map(r -> versionClient.find(r))
.collect(Collectors.toList());
String releaseName = releases.stream()
.map(Release::getFullName)
.collect(Collectors.joining(", "));
Set<Issue> fixedIssues = new HashSet<>();
for (Release release : releases) {
fixedIssues.addAll(versionClient.findFixedIssues(release));
}
int fixedIssuesCount = fixedIssues.size();
String issueOrIssues = fixedIssuesCount > 1 ? "issues" : "issue";
String releaseOrReleases = versions.size() > 1 ?
"these releases" : "this release";
String releaseNotesLinks = versions.stream()
.map(v -> RELEASE_NOTES_LINK_TEMPLATE.replace("##VERSION_ID##", String.valueOf(v.getId())))
.collect(Collectors.joining("\n"));
Member currentMember = membersFinder.getCurrentMember();
String emailContents = EMAIL_TEMPLATE
.replace("##FROM##", new InternetAddress(currentMember.getEmail(), currentMember.getName()).toString())
.replace("##DATE##", dateProvider.getCurrentDateForEmailHeader())
.replace("##RELEASE_NAME##", releaseName)
.replace("##RELEASE_ID##", String.valueOf(repositoryId))
.replace("##RELEASE_OR_RELEASES##", releaseOrReleases)
.replace("##RELEASE_JIRA_LINKS##", releaseNotesLinks)
.replace("##FIXED_ISSUES_COUNT##", String.valueOf(fixedIssuesCount))
.replace("##ISSUE_OR_ISSUES##", issueOrIssues)
.replace("##USER_NAME##", currentMember.getName());
switch (reusableCLIOptions.executionMode) {
case DRY_RUN:
LOGGER.info("The following email would be sent from your @apache.org address (see the \"From:\" header):\n");
LOGGER.info(emailContents);
break;
case INTERACTIVE:
String question = "Should the following email be sent from your @apache.org address (see the" +
" \"From:\" header)?\n\n" + emailContents;
InputOption answer = UserInput.yesNo(question, InputOption.YES);
if (InputOption.YES.equals(answer)) {
LOGGER.info("Sending email...");
mailer.send(emailContents);
LOGGER.info("Done!");
} else if (InputOption.NO.equals(answer)) {
LOGGER.info("Aborted.");
}
break;
case AUTO:
LOGGER.info(emailContents);
LOGGER.info("Sending email...");
mailer.send(emailContents);
LOGGER.info("Done!");
break;
}
}
} catch (IOException e) {
LOGGER.warn("Failed executing command", e);
return CommandLine.ExitCode.SOFTWARE;
}
return CommandLine.ExitCode.OK;
}