From e4a341db43d5d8a1e6e9c828e3b3e5ddd52b9186 Mon Sep 17 00:00:00 2001 From: "florian.signoret" Date: Mon, 16 Oct 2023 16:08:14 +0200 Subject: [PATCH] Fix branch ref exist check When a tag with the same name as the branch exists, the branch creation process should work too. We should detect that the branch already exists, and allow to force create it when the force option is used. Bug: 582538 Change-Id: I3b350d03be8edcde10e97b2318343240ca896cb0 --- .../org/eclipse/jgit/api/BranchCommandTest.java | 15 +++++++++++++++ .../org/eclipse/jgit/api/CreateBranchCommand.java | 4 +--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BranchCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BranchCommandTest.java index 87be813c85..7c1cbc37d6 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BranchCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BranchCommandTest.java @@ -12,6 +12,7 @@ package org.eclipse.jgit.api; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.fail; import java.util.List; @@ -160,6 +161,20 @@ public class BranchCommandTest extends RepositoryTestCase { - allBefore); } + @Test + public void testExistingNameInBothBranchesAndTags() throws Exception { + git.branchCreate().setName("test").call(); + git.tag().setName("test").call(); + + // existing name not allowed w/o force + assertThrows("Create branch with existing ref name should fail", + RefAlreadyExistsException.class, + () -> git.branchCreate().setName("test").call()); + + // existing name allowed with force option + git.branchCreate().setName("test").setForce(true).call(); + } + @Test(expected = InvalidRefNameException.class) public void testInvalidBranchHEAD() throws Exception { git.branchCreate().setName("HEAD").call(); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CreateBranchCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CreateBranchCommand.java index e1efb86cdc..013e0ff131 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CreateBranchCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CreateBranchCommand.java @@ -88,9 +88,7 @@ public class CreateBranchCommand extends GitCommand { checkCallable(); processOptions(); try (RevWalk revWalk = new RevWalk(repo)) { - Ref refToCheck = repo.findRef(name); - boolean exists = refToCheck != null - && refToCheck.getName().startsWith(R_HEADS); + boolean exists = repo.findRef(R_HEADS + name) != null; if (!force && exists) throw new RefAlreadyExistsException(MessageFormat.format( JGitText.get().refAlreadyExists1, name)); -- 2.39.5