From 3227348e5e8feea0248d97ed24d8f1695a14f499 Mon Sep 17 00:00:00 2001 From: Jonathan Tan Date: Mon, 13 Aug 2018 16:57:25 -0700 Subject: [PATCH] Respond with shallow-info before wanted-refs When fetching with protocol v2, git expects the shallow-info section to appear before wanted-refs if both appear in the response. Teach UploadPack to do this. Change-Id: Ie26a91edcce5d27a1d727d7fba5c30e1144e118b Signed-off-by: Jonathan Tan --- .../jgit/transport/UploadPackTest.java | 8 +++---- .../eclipse/jgit/transport/UploadPack.java | 24 +++++++++---------- 2 files changed, 16 insertions(+), 16 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 7ef713bf4..9c43c0b0a 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 @@ -1367,13 +1367,13 @@ public class UploadPackTest { PacketLineIn.END); PacketLineIn pckIn = new PacketLineIn(recvStream); - // wanted-refs appears first, then shallow-info. - assertThat(pckIn.readString(), is("wanted-refs")); - assertThat(pckIn.readString(), is(child.toObjectId().getName() + " refs/heads/branch1")); - assertThat(pckIn.readString(), theInstance(PacketLineIn.DELIM)); + // shallow-info appears first, then wanted-refs. assertThat(pckIn.readString(), is("shallow-info")); assertThat(pckIn.readString(), is("shallow " + child.toObjectId().getName())); assertThat(pckIn.readString(), theInstance(PacketLineIn.DELIM)); + assertThat(pckIn.readString(), is("wanted-refs")); + assertThat(pckIn.readString(), is(child.toObjectId().getName() + " refs/heads/branch1")); + assertThat(pckIn.readString(), theInstance(PacketLineIn.DELIM)); assertThat(pckIn.readString(), is("packfile")); parsePack(recvStream); assertTrue(client.hasObject(child.toObjectId())); 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 c093e8b1d..3ad350d0d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java @@ -1083,18 +1083,6 @@ public class UploadPack { } if (doneReceived || okToGiveUp()) { - if (!wantedRefs.isEmpty()) { - if (sectionSent) { - pckOut.writeDelim(); - } - pckOut.writeString("wanted-refs\n"); //$NON-NLS-1$ - for (Map.Entry entry : wantedRefs.entrySet()) { - pckOut.writeString(entry.getValue().getName() + ' ' + - entry.getKey() + '\n'); - } - sectionSent = true; - } - if (shallowCommits != null) { if (sectionSent) pckOut.writeDelim(); @@ -1108,6 +1096,18 @@ public class UploadPack { sectionSent = true; } + if (!wantedRefs.isEmpty()) { + if (sectionSent) { + pckOut.writeDelim(); + } + pckOut.writeString("wanted-refs\n"); //$NON-NLS-1$ + for (Map.Entry entry : wantedRefs.entrySet()) { + pckOut.writeString(entry.getValue().getName() + ' ' + + entry.getKey() + '\n'); + } + sectionSent = true; + } + if (sectionSent) pckOut.writeDelim(); pckOut.writeString("packfile\n"); //$NON-NLS-1$