summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test
diff options
context:
space:
mode:
authorMatthias Sohn <matthias.sohn@sap.com>2021-10-15 22:58:21 +0200
committerMatthias Sohn <matthias.sohn@sap.com>2021-10-15 22:58:21 +0200
commit78043b07e2cecce87d9544084159878dec435a2d (patch)
tree367809e148f491db1db9e8d8ab654160d96315cc /org.eclipse.jgit.test
parent26d36848fef202a69bfb75667d2a2617572e29fd (diff)
parent91e44e08cf24e199f6575a937be8ca2536e54e19 (diff)
downloadjgit-78043b07e2cecce87d9544084159878dec435a2d.tar.gz
jgit-78043b07e2cecce87d9544084159878dec435a2d.zip
Merge branch 'stable-5.12' into stable-5.13
* stable-5.12: Fix missing peel-part in lsRefsV2 for loose annotated tags Fix RevWalk.getMergedInto() ignores annotated tags Optimize RevWalk.getMergedInto() reftable: drop code for truncated reads reftable: pass on invalid object ID in conversion Update eclipse-jarsigner-plugin to 1.3.2 Fix running benchmarks from bazel Update eclipse-jarsigner-plugin to 1.3.2 Change-Id: Ie5da8d2d07f39ab5aaeca560040637635d4eb04c
Diffstat (limited to 'org.eclipse.jgit.test')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java23
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java6
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkMergedIntoTest.java21
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkUtilsReachableTest.java17
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackLsRefsFileRepositoryTest.java123
5 files changed, 177 insertions, 13 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java
index 15c9109ca0..32342e3563 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java
@@ -25,7 +25,9 @@ import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.OutputStream;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Collection;
@@ -133,20 +135,21 @@ public class FileReftableTest extends SampleDataRepositoryTestCase {
assertTrue(db.getRefDatabase().hasFastTipsWithSha1());
}
+
@Test
- public void testConvertToRefdir() throws Exception {
+ public void testConvertBrokenObjectId() throws Exception {
db.convertToPackedRefs(false, false);
- assertTrue(db.getRefDatabase() instanceof RefDirectory);
- Ref h = db.exactRef("HEAD");
- assertTrue(h.isSymbolic());
- assertEquals("refs/heads/master", h.getTarget().getName());
+ new File(db.getDirectory(), "refs/heads").mkdirs();
- Ref b = db.exactRef("refs/heads/b");
- assertFalse(b.isSymbolic());
- assertTrue(b.isPeeled());
- assertEquals(bCommit, b.getObjectId().name());
+ String invalidId = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef";
+ File headFile = new File(db.getDirectory(), "refs/heads/broken");
+ try (OutputStream os = new FileOutputStream(headFile)) {
+ os.write(Constants.encodeASCII(invalidId + "\n"));
+ }
- assertFalse(db.getRefDatabase().hasFastTipsWithSha1());
+ Ref r = db.exactRef("refs/heads/broken");
+ assertNotNull(r);
+ db.convertToReftable(true, false);
}
@Test
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java
index 0d739b9276..ea0d92acfd 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java
@@ -941,6 +941,12 @@ public class ReftableTest {
}
assertFalse(lc.next());
}
+
+ for (Ref exp : refs) {
+ try (LogCursor lc = t.seekLog(exp.getName())) {
+ assertTrue("has " + exp.getName(), lc.next());
+ }
+ }
}
@Test
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkMergedIntoTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkMergedIntoTest.java
index 2f16aa49e8..2754bd36ae 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkMergedIntoTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkMergedIntoTest.java
@@ -99,7 +99,7 @@ public class RevWalkMergedIntoTest extends RevWalkTestCase {
createBranch(commit(commit(a)), b);
createBranch(commit(commit(i)), c);
- assertTrue( rw.isMergedIntoAny(a, getRefs()));
+ assertTrue(rw.isMergedIntoAny(a, getRefs()));
}
@Test
@@ -125,4 +125,23 @@ public class RevWalkMergedIntoTest extends RevWalkTestCase {
assertTrue(rw.isMergedIntoAll(a, getRefs()));
}
+
+ @Test
+ public void testMergeIntoAnnotatedTag() throws Exception {
+ /*
+ * a
+ * |
+ * b
+ * / \
+ * c v1 (annotated tag)
+ */
+ String c = "refs/heads/c";
+ String v1 = "refs/tags/v1";
+ final RevCommit a = commit();
+ final RevCommit b = commit(a);
+ createBranch(commit(b), c);
+ createBranch(tag("v1", b), v1);
+
+ assertTrue(rw.isMergedIntoAll(a, getRefs()));
+ }
}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkUtilsReachableTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkUtilsReachableTest.java
index 200cb6a4fe..0a045c917b 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkUtilsReachableTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkUtilsReachableTest.java
@@ -82,20 +82,33 @@ public class RevWalkUtilsReachableTest extends RevWalkTestCase {
* a b
* | |
* c d
+ * | \
+ * f e
+ * | /
+ * g
*/
RevCommit a = commit();
RevCommit b = commit();
RevCommit c = commit(a);
RevCommit d = commit(b);
+ RevCommit f = commit(d);
+ RevCommit e = commit(d);
+ RevCommit g = commit(f, e);
Ref branchA = branch("a", a);
Ref branchB = branch("b", b);
Ref branchC = branch("c", c);
Ref branchD = branch("d", d);
+ Ref branchE = branch("e", e);
+ Ref branchF = branch("f", f);
+ Ref branchG = branch("g", g);
assertContains(a, asList(branchA, branchC));
- assertContains(b, asList(branchB, branchD));
+ assertContains(b, asList(branchB, branchD, branchE, branchF, branchG));
assertContains(c, asList(branchC));
- assertContains(d, asList(branchD));
+ assertContains(d, asList(branchD, branchE, branchF, branchG));
+ assertContains(e, asList(branchE, branchG));
+ assertContains(f, asList(branchF, branchG));
+ assertContains(g, asList(branchG));
}
private Ref branch(String name, RevCommit dst) throws Exception {
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackLsRefsFileRepositoryTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackLsRefsFileRepositoryTest.java
new file mode 100644
index 0000000000..7d5fc61017
--- /dev/null
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackLsRefsFileRepositoryTest.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2021, Saša Živkov <sasa.zivkov@sap.com> and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.eclipse.jgit.transport;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Objects;
+import java.util.function.Consumer;
+
+import org.eclipse.jgit.internal.storage.file.FileRepository;
+import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase;
+import org.eclipse.jgit.junit.TestRepository;
+import org.eclipse.jgit.lib.Sets;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.revwalk.RevTag;
+import org.junit.Before;
+import org.junit.Test;
+
+// TODO: refactor UploadPackTest to run against both DfsRepository and FileRepository
+public class UploadPackLsRefsFileRepositoryTest
+ extends LocalDiskRepositoryTestCase {
+
+ private FileRepository server;
+
+ private TestRepository<FileRepository> remote;
+
+ @Before
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ server = createWorkRepository();
+ remote = new TestRepository<>(server);
+ }
+
+ @Test
+ public void testV2LsRefsPeel() throws Exception {
+ RevCommit tip = remote.commit().message("message").create();
+ remote.update("master", tip);
+ server.updateRef("HEAD").link("refs/heads/master");
+ RevTag tag = remote.tag("tag", tip);
+ remote.update("refs/tags/tag", tag);
+
+ ByteArrayInputStream recvStream = uploadPackV2("command=ls-refs\n",
+ PacketLineIn.delimiter(), "peel", PacketLineIn.end());
+ PacketLineIn pckIn = new PacketLineIn(recvStream);
+
+ assertThat(pckIn.readString(),
+ is(tip.toObjectId().getName() + " HEAD"));
+ assertThat(pckIn.readString(),
+ is(tip.toObjectId().getName() + " refs/heads/master"));
+ assertThat(pckIn.readString(), is(tag.toObjectId().getName()
+ + " refs/tags/tag peeled:" + tip.toObjectId().getName()));
+ assertTrue(PacketLineIn.isEnd(pckIn.readString()));
+ }
+
+ private ByteArrayInputStream uploadPackV2(String... inputLines)
+ throws Exception {
+ return uploadPackV2(null, inputLines);
+ }
+
+ private ByteArrayInputStream uploadPackV2(
+ Consumer<UploadPack> postConstructionSetup, String... inputLines)
+ throws Exception {
+ ByteArrayInputStream recvStream = uploadPackV2Setup(
+ postConstructionSetup, inputLines);
+ PacketLineIn pckIn = new PacketLineIn(recvStream);
+
+ // drain capabilities
+ while (!PacketLineIn.isEnd(pckIn.readString())) {
+ // do nothing
+ }
+ return recvStream;
+ }
+
+ private ByteArrayInputStream uploadPackV2Setup(
+ Consumer<UploadPack> postConstructionSetup, String... inputLines)
+ throws Exception {
+
+ ByteArrayInputStream send = linesAsInputStream(inputLines);
+
+ server.getConfig().setString("protocol", null, "version", "2");
+ UploadPack up = new UploadPack(server);
+ if (postConstructionSetup != null) {
+ postConstructionSetup.accept(up);
+ }
+ up.setExtraParameters(Sets.of("version=2"));
+
+ ByteArrayOutputStream recv = new ByteArrayOutputStream();
+ up.upload(send, recv, null);
+
+ return new ByteArrayInputStream(recv.toByteArray());
+ }
+
+ private static ByteArrayInputStream linesAsInputStream(String... inputLines)
+ throws IOException {
+ try (ByteArrayOutputStream send = new ByteArrayOutputStream()) {
+ PacketLineOut pckOut = new PacketLineOut(send);
+ for (String line : inputLines) {
+ Objects.requireNonNull(line);
+ if (PacketLineIn.isEnd(line)) {
+ pckOut.end();
+ } else if (PacketLineIn.isDelimiter(line)) {
+ pckOut.writeDelim();
+ } else {
+ pckOut.writeString(line);
+ }
+ }
+ return new ByteArrayInputStream(send.toByteArray());
+ }
+ }
+}