Skip to content

Commit 6544385

Browse files
committed
changed code path, removed unneeded params, all the way up
1 parent 0126923 commit 6544385

File tree

8 files changed

+34
-23
lines changed

8 files changed

+34
-23
lines changed

Diff for: src/controllers/krate/owners.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ fn modify_owners(
141141
msgs.join(",")
142142
} else {
143143
for login in &logins {
144-
krate.owner_remove(app, conn, user, login)?;
144+
krate.owner_remove(conn, login)?;
145145
}
146146
if User::owning(&krate, conn)?.is_empty() {
147147
return Err(cargo_err(

Diff for: src/models/krate.rs

+2-8
Original file line numberDiff line numberDiff line change
@@ -397,14 +397,8 @@ impl Crate {
397397
}
398398
}
399399

400-
pub fn owner_remove(
401-
&self,
402-
app: &App,
403-
conn: &mut PgConnection,
404-
req_user: &User,
405-
login: &str,
406-
) -> AppResult<()> {
407-
let owner = Owner::find_or_create_by_login(app, conn, req_user, login)?;
400+
pub fn owner_remove(&self, conn: &mut PgConnection, login: &str) -> AppResult<()> {
401+
let owner = Owner::find_by_login(conn, login)?;
408402

409403
let target = crate_owners::table.find((self.id(), owner.id(), owner.kind()));
410404
diesel::update(target)

Diff for: src/models/owner.rs

+26-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use diesel::pg::Pg;
22
use diesel::prelude::*;
33

4-
use crate::app::App;
54
use crate::util::errors::{cargo_err, AppResult};
5+
use crate::{app::App, schema::teams};
66

77
use crate::models::{Crate, Team, User};
88
use crate::schema::{crate_owners, users};
@@ -59,6 +59,7 @@ impl Owner {
5959
/// up-to-date GitHub ID. Fails out if the user isn't found in the
6060
/// database, the team isn't found on GitHub, or if the user isn't a member
6161
/// of the team on GitHub.
62+
///
6263
/// May be a user's GH login or a full team name. This is case
6364
/// sensitive.
6465
pub fn find_or_create_by_login(
@@ -82,6 +83,30 @@ impl Owner {
8283
}
8384
}
8485

86+
/// Finds the owner by name. Never recreates a team, to ensure that
87+
/// organizations that were deleted after they were added can still be
88+
/// removed.
89+
///
90+
/// May be a user's GH login or a full team name. This is case
91+
/// sensitive.
92+
pub fn find_by_login(conn: &mut PgConnection, name: &str) -> AppResult<Owner> {
93+
if name.contains(':') {
94+
teams::table
95+
.filter(lower(teams::login).eq(&name.to_lowercase()))
96+
.first(conn)
97+
.map(Owner::Team)
98+
.map_err(|_| cargo_err(&format_args!("could not find team with login `{name}`")))
99+
} else {
100+
users::table
101+
.filter(lower(users::gh_login).eq(name.to_lowercase()))
102+
.filter(users::gh_id.ne(-1))
103+
.order(users::gh_id.desc())
104+
.first(conn)
105+
.map(Owner::User)
106+
.map_err(|_| cargo_err(&format_args!("could not find user with login `{name}`")))
107+
}
108+
}
109+
85110
pub fn kind(&self) -> i32 {
86111
match *self {
87112
Owner::User(_) => OwnerKind::User as i32,

Diff for: src/tests/owners.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -567,9 +567,7 @@ fn deleted_ownership_isnt_in_owner_user() {
567567

568568
app.db(|conn| {
569569
let krate = CrateBuilder::new("foo_my_packages", user.id).expect_build(conn);
570-
krate
571-
.owner_remove(app.as_inner(), conn, user, &user.gh_login)
572-
.unwrap();
570+
krate.owner_remove(conn, &user.gh_login).unwrap();
573571
});
574572

575573
let json: UserResponse = anon.get("/api/v1/crates/foo_my_packages/owner_user").good();

Diff for: src/tests/routes/crates/list.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -839,9 +839,7 @@ fn crates_by_user_id_not_including_deleted_owners() {
839839

840840
app.db(|conn| {
841841
let krate = CrateBuilder::new("foo_my_packages", user.id).expect_build(conn);
842-
krate
843-
.owner_remove(app.as_inner(), conn, user, "foo")
844-
.unwrap();
842+
krate.owner_remove(conn, "foo").unwrap();
845843
});
846844

847845
let response = anon.search_by_user_id(user.id);

Diff for: src/tests/routes/me/get.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ fn test_user_owned_crates_doesnt_include_deleted_ownership() {
4242

4343
app.db(|conn| {
4444
let krate = CrateBuilder::new("foo_my_packages", user_model.id).expect_build(conn);
45-
krate
46-
.owner_remove(app.as_inner(), conn, user_model, &user_model.gh_login)
47-
.unwrap();
45+
krate.owner_remove(conn, &user_model.gh_login).unwrap();
4846
});
4947

5048
let json = user.show_me();

Diff for: src/tests/routes/users/stats.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ fn user_total_downloads() {
3939
.execute(conn)
4040
.unwrap();
4141
no_longer_my_krate
42-
.owner_remove(app.as_inner(), conn, user, &user.gh_login)
42+
.owner_remove(conn, &user.gh_login)
4343
.unwrap();
4444
});
4545

Diff for: src/tests/team.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -449,9 +449,7 @@ fn crates_by_team_id_not_including_deleted_owners() {
449449

450450
let krate = CrateBuilder::new("foo", user.id).expect_build(conn);
451451
add_team_to_crate(&t, &krate, user, conn).unwrap();
452-
krate
453-
.owner_remove(app.as_inner(), conn, user, &t.login)
454-
.unwrap();
452+
krate.owner_remove(conn, &t.login).unwrap();
455453
t
456454
});
457455

0 commit comments

Comments
 (0)