Skip to content

Commit c5dc7b4

Browse files
committed
fix: include-tag is now properly handled in V1 fetch arguments
Previously it would be added like it's V2 arguments, which makes using it in V1 impossible.
1 parent 877aa29 commit c5dc7b4

File tree

3 files changed

+36
-4
lines changed

3 files changed

+36
-4
lines changed

gix-protocol/src/fetch/arguments/mod.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,18 @@ impl Arguments {
165165
pub fn use_include_tag(&mut self) {
166166
debug_assert!(self.supports_include_tag, "'include-tag' feature required");
167167
if self.supports_include_tag {
168-
self.args.push("include-tag".into());
168+
match self.version {
169+
gix_transport::Protocol::V0 | gix_transport::Protocol::V1 => {
170+
let features = self
171+
.features_for_first_want
172+
.as_mut()
173+
.expect("call use_include_tag before want()");
174+
features.push("include-tag".into())
175+
}
176+
gix_transport::Protocol::V2 => {
177+
self.args.push("include-tag".into());
178+
}
179+
}
169180
}
170181
}
171182
fn prefixed(&mut self, prefix: &str, value: impl fmt::Display) {
@@ -192,6 +203,9 @@ impl Arguments {
192203
supports_include_tag = has("include-tag");
193204
let baked_features = features
194205
.iter()
206+
.filter(
207+
|(f, _)| *f != "include-tag", /* not a capability in that sense, needs to be turned on by caller later */
208+
)
195209
.map(|(n, v)| match v {
196210
Some(v) => format!("{n}={v}"),
197211
None => n.to_string(),

gix-protocol/src/fetch/tests.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,14 +171,32 @@ mod arguments {
171171
arguments.send(&mut t, true).await.expect("sending to buffer to work");
172172
assert_eq!(
173173
out.as_bstr(),
174-
b"0048want ff333369de1221f9bfbbe03a3a13e9a09bc1ffff include-tag feature-b
175-
0010include-tag
174+
b"0048want ff333369de1221f9bfbbe03a3a13e9a09bc1ffff feature-b include-tag
176175
00000009done
177176
"
178177
.as_bstr()
179178
);
180179
}
181180

181+
#[maybe_async::test(feature = "blocking-client", async(feature = "async-client", async_std::test))]
182+
async fn no_include_tag() {
183+
let mut out = Vec::new();
184+
let mut t = transport(&mut out, true);
185+
let mut arguments = arguments_v1(["include-tag", "feature-b"].iter().copied());
186+
assert!(arguments.can_use_include_tag());
187+
188+
arguments.want(id("ff333369de1221f9bfbbe03a3a13e9a09bc1ffff"));
189+
arguments.send(&mut t, true).await.expect("sending to buffer to work");
190+
assert_eq!(
191+
out.as_bstr(),
192+
b"003cwant ff333369de1221f9bfbbe03a3a13e9a09bc1ffff feature-b
193+
00000009done
194+
"
195+
.as_bstr(),
196+
"it's possible to not have it enabled, even though it's advertised by the server"
197+
);
198+
}
199+
182200
#[maybe_async::test(feature = "blocking-client", async(feature = "async-client", async_std::test))]
183201
async fn haves_and_wants_for_clone() {
184202
let mut out = Vec::new();

gix-protocol/tests/fetch/response.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ mod v1 {
188188

189189
let _response = args.send(&mut transport, true).await?;
190190
drop(_response);
191-
assert_eq!(out.as_slice().as_bstr(), "00aawant aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa thin-pack side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative include-tag multi_ack_detailed filter\n000ddeepen 1\n0014deepen-relative\n0018deepen-since 123456\n0013deepen-not tag\n0035shallow 97c5a932b3940a09683e924ef6a92b31a6f7c6de\n00000032have bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n0009done\n");
191+
assert_eq!(out.as_slice().as_bstr(), "009ewant aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa thin-pack side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative multi_ack_detailed filter\n000ddeepen 1\n0014deepen-relative\n0018deepen-since 123456\n0013deepen-not tag\n0035shallow 97c5a932b3940a09683e924ef6a92b31a6f7c6de\n00000032have bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n0009done\n");
192192
Ok(())
193193
}
194194
}

0 commit comments

Comments
 (0)