diff options
author | Matthias Sohn <matthias.sohn@sap.com> | 2022-01-18 18:07:59 +0100 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2022-01-18 18:07:59 +0100 |
commit | de1abd323763dc88c46dbbfaca6e23b640a4ce5e (patch) | |
tree | 6b76fa743c7ef538d7d1ab70e908181a7d95c4cd | |
parent | 1e932c2e5289e965dea0314b230b6d3d94ea3bdb (diff) | |
parent | 2cc0009737182822a82731f523c0f6ded7601ddb (diff) | |
download | jgit-de1abd323763dc88c46dbbfaca6e23b640a4ce5e.tar.gz jgit-de1abd323763dc88c46dbbfaca6e23b640a4ce5e.zip |
Merge branch 'stable-5.13' into stable-6.0
* stable-5.13:
UploadPack v2 protocol: Stop negotiation for orphan refs
Change-Id: I6a9ed8338ffbf5363e48d640a2c4209e4e503549
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java | 55 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java | 5 |
2 files changed, 60 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java index 1c5a521801..7131905850 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java @@ -1107,6 +1107,61 @@ public class UploadPackTest { } @Test + public void testV2FetchServerStopsNegotiationForRefWithoutParents() + throws Exception { + RevCommit fooCommit = remote.commit().message("x").create(); + RevCommit barCommit = remote.commit().message("y").create(); + remote.update("refs/changes/01/1/1", fooCommit); + remote.update("refs/changes/02/2/1", barCommit); + + ByteArrayInputStream recvStream = uploadPackV2("command=fetch\n", + PacketLineIn.delimiter(), + "want " + fooCommit.toObjectId().getName() + "\n", + "have " + barCommit.toObjectId().getName() + "\n", + PacketLineIn.end()); + PacketLineIn pckIn = new PacketLineIn(recvStream); + + assertThat(pckIn.readString(), is("acknowledgments")); + assertThat(pckIn.readString(), + is("ACK " + barCommit.toObjectId().getName())); + assertThat(pckIn.readString(), is("ready")); + assertTrue(PacketLineIn.isDelimiter(pckIn.readString())); + assertThat(pckIn.readString(), is("packfile")); + parsePack(recvStream); + assertTrue(client.getObjectDatabase().has(fooCommit.toObjectId())); + } + + @Test + public void testV2FetchServerDoesNotStopNegotiationWhenOneRefWithoutParentAndOtherWithParents() + throws Exception { + RevCommit fooCommit = remote.commit().message("x").create(); + RevCommit barParent = remote.commit().message("y").create(); + RevCommit barChild = remote.commit().message("y").parent(barParent) + .create(); + RevCommit fooBarParent = remote.commit().message("z").create(); + RevCommit fooBarChild = remote.commit().message("y") + .parent(fooBarParent) + .create(); + remote.update("refs/changes/01/1/1", fooCommit); + remote.update("refs/changes/02/2/1", barChild); + remote.update("refs/changes/03/3/1", fooBarChild); + + ByteArrayInputStream recvStream = uploadPackV2("command=fetch\n", + PacketLineIn.delimiter(), + "want " + fooCommit.toObjectId().getName() + "\n", + "want " + barChild.toObjectId().getName() + "\n", + "want " + fooBarChild.toObjectId().getName() + "\n", + "have " + fooBarParent.toObjectId().getName() + "\n", + PacketLineIn.end()); + PacketLineIn pckIn = new PacketLineIn(recvStream); + + assertThat(pckIn.readString(), is("acknowledgments")); + assertThat(pckIn.readString(), + is("ACK " + fooBarParent.toObjectId().getName())); + assertTrue(PacketLineIn.isEnd(pckIn.readString())); + } + + @Test public void testV2FetchThinPack() throws Exception { String commonInBlob = "abcdefghijklmnopqrstuvwxyz"; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java index 6da6c13342..0a7eb17f05 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java @@ -2175,6 +2175,11 @@ public class UploadPack { if (want.has(SATISFIED)) return true; + if (((RevCommit) want).getParentCount() == 0) { + want.add(SATISFIED); + return true; + } + walk.resetRetain(SAVE); walk.markStart((RevCommit) want); if (oldestTime != 0) |