Skip to content

Commit 0666318

Browse files
1237: Actually use JSON storage for JSON data r=carols10cents We also never use `features` as a `HashMap<String, Vec<String>>`, so we can just pass it through from the database in a lower level representation. 1439: Bump `env_logger` r=carols10cents 1441: `dyn` all the things r=carols10cents `#![deny(bare_trait_objects)]` is added and all existing trait objects are documented with the `dyn` keyword.
4 parents ab080e3 + 871cb2c + ba33f04 + 28c25ac commit 0666318

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+285
-142
lines changed

Cargo.lock

+145-10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ openssl = "0.9.14"
3939
curl = "0.4"
4040
oauth2 = "0.3"
4141
log = "0.3"
42-
env_logger = "0.4"
42+
env_logger = "0.5"
4343
hex = "0.3"
4444
htmlescape = "0.3.1"
4545
license-exprs = "^1.3"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ALTER TABLE versions ALTER COLUMN features DROP NOT NULL;
2+
ALTER TABLE versions ALTER COLUMN features DROP DEFAULT;
3+
ALTER TABLE versions ALTER COLUMN features SET DATA TYPE text;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ALTER TABLE versions ALTER COLUMN features SET DATA TYPE jsonb USING features::jsonb;
2+
ALTER TABLE versions ALTER COLUMN features SET DEFAULT '{}';
3+
ALTER TABLE versions ALTER COLUMN features SET NOT NULL;

src/bin/server.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use std::sync::Arc;
1414

