diff --git a/servers/jax-rs-tests/src/main/java/org/projectnessie/jaxrs/AbstractTestRest.java b/servers/jax-rs-tests/src/main/java/org/projectnessie/jaxrs/AbstractTestRest.java index 66bb9c1b0e3..b9c0e3b19eb 100644 --- a/servers/jax-rs-tests/src/main/java/org/projectnessie/jaxrs/AbstractTestRest.java +++ b/servers/jax-rs-tests/src/main/java/org/projectnessie/jaxrs/AbstractTestRest.java @@ -1665,6 +1665,33 @@ public void testUnknownHashesOnValidNamedRefs() "Could not find commit '%s' in reference '%s'.", invalidHash, b.getName())); } + /** Assigning a branch/tag to a fresh main without any commits didn't work in 0.9.2 */ + @Test + public void testAssignRefToFreshMain() throws NessieNotFoundException, NessieConflictException { + Reference main = api.getReference().refName("main").get(); + // make sure main doesn't have any commits + LogResponse log = api.getCommitLog().refName(main.getName()).get(); + assertThat(log.getOperations()).isEmpty(); + + String testBranch = "testBranch"; + api.createReference() + .sourceRefName(main.getName()) + .reference(Branch.of(testBranch, null)) + .create(); + Reference testBranchRef = api.getReference().refName(testBranch).get(); + api.assignBranch().hash(testBranchRef.getHash()).branchName(testBranch).assignTo(main).assign(); + assertThat(testBranchRef.getHash()).isEqualTo(main.getHash()); + + String testTag = "testTag"; + api.createReference() + .sourceRefName(main.getName()) + .reference(Branch.of(testTag, null)) + .create(); + Reference testTagRef = api.getReference().refName(testTag).get(); + api.assignTag().hash(testTagRef.getHash()).tagName(testTag).assignTo(main).assign(); + assertThat(testTagRef.getHash()).isEqualTo(main.getHash()); + } + void unwrap(Executable exec) throws Throwable { try { exec.execute(); diff --git a/versioned/persist/tests/src/main/java/org/projectnessie/versioned/persist/tests/AbstractVersionStoreTest.java b/versioned/persist/tests/src/main/java/org/projectnessie/versioned/persist/tests/AbstractVersionStoreTest.java index 083b9062592..f4c5aa24996 100644 --- a/versioned/persist/tests/src/main/java/org/projectnessie/versioned/persist/tests/AbstractVersionStoreTest.java +++ b/versioned/persist/tests/src/main/java/org/projectnessie/versioned/persist/tests/AbstractVersionStoreTest.java @@ -43,6 +43,8 @@ import org.projectnessie.versioned.Key; import org.projectnessie.versioned.Operation; import org.projectnessie.versioned.Put; +import org.projectnessie.versioned.Ref; +import org.projectnessie.versioned.ReferenceAlreadyExistsException; import org.projectnessie.versioned.ReferenceConflictException; import org.projectnessie.versioned.ReferenceNotFoundException; import org.projectnessie.versioned.StringStoreWorker; @@ -577,4 +579,27 @@ void referenceNotFound(ReferenceNotFoundFunction f) throws Exception { .isInstanceOf(ReferenceNotFoundException.class) .hasMessage(f.msg); } + + /** Assigning a branch/tag to a fresh main without any commits didn't work in 0.9.2 */ + @Test + public void assignReferenceToFreshMain() + throws ReferenceNotFoundException, ReferenceAlreadyExistsException, + ReferenceConflictException { + BranchName main = BranchName.of("main"); + WithHash mainRef = store.toRef(main.getName()); + assertThat(store().getCommits(main)).isEmpty(); + assertThat(store.getNamedRefs()) + .extracting(r -> r.getValue().getName()) + .containsExactly(main.getName()); + + BranchName testBranch = BranchName.of("testBranch"); + Hash testBranchHash = store.create(testBranch, Optional.empty()); + store.assign(testBranch, Optional.of(testBranchHash), mainRef.getHash()); + assertThat(store.toRef(testBranch.getName()).getHash()).isEqualTo(mainRef.getHash()); + + TagName testTag = TagName.of("testTag"); + Hash testTagHash = store.create(testTag, Optional.empty()); + store.assign(testTag, Optional.of(testTagHash), mainRef.getHash()); + assertThat(store.toRef(testTag.getName()).getHash()).isEqualTo(mainRef.getHash()); + } }