]> source.dussan.org Git - jgit.git/commitdiff
Shallow fetch: Pass a DepthWalk to PackWriter 42/78642/2
authorJonathan Nieder <jrn@google.com>
Mon, 8 Aug 2016 19:31:39 +0000 (12:31 -0700)
committerJonathan Nieder <jrn@google.com>
Mon, 8 Aug 2016 20:48:29 +0000 (16:48 -0400)
d385a7a5e5ca (Shallow fetch: Respect "shallow" lines, 2016-08-03) forgot
that UploadPack wasn't passing a DepthWalk to PackWriter in the first
place.  As a result, shallow clones fail:

  java.lang.IllegalArgumentException: Shallow packs require a DepthWalk
        at org.eclipse.jgit.internal.storage.pack.PackWriter.preparePack(PackWriter.java:756)
        at org.eclipse.jgit.transport.UploadPack.sendPack(UploadPack.java:1497)
        at org.eclipse.jgit.transport.UploadPack.sendPack(UploadPack.java:1381)
        at org.eclipse.jgit.transport.UploadPack.service(UploadPack.java:774)
        at org.eclipse.jgit.transport.UploadPack.upload(UploadPack.java:667)
        at org.eclipse.jgit.http.server.UploadPackServlet.doPost(UploadPackServlet.java:191)

Change-Id: Ib0d8c2946eebfea910a2b767fb92e23da15d4749

org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java

index e1770f282b5e058be9263e4127c7ce65ca9aa264..6704251e569eefb2e5edddbc05ca350d7b7075cc 100644 (file)
@@ -1484,16 +1484,19 @@ public class UploadPack {
                                pw.setTagTargets(tagTargets);
                        }
 
-                       if (depth > 0)
+                       RevWalk rw = walk;
+                       if (depth > 0) {
                                pw.setShallowPack(depth, unshallowCommits);
+                               rw = new DepthWalk.RevWalk(walk.getObjectReader(), depth);
+                               rw.assumeShallow(clientShallowCommits);
+                       }
 
-                       RevWalk rw = walk;
                        if (wantAll.isEmpty()) {
                                pw.preparePack(pm, wantIds, commonBase);
                        } else {
                                walk.reset();
 
-                               ObjectWalk ow = walk.toObjectWalkWithSameObjects();
+                               ObjectWalk ow = rw.toObjectWalkWithSameObjects();
                                pw.preparePack(pm, ow, wantAll, commonBase);
                                rw = ow;
                        }