summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn Pearce <sop@google.com>2014-08-27 16:56:16 -0400
committerGerrit Code Review @ Eclipse.org <gerrit@eclipse.org>2014-08-27 16:56:16 -0400
commit49305cde197a5fec9d1c9c09c4108bd5c0fd90ab (patch)
tree74e0238198b0f4e267b1da8b0de1a8eb7f26aedc
parent82f74e490a8d9cfc035559c03f1875cecef35b30 (diff)
parent199dd4a9a938e5c6ee7a06d0e0610e47b47ff050 (diff)
downloadjgit-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.java23
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 {