Skip to content

Commit c1840a7

Browse files
committed
test: encode URL params correctly for SourceId in Cargo.lock
This will happen in lockfile format v4.
1 parent de8fce2 commit c1840a7

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

tests/testsuite/lockfile_compat.rs

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1058,3 +1058,91 @@ fn v3_and_git_url_encoded_tag() {
10581058
fn v3_and_git_url_encoded_rev() {
10591059
v3_and_git_url_encoded("rev", create_tag);
10601060
}
1061+
1062+
fn v4_and_git_url_encoded(ref_kind: &str, f: impl FnOnce(&git2::Repository, &str, git2::Oid)) {
1063+
let (git_project, repo) = git::new_repo("dep1", |project| {
1064+
project
1065+
.file("Cargo.toml", &basic_lib_manifest("dep1"))
1066+
.file("src/lib.rs", "")
1067+
});
1068+
let url = git_project.url();
1069+
let head_id = repo.head().unwrap().target().unwrap();
1070+
// Ref name with special characters
1071+
let git_ref = "a-_+#$)";
1072+
let encoded_ref = "a-_%2B%23%24%29";
1073+
f(&repo, git_ref, head_id);
1074+
1075+
let lockfile = format!(
1076+
r#"# This file is automatically @generated by Cargo.
1077+
# It is not intended for manual editing.
1078+
version = 4
1079+
1080+
[[package]]
1081+
name = "dep1"
1082+
version = "0.5.0"
1083+
source = "git+{url}?{ref_kind}={encoded_ref}#{head_id}"
1084+
1085+
[[package]]
1086+
name = "foo"
1087+
version = "0.0.1"
1088+
dependencies = [
1089+
"dep1",
1090+
]
1091+
"#,
1092+
);
1093+
1094+
let p = project()
1095+
.file(
1096+
"Cargo.toml",
1097+
&format!(
1098+
r#"
1099+
[package]
1100+
name = "foo"
1101+
version = "0.0.1"
1102+
1103+
[dependencies]
1104+
dep1 = {{ git = '{url}', {ref_kind} = '{git_ref}' }}
1105+
"#,
1106+
),
1107+
)
1108+
.file("src/lib.rs", "")
1109+
.file("Cargo.lock", "version = 4")
1110+
.build();
1111+
1112+
p.cargo("check -Znext-lockfile-bump")
1113+
.masquerade_as_nightly_cargo(&["-Znext-lockfile-bump"])
1114+
.with_stderr(format!(
1115+
"\
1116+
[UPDATING] git repository `{url}`
1117+
[CHECKING] dep1 v0.5.0 ({url}?{ref_kind}={git_ref}#[..])
1118+
[CHECKING] foo v0.0.1 ([CWD])
1119+
[FINISHED] dev [..]
1120+
"
1121+
))
1122+
.run();
1123+
1124+
let lock = p.read_lockfile();
1125+
assert_match_exact(&lockfile, &lock);
1126+
1127+
// Unlike v3_and_git_url_encoded, v4 encodes URL parameters so no git
1128+
// repository re-clone happen.
1129+
p.cargo("check -Znext-lockfile-bump")
1130+
.masquerade_as_nightly_cargo(&["-Znext-lockfile-bump"])
1131+
.with_stderr("[FINISHED] dev [..]")
1132+
.run();
1133+
}
1134+
1135+
#[cargo_test]
1136+
fn v4_and_git_url_encoded_branch() {
1137+
v4_and_git_url_encoded("branch", create_branch);
1138+
}
1139+
1140+
#[cargo_test]
1141+
fn v4_and_git_url_encoded_tag() {
1142+
v4_and_git_url_encoded("tag", create_tag);
1143+
}
1144+
1145+
#[cargo_test]
1146+
fn v4_and_git_url_encoded_rev() {
1147+
v4_and_git_url_encoded("rev", create_tag)
1148+
}

0 commit comments

Comments
 (0)