Skip to content

Commit 04cc94a

Browse files
authored
Merge pull request #9817 from eth3lbert/krate-yanked
Expose the `yanked` field on the API
2 parents ee129b7 + c3ee544 commit 04cc94a

File tree

30 files changed

+330
-52
lines changed

30 files changed

+330
-52
lines changed

src/controllers/krate/metadata.rs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,24 @@ pub async fn show(app: AppState, Path(name): Path<String>, req: Parts) -> AppRes
4545
.transpose()?
4646
.unwrap_or_default();
4747

48-
let (krate, downloads, default_version): (Crate, i64, Option<String>) =
49-
Crate::by_name(&name)
50-
.inner_join(crate_downloads::table)
51-
.left_join(default_versions::table)
52-
.left_join(versions::table.on(default_versions::version_id.eq(versions::id)))
53-
.select((
54-
Crate::as_select(),
55-
crate_downloads::downloads,
56-
versions::num.nullable(),
57-
))
58-
.first(conn)
59-
.optional()?
60-
.ok_or_else(|| crate_not_found(&name))?;
48+
let (krate, downloads, default_version, yanked): (
49+
Crate,
50+
i64,
51+
Option<String>,
52+
Option<bool>,
53+
) = Crate::by_name(&name)
54+
.inner_join(crate_downloads::table)
55+
.left_join(default_versions::table)
56+
.left_join(versions::table.on(default_versions::version_id.eq(versions::id)))
57+
.select((
58+
Crate::as_select(),
59+
crate_downloads::downloads,
60+
versions::num.nullable(),
61+
versions::yanked.nullable(),
62+
))
63+
.first(conn)
64+
.optional()?
65+
.ok_or_else(|| crate_not_found(&name))?;
6166

