summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Tan <jonathantanmy@google.com>2018-03-13 13:29:46 -0700
committerJonathan Nieder <jrn@google.com>2018-05-16 20:54:03 -0400
commit526f5cf9840490720f8b4fd6d647bb8beb67e143 (patch)
tree2fcf1f26e971f910c5355809b314fef2302c48ff
parent5a87d50408642f619b77d12a981e6e23f407752e (diff)
downloadjgit-526f5cf9840490720f8b4fd6d647bb8beb67e143.tar.gz
jgit-526f5cf9840490720f8b4fd6d647bb8beb67e143.zip
Teach UploadPack "ofs-delta" in "fetch"
Add support for the "ofs-delta" parameter in the "fetch" command in the fetch-pack/upload-pack protocol v2. Change-Id: I728cf986082fce4ddeb6a6435897692e15e60cc7 Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java49
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java2
2 files changed, 46 insertions, 5 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 5ae93fc12d..133ecd01eb 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
@@ -518,15 +518,18 @@ public class UploadPackTest {
* Parse multiplexed packfile output from upload-pack using protocol V2
* into the client repository.
*/
- private void parsePack(ByteArrayInputStream recvStream) throws Exception {
- parsePack(recvStream, NullProgressMonitor.INSTANCE);
+ private ReceivedPackStatistics parsePack(ByteArrayInputStream recvStream) throws Exception {
+ return parsePack(recvStream, NullProgressMonitor.INSTANCE);
}
- private void parsePack(ByteArrayInputStream recvStream, ProgressMonitor pm)
+ private ReceivedPackStatistics parsePack(ByteArrayInputStream recvStream, ProgressMonitor pm)
throws Exception {
SideBandInputStream sb = new SideBandInputStream(
- recvStream, pm, new StringWriter(), NullOutputStream.INSTANCE);
- client.newObjectInserter().newPackParser(sb).parse(NullProgressMonitor.INSTANCE);
+ recvStream, pm,
+ new StringWriter(), NullOutputStream.INSTANCE);
+ PackParser pp = client.newObjectInserter().newPackParser(sb);
+ pp.parse(NullProgressMonitor.INSTANCE);
+ return pp.getReceivedPackStatistics();
}
@Test
@@ -838,6 +841,42 @@ public class UploadPackTest {
assertTrue(client.hasObject(tag.toObjectId()));
}
+ @Test
+ public void testV2FetchOfsDelta() 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);
+
+ // Without ofs-delta.
+ ByteArrayInputStream recvStream = uploadPackV2(
+ "command=fetch\n",
+ PacketLineIn.DELIM,
+ "want " + child.toObjectId().getName() + "\n",
+ "done\n",
+ PacketLineIn.END);
+ PacketLineIn pckIn = new PacketLineIn(recvStream);
+ assertThat(pckIn.readString(), is("packfile"));
+ ReceivedPackStatistics stats = parsePack(recvStream);
+ assertTrue(stats.getNumOfsDelta() == 0);
+
+ // With ofs-delta.
+ recvStream = uploadPackV2(
+ "command=fetch\n",
+ PacketLineIn.DELIM,
+ "want " + child.toObjectId().getName() + "\n",
+ "ofs-delta\n",
+ "done\n",
+ PacketLineIn.END);
+ pckIn = new PacketLineIn(recvStream);
+ assertThat(pckIn.readString(), is("packfile"));
+ stats = parsePack(recvStream);
+ assertTrue(stats.getNumOfsDelta() != 0);
+ }
+
private static class RejectAllRefFilter implements RefFilter {
@Override
public Map<String, Ref> filter(Map<String, Ref> refs) {
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 199a007abe..a1c222b19c 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java
@@ -967,6 +967,8 @@ public class UploadPack {
} else if (line.equals(OPTION_INCLUDE_TAG)) {
options.add(OPTION_INCLUDE_TAG);
includeTag = true;
+ } else if (line.equals(OPTION_OFS_DELTA)) {
+ options.add(OPTION_OFS_DELTA);
}
// else ignore it
}