Skip to content

Commit 9eada45

Browse files
committed
Include "versions" array in reverse dependencies query result
1 parent 653945f commit 9eada45

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/krate.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1543,19 +1543,33 @@ fn modify_owners(req: &mut Request, add: bool) -> CargoResult<Response> {
15431543

15441544
/// Handles the `GET /crates/:crate_id/reverse_dependencies` route.
15451545
pub fn reverse_dependencies(req: &mut Request) -> CargoResult<Response> {
1546+
use diesel::expression::dsl::any;
1547+
15461548
let name = &req.params()["crate_id"];
15471549
let conn = req.db_conn()?;
15481550
let krate = Crate::by_name(name).first::<Crate>(&*conn)?;
15491551
let (offset, limit) = req.pagination(10, 100)?;
15501552
let (rev_deps, total) = krate.reverse_dependencies(&*conn, offset, limit)?;
1551-
let rev_deps = rev_deps
1553+
let rev_deps: Vec<_> = rev_deps
15521554
.into_iter()
15531555
.map(|dep| dep.encodable(&krate.name))
15541556
.collect();
15551557

1558+
let version_ids: Vec<i32> = rev_deps.iter().map(|dep| dep.version_id).collect();
1559+
1560+
let versions = versions::table
1561+
.filter(versions::id.eq(any(version_ids)))
1562+
.inner_join(crates::table)
1563+
.select((versions::all_columns, crates::name))
1564+
.load::<(Version, String)>(&*conn)?
1565+
.into_iter()
1566+
.map(|(version, krate_name)| version.encodable(&krate_name))
1567+
.collect();
1568+
15561569
#[derive(RustcEncodable)]
15571570
struct R {
15581571
dependencies: Vec<EncodableDependency>,
1572+
versions: Vec<EncodableVersion>,
15591573
meta: Meta,
15601574
}
15611575
#[derive(RustcEncodable)]
@@ -1564,6 +1578,7 @@ pub fn reverse_dependencies(req: &mut Request) -> CargoResult<Response> {
15641578
}
15651579
Ok(req.json(&R {
15661580
dependencies: rev_deps,
1581+
versions,
15671582
meta: Meta { total: total },
15681583
}))
15691584
}

src/tests/krate.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ struct Deps {
6060
#[derive(RustcDecodable)]
6161
struct RevDeps {
6262
dependencies: Vec<EncodableDependency>,
63+
versions: Vec<EncodableVersion>,
6364
meta: CrateMeta,
6465
}
6566
#[derive(RustcDecodable)]
@@ -1636,6 +1637,9 @@ fn reverse_dependencies() {
16361637
assert_eq!(deps.dependencies.len(), 1);
16371638
assert_eq!(deps.meta.total, 1);
16381639
assert_eq!(deps.dependencies[0].crate_id, "c1");
1640+
assert_eq!(deps.versions.len(), 1);
1641+
assert_eq!(deps.versions[0].krate, "c2");
1642+
assert_eq!(deps.versions[0].num, "1.1.0");
16391643

16401644
// c1 has no dependent crates.
16411645
req.with_path("/api/v1/crates/c2/reverse_dependencies");

0 commit comments

Comments
 (0)