Skip to content

Commit fb1d303

Browse files
authored
PublishBuilder: Provide version upfront (#6893)
This will make it much easier in the future to keep a stateful `TarballBuilder` around, and also simplifies the existing usages in quite a few cases.
1 parent c1c1764 commit fb1d303

File tree

9 files changed

+84
-120
lines changed

9 files changed

+84
-120
lines changed

src/tests/builders/publish.rs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ pub struct PublishBuilder {
2525
}
2626

2727
impl PublishBuilder {
28-
/// Create a request to publish a crate with the given name, version 1.0.0, and no files
28+
/// Create a request to publish a crate with the given name and version, and no files
2929
/// in its tarball.
30-
pub fn new(krate_name: &str) -> Self {
30+
pub fn new(krate_name: &str, version: &str) -> Self {
3131
PublishBuilder {
3232
categories: vec![],
3333
deps: vec![],
@@ -38,18 +38,12 @@ impl PublishBuilder {
3838
license: Some("MIT".to_string()),
3939
license_file: None,
4040
readme: None,
41-
tarball: TarballBuilder::new(krate_name, "1.0.0").build(),
42-
version: semver::Version::parse("1.0.0").unwrap(),
41+
tarball: TarballBuilder::new(krate_name, version).build(),
42+
version: semver::Version::parse(version).unwrap(),
4343
features: BTreeMap::new(),
4444
}
4545
}
4646

47-
/// Set the version of the crate being published to something other than the default of 1.0.0.
48-
pub fn version(mut self, version: &str) -> Self {
49-
self.version = semver::Version::parse(version).unwrap();
50-
self
51-
}
52-
5347
/// Set the files in the crate's tarball.
5448
pub fn files(mut self, files: &[(&str, &[u8])]) -> Self {
5549
let mut tarball = Vec::new();

src/tests/krate/publish.rs

Lines changed: 61 additions & 88 deletions
Large diffs are not rendered by default.

src/tests/krate/yanking.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ fn yank_works_as_intended() {
88
let (app, anon, cookie, token) = TestApp::full().with_token();
99

1010
// Upload a new crate, putting it in the git index
11-
let crate_to_publish = PublishBuilder::new("fyk");
11+
let crate_to_publish = PublishBuilder::new("fyk", "1.0.0");
1212
token.publish_crate(crate_to_publish).good();
1313

1414
let crates = app.crates_from_index_head("fyk");
@@ -65,15 +65,15 @@ fn yank_max_version() {
6565
let (_, anon, _, token) = TestApp::full().with_token();
6666

6767
// Upload a new crate
68-
let crate_to_publish = PublishBuilder::new("fyk_max");
68+
let crate_to_publish = PublishBuilder::new("fyk_max", "1.0.0");
6969
token.publish_crate(crate_to_publish).good();
7070

7171
// double check the max version
7272
let json = anon.show_crate("fyk_max");
7373
assert_eq!(json.krate.max_version, "1.0.0");
7474

7575
// add version 2.0.0
76-
let crate_to_publish = PublishBuilder::new("fyk_max").version("2.0.0");
76+
let crate_to_publish = PublishBuilder::new("fyk_max", "2.0.0");
7777
let json = token.publish_crate(crate_to_publish).good();
7878
assert_eq!(json.krate.max_version, "2.0.0");
7979

@@ -119,7 +119,7 @@ fn publish_after_yank_max_version() {
119119
let (_, anon, _, token) = TestApp::full().with_token();
120120

121121
// Upload a new crate
122-
let crate_to_publish = PublishBuilder::new("fyk_max");
122+
let crate_to_publish = PublishBuilder::new("fyk_max", "1.0.0");
123123
token.publish_crate(crate_to_publish).good();
124124

125125
// double check the max version
@@ -133,7 +133,7 @@ fn publish_after_yank_max_version() {
133133
assert_eq!(json.krate.max_version, "0.0.0");
134134

135135
// add version 2.0.0
136-
let crate_to_publish = PublishBuilder::new("fyk_max").version("2.0.0");
136+
let crate_to_publish = PublishBuilder::new("fyk_max", "2.0.0");
137137
let json = token.publish_crate(crate_to_publish).good();
138138
assert_eq!(json.krate.max_version, "2.0.0");
139139

src/tests/owners.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ fn new_crate_owner() {
136136
let (app, _, _, token) = TestApp::full().with_token();
137137

138138
// Create a crate under one user
139-
let crate_to_publish = PublishBuilder::new("foo_owner").version("1.0.0");
139+
let crate_to_publish = PublishBuilder::new("foo_owner", "1.0.0");
140140
token.publish_crate(crate_to_publish).good();
141141

142142
// Add the second user as an owner (with a different case to make sure that works)
@@ -152,7 +152,7 @@ fn new_crate_owner() {
152152
assert_eq!(crates.crates.len(), 1);
153153

154154
// And upload a new version as the second user
155-
let crate_to_publish = PublishBuilder::new("foo_owner").version("2.0.0");
155+
let crate_to_publish = PublishBuilder::new("foo_owner", "2.0.0");
156156
user2
157157
.db_new_token("bar_token")
158158
.publish_crate(crate_to_publish)

src/tests/routes/crates/new.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@ fn daily_limit() {
77

88
let max_daily_versions = app.as_inner().config.new_version_rate_limit.unwrap();
99
for version in 1..=max_daily_versions {
10-
let crate_to_publish =
11-
PublishBuilder::new("foo_daily_limit").version(&format!("0.0.{version}"));
10+
let crate_to_publish = PublishBuilder::new("foo_daily_limit", &format!("0.0.{version}"));
1211
user.publish_crate(crate_to_publish).good();
1312
}
1413

15-
let crate_to_publish = PublishBuilder::new("foo_daily_limit").version("1.0.0");
14+
let crate_to_publish = PublishBuilder::new("foo_daily_limit", "1.0.0");
1615
let response = user.publish_crate(crate_to_publish);
1716
assert!(response.status().is_success());
1817
let json = response.into_json();

src/tests/routes/crates/read.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,12 @@ fn show_minimal() {
120120
fn version_size() {
121121
let (_, _, user) = TestApp::full().with_user();
122122

123-
let crate_to_publish = PublishBuilder::new("foo_version_size").version("1.0.0");
123+
let crate_to_publish = PublishBuilder::new("foo_version_size", "1.0.0");
124124
user.publish_crate(crate_to_publish).good();
125125

126126
// Add a file to version 2 so that it's a different size than version 1
127127
let files = [("foo_version_size-2.0.0/big", &[b'a'; 1] as &[_])];
128-
let crate_to_publish = PublishBuilder::new("foo_version_size")
129-
.version("2.0.0")
130-
.files(&files);
128+
let crate_to_publish = PublishBuilder::new("foo_version_size", "2.0.0").files(&files);
131129
user.publish_crate(crate_to_publish).good();
132130

133131
let crate_json = user.show_crate("foo_version_size");

src/tests/routes/crates/versions/yank_unyank.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ fn yank_records_an_audit_action() {
5252
let (_, anon, _, token) = TestApp::full().with_token();
5353

5454
// Upload a new crate, putting it in the git index
55-
let crate_to_publish = PublishBuilder::new("fyk");
55+
let crate_to_publish = PublishBuilder::new("fyk", "1.0.0");
5656
token.publish_crate(crate_to_publish).good();
5757

5858
// Yank it
@@ -73,7 +73,7 @@ fn unyank_records_an_audit_action() {
7373
let (_, anon, _, token) = TestApp::full().with_token();
7474

7575
// Upload a new crate
76-
let crate_to_publish = PublishBuilder::new("fyk");
76+
let crate_to_publish = PublishBuilder::new("fyk", "1.0.0");
7777
token.publish_crate(crate_to_publish).good();
7878

7979
// Yank version 1.0.0
@@ -104,7 +104,7 @@ mod auth {
104104
fn prepare() -> (TestApp, MockAnonymousUser, MockCookieUser) {
105105
let (app, anon, cookie) = TestApp::full().with_user();
106106

107-
let pb = PublishBuilder::new(CRATE_NAME).version(CRATE_VERSION);
107+
let pb = PublishBuilder::new(CRATE_NAME, CRATE_VERSION);
108108
cookie.publish_crate(pb).good();
109109

110110
(app, anon, cookie)

src/tests/team.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ fn remove_team_as_named_owner() {
222222
.good();
223223

224224
let user_on_one_team = app.db_new_user("user-one-team");
225-
let crate_to_publish = PublishBuilder::new("foo_remove_team").version("2.0.0");
225+
let crate_to_publish = PublishBuilder::new("foo_remove_team", "2.0.0");
226226
let response = user_on_one_team.publish_crate(crate_to_publish);
227227
assert_eq!(response.status(), StatusCode::OK);
228228
assert_eq!(
@@ -285,7 +285,7 @@ fn publish_not_owned() {
285285

286286
let user_on_one_team = app.db_new_user("user-one-team");
287287

288-
let crate_to_publish = PublishBuilder::new("foo_not_owned").version("2.0.0");
288+
let crate_to_publish = PublishBuilder::new("foo_not_owned", "2.0.0");
289289
let response = user_on_one_team.publish_crate(crate_to_publish);
290290
assert_eq!(response.status(), StatusCode::OK);
291291
assert_eq!(
@@ -310,7 +310,7 @@ fn publish_org_owner_owned() {
310310

311311
let user_org_owner = app.db_new_user("user-org-owner");
312312

313-
let crate_to_publish = PublishBuilder::new("foo_not_owned").version("2.0.0");
313+
let crate_to_publish = PublishBuilder::new("foo_not_owned", "2.0.0");
314314
let response = user_org_owner.publish_crate(crate_to_publish);
315315
assert_eq!(response.status(), StatusCode::OK);
316316
assert_eq!(
@@ -336,7 +336,7 @@ fn publish_owned() {
336336

337337
let user_on_one_team = app.db_new_user("user-one-team");
338338

339-
let crate_to_publish = PublishBuilder::new("foo_team_owned").version("2.0.0");
339+
let crate_to_publish = PublishBuilder::new("foo_team_owned", "2.0.0");
340340
user_on_one_team.publish_crate(crate_to_publish).good();
341341
}
342342

src/tests/worker/git.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ fn index_smoke_test() {
1212

1313
// Add a new crate
1414

15-
let body = PublishBuilder::new("serde").version("1.0.0").body();
15+
let body = PublishBuilder::new("serde", "1.0.0").body();
1616
let response = token.put::<()>("/api/v1/crates/new", &body);
1717
assert_eq!(response.status(), StatusCode::OK);
1818

0 commit comments

Comments
 (0)