Skip to content

Commit 42bfbed

Browse files
committedMar 18, 2024
2197: Make the /backport command support a "repo:branch" argument
Reviewed-by: erikj
1 parent 8abaa41 commit 42bfbed

File tree

3 files changed

+63
-7
lines changed

3 files changed

+63
-7
lines changed
 

‎bots/pr/src/main/java/org/openjdk/skara/bots/pr/BackportCommand.java

+28-2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.io.IOException;
3535
import java.io.UncheckedIOException;
3636
import java.util.ArrayList;
37+
import java.util.Arrays;
3738
import java.util.List;
3839
import java.util.stream.Collectors;
3940
import java.time.format.DateTimeFormatter;
@@ -42,11 +43,13 @@
4243

4344
public class BackportCommand implements CommandHandler {
4445
private void showHelp(PrintWriter reply) {
45-
reply.println("Usage: `/backport <repository> [<branch>]`");
46+
reply.println("Usage: `/backport <repository> [<branch>]` " +
47+
"or `/backport [<repository>]:<branch>`");
4648
}
4749

4850
private void showHelpInPR(PrintWriter reply) {
49-
reply.println("Usage: `/backport [disable] <repository> [<branch>]`");
51+
reply.println("Usage: `/backport [disable] <repository> [<branch>]` " +
52+
"or `/backport [disable] [<repository>]:<branch>`");
5053
}
5154

5255
@Override
@@ -91,6 +94,21 @@ public void handle(PullRequestBot bot, PullRequest pr, CensusInstance censusInst
9194
}
9295

9396
var parts = args.split(" ");
97+
98+
// Preprocess args to support "repo:branch" argument
99+
if (parts[0].equals("disable")) {
100+
if (parts.length == 2 && parts[1].contains(":")) {
101+
List<String> tempList = new ArrayList<>();
102+
tempList.add("disable");
103+
tempList.addAll(Arrays.asList(parts[1].split(":")));
104+
parts = tempList.toArray(new String[0]);
105+
}
106+
} else {
107+
if (parts.length == 1 && parts[0].contains(":")) {
108+
parts = parts[0].split(":");
109+
}
110+
}
111+
94112
boolean argIsValid = parts[0].equals("disable") ? parts.length == 2 || parts.length == 3 : parts.length <= 2;
95113
if (!argIsValid) {
96114
showHelpInPR(reply);
@@ -158,6 +176,9 @@ private String generateBackportLabel(String targetRepo, String targetBranchName)
158176

159177
private HostedRepository getTargetRepo(PullRequestBot bot, String repoName, PrintWriter reply) {
160178
var forge = bot.repo().forge();
179+
if (repoName.isEmpty()) {
180+
repoName = bot.repo().name();
181+
}
161182
var repoNameArg = repoName.replace("http://", "")
162183
.replace("https://", "")
163184
.replace(forge.hostname() + "/", "");
@@ -212,6 +233,11 @@ public void handle(PullRequestBot bot, HostedCommit commit, LimitedCensusInstanc
212233
return;
213234
}
214235

236+
// Preprocess args to support "repo:branch" argument
237+
if (parts.length == 1 && parts[0].contains(":")) {
238+
parts = parts[0].split(":");
239+
}
240+
215241
// Get target repo
216242
var targetRepo = getTargetRepo(bot, parts[0], reply);
217243
if (targetRepo == null) {

‎bots/pr/src/test/java/org/openjdk/skara/bots/pr/BackportCommitCommandTests.java

+19-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -77,6 +77,24 @@ void simple(TestInfo testInfo) throws IOException {
7777
assertTrue(botReply.body().contains("with this backport"));
7878
assertTrue(botReply.body().contains("@" + botReply.author().username()));
7979
assertEquals(botReply.body().indexOf("@" + botReply.author().username()), botReply.body().lastIndexOf("@" + botReply.author().username()));
80+
81+
// Add a backport command
82+
author.addCommitComment(editHash, "/backport " + author.name() + ":" + author.defaultBranchName());
83+
TestBotRunner.runPeriodicItems(bot);
84+
recentCommitComments = author.recentCommitComments();
85+
assertEquals(4, recentCommitComments.size());
86+
botReply = recentCommitComments.get(0);
87+
assertTrue(botReply.body().contains("To create a pull request with this backport targeting " +
88+
"[" + author.name() + ":" + author.defaultBranchName() + "]"));
89+
90+
// Add a backport command
91+
author.addCommitComment(editHash, "/backport :" + author.defaultBranchName());
92+
TestBotRunner.runPeriodicItems(bot);
93+
recentCommitComments = author.recentCommitComments();
94+
assertEquals(6, recentCommitComments.size());
95+
botReply = recentCommitComments.get(0);
96+
assertTrue(botReply.body().contains("To create a pull request with this backport targeting " +
97+
"[" + author.name() + ":" + author.defaultBranchName() + "]"));
8098
}
8199
}
82100

‎bots/pr/src/test/java/org/openjdk/skara/bots/pr/BackportPRCommandTests.java

+16-4
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void simple(TestInfo testInfo) throws IOException {
5454
.repo(bot)
5555
.censusRepo(censusBuilder.build())
5656
.seedStorage(seedFolder)
57-
.forks(Map.of("targetRepo", targetRepo, "targetRepo2", targetRepo2))
57+
.forks(Map.of("targetRepo", targetRepo, "targetRepo2", targetRepo2, "test", author))
5858
.build();
5959

6060
// Populate the projects repository
@@ -89,13 +89,25 @@ void simple(TestInfo testInfo) throws IOException {
8989
assertLastCommentContains(pr, "Backport for repo `targetRepo2` on branch `dev` was successfully enabled");
9090
assertTrue(pr.store().labelNames().contains("backport=targetRepo2:dev"));
9191

92-
// disable backport for targetRepo on master
92+
// Enable backport for test on master
93+
pr.addComment("/backport :master");
94+
TestBotRunner.runPeriodicItems(prBot);
95+
assertLastCommentContains(pr, "Backport for repo `test` on branch `master` was successfully enabled");
96+
assertTrue(pr.store().labelNames().contains("backport=test:master"));
97+
98+
// Disable backport for test on master
99+
pr.addComment("/backport disable test:master");
100+
TestBotRunner.runPeriodicItems(prBot);
101+
assertLastCommentContains(pr, "Backport for repo `test` on branch `master` was successfully disabled");
102+
assertFalse(pr.store().labelNames().contains("backport=test:master"));
103+
104+
// Disable backport for targetRepo on master
93105
reviewerPr.addComment("/backport disable targetRepo");
94106
TestBotRunner.runPeriodicItems(prBot);
95107
assertLastCommentContains(pr, "Backport for repo `targetRepo` on branch `master` was successfully disabled.");
96108
assertFalse(pr.store().labelNames().contains("backport=targetRepo:master"));
97109

98-
// disable backport for targetRepo again
110+
// Disable backport for targetRepo again
99111
reviewerPr.addComment("/backport disable targetRepo");
100112
TestBotRunner.runPeriodicItems(prBot);
101113
assertLastCommentContains(pr, "Backport for repo `targetRepo` on branch `master` was already disabled.");
@@ -165,7 +177,7 @@ void testBackportCommandWhenPrIsClosed(TestInfo testInfo) throws IOException {
165177

166178
TestBotRunner.runPeriodicItems(prBot);
167179

168-
//close the pr
180+
// Close the pr
169181
pr.store().setState(Issue.State.CLOSED);
170182
pr.addComment("/backport targetRepo");
171183
TestBotRunner.runPeriodicItems(prBot);

0 commit comments

Comments
 (0)
Failed to load comments.