Merge "ReceivePack: Accept shallow lines from Git >= 1.9"

This commit is contained in:
Shawn Pearce 2014-08-27 16:56:16 -04:00 committed by Gerrit Code Review @ Eclipse.org
commit 49305cde19
1 changed files with 21 additions and 2 deletions

View File

@ -222,7 +222,7 @@ public Set<String> getCapabilities() {
/** Capabilities requested by the client. */
private Set<String> enabledCapabilities;
private Set<ObjectId> clientShallowCommits;
private List<ReceiveCommand> commands;
private StringBuilder advertiseError;
@ -263,6 +263,7 @@ protected BaseReceivePack(final Repository into) {
advertiseRefsHook = AdvertiseRefsHook.DEFAULT;
refFilter = RefFilter.DEFAULT;
advertisedHaves = new HashSet<ObjectId>();
clientShallowCommits = new HashSet<ObjectId>();
}
/** Configuration for receive operations. */
@ -770,6 +771,18 @@ public long getPackSize() {
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 @@ protected void recvCommands() throws IOException {
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 @@ private void receivePack() throws IOException {
private boolean needCheckConnectivity() {
return isCheckReceivedObjects()
|| isCheckReferencedObjectsAreReachable();
|| isCheckReferencedObjectsAreReachable()
|| !getClientShallowCommits().isEmpty();
}
private void checkConnectivity() throws IOException {