1515
fn main() {
1616
// Initialize logging
17-
env_logger::init().unwrap();
17+
env_logger::init();
1818
let config = cargo_registry::Config::default();
1919

2020
// If there isn't a git checkout containing the crate index repo at the path specified

src/controllers/category.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use schema::categories;
55
use views::{EncodableCategory, EncodableCategoryWithSubcategories};
66

77
/// Handles the `GET /categories` route.
8-
pub fn index(req: &mut Request) -> CargoResult<Response> {
8+
pub fn index(req: &mut dyn Request) -> CargoResult<Response> {
99
let conn = req.db_conn()?;
1010
let (offset, limit) = req.pagination(10, 100)?;
1111
let query = req.query();
@@ -34,7 +34,7 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
3434
}
3535

3636
/// Handles the `GET /categories/:category_id` route.
37-
pub fn show(req: &mut Request) -> CargoResult<Response> {
37+
pub fn show(req: &mut dyn Request) -> CargoResult<Response> {
3838
let slug = &req.params()["category_id"];
3939
let conn = req.db_conn()?;
4040
let cat = categories::table
@@ -66,7 +66,7 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
6666
}
6767

6868
/// Handles the `GET /category_slugs` route.
69-
pub fn slugs(req: &mut Request) -> CargoResult<Response> {
69+
pub fn slugs(req: &mut dyn Request) -> CargoResult<Response> {
7070
let conn = req.db_conn()?;
7171
let slugs = categories::table
7272
.select((categories::slug, categories::slug))

src/controllers/crate_owner_invitation.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use schema::{crate_owner_invitations, crate_owners};
77
use views::{EncodableCrateOwnerInvitation, InvitationResponse};
88

99
/// Handles the `GET /me/crate_owner_invitations` route.
10-
pub fn list(req: &mut Request) -> CargoResult<Response> {
10+
pub fn list(req: &mut dyn Request) -> CargoResult<Response> {
1111
let conn = &*req.db_conn()?;
1212
let user_id = req.user()?.id;
1313

@@ -33,7 +33,7 @@ struct OwnerInvitation {
3333
}
3434

3535
/// Handles the `PUT /me/crate_owner_invitations/:crate_id` route.
36-
pub fn handle_invite(req: &mut Request) -> CargoResult<Response> {
36+
pub fn handle_invite(req: &mut dyn Request) -> CargoResult<Response> {
3737
let conn = &*req.db_conn()?;
3838

3939
let mut body = String::new();
@@ -52,7 +52,7 @@ pub fn handle_invite(req: &mut Request) -> CargoResult<Response> {
5252
}
5353

5454
fn accept_invite(
55-
req: &mut Request,
55+
req: &mut dyn Request,
5656
conn: &PgConnection,
5757
crate_invite: InvitationResponse,
5858
) -> CargoResult<Response> {
@@ -90,7 +90,7 @@ fn accept_invite(
9090
}
9191

9292
fn decline_invite(
93-
req: &mut Request,
93+
req: &mut dyn Request,
9494
conn: &PgConnection,
9595
crate_invite: InvitationResponse,
9696
) -> CargoResult<Response> {

src/controllers/keyword.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use models::Keyword;
55
use views::EncodableKeyword;
66

77
/// Handles the `GET /keywords` route.
8-
pub fn index(req: &mut Request) -> CargoResult<Response> {
8+
pub fn index(req: &mut dyn Request) -> CargoResult<Response> {
99
use schema::keywords;
1010

1111
let conn = req.db_conn()?;
@@ -46,7 +46,7 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
4646
}
4747

4848
/// Handles the `GET /keywords/:keyword_id` route.
49-
pub fn show(req: &mut Request) -> CargoResult<Response> {
49+
pub fn show(req: &mut dyn Request) -> CargoResult<Response> {
5050
let name = &req.params()["keyword_id"];
5151
let conn = req.db_conn()?;
5252

src/controllers/krate/downloads.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use views::EncodableVersionDownload;
1414
use models::krate::to_char;
1515

1616
/// Handles the `GET /crates/:crate_id/downloads` route.
17-
pub fn downloads(req: &mut Request) -> CargoResult<Response> {
17+
pub fn downloads(req: &mut dyn Request) -> CargoResult<Response> {
1818
use diesel::dsl::*;
1919
use diesel::sql_types::BigInt;
2020

src/controllers/krate/follow.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use controllers::prelude::*;
77
use models::{Crate, Follow};
88
use schema::*;
99

10-
fn follow_target(req: &mut Request) -> CargoResult<Follow> {
10+
fn follow_target(req: &mut dyn Request) -> CargoResult<Follow> {
1111
let user = req.user()?;
1212
let conn = req.db_conn()?;
1313
let crate_name = &req.params()["crate_id"];
@@ -19,7 +19,7 @@ fn follow_target(req: &mut Request) -> CargoResult<Follow> {
1919
}
2020

2121
/// Handles the `PUT /crates/:crate_id/follow` route.
22-
pub fn follow(req: &mut Request) -> CargoResult<Response> {
22+
pub fn follow(req: &mut dyn Request) -> CargoResult<Response> {
2323
let follow = follow_target(req)?;
2424
let conn = req.db_conn()?;
2525
diesel::insert_into(follows::table)
@@ -31,7 +31,7 @@ pub fn follow(req: &mut Request) -> CargoResult<Response> {
3131
}
3232

3333
/// Handles the `DELETE /crates/:crate_id/follow` route.
34-
pub fn unfollow(req: &mut Request) -> CargoResult<Response> {
34+
pub fn unfollow(req: &mut dyn Request) -> CargoResult<Response> {
3535
let follow = follow_target(req)?;
3636
let conn = req.db_conn()?;
3737
diesel::delete(&follow).execute(&*conn)?;
@@ -40,7 +40,7 @@ pub fn unfollow(req: &mut Request) -> CargoResult<Response> {
4040
}
4141

4242
/// Handles the `GET /crates/:crate_id/following` route.
43-
pub fn following(req: &mut Request) -> CargoResult<Response> {
43+
pub fn following(req: &mut dyn Request) -> CargoResult<Response> {
4444
use diesel::dsl::exists;
4545

4646
let follow = follow_target(req)?;

src/controllers/krate/metadata.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use views::{
1414
use models::krate::ALL_COLUMNS;
1515

1616
/// Handles the `GET /summary` route.
17-
pub fn summary(req: &mut Request) -> CargoResult<Response> {
17+
pub fn summary(req: &mut dyn Request) -> CargoResult<Response> {
1818
use schema::crates::dsl::*;
1919

2020
let conn = req.db_conn()?;
@@ -98,7 +98,7 @@ pub fn summary(req: &mut Request) -> CargoResult<Response> {
9898
}
9999

100100
/// Handles the `GET /crates/:crate_id` route.
101-
pub fn show(req: &mut Request) -> CargoResult<Response> {
101+
pub fn show(req: &mut dyn Request) -> CargoResult<Response> {
102102
use diesel::dsl::*;
103103

104104
let name = &req.params()["crate_id"];
@@ -155,7 +155,7 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
155155
}
156156

157157
/// Handles the `GET /crates/:crate_id/:version/readme` route.
158-
pub fn readme(req: &mut Request) -> CargoResult<Response> {
158+
pub fn readme(req: &mut dyn Request) -> CargoResult<Response> {
159159
let crate_name = &req.params()["crate_id"];
160160
let version = &req.params()["version"];
161161

@@ -179,7 +179,7 @@ pub fn readme(req: &mut Request) -> CargoResult<Response> {
179179
/// Handles the `GET /crates/:crate_id/versions` route.
180180
// FIXME: Not sure why this is necessary since /crates/:crate_id returns
181181
// this information already, but ember is definitely requesting it
182-
pub fn versions(req: &mut Request) -> CargoResult<Response> {
182+
pub fn versions(req: &mut dyn Request) -> CargoResult<Response> {
183183
let crate_name = &req.params()["crate_id"];
184184
let conn = req.db_conn()?;
185185
let krate = Crate::by_name(crate_name).first::<Crate>(&*conn)?;
@@ -198,7 +198,7 @@ pub fn versions(req: &mut Request) -> CargoResult<Response> {
198198
}
199199

200200
/// Handles the `GET /crates/:crate_id/reverse_dependencies` route.
201-
pub fn reverse_dependencies(req: &mut Request) -> CargoResult<Response> {
201+
pub fn reverse_dependencies(req: &mut dyn Request) -> CargoResult<Response> {
202202
use diesel::dsl::any;
203203

204204
let name = &req.params()["crate_id"];

src/controllers/krate/owners.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use models::{Crate, Owner, Rights, Team, User};
77
use views::EncodableOwner;
88

99
/// Handles the `GET /crates/:crate_id/owners` route.
10-
pub fn owners(req: &mut Request) -> CargoResult<Response> {
10+
pub fn owners(req: &mut dyn Request) -> CargoResult<Response> {
1111
let crate_name = &req.params()["crate_id"];
1212
let conn = req.db_conn()?;
1313
let krate = Crate::by_name(crate_name).first::<Crate>(&*conn)?;
@@ -25,7 +25,7 @@ pub fn owners(req: &mut Request) -> CargoResult<Response> {
2525
}
2626

2727
/// Handles the `GET /crates/:crate_id/owner_team` route.
28-
pub fn owner_team(req: &mut Request) -> CargoResult<Response> {
28+
pub fn owner_team(req: &mut dyn Request) -> CargoResult<Response> {
2929
let crate_name = &req.params()["crate_id"];
3030
let conn = req.db_conn()?;
3131
let krate = Crate::by_name(crate_name).first::<Crate>(&*conn)?;
@@ -42,7 +42,7 @@ pub fn owner_team(req: &mut Request) -> CargoResult<Response> {
4242
}
4343

4444
/// Handles the `GET /crates/:crate_id/owner_user` route.
45-
pub fn owner_user(req: &mut Request) -> CargoResult<Response> {
45+
pub fn owner_user(req: &mut dyn Request) -> CargoResult<Response> {
4646
let crate_name = &req.params()["crate_id"];
4747
let conn = req.db_conn()?;
4848
let krate = Crate::by_name(crate_name).first::<Crate>(&*conn)?;
@@ -59,16 +59,16 @@ pub fn owner_user(req: &mut Request) -> CargoResult<Response> {
5959
}
6060

6161
/// Handles the `PUT /crates/:crate_id/owners` route.
62-
pub fn add_owners(req: &mut Request) -> CargoResult<Response> {
62+
pub fn add_owners(req: &mut dyn Request) -> CargoResult<Response> {
6363
modify_owners(req, true)
6464
}
6565

6666
/// Handles the `DELETE /crates/:crate_id/owners` route.
67-
pub fn remove_owners(req: &mut Request) -> CargoResult<Response> {
67+
pub fn remove_owners(req: &mut dyn Request) -> CargoResult<Response> {
6868
modify_owners(req, false)
6969
}
7070

71-
fn modify_owners(req: &mut Request, add: bool) -> CargoResult<Response> {
71+
fn modify_owners(req: &mut dyn Request, add: bool) -> CargoResult<Response> {
7272
let mut body = String::new();
7373
req.body().read_to_string(&mut body)?;
7474

src/controllers/krate/publish.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use views::{EncodableCrate, EncodableCrateUpload};
2424
/// Currently blocks the HTTP thread, perhaps some function calls can spawn new
2525
/// threads and return completion or error through other methods a `cargo publish
2626
/// --status` command, via crates.io's front end, or email.
27-
pub fn publish(req: &mut Request) -> CargoResult<Response> {
27+
pub fn publish(req: &mut dyn Request) -> CargoResult<Response> {
2828
let app = Arc::clone(req.app());
2929
let (new_crate, user) = parse_new_headers(req)?;
3030

@@ -191,7 +191,7 @@ pub fn publish(req: &mut Request) -> CargoResult<Response> {
191191
/// This function parses the JSON headers to interpret the data and validates
192192
/// the data during and after the parsing. Returns crate metadata and user
193193
/// information.
194-
fn parse_new_headers(req: &mut Request) -> CargoResult<(EncodableCrateUpload, User)> {
194+
fn parse_new_headers(req: &mut dyn Request) -> CargoResult<(EncodableCrateUpload, User)> {
195195
// Read the json upload request
196196
let amt = u64::from(read_le_u32(req.body())?);
197197
let max = req.app().config.max_upload_size;

src/controllers/krate/search.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use models::krate::{canon_crate_name, ALL_COLUMNS};
3131
/// caused the break. In the future, we should look at splitting this
3232
/// function out to cover the different use cases, and create unit tests
3333
/// for them.
34-
pub fn search(req: &mut Request) -> CargoResult<Response> {
34+
pub fn search(req: &mut dyn Request) -> CargoResult<Response> {
3535
use diesel::sql_types::Bool;
3636

3737
let conn = req.db_conn()?;

src/controllers/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ mod prelude {
2626
fn pagination(&self, default: usize, max: usize) -> CargoResult<(i64, i64)>;
2727
}
2828

29-
impl<'a> RequestUtils for Request + 'a {
29+
impl<'a> RequestUtils for dyn Request + 'a {
3030
fn json<T: Serialize>(&self, t: &T) -> Response {
3131
::util::json_response(t)
3232
}

src/controllers/site_metadata.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use super::prelude::*;
44
///
55
/// The sha is contained within the `HEROKU_SLUG_COMMIT` environment variable.
66
/// If `HEROKU_SLUG_COMMIT` is not set, returns `"unknown"`.
7-
pub fn show_deployed_sha(req: &mut Request) -> CargoResult<Response> {
7+
pub fn show_deployed_sha(req: &mut dyn Request) -> CargoResult<Response> {
88
let deployed_sha =
99
::std::env::var("HEROKU_SLUG_COMMIT").unwrap_or_else(|_| String::from("unknown"));
1010

src/controllers/team.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use schema::teams;
55
use views::EncodableTeam;
66

77
/// Handles the `GET /teams/:team_id` route.
8-
pub fn show_team(req: &mut Request) -> CargoResult<Response> {
8+
pub fn show_team(req: &mut dyn Request) -> CargoResult<Response> {
99
use self::teams::dsl::{login, teams};
1010

1111
let name = &req.params()["team_id"];

src/controllers/token.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use schema::api_tokens;
1010
use views::EncodableApiTokenWithToken;
1111

1212
/// Handles the `GET /me/tokens` route.
13-
pub fn list(req: &mut Request) -> CargoResult<Response> {
13+
pub fn list(req: &mut dyn Request) -> CargoResult<Response> {
1414
let tokens = ApiToken::belonging_to(req.user()?)
1515
.order(api_tokens::created_at.desc())
1616
.load(&*req.db_conn()?)?;
@@ -22,7 +22,7 @@ pub fn list(req: &mut Request) -> CargoResult<Response> {
2222
}
2323

2424
/// Handles the `PUT /me/tokens` route.
25-
pub fn new(req: &mut Request) -> CargoResult<Response> {
25+
pub fn new(req: &mut dyn Request) -> CargoResult<Response> {
2626
/// The incoming serialization format for the `ApiToken` model.
2727
#[derive(Deserialize, Serialize)]
2828
struct NewApiToken {
@@ -87,7 +87,7 @@ pub fn new(req: &mut Request) -> CargoResult<Response> {
8787
}
8888

8989
/// Handles the `DELETE /me/tokens/:id` route.
90-
pub fn revoke(req: &mut Request) -> CargoResult<Response> {
90+
pub fn revoke(req: &mut dyn Request) -> CargoResult<Response> {
9191
let id = req.params()["id"]
9292
.parse::<i32>()
9393
.map_err(|e| bad_request(&format!("invalid token id: {:?}", e)))?;

src/controllers/user/me.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use schema::{crates, emails, follows, users, versions};
1111
use views::{EncodablePrivateUser, EncodableVersion};
1212

1313
/// Handles the `GET /me` route.
14-
pub fn me(req: &mut Request) -> CargoResult<Response> {
14+
pub fn me(req: &mut dyn Request) -> CargoResult<Response> {
1515
// Changed to getting User information from database because in
1616
// src/tests/user.rs, when testing put and get on updating email,
1717
// request seems to be somehow 'cached'. When we try to get a
@@ -51,7 +51,7 @@ pub fn me(req: &mut Request) -> CargoResult<Response> {
5151
}
5252

5353
/// Handles the `GET /me/updates` route.
54-
pub fn updates(req: &mut Request) -> CargoResult<Response> {
54+
pub fn updates(req: &mut dyn Request) -> CargoResult<Response> {
5555
use diesel::dsl::any;
5656

5757
let user = req.user()?;
@@ -91,7 +91,7 @@ pub fn updates(req: &mut Request) -> CargoResult<Response> {
9191
}
9292

9393
/// Handles the `PUT /user/:user_id` route.
94-
pub fn update_user(req: &mut Request) -> CargoResult<Response> {
94+
pub fn update_user(req: &mut dyn Request) -> CargoResult<Response> {
9595
use self::emails::user_id;
9696
use self::users::dsl::{email, gh_login, users};
9797
use diesel::{insert_into, update};
@@ -162,7 +162,7 @@ pub fn update_user(req: &mut Request) -> CargoResult<Response> {
162162
}
163163

164164
/// Handles the `PUT /confirm/:email_token` route
165-
pub fn confirm_user_email(req: &mut Request) -> CargoResult<Response> {
165+
pub fn confirm_user_email(req: &mut dyn Request) -> CargoResult<Response> {
166166
use diesel::update;
167167

168168
let conn = req.db_conn()?;
@@ -184,7 +184,7 @@ pub fn confirm_user_email(req: &mut Request) -> CargoResult<Response> {
184184
}
185185

186186
/// Handles `PUT /user/:user_id/resend` route
187-
pub fn regenerate_token_and_send(req: &mut Request) -> CargoResult<Response> {
187+
pub fn regenerate_token_and_send(req: &mut dyn Request) -> CargoResult<Response> {
188188
use diesel::dsl::sql;
189189
use diesel::update;
190190

src/controllers/user/other.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use schema::{crate_owners, crates, users};
55
use views::EncodablePublicUser;
66

77
/// Handles the `GET /users/:user_id` route.
8-
pub fn show(req: &mut Request) -> CargoResult<Response> {
8+
pub fn show(req: &mut dyn Request) -> CargoResult<Response> {
99
use self::users::dsl::{gh_login, id, users};
1010

1111
let name = &req.params()["user_id"].to_lowercase();
@@ -25,7 +25,7 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
2525
}
2626

2727
/// Handles the `GET /users/:user_id/stats` route.
28-
pub fn stats(req: &mut Request) -> CargoResult<Response> {
28+
pub fn stats(req: &mut dyn Request) -> CargoResult<Response> {
2929
use diesel::dsl::sum;
3030

3131
let user_id = &req.params()["user_id"].parse::<i32>().ok().unwrap();

0 commit comments

Comments
 (0)