@@ -1543,19 +1543,33 @@ fn modify_owners(req: &mut Request, add: bool) -> CargoResult<Response> {
1543
1543
1544
1544
/// Handles the `GET /crates/:crate_id/reverse_dependencies` route.
1545
1545
pub fn reverse_dependencies ( req : & mut Request ) -> CargoResult < Response > {
1546
+ use diesel:: expression:: dsl:: any;
1547
+
1546
1548
let name = & req. params ( ) [ "crate_id" ] ;
1547
1549
let conn = req. db_conn ( ) ?;
1548
1550
let krate = Crate :: by_name ( name) . first :: < Crate > ( & * conn) ?;
1549
1551
let ( offset, limit) = req. pagination ( 10 , 100 ) ?;
1550
1552
let ( rev_deps, total) = krate. reverse_dependencies ( & * conn, offset, limit) ?;
1551
- let rev_deps = rev_deps
1553
+ let rev_deps: Vec < _ > = rev_deps
1552
1554
. into_iter ( )
1553
1555
. map ( |dep| dep. encodable ( & krate. name ) )
1554
1556
. collect ( ) ;
1555
1557
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
+
1556
1569
#[ derive( RustcEncodable ) ]
1557
1570
struct R {
1558
1571
dependencies : Vec < EncodableDependency > ,
1572
+ versions : Vec < EncodableVersion > ,
1559
1573
meta : Meta ,
1560
1574
}
1561
1575
#[ derive( RustcEncodable ) ]
@@ -1564,6 +1578,7 @@ pub fn reverse_dependencies(req: &mut Request) -> CargoResult<Response> {
1564
1578
}
1565
1579
Ok ( req. json ( & R {
1566
1580
dependencies : rev_deps,
1581
+ versions,
1567
1582
meta : Meta { total : total } ,
1568
1583
} ) )
1569
1584
}
0 commit comments