private final int shallowSince;
- private final List<String> shallowExcludeRefs;
+ private final List<String> deepenNotRefs;
private final int depth;
private final Set<String> options;
+ private final boolean doneReceived;
+
private FetchV2Request(List<ObjectId> peerHas,
TreeMap<String, ObjectId> wantedRefs, Set<ObjectId> wantsIds,
Set<ObjectId> clientShallowCommits, int shallowSince,
- List<String> shallowExcludeRefs, int depth, long filterBlobLimit,
- Set<String> options) {
+ List<String> deependNotRefs, int depth, long filterBlobLimit,
+ boolean doneReceived, Set<String> options) {
this.peerHas = peerHas;
this.wantedRefs = wantedRefs;
this.wantsIds = wantsIds;
this.clientShallowCommits = clientShallowCommits;
this.shallowSince = shallowSince;
- this.shallowExcludeRefs = shallowExcludeRefs;
+ this.deepenNotRefs = deependNotRefs;
this.depth = depth;
this.filterBlobLimit = filterBlobLimit;
+ this.doneReceived = doneReceived;
this.options = options;
}
* The value in a "deepen-since" line in the request, indicating the
* timestamp where to stop fetching/cloning.
*
- * @return timestamp where to stop the shallow fetch/clone. Defaults to 0 if
- * not set in the request
+ * @return timestamp in seconds since the epoch, where to stop the shallow
+ * fetch/clone. Defaults to 0 if not set in the request.
*/
int getShallowSince() {
return shallowSince;
* @return the refs in "deepen-not" lines in the request.
*/
@NonNull
- List<String> getShallowExcludeRefs() {
- return shallowExcludeRefs;
+ List<String> getDeepenNotRefs() {
+ return deepenNotRefs;
}
/**
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
* "thin-pack", "no-progress" or "ofs-delta"
Set<ObjectId> clientShallowCommits = new HashSet<>();
- List<String> shallowExcludeRefs = new ArrayList<>();
+ List<String> deepenNotRefs = new ArrayList<>();
Set<String> options = new HashSet<>();
long filterBlobLimit = -1;
+ boolean doneReceived;
+
private Builder() {
}
/**
* @return if there has been any "deepen not" line in the request
*/
- boolean hasShallowExcludeRefs() {
- return shallowExcludeRefs.size() > 0;
+ boolean hasDeepenNotRefs() {
+ return !deepenNotRefs.isEmpty();
}
/**
- * @param shallowExcludeRef reference in a "deepen not" line
+ * @param deepenNotRef reference in a "deepen not" line
* @return the builder
*/
- Builder addShallowExcludeRefs(String shallowExcludeRef) {
- this.shallowExcludeRefs.add(shallowExcludeRef);
+ Builder addDeepenNotRef(String deepenNotRef) {
+ this.deepenNotRefs.add(deepenNotRef);
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
*/
FetchV2Request build() {
return new FetchV2Request(peerHas, wantedRefs, wantsIds,
- clientShallowCommits, shallowSince, shallowExcludeRefs,
- depth, filterBlobLimit, options);
+ clientShallowCommits, shallowSince, deepenNotRefs,
+ depth, filterBlobLimit, doneReceived, options);
}
}
}
* not to send using --shallow-exclude. Cannot be non-empty if depth is
* nonzero.
*/
- private List<String> shallowExcludeRefs = new ArrayList<>();
+ private List<String> deepenNotRefs = new ArrayList<>();
/** Commit time of the oldest common commit, in seconds. */
private int oldestTime;
}
String line;
- boolean doneReceived = false;
// Currently, we do not support any capabilities, so the next
// line is DELIM.
} else if (line.startsWith("have ")) { //$NON-NLS-1$
reqBuilder.addPeerHas(ObjectId.fromString(line.substring(5)));
} else if (line.equals("done")) { //$NON-NLS-1$
- doneReceived = true;
+ reqBuilder.setDoneReceived();
} else if (line.equals(OPTION_THIN_PACK)) {
reqBuilder.addOption(OPTION_THIN_PACK);
} else if (line.equals(OPTION_NO_PROGRESS)) {
throw new PackProtocolException(
JGitText.get().deepenSinceWithDeepen);
}
- if (reqBuilder.hasShallowExcludeRefs()) {
+ if (reqBuilder.hasDeepenNotRefs()) {
throw new PackProtocolException(
JGitText.get().deepenNotWithDeepen);
}
reqBuilder.setDepth(parsedDepth);
} else if (line.startsWith("deepen-not ")) { //$NON-NLS-1$
- reqBuilder.addShallowExcludeRefs(line.substring(11));
+ reqBuilder.addDeepenNotRef(line.substring(11));
if (reqBuilder.getDepth() != 0) {
throw new PackProtocolException(
JGitText.get().deepenNotWithDeepen);
depth = req.getDepth();
shallowSince = req.getShallowSince();
filterBlobLimit = req.getFilterBlobLimit();
- shallowExcludeRefs = req.getShallowExcludeRefs();
+ deepenNotRefs = req.getDeepenNotRefs();
boolean sectionSent = false;
@Nullable List<ObjectId> shallowCommits = null;
verifyClientShallow(req.getClientShallowCommits());
}
if (req.getDepth() != 0 || req.getShallowSince() != 0
- || !req.getShallowExcludeRefs().isEmpty()) {
+ || !req.getDeepenNotRefs().isEmpty()) {
shallowCommits = new ArrayList<>();
processShallow(shallowCommits, unshallowCommits, false);
}
if (!req.getClientShallowCommits().isEmpty())
walk.assumeShallow(req.getClientShallowCommits());
- if (doneReceived) {
+ if (req.wasDoneReceived()) {
processHaveLines(req.getPeerHas(), ObjectId.zeroId(),
new PacketLineOut(NullOutputStream.INSTANCE));
} else {
sectionSent = true;
}
- if (doneReceived || okToGiveUp()) {
+ if (req.wasDoneReceived() || okToGiveUp()) {
if (shallowCommits != null) {
if (sectionSent)
pckOut.writeDelim();
boolean writeToPckOut) throws IOException {
if (options.contains(OPTION_DEEPEN_RELATIVE) ||
shallowSince != 0 ||
- !shallowExcludeRefs.isEmpty()) {
+ !deepenNotRefs.isEmpty()) {
// TODO(jonathantanmy): Implement deepen-relative, deepen-since,
// and deepen-not.
throw new UnsupportedOperationException();