in src/main/java/com/googlesource/gerrit/plugins/its/base/util/IssueExtractor.java [147:211]
private void addIssueIdsFromCommitMessage(Map<String, Set<String>> ret, String commitMessage) {
addIssuesOccurrence(commitMessage, "somewhere", ret);
String[] lines = commitMessage.split("\n");
if (lines.length > 0) {
// Parsing for "subject"
addIssuesOccurrence(lines[0], "subject", ret);
// Determining footer line numbers
int currentLine = lines.length - 1;
while (currentLine >= 0 && lines[currentLine].isEmpty()) {
currentLine--;
}
int footerEnd = currentLine + 1;
while (currentLine >= 0 && !lines[currentLine].isEmpty()) {
currentLine--;
}
int footerStart = currentLine + 1;
if (footerStart == 0) {
// The first block of non-blank lines is not considered a footer, so
// we adjust that.
footerStart = -1;
}
// Parsing for "body", and "footer"
String body = null;
String footer = null;
if (footerStart == -1) {
// No footer could be found. So all lines after the first one (that's
// the subject) is the body.
if (lines.length > 0) {
body = String.join("\n", copyOfRange(lines, 1, lines.length));
}
} else {
body = String.join("\n", copyOfRange(lines, 1, footerStart - 1));
StringBuilder footerBuilder = new StringBuilder();
for (int lineIdx = footerStart; lineIdx < footerEnd; lineIdx++) {
String line = lines[lineIdx];
// Adding occurrences for footer keys
int colonIdx = line.indexOf(':');
if (colonIdx > 0) {
// tag of length at least 1
String tag = line.substring(0, colonIdx);
addIssuesOccurrence(line, "footer-" + tag, ret);
}
// Putting back together the footer to a single String
if (lineIdx > footerStart) {
footerBuilder.append('\n');
}
footerBuilder.append(line);
}
footer = String.join("\n", copyOfRange(lines, footerStart, footerEnd));
}
if (body != null) {
addIssuesOccurrence(body, "body", ret);
}
if (footer != null) {
addIssuesOccurrence(footer, "footer", ret);
}
}
}