Skip to content

Commit 72d2346

Browse files
authored
tarball/Package: Add name and version as required fields (#6905)
1 parent 69f0d55 commit 72d2346

File tree

6 files changed

+70
-10
lines changed

6 files changed

+70
-10
lines changed

crates_io_tarball/src/lib.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ mod tests {
118118
#[test]
119119
fn process_tarball_test() {
120120
let tarball = TarballBuilder::new("foo", "0.0.1")
121-
.add_raw_manifest(b"[package]")
121+
.add_raw_manifest(b"[package]\nname = \"foo\"\nversion = \"0.0.1\"\n")
122122
.build();
123123

124124
let limit = 512 * 1024 * 1024;
@@ -134,7 +134,7 @@ mod tests {
134134
#[test]
135135
fn process_tarball_test_incomplete_vcs_info() {
136136
let tarball = TarballBuilder::new("foo", "0.0.1")
137-
.add_raw_manifest(b"[package]")
137+
.add_raw_manifest(b"[package]\nname = \"foo\"\nversion = \"0.0.1\"\n")
138138
.add_file("foo-0.0.1/.cargo_vcs_info.json", br#"{"unknown": "field"}"#)
139139
.build();
140140

@@ -149,7 +149,7 @@ mod tests {
149149
#[test]
150150
fn process_tarball_test_vcs_info() {
151151
let tarball = TarballBuilder::new("foo", "0.0.1")
152-
.add_raw_manifest(b"[package]")
152+
.add_raw_manifest(b"[package]\nname = \"foo\"\nversion = \"0.0.1\"\n")
153153
.add_file(
154154
"foo-0.0.1/.cargo_vcs_info.json",
155155
br#"{"path_in_vcs": "path/in/vcs"}"#,
@@ -170,6 +170,8 @@ mod tests {
170170
.add_raw_manifest(
171171
br#"
172172
[package]
173+
name = "foo"
174+
version = "0.0.1"
173175
rust-version = "1.59"
174176
readme = "README.md"
175177
repository = "https://github.com/foo/bar"
@@ -191,6 +193,8 @@ repository = "https://github.com/foo/bar"
191193
.add_raw_manifest(
192194
br#"
193195
[project]
196+
name = "foo"
197+
version = "0.0.1"
194198
rust-version = "1.23"
195199
"#,
196200
)
@@ -208,6 +212,8 @@ repository = "https://github.com/foo/bar"
208212
.add_raw_manifest(
209213
br#"
210214
[package]
215+
name = "foo"
216+
version = "0.0.1"
211217
"#,
212218
)
213219
.build();
@@ -224,6 +230,8 @@ repository = "https://github.com/foo/bar"
224230
.add_raw_manifest(
225231
br#"
226232
[package]
233+
name = "foo"
234+
version = "0.0.1"
227235
readme = false
228236
"#,
229237
)
@@ -242,6 +250,8 @@ repository = "https://github.com/foo/bar"
242250
"foo-0.0.1/cargo.toml",
243251
br#"
244252
[package]
253+
name = "foo"
254+
version = "0.0.1"
245255
repository = "https://github.com/foo/bar"
246256
"#,
247257
)

crates_io_tarball/src/manifest.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ pub struct Manifest {
1111
#[derive(Debug, Deserialize)]
1212
#[serde(rename_all = "kebab-case")]
1313
pub struct Package {
14+
pub name: String,
15+
pub version: String,
1416
#[serde(default)]
1517
pub readme: OptionalFile,
1618
pub repository: Option<String>,

src/admin/render_readmes.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,8 @@ pub mod tests {
237237
.add_raw_manifest(
238238
br#"
239239
[package]
240+
name = "foo"
241+
version = "0.0.1"
240242
readme = "README.md"
241243
"#,
242244
)
@@ -270,6 +272,8 @@ readme = "README.md"
270272
.add_raw_manifest(
271273
br#"
272274
[package]
275+
name = "foo"
276+
version = "0.0.1"
273277
"#,
274278
)
275279
.add_file("foo-0.0.1/README.md", b"readme")
@@ -286,6 +290,8 @@ readme = "README.md"
286290
.add_raw_manifest(
287291
br#"
288292
[package]
293+
name = "foo"
294+
version = "0.0.1"
289295
readme = "README.md"
290296
repository = "https://github.com/foo/foo"
291297
"#,
@@ -304,6 +310,8 @@ repository = "https://github.com/foo/foo"
304310
.add_raw_manifest(
305311
br#"
306312
[package]
313+
name = "foo"
314+
version = "0.0.1"
307315
readme = "docs/README.md"
308316
repository = "https://github.com/foo/foo"
309317
"#,

src/tests/builders/publish.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@ impl PublishBuilder {
2727
/// Create a request to publish a crate with the given name and version, and no files
2828
/// in its tarball.
2929
pub fn new(krate_name: &str, version: &str) -> Self {
30+
let manifest = format!("[package]\nname = \"{krate_name}\"\nversion = \"{version}\"\n");
31+
3032
let tarball = TarballBuilder::new(krate_name, version)
31-
.add_raw_manifest(b"[package]")
33+
.add_raw_manifest(manifest.as_bytes())
3234
.build();
3335

3436
PublishBuilder {

src/tests/krate/publish.rs

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ fn new_krate() {
134134
assert!(crates[0].deps.is_empty());
135135
assert_eq!(
136136
crates[0].cksum,
137-
"148a5e65dd9ee2c7d2310ff798b14a3f593a05c3dde5f47b40b8d328a11d78af"
137+
"8a8d84b87f379d5e32566b14df153c0ab0e1ea87dae79a00b891bb41f93dbbf6"
138138
);
139139

140140
let expected_files = vec!["crates/foo_new/foo_new-1.0.0.crate", "index/fo/o_/foo_new"];
@@ -453,7 +453,10 @@ fn new_krate_too_big_but_whitelisted() {
453453
});
454454

455455
let files = [
456-
("foo_whitelist-1.1.0/Cargo.toml", b"[package]" as &[_]),
456+
(
457+
"foo_whitelist-1.1.0/Cargo.toml",
458+
b"[package]\nname = \"foo_whitelist\"\nversion = \"1.1.0\"\n" as &[_],
459+
),
457460
("foo_whitelist-1.1.0/big", &[b'a'; 2000] as &[_]),
458461
];
459462
let crate_to_publish = PublishBuilder::new("foo_whitelist", "1.1.0").files(&files);
@@ -931,7 +934,7 @@ fn tarball_between_default_axum_limit_and_max_upload_size() {
931934
let tarball = {
932935
let mut builder = TarballBuilder::new("foo", "1.1.0");
933936

934-
let data = b"[package]" as &[_];
937+
let data = b"[package]\nname = \"foo\"\nversion = \"1.1.0\"\n" as &[_];
935938

936939
let mut header = tar::Header::new_gnu();
937940
assert_ok!(header.set_path("foo-1.1.0/Cargo.toml"));
@@ -1226,3 +1229,35 @@ fn invalid_manifest() {
12261229
json!({ "errors": [{ "detail": "failed to parse `Cargo.toml` manifest file\n\nTOML parse error at line 1, column 1\n |\n1 | \n | ^\nmissing field `package`\n" }] })
12271230
);
12281231
}
1232+
1233+
#[test]
1234+
fn invalid_manifest_missing_name() {
1235+
let (_app, _anon, _cookie, token) = TestApp::full().with_token();
1236+
1237+
let tarball = TarballBuilder::new("foo", "1.0.0")
1238+
.add_raw_manifest(b"[package]\nversion = \"1.0.0\"")
1239+
.build();
1240+
1241+
let response = token.publish_crate(PublishBuilder::new("foo", "1.0.0").tarball(tarball));
1242+
assert_eq!(response.status(), StatusCode::OK);
1243+
assert_eq!(
1244+
response.into_json(),
1245+
json!({ "errors": [{ "detail": "failed to parse `Cargo.toml` manifest file\n\nTOML parse error at line 1, column 1\n |\n1 | [package]\n | ^^^^^^^^^\nmissing field `name`\n" }] })
1246+
);
1247+
}
1248+
1249+
#[test]
1250+
fn invalid_manifest_missing_version() {
1251+
let (_app, _anon, _cookie, token) = TestApp::full().with_token();
1252+
1253+
let tarball = TarballBuilder::new("foo", "1.0.0")
1254+
.add_raw_manifest(b"[package]\nname = \"foo\"")
1255+
.build();
1256+
1257+
let response = token.publish_crate(PublishBuilder::new("foo", "1.0.0").tarball(tarball));
1258+
assert_eq!(response.status(), StatusCode::OK);
1259+
assert_eq!(
1260+
response.into_json(),
1261+
json!({ "errors": [{ "detail": "failed to parse `Cargo.toml` manifest file\n\nTOML parse error at line 1, column 1\n |\n1 | [package]\n | ^^^^^^^^^\nmissing field `version`\n" }] })
1262+
);
1263+
}

src/tests/routes/crates/read.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,10 @@ fn version_size() {
125125

126126
// Add a file to version 2 so that it's a different size than version 1
127127
let files = [
128-
("foo_version_size-2.0.0/Cargo.toml", b"[package]" as &[_]),
128+
(
129+
"foo_version_size-2.0.0/Cargo.toml",
130+
b"[package]\nname = \"foo_version_size\"\nversion = \"2.0.0\"\n" as &[_],
131+
),
129132
("foo_version_size-2.0.0/big", &[b'a'; 1] as &[_]),
130133
];
131134
let crate_to_publish = PublishBuilder::new("foo_version_size", "2.0.0").files(&files);
@@ -140,7 +143,7 @@ fn version_size() {
140143
.iter()
141144
.find(|v| v.num == "1.0.0")
142145
.expect("Could not find v1.0.0");
143-
assert_eq!(version1.crate_size, Some(108));
146+
assert_eq!(version1.crate_size, Some(134));
144147

145148
let version2 = crate_json
146149
.versions
@@ -149,7 +152,7 @@ fn version_size() {
149152
.iter()
150153
.find(|v| v.num == "2.0.0")
151154
.expect("Could not find v2.0.0");
152-
assert_eq!(version2.crate_size, Some(135));
155+
assert_eq!(version2.crate_size, Some(159));
153156
}
154157

155158
#[test]

0 commit comments

Comments
 (0)