1414import java .util .Set ;
1515
1616public record BackportHandler (String version ) implements LabelHandler {
17- private static final Set <Integer > RUNNING_PRS = Collections .synchronizedSet (new HashSet <>());
17+ private record PRRun (int number , String backportBranch ) {}
18+ private static final Set <PRRun > RUNNING_PRS = Collections .synchronizedSet (new HashSet <>());
1819
1920 @ Override
2021 public void onLabelAdded (GitHub gitHub , GHUser actor , GHIssue issue , GHLabel label ) throws Exception {
@@ -23,7 +24,7 @@ public void onLabelAdded(GitHub gitHub, GHUser actor, GHIssue issue, GHLabel lab
2324 if (version ().equals (pr .getBase ().getRef ())) {
2425 pr .removeLabel (label .getName ());
2526 } else {
26- RUNNING_PRS .add (pr .getNumber ());
27+ RUNNING_PRS .add (new PRRun ( pr .getNumber (), version () ));
2728 run (gitHub , pr , actor , label );
2829 }
2930 } else {
@@ -34,7 +35,7 @@ public void onLabelAdded(GitHub gitHub, GHUser actor, GHIssue issue, GHLabel lab
3435 @ Override
3536 public void onSynchronized (GitHub gitHub , GHUser actor , GHPullRequest pullRequest , GHLabel label ) throws Exception {
3637 Main .scheduleUntil (() -> {
37- if (RUNNING_PRS .add (pullRequest .getNumber ())) {
38+ if (RUNNING_PRS .add (new PRRun ( pullRequest .getNumber (), version () ))) {
3839 run (gitHub , pullRequest , actor , label );
3940 return true ;
4041 }
@@ -48,7 +49,7 @@ private void run(GitHub gitHub, GHPullRequest pr, GHUser source, GHLabel label)
4849 gitHub , pr ,
4950 Configuration .get (), version ,
5051 (runner , err ) -> {
51- RUNNING_PRS .remove (pr .getNumber ());
52+ RUNNING_PRS .remove (new PRRun ( pr .getNumber (), version () ));
5253
5354 try {
5455 var message = new StringBuilder ();
@@ -65,11 +66,16 @@ private void run(GitHub gitHub, GHPullRequest pr, GHUser source, GHLabel label)
6566 }
6667 },
6768 createdPr -> {
68- RUNNING_PRS .remove (pr .getNumber ());
69+ RUNNING_PRS .remove (new PRRun ( pr .getNumber (), version () ));
6970
7071 if (createdPr != null ) {
7172 pr .comment ("Created backport PR: #" + createdPr .getNumber ());
7273 }
74+
75+ // If the PR is merged then it's not going to have further updates so we can remove the label
76+ if (pr .isMerged ()) {
77+ pr .removeLabel (label .getName ());
78+ }
7379 },
7480 Set .of (label .getName ())
7581 );
0 commit comments