Check for trailers only after first empty line

This commit is contained in:
René Pfeuffer
2020-06-04 11:12:11 +02:00
parent f03c35b7fd
commit 587345bde8
2 changed files with 36 additions and 17 deletions

View File

@@ -56,32 +56,51 @@ public class ChangesetDescriptionTrailerProvider implements ChangesetPreProcesso
private final List<Trailer> trailers = new ArrayList<>();
private final StringBuilder newDescription = new StringBuilder();
boolean foundEmptyLine;
@Override
public void process(Changeset changeset) {
try (Scanner scanner = new Scanner(changeset.getDescription())) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
Matcher matcher = TRAILER_PATTERN.matcher(line);
if (matcher.matches()) {
String type = matcher.group(1);
String name = matcher.group(2);
String mail = matcher.group(3);
if (SUPPORTED_TRAILER_TYPES.contains(type)) {
createTrailer(type, name, mail);
} else {
appendLine(scanner, line);
}
} else {
appendLine(scanner, line);
}
handleLine(scanner, scanner.nextLine());
}
}
changeset.addTrailers(trailers);
changeset.setDescription(newDescription.toString());
}
public void handleLine(Scanner scanner, String line) {
if (line.isEmpty()) {
handleEmptyLine(scanner, line);
return;
}
if (foundEmptyLine && checkForTrailer(line)) {
return;
}
appendLine(scanner, line);
}
public boolean checkForTrailer(String line) {
Matcher matcher = TRAILER_PATTERN.matcher(line);
if (matcher.matches()) {
String type = matcher.group(1);
String name = matcher.group(2);
String mail = matcher.group(3);
if (SUPPORTED_TRAILER_TYPES.contains(type)) {
createTrailer(type, name, mail);
return true;
}
}
return false;
}
public void handleEmptyLine(Scanner scanner, String line) {
foundEmptyLine = true;
appendLine(scanner, line);
}
public void appendLine(Scanner scanner, String line) {
newDescription.append(line);
if (scanner.hasNextLine()) {

View File

@@ -89,7 +89,7 @@ class ChangesetDescriptionTrailerProviderTest {
@Test
void shouldConvertTrailerWithSigner() {
Person person = createPerson("Tricia McMillan", "trillian@hitchhiker.org");
Changeset changeset = createChangeset("zaphod beeblebrox\n\nSigned-off-by: Tricia McMillan <trillian@hitchhiker.org>");
Changeset changeset = createChangeset("zaphod beeblebrox\n\n\nSigned-off-by: Tricia McMillan <trillian@hitchhiker.org>");
changesetDescriptionTrailers.createPreProcessor(REPOSITORY).process(changeset);
Collection<Trailer> trailers = changeset.getTrailers();
@@ -98,7 +98,7 @@ class ChangesetDescriptionTrailerProviderTest {
assertThat(trailer.getTrailerType()).isEqualTo("Signed-off-by");
assertThat(trailer.getPerson()).isEqualTo(person);
assertThat(changeset.getDescription()).isEqualTo("zaphod beeblebrox\n\n");
assertThat(changeset.getDescription()).isEqualTo("zaphod beeblebrox\n\n\n");
}
@Test