diff options
author | Shawn Pearce <sop@google.com> | 2014-08-27 16:56:16 -0400 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org <gerrit@eclipse.org> | 2014-08-27 16:56:16 -0400 |
commit | 49305cde197a5fec9d1c9c09c4108bd5c0fd90ab (patch) | |
tree | 74e0238198b0f4e267b1da8b0de1a8eb7f26aedc | |
parent | 82f74e490a8d9cfc035559c03f1875cecef35b30 (diff) | |
parent | 199dd4a9a938e5c6ee7a06d0e0610e47b47ff050 (diff) | |
download | jgit-49305cde197a5fec9d1c9c09c4108bd5c0fd90ab.tar.gz jgit-49305cde197a5fec9d1c9c09c4108bd5c0fd90ab.zip |
Merge "ReceivePack: Accept shallow lines from Git >= 1.9"
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java index 9d39f436c6..72c1697593 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java @@ -222,7 +222,7 @@ public abstract class BaseReceivePack { /** Capabilities requested by the client. */ private Set<String> enabledCapabilities; - + private Set<ObjectId> clientShallowCommits; private List<ReceiveCommand> commands; private StringBuilder advertiseError; @@ -263,6 +263,7 @@ public abstract class BaseReceivePack { advertiseRefsHook = AdvertiseRefsHook.DEFAULT; refFilter = RefFilter.DEFAULT; advertisedHaves = new HashSet<ObjectId>(); + clientShallowCommits = new HashSet<ObjectId>(); } /** Configuration for receive operations. */ @@ -770,6 +771,18 @@ public abstract class BaseReceivePack { throw new IllegalStateException(JGitText.get().packSizeNotSetYet); } + /** + * Get the commits from the client's shallow file. + * + * @return if the client is a shallow repository, the list of edge commits + * that define the client's shallow boundary. Empty set if the client + * is earlier than Git 1.9, or is a full clone. + * @since 3.5 + */ + protected Set<ObjectId> getClientShallowCommits() { + return clientShallowCommits; + } + /** @return true if any commands to be executed have been read. */ protected boolean hasCommands() { return !commands.isEmpty(); @@ -923,6 +936,11 @@ public abstract class BaseReceivePack { if (line == PacketLineIn.END) break; + if (line.length() >= 48 && line.startsWith("shallow ")) { //$NON-NLS-1$ + clientShallowCommits.add(ObjectId.fromString(line.substring(8, 48))); + continue; + } + if (commands.isEmpty()) { final FirstLine firstLine = new FirstLine(line); enabledCapabilities = firstLine.getCapabilities(); @@ -1030,7 +1048,8 @@ public abstract class BaseReceivePack { private boolean needCheckConnectivity() { return isCheckReceivedObjects() - || isCheckReferencedObjectsAreReachable(); + || isCheckReferencedObjectsAreReachable() + || !getClientShallowCommits().isEmpty(); } private void checkConnectivity() throws IOException { |