Browse Source

Merge "FetchV2Request round up (doneReceived, renamings)"

stable-5.2
Jonathan Nieder 6 years ago committed by Gerrit Code Review @ Eclipse.org
parent
commit
eb9a0c1983
  1. 53
      org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV2Request.java
  2. 19
      org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java

53
org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV2Request.java

@ -71,7 +71,7 @@ public final class FetchV2Request {
private final int shallowSince; private final int shallowSince;
private final List<String> shallowExcludeRefs; private final List<String> deepenNotRefs;
private final int depth; private final int depth;
@ -79,19 +79,22 @@ public final class FetchV2Request {
private final Set<String> options; private final Set<String> options;
private final boolean doneReceived;
private FetchV2Request(List<ObjectId> peerHas, private FetchV2Request(List<ObjectId> peerHas,
TreeMap<String, ObjectId> wantedRefs, Set<ObjectId> wantsIds, TreeMap<String, ObjectId> wantedRefs, Set<ObjectId> wantsIds,
Set<ObjectId> clientShallowCommits, int shallowSince, Set<ObjectId> clientShallowCommits, int shallowSince,
List<String> shallowExcludeRefs, int depth, long filterBlobLimit, List<String> deependNotRefs, int depth, long filterBlobLimit,
Set<String> options) { boolean doneReceived, Set<String> options) {
this.peerHas = peerHas; this.peerHas = peerHas;
this.wantedRefs = wantedRefs; this.wantedRefs = wantedRefs;
this.wantsIds = wantsIds; this.wantsIds = wantsIds;
this.clientShallowCommits = clientShallowCommits; this.clientShallowCommits = clientShallowCommits;
this.shallowSince = shallowSince; this.shallowSince = shallowSince;
this.shallowExcludeRefs = shallowExcludeRefs; this.deepenNotRefs = deependNotRefs;
this.depth = depth; this.depth = depth;
this.filterBlobLimit = filterBlobLimit; this.filterBlobLimit = filterBlobLimit;
this.doneReceived = doneReceived;
this.options = options; this.options = options;
} }
@ -135,8 +138,8 @@ public final class FetchV2Request {
* The value in a "deepen-since" line in the request, indicating the * The value in a "deepen-since" line in the request, indicating the
* timestamp where to stop fetching/cloning. * timestamp where to stop fetching/cloning.
* *
* @return timestamp where to stop the shallow fetch/clone. Defaults to 0 if * @return timestamp in seconds since the epoch, where to stop the shallow
* not set in the request * fetch/clone. Defaults to 0 if not set in the request.
*/ */
int getShallowSince() { int getShallowSince() {
return shallowSince; return shallowSince;
@ -146,8 +149,8 @@ public final class FetchV2Request {
* @return the refs in "deepen-not" lines in the request. * @return the refs in "deepen-not" lines in the request.
*/ */
@NonNull @NonNull
List<String> getShallowExcludeRefs() { List<String> getDeepenNotRefs() {
return shallowExcludeRefs; return deepenNotRefs;
} }
/** /**
@ -164,6 +167,13 @@ public final class FetchV2Request {
return filterBlobLimit; return filterBlobLimit;
} }
/**
* @return true if the request had a "done" line
*/
boolean wasDoneReceived() {
return doneReceived;
}
/** /**
* Options that tune the expected response from the server, like * Options that tune the expected response from the server, like
* "thin-pack", "no-progress" or "ofs-delta" * "thin-pack", "no-progress" or "ofs-delta"
@ -194,7 +204,7 @@ public final class FetchV2Request {
Set<ObjectId> clientShallowCommits = new HashSet<>(); Set<ObjectId> clientShallowCommits = new HashSet<>();
List<String> shallowExcludeRefs = new ArrayList<>(); List<String> deepenNotRefs = new ArrayList<>();
Set<String> options = new HashSet<>(); Set<String> options = new HashSet<>();
@ -204,6 +214,8 @@ public final class FetchV2Request {
long filterBlobLimit = -1; long filterBlobLimit = -1;
boolean doneReceived;
private Builder() { private Builder() {
} }
@ -282,16 +294,16 @@ public final class FetchV2Request {
/** /**
* @return if there has been any "deepen not" line in the request * @return if there has been any "deepen not" line in the request
*/ */
boolean hasShallowExcludeRefs() { boolean hasDeepenNotRefs() {
return shallowExcludeRefs.size() > 0; return !deepenNotRefs.isEmpty();
} }
/** /**
* @param shallowExcludeRef reference in a "deepen not" line * @param deepenNotRef reference in a "deepen not" line
* @return the builder * @return the builder
*/ */
Builder addShallowExcludeRefs(String shallowExcludeRef) { Builder addDeepenNotRef(String deepenNotRef) {
this.shallowExcludeRefs.add(shallowExcludeRef); this.deepenNotRefs.add(deepenNotRef);
return this; return this;
} }
@ -323,13 +335,22 @@ public final class FetchV2Request {
return this; return this;
} }
/**
* Mark that the "done" line has been received.
*
* @return the builder
*/
Builder setDoneReceived() {
this.doneReceived = true;
return this;
}
/** /**
* @return Initialized fetch request * @return Initialized fetch request
*/ */
FetchV2Request build() { FetchV2Request build() {
return new FetchV2Request(peerHas, wantedRefs, wantsIds, return new FetchV2Request(peerHas, wantedRefs, wantsIds,
clientShallowCommits, shallowSince, shallowExcludeRefs, clientShallowCommits, shallowSince, deepenNotRefs,
depth, filterBlobLimit, options); depth, filterBlobLimit, doneReceived, options);
} }
} }
} }

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

@ -311,7 +311,7 @@ public class UploadPack {
* not to send using --shallow-exclude. Cannot be non-empty if depth is * not to send using --shallow-exclude. Cannot be non-empty if depth is
* nonzero. * nonzero.
*/ */
private List<String> shallowExcludeRefs = new ArrayList<>(); private List<String> deepenNotRefs = new ArrayList<>();
/** Commit time of the oldest common commit, in seconds. */ /** Commit time of the oldest common commit, in seconds. */
private int oldestTime; private int oldestTime;
@ -963,7 +963,6 @@ public class UploadPack {
} }
String line; String line;
boolean doneReceived = false;
// Currently, we do not support any capabilities, so the next // Currently, we do not support any capabilities, so the next
// line is DELIM. // line is DELIM.
@ -997,7 +996,7 @@ public class UploadPack {
} else if (line.startsWith("have ")) { //$NON-NLS-1$ } else if (line.startsWith("have ")) { //$NON-NLS-1$
reqBuilder.addPeerHas(ObjectId.fromString(line.substring(5))); reqBuilder.addPeerHas(ObjectId.fromString(line.substring(5)));
} else if (line.equals("done")) { //$NON-NLS-1$ } else if (line.equals("done")) { //$NON-NLS-1$
doneReceived = true; reqBuilder.setDoneReceived();
} else if (line.equals(OPTION_THIN_PACK)) { } else if (line.equals(OPTION_THIN_PACK)) {
reqBuilder.addOption(OPTION_THIN_PACK); reqBuilder.addOption(OPTION_THIN_PACK);
} else if (line.equals(OPTION_NO_PROGRESS)) { } else if (line.equals(OPTION_NO_PROGRESS)) {
@ -1021,13 +1020,13 @@ public class UploadPack {
throw new PackProtocolException( throw new PackProtocolException(
JGitText.get().deepenSinceWithDeepen); JGitText.get().deepenSinceWithDeepen);
} }
if (reqBuilder.hasShallowExcludeRefs()) { if (reqBuilder.hasDeepenNotRefs()) {
throw new PackProtocolException( throw new PackProtocolException(
JGitText.get().deepenNotWithDeepen); JGitText.get().deepenNotWithDeepen);
} }
reqBuilder.setDepth(parsedDepth); reqBuilder.setDepth(parsedDepth);
} else if (line.startsWith("deepen-not ")) { //$NON-NLS-1$ } else if (line.startsWith("deepen-not ")) { //$NON-NLS-1$
reqBuilder.addShallowExcludeRefs(line.substring(11)); reqBuilder.addDeepenNotRef(line.substring(11));
if (reqBuilder.getDepth() != 0) { if (reqBuilder.getDepth() != 0) {
throw new PackProtocolException( throw new PackProtocolException(
JGitText.get().deepenNotWithDeepen); JGitText.get().deepenNotWithDeepen);
@ -1072,7 +1071,7 @@ public class UploadPack {
depth = req.getDepth(); depth = req.getDepth();
shallowSince = req.getShallowSince(); shallowSince = req.getShallowSince();
filterBlobLimit = req.getFilterBlobLimit(); filterBlobLimit = req.getFilterBlobLimit();
shallowExcludeRefs = req.getShallowExcludeRefs(); deepenNotRefs = req.getDeepenNotRefs();
boolean sectionSent = false; boolean sectionSent = false;
@Nullable List<ObjectId> shallowCommits = null; @Nullable List<ObjectId> shallowCommits = null;
@ -1082,14 +1081,14 @@ public class UploadPack {
verifyClientShallow(req.getClientShallowCommits()); verifyClientShallow(req.getClientShallowCommits());
} }
if (req.getDepth() != 0 || req.getShallowSince() != 0 if (req.getDepth() != 0 || req.getShallowSince() != 0
|| !req.getShallowExcludeRefs().isEmpty()) { || !req.getDeepenNotRefs().isEmpty()) {
shallowCommits = new ArrayList<>(); shallowCommits = new ArrayList<>();
processShallow(shallowCommits, unshallowCommits, false); processShallow(shallowCommits, unshallowCommits, false);
} }
if (!req.getClientShallowCommits().isEmpty()) if (!req.getClientShallowCommits().isEmpty())
walk.assumeShallow(req.getClientShallowCommits()); walk.assumeShallow(req.getClientShallowCommits());
if (doneReceived) { if (req.wasDoneReceived()) {
processHaveLines(req.getPeerHas(), ObjectId.zeroId(), processHaveLines(req.getPeerHas(), ObjectId.zeroId(),
new PacketLineOut(NullOutputStream.INSTANCE)); new PacketLineOut(NullOutputStream.INSTANCE));
} else { } else {
@ -1109,7 +1108,7 @@ public class UploadPack {
sectionSent = true; sectionSent = true;
} }
if (doneReceived || okToGiveUp()) { if (req.wasDoneReceived() || okToGiveUp()) {
if (shallowCommits != null) { if (shallowCommits != null) {
if (sectionSent) if (sectionSent)
pckOut.writeDelim(); pckOut.writeDelim();
@ -1252,7 +1251,7 @@ public class UploadPack {
boolean writeToPckOut) throws IOException { boolean writeToPckOut) throws IOException {
if (options.contains(OPTION_DEEPEN_RELATIVE) || if (options.contains(OPTION_DEEPEN_RELATIVE) ||
shallowSince != 0 || shallowSince != 0 ||
!shallowExcludeRefs.isEmpty()) { !deepenNotRefs.isEmpty()) {
// TODO(jonathantanmy): Implement deepen-relative, deepen-since, // TODO(jonathantanmy): Implement deepen-relative, deepen-since,
// and deepen-not. // and deepen-not.
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();

Loading…
Cancel
Save