1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
|
/*
* Copyright (C) 2018, 2022 Google LLC. and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.transport;
import static java.util.Objects.requireNonNull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.jgit.annotations.NonNull;
import org.eclipse.jgit.annotations.Nullable;
import org.eclipse.jgit.lib.ObjectId;
/**
* Fetch request in the V0/V1 protocol.
*/
final class FetchV0Request extends FetchRequest {
FetchV0Request(@NonNull Set<ObjectId> wantIds, int depth,
@NonNull Set<ObjectId> clientShallowCommits,
@NonNull FilterSpec filterSpec,
@NonNull Set<String> clientCapabilities, int deepenSince,
@NonNull List<String> deepenNotRefs, @Nullable String agent,
@Nullable String clientSID) {
super(wantIds, depth, clientShallowCommits, filterSpec,
clientCapabilities, deepenSince, deepenNotRefs, agent,
clientSID);
}
static final class Builder {
int depth;
final List<String> deepenNots = new ArrayList<>();
int deepenSince;
final Set<ObjectId> wantIds = new HashSet<>();
final Set<ObjectId> clientShallowCommits = new HashSet<>();
FilterSpec filterSpec = FilterSpec.NO_FILTER;
final Set<String> clientCaps = new HashSet<>();
String agent;
String clientSID;
/**
* Add wantId
*
* @param objectId
* object id received in a "want" line
* @return this builder
*/
Builder addWantId(ObjectId objectId) {
wantIds.add(objectId);
return this;
}
/**
* Set depth
*
* @param d
* depth set in a "deepen" line
* @return this builder
*/
Builder setDepth(int d) {
depth = d;
return this;
}
/**
* Get depth
*
* @return depth set in the request (via a "deepen" line). Defaulting to
* 0 if not set.
*/
int getDepth() {
return depth;
}
/**
* Whether there's at least one "deepen not" line
*
* @return true if there has been at least one "deepen not" line in the
* request so far
*/
boolean hasDeepenNots() {
return !deepenNots.isEmpty();
}
/**
* Add "deepen not"
*
* @param deepenNot
* reference received in a "deepen not" line
* @return this builder
*/
Builder addDeepenNot(String deepenNot) {
deepenNots.add(deepenNot);
return this;
}
/**
* Set "deepen since"
*
* @param value
* Unix timestamp received in a "deepen since" line
* @return this builder
*/
Builder setDeepenSince(int value) {
deepenSince = value;
return this;
}
/**
* Get "deepen since
*
* @return shallow since value, sent before in a "deepen since" line. 0
* by default.
*/
int getDeepenSince() {
return deepenSince;
}
/**
* Add client shallow commit
*
* @param shallowOid
* object id received in a "shallow" line
* @return this builder
*/
Builder addClientShallowCommit(ObjectId shallowOid) {
clientShallowCommits.add(shallowOid);
return this;
}
/**
* Add client capabilities
*
* @param clientCapabilities
* client capabilities sent by the client in the first want
* line of the request
* @return this builder
*/
Builder addClientCapabilities(Collection<String> clientCapabilities) {
clientCaps.addAll(clientCapabilities);
return this;
}
/**
* Set agent
*
* @param clientAgent
* agent line sent by the client in the request body
* @return this builder
*/
Builder setAgent(String clientAgent) {
agent = clientAgent;
return this;
}
/**
* Set client session id
*
* @param clientSID
* session-id line sent by the client in the request body
* @return this builder
*/
Builder setClientSID(String clientSID) {
this.clientSID = clientSID;
return this;
}
/**
* Set filter spec
*
* @param filter
* the filter set in a filter line
* @return this builder
*/
Builder setFilterSpec(@NonNull FilterSpec filter) {
filterSpec = requireNonNull(filter);
return this;
}
FetchV0Request build() {
return new FetchV0Request(wantIds, depth, clientShallowCommits,
filterSpec, clientCaps, deepenSince, deepenNots, agent,
clientSID);
}
}
}
|