Teach UploadPack "thin-pack" in "fetch"
Add support for the "thin-pack" parameter in the "fetch" command in the fetch-pack/upload-pack protocol v2. Change-Id: I39a37b2b66a16929137d35c718a3acf2afb6b0b5 Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
This commit is contained in:
parent
adc73c4ba1
commit
a5dee1c125
|
@ -13,6 +13,7 @@
|
|||
import java.util.Map;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import org.eclipse.jgit.errors.TransportException;
|
||||
import org.eclipse.jgit.internal.storage.dfs.DfsGarbageCollector;
|
||||
|
@ -750,6 +751,36 @@ public void testV2FetchClientStopsNegotiation() throws Exception {
|
|||
assertTrue(client.hasObject(barChild.toObjectId()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testV2FetchThinPack() throws Exception {
|
||||
String commonInBlob = "abcdefghijklmnopqrstuvwxyz";
|
||||
|
||||
RevBlob parentBlob = remote.blob(commonInBlob + "a");
|
||||
RevCommit parent = remote.commit(remote.tree(remote.file("foo", parentBlob)));
|
||||
RevBlob childBlob = remote.blob(commonInBlob + "b");
|
||||
RevCommit child = remote.commit(remote.tree(remote.file("foo", childBlob)), parent);
|
||||
remote.update("branch1", child);
|
||||
|
||||
// Pretend that we have parent to get a thin pack based on it.
|
||||
ByteArrayInputStream recvStream = uploadPackV2(
|
||||
"command=fetch\n",
|
||||
PacketLineIn.DELIM,
|
||||
"want " + child.toObjectId().getName() + "\n",
|
||||
"have " + parent.toObjectId().getName() + "\n",
|
||||
"thin-pack\n",
|
||||
"done\n",
|
||||
PacketLineIn.END);
|
||||
PacketLineIn pckIn = new PacketLineIn(recvStream);
|
||||
|
||||
assertThat(pckIn.readString(), is("packfile"));
|
||||
|
||||
// Verify that we received a thin pack by trying to apply it
|
||||
// against the client repo, which does not have parent.
|
||||
thrown.expect(IOException.class);
|
||||
thrown.expectMessage("pack has unresolved deltas");
|
||||
parsePack(recvStream);
|
||||
}
|
||||
|
||||
private static class RejectAllRefFilter implements RefFilter {
|
||||
@Override
|
||||
public Map<String, Ref> filter(Map<String, Ref> refs) {
|
||||
|
|
|
@ -954,6 +954,8 @@ private void fetchV2() throws IOException {
|
|||
peerHas.add(ObjectId.fromString(line.substring(5)));
|
||||
} else if (line.equals("done")) {
|
||||
doneReceived = true;
|
||||
} else if (line.equals(OPTION_THIN_PACK)) {
|
||||
options.add(OPTION_THIN_PACK);
|
||||
}
|
||||
// else ignore it
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue