diff --git a/src/main/java/org/kohsuke/github/GHBranch.java b/src/main/java/org/kohsuke/github/GHBranch.java index f803c67e70..7a41b82f37 100644 --- a/src/main/java/org/kohsuke/github/GHBranch.java +++ b/src/main/java/org/kohsuke/github/GHBranch.java @@ -192,6 +192,23 @@ public GHCommit merge(String head, String commitMessage) throws IOException { return result; } + /** + * Rename this branch. + * + * @param name + * the name + * @throws IOException + * the io exception + * @see https://docs.github.com/en/rest/branches/branches?apiVersion=2022-11-28#rename-a-branch + */ + public GHBranch rename(String name) throws IOException { + return root().createRequest() + .method("POST") + .with("new_name", name) + .withUrlPath(getApiRoute() + "/rename") + .fetch(GHBranch.class); + } + /** * Gets the api route. * diff --git a/src/test/java/org/kohsuke/github/GHBranchTest.java b/src/test/java/org/kohsuke/github/GHBranchTest.java index 117da049f7..8e6e17fc7d 100644 --- a/src/test/java/org/kohsuke/github/GHBranchTest.java +++ b/src/test/java/org/kohsuke/github/GHBranchTest.java @@ -18,6 +18,7 @@ public GHBranchTest() { private static final String BRANCH_1 = "testBranch1"; private static final String BRANCH_2 = "testBranch2"; + private static final String BRANCH_3 = "testBranch3"; private GHRepository repository; @@ -74,4 +75,26 @@ public void testMergeBranch() throws Exception { // Should be null since all changes already merged assertThat(mergeCommit, nullValue()); } + + /** + * Test merge rename. + * + * @throws Exception + * the exception + */ + @Test + public void testBranchRename() throws Exception { + repository = getTempRepository(); + String mainHead = repository.getRef("heads/main").getObject().getSha(); + + String branchName = "refs/heads/" + BRANCH_3; + repository.createRef(branchName, mainHead); + repository.createContent().content(branchName).message(branchName).path(branchName).branch(branchName).commit(); + + GHBranch otherBranch = repository.getBranch(BRANCH_3); + otherBranch.rename(BRANCH_3 + "_renamed"); + GHBranch otherBranchRenamed = repository.getBranch(BRANCH_3 + "_renamed"); + assertThat(otherBranchRenamed, notNullValue()); + assertThat(otherBranchRenamed.getName(), equalTo(BRANCH_3 + "_renamed")); + } }