Merge "Fix serving fetch of existing shallow client"

This commit is contained in:
Shawn Pearce 2014-01-29 14:56:20 -05:00 committed by Gerrit Code Review @ Eclipse.org
commit abadbabdc5
2 changed files with 16 additions and 2 deletions

View File

@ -1308,6 +1308,18 @@ void carryFlagsImpl(final RevCommit c) {
RevCommit.carryFlags(c, carry); RevCommit.carryFlags(c, carry);
} }
/**
* Assume additional commits are shallow (have no parents).
*
* @param ids
* commits that should be treated as shallow commits, in addition
* to any commits already known to be shallow by the repository.
*/
public void assumeShallow(Collection<? extends ObjectId> ids) {
for (ObjectId id : ids)
lookupCommit(id).parents = RevCommit.NO_PARENTS;
}
void initializeShallowCommits() throws IOException { void initializeShallowCommits() throws IOException {
if (shallowCommitsInitialized) if (shallowCommitsInitialized)
throw new IllegalStateException( throw new IllegalStateException(

View File

@ -684,6 +684,8 @@ else if (requestValidator instanceof AnyRequestValidator)
if (depth != 0) if (depth != 0)
processShallow(); processShallow();
if (!clientShallowCommits.isEmpty())
walk.assumeShallow(clientShallowCommits);
sendPack = negotiate(); sendPack = negotiate();
} catch (PackProtocolException err) { } catch (PackProtocolException err) {
reportErrorDuringNegotiate(err.getMessage()); reportErrorDuringNegotiate(err.getMessage());
@ -756,7 +758,7 @@ private void processShallow() throws IOException {
// Commits not on the boundary which are shallow in the client // Commits not on the boundary which are shallow in the client
// need to become unshallowed // need to become unshallowed
if (c.getDepth() < depth && clientShallowCommits.contains(c)) { if (c.getDepth() < depth && clientShallowCommits.remove(c)) {
unshallowCommits.add(c.copy()); unshallowCommits.add(c.copy());
pckOut.writeString("unshallow " + c.name()); //$NON-NLS-1$ pckOut.writeString("unshallow " + c.name()); //$NON-NLS-1$
} }
@ -1350,7 +1352,7 @@ private void sendPack(final boolean sideband) throws IOException {
try { try {
pw.setIndexDisabled(true); pw.setIndexDisabled(true);
pw.setUseCachedPacks(true); pw.setUseCachedPacks(true);
pw.setUseBitmaps(true); pw.setUseBitmaps(depth == 0 && clientShallowCommits.isEmpty());
pw.setReuseDeltaCommits(true); pw.setReuseDeltaCommits(true);
pw.setDeltaBaseAsOffset(options.contains(OPTION_OFS_DELTA)); pw.setDeltaBaseAsOffset(options.contains(OPTION_OFS_DELTA));
pw.setThin(options.contains(OPTION_THIN_PACK)); pw.setThin(options.contains(OPTION_THIN_PACK));