summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKornel <kornel@geekhood.net>2019-02-04 02:01:22 +0100
committerKornel <kornel@geekhood.net>2019-02-04 02:01:22 +0100
commit46175c7a75317b3dda81a99da47cefe238b245d8 (patch)
tree97f8dfdb24f956be76d03c5f919d386dc399cf21
parent683585d022b9c0250b34e4c0b7a366477c71e66b (diff)
Partial support for dependency package field
m---------cargo_toml0
-rw-r--r--front_end/src/crate_page.rs2
-rw-r--r--front_end/src/urler.rs2
-rw-r--r--front_end/templates/deps_list.rs.html2
-rw-r--r--kitchen_sink/src/index.rs15
-rw-r--r--kitchen_sink/src/lib_kitchen_sink.rs4
-rw-r--r--rich_crate/Cargo.toml2
-rw-r--r--rich_crate/src/rich_crate_version.rs18
8 files changed, 24 insertions, 21 deletions
diff --git a/cargo_toml b/cargo_toml
-Subproject 97897d27f9a692e6040bf8df0b6bda12d76a4a3
+Subproject 545d7341e6849600fb0cfd2067bcb3cc7f1e3c6
diff --git a/front_end/src/crate_page.rs b/front_end/src/crate_page.rs
index d93fe32..70ac3be 100644
--- a/front_end/src/crate_page.rs
+++ b/front_end/src/crate_page.rs
@@ -276,7 +276,7 @@ impl<'a> CratePage<'a> {
}
pub fn up_to_date_class(&self, richdep: &RichDep) -> &str {
- let (matches_latest, pop) = richdep.dep.req().parse().ok().map(|req| self.kitchen_sink.version_popularity(&richdep.name, &req)).unwrap_or((false, 0.));
+ let (matches_latest, pop) = richdep.dep.req().parse().ok().map(|req| self.kitchen_sink.version_popularity(&richdep.package, &req)).unwrap_or((false, 0.));
match pop {
x if x >= 0.5 && matches_latest => "top",
x if x >= 0.75 || matches_latest => "common",
diff --git a/front_end/src/urler.rs b/front_end/src/urler.rs
index d730ff1..367778e 100644
--- a/front_end/src/urler.rs
+++ b/front_end/src/urler.rs
@@ -17,7 +17,7 @@ impl Urler {
/// Link to a dependency of a crate
pub fn dependency(&self, dep: &RichDep) -> String {
- format!("/crates/{}", encode(&dep.name))
+ format!("/crates/{}", encode(&dep.package))
}
/// Summary of all dependencies
diff --git a/front_end/templates/deps_list.rs.html b/front_end/templates/deps_list.rs.html
index c4dbebb..3137bbb 100644
--- a/front_end/templates/deps_list.rs.html
+++ b/front_end/templates/deps_list.rs.html
@@ -29,6 +29,6 @@
<span class="cfg k">@t</span>
}
}
- <a href="@url.dependency(d)">@d.name</a>&nbsp;<span class="version @c.up_to_date_class(d)">@c.pretty_print_req(d.dep.req())</span>@for f in d.dep.req_features() {<span class="with-feature"><wbr>+<span>@f</span></span>}
+ <a href="@url.dependency(d)">@d.package</a>&nbsp;<span class="version @c.up_to_date_class(d)">@c.pretty_print_req(d.dep.req())</span>@for f in d.dep.req_features() {<span class="with-feature"><wbr>+<span>@f</span></span>}
</li>
}
diff --git a/kitchen_sink/src/index.rs b/kitchen_sink/src/index.rs
index 08a8e91..8d50a0b 100644
--- a/kitchen_sink/src/index.rs
+++ b/kitchen_sink/src/index.rs
@@ -164,13 +164,15 @@ impl Index {
let mut set: FxHashMap<DepName, (_, _, SemVer, FxHashSet<String>)> = FxHashMap::with_capacity_and_hasher(60, Default::default());
for d in ver.dependencies() {
+ let package = d.package().unwrap_or_else(|| d.name());
+
// people forget to include winapi conditionally
- let is_target_specific = d.name() == "winapi" || d.target().is_some();
+ let is_target_specific = package == "winapi" || d.target().is_some();
if !wants.all_targets && is_target_specific {
continue; // FIXME: allow common targets?
}
// hopefully nobody uses clippy at runtime, they just fail to make it dev dep
- if !wants.dev && d.name() == "clippy" && d.is_optional() {
+ if !wants.dev && package == "clippy" && d.is_optional() {
continue;
}
@@ -181,17 +183,16 @@ impl Index {
_ => continue,
}
- let enable_dep_features = to_enable.get(d.name());
+ let enable_dep_features = to_enable.get(package);
if d.is_optional() && enable_dep_features.is_none() {
continue;
}
let req = VersionReq::parse(d.requirement()).map_err(|_| KitchenSinkErr::SemverParsingError)?;
- let name = d.name();
- let krate = match self.crates_io_crate_by_name(&Origin::from_crates_io_name(name)) {
+ let krate = match self.crates_io_crate_by_name(&Origin::from_crates_io_name(package)) {
Ok(k) => k,
Err(e) => {
- eprintln!("{}@{} depends on missing crate {} (@{}): {}", ver.name(), ver.version(), name, req, e);
+ eprintln!("{}@{} depends on missing crate {} (@{}): {}", ver.name(), ver.version(), package, req, e);
continue;
},
};
@@ -210,7 +211,7 @@ impl Index {
let key = {
let mut inter = self.inter.write().unwrap();
- (inter.get_or_intern(name), inter.get_or_intern(matched.version()))
+ (inter.get_or_intern(package), inter.get_or_intern(matched.version()))
};
let (_, _, _, all_features) = set.entry(key)
diff --git a/kitchen_sink/src/lib_kitchen_sink.rs b/kitchen_sink/src/lib_kitchen_sink.rs
index b7c7fc3..72a2085 100644
--- a/kitchen_sink/src/lib_kitchen_sink.rs
+++ b/kitchen_sink/src/lib_kitchen_sink.rs
@@ -918,10 +918,10 @@ impl KitchenSink {
// runtime and (lesser) build-time deps
for (deps, overall_weight) in all_deps.iter() {
for dep in deps {
- if let Some(rev) = deps_stats.counts.get(dep.name.as_str()) {
+ if let Some(rev) = deps_stats.counts.get(dep.package.as_str()) {
if rev.direct > 1 && rev.direct < 150 && rev.runtime.0 < 500 && rev.runtime.1 < 800 {
let weight = overall_weight / (1 + rev.direct) as f32;
- weighed_deps.push((dep.name.as_str(), weight));
+ weighed_deps.push((dep.package.as_str(), weight));
}
}
}
diff --git a/rich_crate/Cargo.toml b/rich_crate/Cargo.toml
index 6fd52d2..f6fb856 100644
--- a/rich_crate/Cargo.toml
+++ b/rich_crate/Cargo.toml
@@ -13,7 +13,7 @@ render_readme = { git = "https://gitlab.com/crates.rs/render_readme.git", versio
categories = { git = "https://gitlab.com/crates.rs/categories.git" }
udedokei = { git = "https://gitlab.com/crates.rs/udedokei.git" }
cargo_author = "1.0.0"
-cargo_toml = "0.6.0"
+cargo_toml = "0.6.4"
repo_url = { git = "https://gitlab.com/crates.rs/repo_url.git" }
semver = "0.9.0"
parse_cfg = "2.0.0"
diff --git a/rich_crate/src/rich_crate_version.rs b/rich_crate/src/rich_crate_version.rs
index e39934c..d8563d3 100644
--- a/rich_crate/src/rich_crate_version.rs
+++ b/rich_crate/src/rich_crate_version.rs
@@ -330,8 +330,9 @@ impl RichCrateVersion {
/// Runtime, dev, build
pub fn dependencies(&self) -> Result<(Vec<RichDep>, Vec<RichDep>, Vec<RichDep>), CfgErr> {
fn to_dep((name, dep): (&String, &Dependency)) -> (String, RichDep) {
- (name.to_owned(), RichDep {
- name: name.to_owned(),
+ let package = dep.package().unwrap_or(&name).to_owned();
+ (package.clone(), RichDep {
+ package,
dep: dep.clone(),
only_for_features: Vec::new(),
only_for_targets: Vec::new(),
@@ -343,13 +344,14 @@ impl RichCrateVersion {
let mut dev: BTreeMap<String, RichDep> = self.dev_dependencies.iter().map(to_dep).collect();
fn add_targets(dest: &mut BTreeMap<String, RichDep>, src: &DepsSet, target: &str) -> Result<(), CfgErr> {
- for (k, v) in src {
+ for (name, dep) in src {
use std::collections::btree_map::Entry::*;
- match dest.entry(k.to_string()) {
+ let package = dep.package().unwrap_or(&name);
+ match dest.entry(package.to_string()) {
Vacant(e) => {
e.insert(RichDep {
- name: k.to_owned(),
- dep: v.to_owned(),
+ package: package.to_string(),
+ dep: dep.clone(),
only_for_targets: vec![target.parse()?],
only_for_features: Vec::new(),
with_features: Vec::new(),
@@ -406,7 +408,7 @@ impl RichCrateVersion {
dep.sort_by(|a,b| {
a.dep.optional().cmp(&b.dep.optional())
.then(a.only_for_targets.is_empty().cmp(&b.only_for_targets.is_empty()))
- .then(a.name.cmp(&b.name))
+ .then(a.package.cmp(&b.package))
});
dep
}
@@ -460,7 +462,7 @@ impl RichCrateVersion {
}
pub struct RichDep {
- pub name: String,
+ pub package: String,
pub dep: Dependency,
/// it's optional, used only for a platform
pub only_for_targets: Vec<Target>,