Skip to content

Commit a8be938

Browse files
Merge pull request #531 from LeopoldArkham/master
Show and sort by downloads on reverse dependency page
2 parents e0d46b3 + 97de37d commit a8be938

File tree

6 files changed

+37
-23
lines changed

6 files changed

+37
-23
lines changed

app/models/dependency.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export default DS.Model.extend({
1515
default_features: DS.attr('boolean'),
1616
features: DS.attr('string'),
1717
kind: DS.attr('string'),
18+
downloads: DS.attr('number'),
1819

1920
featureList: computed('features', function() {
2021
return this.get('features').split(',');

app/styles/crate.scss

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@
127127
}
128128
.downloads { @include display-flex; @include align-items(center); }
129129

130+
.rev-dep-downloads {padding-left: 7px}
131+
130132
.quick-links {
131133
ul {
132134
@include display-flex;

app/templates/crate/reverse-dependencies.hbs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,16 @@
1313
</div>
1414
</div>
1515

16-
<div id='crate-all-reverse-dependencies' class='white-rows'>
16+
<div class='white-rows'>
1717
{{#each model as |dependency|}}
18-
<div class='row'>
18+
<div class='crate row'>
1919
<div>
2020
{{#link-to 'crate' dependency.crate_id}}{{dependency.crate_id}}{{/link-to}} requires {{dependency.req}}
2121
</div>
22-
{{#link-to 'crate' dependency.crate_id class='arrow'}}
23-
<img class="right-arrow-all-versions" src="/assets/right-arrow-all-versions.png"/>
24-
{{/link-to}}
22+
<div class='stats downloads'>
23+
<img class='download-clear-back' src="/assets/download-clear-back.png"/>
24+
<span class='num rev-dep-downloads'>{{ format-num dependency.downloads }}</span>
25+
</div>
2526
</div>
2627
{{/each}}
2728
</div>

src/dependency.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ pub struct EncodableDependency {
2929
pub features: String,
3030
pub target: Option<String>,
3131
pub kind: Kind,
32+
pub downloads: i32,
3233
}
3334

3435
#[derive(Copy, Clone)]
@@ -76,9 +77,17 @@ impl Dependency {
7677
}
7778
}
7879

79-
pub fn encodable(self, crate_name: &str) -> EncodableDependency {
80-
let Dependency { id, version_id, crate_id: _, req, optional,
81-
default_features, features, target, kind } = self;
80+
// `downloads` need only be specified when generating a reverse dependency
81+
pub fn encodable(self, crate_name: &str, downloads: Option<i32>) -> EncodableDependency {
82+
let Dependency { id,
83+
version_id,
84+
crate_id: _,
85+
req,
86+
optional,
87+
default_features,
88+
features,
89+
target,
90+
kind } = self;
8291
EncodableDependency {
8392
id: id,
8493
version_id: version_id,
@@ -89,6 +98,7 @@ impl Dependency {
8998
features: features.join(","),
9099
target: target,
91100
kind: kind,
101+
downloads: downloads.unwrap_or(0),
92102
}
93103
}
94104
}

src/krate.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -420,12 +420,12 @@ impl Crate {
420420
Ok(rows.iter().map(|r| Model::from_row(&r)).collect())
421421
}
422422

423-
/// Returns (dependency, dependent crate name)
423+
/// Returns (dependency, dependent crate name, dependent crate downloads)
424424
pub fn reverse_dependencies(&self,
425425
conn: &GenericConnection,
426426
offset: i64,
427427
limit: i64)
428-
-> CargoResult<(Vec<(Dependency, String)>, i64)> {
428+
-> CargoResult<(Vec<(Dependency, String, i32)>, i64)> {
429429
let select_sql = "
430430
FROM dependencies
431431
INNER JOIN versions
@@ -435,21 +435,22 @@ impl Crate {
435435
WHERE dependencies.crate_id = $1
436436
AND versions.num = crates.max_version
437437
";
438-
let fetch_sql = format!("SELECT DISTINCT ON (crate_name)
438+
let fetch_sql = format!("SELECT DISTINCT ON (crate_downloads, crate_name)
439439
dependencies.*,
440+
crates.downloads AS crate_downloads,
440441
crates.name AS crate_name
441442
{}
442-
ORDER BY crate_name ASC
443+
ORDER BY crate_downloads DESC
443444
OFFSET $2
444-
LIMIT $3", select_sql);
445-
let count_sql = format!("SELECT COUNT(DISTINCT(crates.id)) {}",
445+
LIMIT $3",
446446
select_sql);
447+
let count_sql = format!("SELECT COUNT(DISTINCT(crates.id)) {}", select_sql);
447448

448449
let stmt = try!(conn.prepare(&fetch_sql));
449450
let vec: Vec<_> = try!(stmt.query(&[&self.id, &offset, &limit]))
450-
.iter().map(|r| {
451-
(Model::from_row(&r), r.get("crate_name"))
452-
}).collect();
451+
.iter()
452+
.map(|r| (Model::from_row(&r), r.get("crate_name"), r.get("crate_downloads")))
453+
.collect();
453454
let stmt = try!(conn.prepare(&count_sql));
454455
let cnt: i64 = try!(stmt.query(&[&self.id])).iter().next().unwrap().get(0);
455456

@@ -1185,12 +1186,11 @@ pub fn reverse_dependencies(req: &mut Request) -> CargoResult<Response> {
11851186
let name = &req.params()["crate_id"];
11861187
let conn = try!(req.tx());
11871188
let krate = try!(Crate::find_by_name(conn, &name));
1188-
let tx = try!(req.tx());
11891189
let (offset, limit) = try!(req.pagination(10, 100));
1190-
let (rev_deps, total) = try!(krate.reverse_dependencies(tx, offset, limit));
1191-
let rev_deps = rev_deps.into_iter().map(|(dep, crate_name)| {
1192-
dep.encodable(&crate_name)
1193-
}).collect();
1190+
let (rev_deps, total) = try!(krate.reverse_dependencies(conn, offset, limit));
1191+
let rev_deps = rev_deps.into_iter()
1192+
.map(|(dep, crate_name, downloads)| dep.encodable(&crate_name, Some(downloads)))
1193+
.collect();
11941194

11951195
#[derive(RustcEncodable)]
11961196
struct R { dependencies: Vec<EncodableDependency>, meta: Meta }

src/version.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ pub fn dependencies(req: &mut Request) -> CargoResult<Response> {
296296
let tx = try!(req.tx());
297297
let deps = try!(version.dependencies(tx));
298298
let deps = deps.into_iter().map(|(dep, crate_name)| {
299-
dep.encodable(&crate_name)
299+
dep.encodable(&crate_name, None)
300300
}).collect();
301301

302302
#[derive(RustcEncodable)]

0 commit comments

Comments
 (0)