6267
let versions_publishers_and_audit_actions = if include.versions {
6368
let mut versions_and_publishers: Vec<(Version, Option<User>)> = krate
@@ -126,6 +131,7 @@ pub async fn show(app: AppState, Path(name): Path<String>, req: Parts) -> AppRes
126131
let encodable_crate = EncodableCrate::from(
127132
krate.clone(),
128133
default_version.as_deref(),
134+
yanked,
129135
top_versions.as_ref(),
130136
ids,
131137
kws.as_deref(),

src/controllers/krate/publish.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,7 @@ pub async fn publish(app: AppState, req: BytesRequest) -> AppResult<Json<GoodCra
519519
krate: EncodableCrate::from_minimal(
520520
krate,
521521
default_version.or(Some(version_string)).as_deref(),
522+
Some(false),
522523
Some(&top_versions),
523524
false,
524525
downloads,

src/controllers/krate/search.rs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ pub async fn search(app: AppState, req: Parts) -> AppResult<Json<Value>> {
8888
recent_crate_downloads::downloads.nullable(),
8989
0_f32.into_sql::<Float>(),
9090
versions::num.nullable(),
91+
versions::yanked.nullable(),
9192
);
9293

9394
let mut seek: Option<Seek> = None;
@@ -117,6 +118,7 @@ pub async fn search(app: AppState, req: Parts) -> AppResult<Json<Value>> {
117118
recent_crate_downloads::downloads.nullable(),
118119
rank.clone(),
119120
versions::num.nullable(),
121+
versions::yanked.nullable(),
120122
));
121123
seek = Some(Seek::Relevance);
122124
query = query.then_order_by(rank.desc())
@@ -128,6 +130,7 @@ pub async fn search(app: AppState, req: Parts) -> AppResult<Json<Value>> {
128130
recent_crate_downloads::downloads.nullable(),
129131
0_f32.into_sql::<Float>(),
130132
versions::num.nullable(),
133+
versions::yanked.nullable(),
131134
));
132135
seek = Some(Seek::Query);
133136
}
@@ -231,10 +234,14 @@ pub async fn search(app: AppState, req: Parts) -> AppResult<Json<Value>> {
231234
let crates = versions
232235
.zip(data)
233236
.map(
234-
|(max_version, (krate, perfect_match, total, recent, _, default_version))| {
237+
|(
238+
max_version,
239+
(krate, perfect_match, total, recent, _, default_version, yanked),
240+
)| {
235241
EncodableCrate::from_minimal(
236242
krate,
237243
default_version.as_deref(),
244+
yanked,
238245
Some(&max_version),
239246
perfect_match,
240247
total,
@@ -621,7 +628,7 @@ mod seek {
621628
downloads,
622629
recent_downloads,
623630
rank,
624-
_,
631+
..,
625632
) = *record;
626633

627634
match *self {
@@ -644,7 +651,15 @@ mod seek {
644651
}
645652
}
646653

647-
type Record = (Crate, bool, i64, Option<i64>, f32, Option<String>);
654+
type Record = (
655+
Crate,
656+
bool,
657+
i64,
658+
Option<i64>,
659+
f32,
660+
Option<String>,
661+
Option<bool>,
662+
);
648663

649664
type QuerySource = LeftJoinQuerySource<
650665
LeftJoinQuerySource<

src/controllers/summary.rs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
3434

3535
fn encode_crates(
3636
conn: &mut impl Conn,
37-
data: Vec<(Crate, i64, Option<i64>, Option<String>)>,
37+
data: Vec<Record>,
3838
) -> AppResult<Vec<EncodableCrate>> {
3939
let krates = data.iter().map(|(c, ..)| c).collect::<Vec<_>>();
4040
let versions: Vec<Version> = krates.versions().load(conn)?;
@@ -43,16 +43,19 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
4343
.into_iter()
4444
.map(TopVersions::from_versions)
4545
.zip(data)
46-
.map(|(top_versions, (krate, total, recent, default_version))| {
47-
Ok(EncodableCrate::from_minimal(
48-
krate,
49-
default_version.as_deref(),
50-
Some(&top_versions),
51-
false,
52-
total,
53-
recent,
54-
))
55-
})
46+
.map(
47+
|(top_versions, (krate, total, recent, default_version, yanked))| {
48+
Ok(EncodableCrate::from_minimal(
49+
krate,
50+
default_version.as_deref(),
51+
yanked,
52+
Some(&top_versions),
53+
false,
54+
total,
55+
recent,
56+
))
57+
},
58+
)
5659
.collect()
5760
}
5861

@@ -61,6 +64,7 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
6164
crate_downloads::downloads,
6265
recent_crate_downloads::downloads.nullable(),
6366
versions::num.nullable(),
67+
versions::yanked.nullable(),
6468
);
6569

6670
let new_crates = crates::table
@@ -136,3 +140,5 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
136140
})
137141
.await
138142
}
143+
144+
type Record = (Crate, i64, Option<i64>, Option<String>, Option<bool>);

src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate.snap

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ expression: response.json()
3030
"recent_downloads": null,
3131
"repository": null,
3232
"updated_at": "[datetime]",
33-
"versions": null
33+
"versions": null,
34+
"yanked": false
3435
},
3536
"warnings": {
3637
"invalid_badges": [],

src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_twice.snap

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ expression: response.json()
3030
"recent_downloads": null,
3131
"repository": null,
3232
"updated_at": "[datetime]",
33-
"versions": null
33+
"versions": null,
34+
"yanked": false
3435
},
3536
"warnings": {
3637
"invalid_badges": [],

src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_twice_alt.snap

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ expression: response.json()
3030
"recent_downloads": null,
3131
"repository": null,
3232
"updated_at": "[datetime]",
33-
"versions": null
33+
"versions": null,
34+
"yanked": false
3435
},
3536
"warnings": {
3637
"invalid_badges": [],

src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_weird_version.snap

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ expression: response.json()
3030
"recent_downloads": null,
3131
"repository": null,
3232
"updated_at": "[datetime]",
33-
"versions": null
33+
"versions": null,
34+
"yanked": false
3435
},
3536
"warnings": {
3637
"invalid_badges": [],

src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_with_token.snap

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ expression: response.json()
3030
"recent_downloads": null,
3131
"repository": null,
3232
"updated_at": "[datetime]",
33-
"versions": null
33+
"versions": null,
34+
"yanked": false
3435
},
3536
"warnings": {
3637
"invalid_badges": [],

src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__build_metadata__version_with_build_metadata@build_metadata_1.snap

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ expression: response.json()
3030
"recent_downloads": null,
3131
"repository": null,
3232
"updated_at": "[datetime]",
33-
"versions": null
33+
"versions": null,
34+
"yanked": false
3435
},
3536
"warnings": {
3637
"invalid_badges": [],

0 commit comments

Comments
 (0)