From 13a499f2fa9d7c34e71aaa9e8618915e84dc365d Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 25 Apr 2024 09:10:13 +0200 Subject: [PATCH] =?UTF-8?q?Consider=20sole=20related=20ticket=20with=20GH-?= =?UTF-8?q?=E2=80=A6=20syntax=20a=20ticket=20reference.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #80 --- .../data/release/git/ParsedCommitMessage.java | 26 ++++++++++++------- .../git/ParsedCommitMessageUnitTests.java | 4 ++- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/springframework/data/release/git/ParsedCommitMessage.java b/src/main/java/org/springframework/data/release/git/ParsedCommitMessage.java index b5a494e..45376f3 100644 --- a/src/main/java/org/springframework/data/release/git/ParsedCommitMessage.java +++ b/src/main/java/org/springframework/data/release/git/ParsedCommitMessage.java @@ -44,7 +44,7 @@ import org.springframework.lang.Nullable; class ParsedCommitMessage { private static final Pattern JIRA_TICKET = Pattern.compile("(?>\\[)?([A-Z]+[ ]?-[ ]?\\d+)(?>\\])?"); - private static final Pattern GITHUB_TICKET = Pattern.compile("((?>#|gh-)\\d+)"); + private static final Pattern GITHUB_TICKET = Pattern.compile("((?>#|gh-)\\d+)", Pattern.CASE_INSENSITIVE); private static final Pattern GITHUB_CLOSE_SYNTAX = Pattern.compile( "(?>closes|closed|close|fixes|fixed|fix|resolves|resolved|resolve)[\\s:]*((?>#|gh-)\\d+)", @@ -53,16 +53,18 @@ class ParsedCommitMessage { private static final Pattern GITHUB_SEE_SYNTAX = Pattern.compile("(?>see|related to)[\\s:]*((?>#|gh-)\\d+)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); - private static final Pattern GITHUB_PREFIX_SYNTAX = Pattern.compile("^(#\\d+)"); + private static final Pattern GITHUB_PREFIX_SYNTAX = Pattern.compile("^((?>#|gh-)\\d+)"); private static final Pattern A_TICKET = Pattern - .compile(String.format("(%s|%s)", JIRA_TICKET.pattern(), GITHUB_TICKET.pattern())); + .compile(String.format("(%s|%s)", JIRA_TICKET.pattern(), GITHUB_TICKET.pattern()), Pattern.CASE_INSENSITIVE); private static final Pattern ORIGINAL_PULL_REQUEST = Pattern .compile("Original (?>pull request|PR|pullrequest)[:]*(?>\\s+)?" + A_TICKET.pattern(), Pattern.CASE_INSENSITIVE); private static final Pattern RELATED_TICKET = Pattern.compile( - "Related (?>tickets|ticket)[:]*(?>\\s+)?((" + A_TICKET.pattern() + "(?>[\\s,]*))+)", Pattern.CASE_INSENSITIVE); + "(?>(?>Related (?>tickets|ticket))|(?>Ticket)|(?>Related))[:]*(?>\\s+)?((" + A_TICKET.pattern() + + "(?>[\\s,]*))+)", + Pattern.CASE_INSENSITIVE); private final String summary; private final @Nullable String body; @@ -119,6 +121,10 @@ class ParsedCommitMessage { } } + if (ticketReference == null && !relatedTickets.isEmpty()) { + ticketReference = relatedTickets.get(0); + } + this.ticketReference = ticketReference; this.pullRequestReference = pullRequestReference; this.relatedTickets = relatedTickets; @@ -210,10 +216,10 @@ class ParsedCommitMessage { if (relatedTicketsMatcher.find()) { - String ticketIds[] = relatedTicketsMatcher.group(1).split(","); + String[] ticketIds = relatedTicketsMatcher.group(1).split(","); for (String ticketId : ticketIds) { - extractTicket(ticketId, TicketReference.Reference.Related).ifPresent(relatedTickets::add); + extractTicket(ticketId.trim(), TicketReference.Reference.Related).ifPresent(relatedTickets::add); } } @@ -231,12 +237,12 @@ class ParsedCommitMessage { protected static Optional extractTicket(String ticketId, TicketReference.Reference reference) { - if (JIRA_TICKET.matcher(ticketId.trim()).matches()) { - return Optional.of(new TicketReference(ticketId.trim(), null, TicketReference.Style.Jira, reference)); + if (GITHUB_TICKET.matcher(ticketId.trim()).matches()) { + return Optional.of(new TicketReference(ticketId, null, TicketReference.Style.GitHub, reference)); } - if (GITHUB_TICKET.matcher(ticketId.trim()).matches()) { - return Optional.of(new TicketReference(ticketId.trim(), null, TicketReference.Style.GitHub, reference)); + if (JIRA_TICKET.matcher(ticketId.trim()).matches()) { + return Optional.of(new TicketReference(ticketId, null, TicketReference.Style.Jira, reference)); } return Optional.empty(); diff --git a/src/test/java/org/springframework/data/release/git/ParsedCommitMessageUnitTests.java b/src/test/java/org/springframework/data/release/git/ParsedCommitMessageUnitTests.java index 753381c..5cf7920 100644 --- a/src/test/java/org/springframework/data/release/git/ParsedCommitMessageUnitTests.java +++ b/src/test/java/org/springframework/data/release/git/ParsedCommitMessageUnitTests.java @@ -68,7 +68,9 @@ class ParsedCommitMessageUnitTests { } @ParameterizedTest - @ValueSource(strings = { "Incorporate review feedback\n\nSee gh-574." }) + @ValueSource(strings = { "Incorporate review feedback\n\nSee gh-574.", + "Incorporate review feedback\n\nRelated ticket: GH-574.", "Incorporate review feedback\n\nTicket: GH-574.", + "Incorporate review feedback\n\nRelated GH-574." }) void shouldParseCommitWithSeeTicket(String commitMessage) { ParsedCommitMessage commit = ParsedCommitMessage.parse(commitMessage);